Close
0%
0%

MultiBot CNC v2

A low cost 3D printed CNC that can be built with minimal tools yet is capable of great things.

Similar projects worth following
I set out to make a large format, low cost 3D printed CNC machine that is capable of handling hard woods and aluminum. The goal was to make it as accessible as possible, so it uses off the shelf parts, and does not need any heavy tools to assemble it.

I have been interested in building a CNC machine for years, even going as far as building one out of old CD Rom drivers, and another from an old 3D printer.  A year ago I stumbled onto Nikodem Bartnik's DIY 3D Printed Dremel CNC project and found the inspiration I was looking for.  I took his excellent ideas and built my own version of his machine. That machine was great, but was lacking in several ways so I sat down for this second redesign and think I finally hit upon a great combination.

The project goal was to make a machine that had a working size of at least 11"x17", the final working volume ended up being 365 mm x 465 mm x 75 mm (14"x18"x3").  To make it as inexpensively as possible.  And to make it accessible so that anyone with a 3D printer and a few simple hand tools could put it together.  All while being capable of doing serious milling of hard woods and aluminum.

Here is a full parts and price list for the machine.

I'm using 12 mm smooth rods and LM12LUU bearings for the linear motion because they are readily available and very low cost.  However at the size were working with the 12 mm rod is not stiff enough.  After running tests with different configurations of rods I settled on doubling up the rods, that is almost half the cost of using 16 mm rods while still being significantly stiffer than a single 12 mm rod.  You can see from the graph below that deflection at the tool in the X and Y direction is greatly reduced with doubled up rods.

I'm using 8mm Acme trapezoidal lead screws for the drive system.  In the original design I was getting a lot of backlash.  I experimented with several different configurations but finally landed on combining a brass nut with a Delrin nut in compression to eliminate backlash.  This is easier to adjust than using two brass nuts, safer than using Delrin nuts, and much stiffer than using spring based backlash nuts that you can find on Amazon and AlliExpress.  The Delrin nuts are just flexible enough that you can have a fine control over tension making it easy to dial out backlash without adding a lot of resistance to the setup.

In my original design I was relying on the bearings in the stepper motors to take all the load from the lead screw.  This was not a good arrangement and on some of my axis I was able to deflect the drive shaft by several mm.  I worked around this by adding skateboard bearings on each end of the lead screw and using 3D printed nuts to tension the lead screw between the bearings.  This provides a lot of strength and completely decouples the stepper motors from the system.  I also added standoffs to the stepper motors to make maintenance easier and to ensure I can use every inch of my linear rod for motion.

I struggled for a long time with the 3D printed parts cracking under load. I have gone through many design iterations trying to come up with a clamping and screwing system that can handle the forces of a milling machine without sacrificing the convenience of a 3D printed part.  Eventually I hit on the idea of using heat set brass inserts to strengthen the screw holes and using separate clamps to hold my rods in place.  This has proven to be quite robust and requires a minimal amount of effort to put together.  You do need some sort of a heat source to set the brass inserts.  This has the added benefit of making the machine very serviceable, it is easy to take it apart and put it back together now without worrying about damaging the 3D printed parts.  Well worth the small increase in cost and complexity in my mind.

As much as possible I have tried to make the parts symmetrical for easy reuse, and have carefully designed all parts to be printed as designed without needing any supports or brims.  The goal is to take out the complexity as much as possible so a...

Read more »

  • UGS Take 2

    David Tucker08/10/2022 at 01:15 0 comments

    So UGS came through again and fixed my spiral bug.  Things are looking even better when showing my bat project. They are looking good enough in fact that it is becoming clear I have an issue with my zero position and need to circle back around on my own code to work out some issues.  

    I'm sure there are still little bugs hiding in here, that is how things go. But from my initial inspection it now appears to be rendering everything correctly.

    You can grab the fix from the latest UGS nightly build here.

  • UGS

    David Tucker07/22/2022 at 04:41 0 comments

    I put in a bug log a while back reporting that UGS was improperly rendering rotary gcode.  Well they really came through and put in a fix a few weeks ago, and you can now download the fix from the nightly build.

    Here it is rendering my bat project, you can see it is doing a lot better than previously.

    It is much better, but it is still not perfect.  Here I'm trying to make a 80 degree spiral but instead the x and a axis are moving one after the other.

    And here I have sub divided the spiral into smaller segments.  You can see the intended shape better, but it is still just stair stepping rather than spiraling.

    You can download the above example code here.

  • Ding Ding goes the Trolley

    David Tucker07/06/2022 at 03:24 0 comments

    I took a vacation with my family's (yay!) and picked up a Rolife Tramcar TG505 laser cut wooden model as a small souvenir.

    For the $15 I spent on it, it came with a lot of stuff.  There were 5 sheets of laser cut wood and two pieces of Lexan along with the glue and sandpaper needed to assemble the model. It took the better part of a day to put together with me fiddling on and off with it as parts dried. It was a fun experience and it turned out nicely.

    One of the sheets is 1 mm thick, 3 were 2 mm thick and one was 2.5 mm thick.  They used a neat trick on the holes.  When a part needed to pass through a sheet the hole was cut square, but when it needed to connect to a sheet the hole would be slightly rounded to create an interference fit.  On parts where only 3 sides were available a small dimple was added instead. This allowed the model to hold together quite firmly without glue.  I used glue anyway but I think it would have completely held together without any glue.

    Anyway it is a fun little kit and they seem to have a lot of even bigger models.  If your interested in laser cutters you can look to them for inspiration, or for a fun afternoon distraction.

  • Small Notes

    David Tucker06/19/2022 at 00:46 0 comments

    So Atomstack has finally released there 40 watt quad diode laser as part of the X20 Pro kit. This has a 400x400 mm working volume, built in air assist that can hit 15 psi, an offline controller with LCD screen, and of course full support for LightBurn, all for $1,100 shipped.  Combining the 20 watt output with the much smaller spot size over a CO2 laser, I think it is safe to say this is more powerful than a K40 laser.  In fact the K40 is a poor comparison.  For starters most K40 machines are really 30 watt machines, next they have only a 300x200 mm working area, finally they lack support for LightBurn, any safety, and basically any support.

    A better target for comparison is the $2,100 Omtech MF1220-50R - 50W laser.  This has a similar working volume, built in air assist, and proper light burn support.  The Atomstack lacks an enclosure, and work bed, but you can add both of those for $500, bringing the price up to $1,600.  Ignoring shipping, that brings the Atomstack to within $500 of the Omtech, but at around 1/2 the optical power.

    The big benefit for the Atomstack is ease of use, no more need for water cooling, simpler optical path.  The down side of course is lower optical power, and no support for cutting clear plastics.  

    Anyway the point is not that they are equivalent, but that they are getting close.  The Atomstack is the premium laser from the company and very new, we can hope that in a few years this laser power will find its  way in lower cost machines.  It is conceivable that we could see a fully enclosed 20 watt diode laser for under $800 in a few years, making it a much lower cost way to get into lasers.

    Atomstack also has a new $180 air filter coming out.  This is basically a large room filter with a special cartridge that has better support for smoke than an off the shelf unit.  This is a good idea, hopefully we see more systems coming with air filters, hopefully that can lower the cost.

    Neje has released a new heatsink for there A40640 module that helps cool the laser module more.  This sounds like a good idea to me, the face of the diode gets quite warm. At $20 it is a bit pricy, but it includes a soldering iron, proof that this is a bit of an afterthought.

  • Art

    David Tucker06/18/2022 at 22:06 0 comments

    I was wandering around the dollar store the other day and noticed they have added in a lot more hobby level supplies, probably so they can compete better with 5 below.  Anyway I wondered around for a bit and picked up a pile of new materials.  I have some circuit vinyl decals (for the mat knife), some fabric squares, felt squares, a cheap glass picture frame, a great 12" square piece of plywood that was made into a canvas, and 3 different $1 paint canvases.

    I'm a huge fan of John Muir's book How to keep your Volkswagen alive forever.  Not only is it a fun read, it has some amazing images by Peter Aschwanden.  I pulled out my copy and scanned in some of my favorites.  

    I then used the trace feature in lightburn to convert the scans into vector outlines.  These are not my images, so I won't post the svg's here, but they turned out great.

    First up I tried engraving on the canvas. It was really tricky to set the power here, the distance between no marks and burning through the canvas is only a small percent of power.  I ended up engraving at 4000 mm/min and 75% power.  The larger details look fine, but thinner details like the text were washed out.

    More importantly, if you look at it through the back side you can see that the material is burned all the way through, and there are large areas where the light passes right through. I suspect I could rip this without much effort.  This also took a long time to run, almost 2 hours.

    I have a few more canvases to experiment with.  I'm going to try painting them with white paint to thicken up the material, and hopefully the paint itself will discolor without burning through, giving a darker image in the process.  I'm also thinking of using a larger step size for the line so there is less overlap between lines, I think that is part of why I cant get a darker cut.  Finally I used air on this, but turned it down a lot so it was just moving enough air to keep the lens clean.

    I also had an idea about etching the back side of a piece of glass in a picture frame to make a 3D'ish looking image.  To test this out I pulled out a spare white tile, as well as a scrap piece of glass.  I had seen several different ideas online, everything from masking tape, soap, a wet paper towel, tempera paints and black and white paint to help aid in the etching process.  I prepared each in turn on both materials and ran a series of lines at varying speeds.

    Once you clean things up you can see the white paint worked the best on the white tile. This was not the 'official' paint everyone uses, just what I had laying around.  I will try it again with proper paint someday.  The wet paper towel was completely useless.  It was impossible to keep wet, and it stopped me from using the air assist.  The soap was equally useless, I'm not sure what the idea is here, maybe I'm doing it wrong.  The tempera paint worked ok, but it is impossible to apply evenly.  The black paint etched the glass (and tile) well, but it does not discolor the etching so it is difficult to see.  The white paint left a darkened etch that does not come off when you scrub it.

    I tried using the white paint to etch a proper image on the glass, but I messed up the settings.  The end result was no image at all.  I need to run another test, with the right white paint.  Another issue is that there was a lot of flash back and accidental etching on the back side of the glass.  I'm going to try putting a uniform sheet of paper under the glass to try and minimize this.

    Anyway I have low hope of this working well with a picture frame, I may need to explore other ways to burn an image and frame it.  

  • LightBurn take 2^42

    David Tucker06/05/2022 at 21:37 0 comments

    So recently I got a paid commission.  A Facebook acquaintance of my wife's needed a quick bunch of balloons cut out of plywood for a party.  It was a rush job that I put together in one day, and I ended up putting a few hours on it as well as using a full sheet of wood so I charged $30.  If it was a repeat cut that I could take a few days on I would have charged $20.

    Between that job and all my cardboard elephant cutouts I have been pushing the laser extra hard recently.  For starters it is 110 F in my garage, and that is making it difficult for the laser to stay cool.  I'm only running it at 80% power, but the housing is hot to the touch.  I can still hold my finger on it, but it is uncomfortable and probably too high if I want my diode to last a long time.

    Another issue is my on going struggle to get Lightburn to work well with my grbl controller.  I can't tell you how frustrating this is. Every other sender is happy to work in a virtual coordinate mode as well as an absolute mode with a properly homed system.  Lightburn on the other hand is overly picky and that makes this a really frustrating experience.  

    • First, for some reason, they insist on only using a positive coordinate system, that is that 0,0 is the lower left corner of the machine. You can actually tell it that 0,0 is the upper right corner of the machine, but then they insist on inverting the direction your axis move.  That does not even make sense, who sets there machine up backwards?  Homing on the upper right corner is the norm for half the machines that lightburn runs on. On top of this, you can read the coordinate system out of the controller, so we should not even need to tell lightburn how the machine is setup.
    • Next they insist on having soft workspace limits, even if the machine is not homed (or can not be homed).  So you have to input the max coordinates of the machine, but when lightburn starts up 0,0 is set randomly based on how the machine was powered on, making this hard limit totally pointless.  Other senders take care of this by leaving the machine in a locked state, and letting you either manually unlock it, jog to 0,0 and reset the coordinates, or by forcing you to home.  Lightburns official recommendation is to manually move the laser to 0,0 and restart the machine and lightburn.
    • Finally jogging is annoying at best.  Often times I turn on the machine and can only jog in one direction.  Or even worse the machine will move backwards!  That forces me to shut down lightburn and use UGS to jog the machine to a better spot then start lightburn back up again.  And with continuous jog mode enabled you can't adjust the z height of the laser, why I don't know.

    The recommended solution is to home the machine and mess with the coordinate system to force it into a positive workspace.  Previously I had made a macro to do this, but it still trips you up if you forget to home the machine, or if the moon is in retrograde and so on.

    This is my 3rd (5th?) attempt to fix this.  I reset all of Lightburn settings back to there defaults and made a new macro that not only resets the coordinates, but homes the machine and then moves the laser to 0,0 in preparation of the first cut.  Since I have my new laser bed with a fixed edge that is very reliable I can set this up with some precision.  I ended up switching the laser to absolute coordinates at the same time.  That makes 0,0 be the farthest lower left corner of the machine no matter where I place the part on the lightburn workspace. Hopefully that will reduce instances of the cut start point moving around at random on the machine.

    $32=1 ; turn on laser mode
    $10=0 ; set coordinates to work position mode (virtual coordinates)
    $H ; Home the machine
    G10 L2 P1 X-340 Y-433 ; set work offset to -340,-433 or lower left corner
    G90 X0 Y0 ; fast move to 0,0 position

    Above is my...

    Read more »

  • PaperCraft

    David Tucker06/05/2022 at 04:55 0 comments

    My wife is teaching summer school and they are doing a unit on Thailand. Part of the unit is studying the animals and elephants are at the top of the list.  I was strolling through the local pet store and came across the following cardboard cutout being used in a display.  Looking at it for a moment, it occurred to me that I could replicate this with my laser cutter and some leftover Amazon packing boxes.

    To make this work I first pulled up some profile and head on images of elephants and scaled them to be the same height.

    Then I brought them all into Inscape and outlined them by hand with the pencell tool.  A little cleanup later and adding in some slots and I ended up with something like this.

    I worked this up as a PDF that is sized to fit on a standard sheet of office paper, as well as a svg that could be imported into light burn. The PDF is designed for students to color and cut out, so I made a test build on cardstock with a very rough cutout and it seems to work well.

    A quick bit of testing on my cnc and I came up with a feed rate of 600 mm/min at 80% power and one pass using my Neje A40640 laser module.  I probably could have pushed this a bit faster to save time, but it was not too bad.

    I had collected a pile of Amazon boxes for this project, so I went a bit nuts cutting out elephants. In the end I made 14 or so in two different sizes.  The whole project probably took 2 hours from start to finish and it was technically not very difficult.  It is a good starter project if you want to make your own cardboard cutouts.

    Here is a link to the pdf file, as well as the svg file if you are interested in cutting out your own elephant.  Your free to do anything you want with these, I claim no rights to the files.

  • Cost of Business

    David Tucker05/30/2022 at 06:41 0 comments

    So I have been making lots of Pocket Hugs for my wife.  She now has lots of happy students with a little reminder that there teacher believes in them.  Because of this I'm running out of material and so it is time to look for a new source of wood.

    So far I have just picked up a sample pack of Baltic birch from Woodcraft, however I only really need the 1/8" material, and that works out to around $8 a sheet if I keep getting the sample packs.  So it is time to try and find a better supplier.

    Locally I have a Woodcraft store, a shop called WoodWorkers Source, Home Depot, and a Michaels craft store. In addition I can order wood from Amazon, a place called MakerStock, and of course Glowforge sells there own material.

    My machine has a comfortable working volume of around 13"x17" if I want to keep everything on the laser bed.  I can find wood that is 12"x12", 12"x20", 12"x30", and larger sizes.  I can take a 12"x30" sheet and cut it in two with my circular saw to end up with 12"x15" sheets.

    I worked up a spreadsheet with price and size information from every seller I could find (within reason) and worked out a price per cubic foot to better help compare the different sizes together as well.  Finally I added a column that compares the percent increase in cost from the cheapest source. 

    https://docs.google.com/spreadsheets/d/1EW7SMuf_VrciPz5VesTx-LwNsKQrLVT78oHxsT5N9dA/edit?usp=sharing

    It should come as no surprise but the Glowforge material is by far the most expensive, coming in at around $13 a square foot, when bought in quantity.  Shipping plays a big part in this, it is much cheaper to buy local (or from Amazon) than trying to ship these heavy materials around.  Michaels may have better material available in store, but all I could find online was Glowforge material.  This is still cheaper than ordering it from Glowforge directly because you skip out on the shipping.

    The cheapest source by far is buying a full sheet at WoodWorkers Source and having them cut it down to 12"x30".  From there I would need to cut each in half, but it comes out to around $1.80 (plus tax) a square foot.  Amazon has some suspect plywood from China that they claim is Baltic birch for $1.90 a square foot, but the reviewers who have tried cutting it with a laser don't seem impressed.

    A 12"x12" piece from woodcraft is not a great deal at $5 a piece, but buying a 12"x30" piece and cutting it in half is a much better deal.  The best idea is the full sheet from WoodWorkers Source, but sadly they are out of stock.  I will probably pick up some pieces from woodcraft as a place holder and give wood workers source a try later when things are back in stock.

  • Taking stock of Particles

    David Tucker05/28/2022 at 23:50 0 comments

    So a while ago I picked up this low cost dust monitor from somewhere.  It is based around a Plantower PMS5003 Air Quality Sensor.  It never seems to work correctly, that is the PM 2.5 and PM 5 values almost never move above 3, even when I'm cutting with the laser.  A while back I ordered a new dust sensor to see if that was the problem, however the new sensor acts the same as the original.

    Since I now have two sensors, and it appears they both work equally well (or bad) I decided to wire one up to a M5StickC Plus module and see what I could get out of it. This actually works out really well.  The M5StickC is a 3.5v module, but it has a 5v battery so we can supply the needed 5v to run the fan, while still using 3.5v for the logic pins.  

    The code is very simple, and minimal.  Here it is in its full.  This relies on the Adafruit PM25AQI library for the communication.  90% of the code is just moving data from the sensor to the serial port and display, easy peasy.

    #include <M5StickCPlus.h>
    #include <SoftwareSerial.h>
    #include "Adafruit_PM25AQI.h"
    
    SoftwareSerial swSerial(25, 26); // in/out
    Adafruit_PM25AQI aqi = Adafruit_PM25AQI();
    PM25_AQI_Data data;
    
    void setup()
    {
      M5.begin();
    
      M5.Lcd.setTextSize(3);
      M5.Lcd.setRotation(0);
    
      Serial.begin(115200);
      while (!Serial) delay(10);
    
      // Wait one second for sensor to boot up
      delay(1000);
    
      swSerial.begin(9600);
    
      //aqi.begin_I2C();
      aqi.begin_UART(&swSerial);
    }
    
    void loop()
    {
      if (swSerial.available() && aqi.read(&data))
      {
    #if 0
        Serial.print("PM1:"); Serial.print(data.pm10_standard);
        Serial.print(",PM2_5:"); Serial.print(data.pm25_standard);
        Serial.print(",PM10:"); Serial.print(data.pm100_standard);
        Serial.print(",ePM1:"); Serial.print(data.pm10_env);
        Serial.print(",ePM2_5:"); Serial.print(data.pm25_env);
        Serial.print(",ePM10:"); Serial.print(data.pm100_env);
        Serial.println();
    
        M5.Lcd.fillScreen(BLACK);
        M5.Lcd.setCursor(0, 0);
    
        M5.Lcd.print("010:"); M5.Lcd.println(data.pm10_standard);
        M5.Lcd.print("025:"); M5.Lcd.println(data.pm25_standard);
        M5.Lcd.print("100:"); M5.Lcd.println(data.pm100_standard);
        M5.Lcd.print("010:"); M5.Lcd.println(data.pm10_env);
        M5.Lcd.print("025:"); M5.Lcd.println(data.pm25_env);
        M5.Lcd.print("100:"); M5.Lcd.println(data.pm100_env);
    #else
        Serial.print("P3:"); Serial.print(data.particles_03um);
        Serial.print(",P5:"); Serial.print(data.particles_05um);
        Serial.print(",P10:"); Serial.print(data.particles_10um);
        Serial.print(",P25:"); Serial.print(data.particles_25um);
        Serial.print(",P50:"); Serial.print(data.particles_50um);
        Serial.print(",P100:"); Serial.print(data.particles_100um);
        Serial.println();
    
        M5.Lcd.fillScreen(BLACK);
        M5.Lcd.setCursor(0, 0);
    
        M5.Lcd.print("003:"); M5.Lcd.println(data.particles_03um);
        M5.Lcd.print("005:"); M5.Lcd.println(data.particles_05um);
        M5.Lcd.print("010:"); M5.Lcd.println(data.particles_10um);
        M5.Lcd.print("025:"); M5.Lcd.println(data.particles_25um);
        M5.Lcd.print("050:"); M5.Lcd.println(data.particles_50um);
        M5.Lcd.print("100:"); M5.Lcd.println(data.particles_100um);
    #endif
      }
      else
      {
        delay(10);
      }
    }

     After letting this run while doing some engraving and then cutting I ended up with the following plot.  You can't tell from this plot but most of the data on the left was collected when engraving.  It produced a signal about 3x stronger than the baseline, but about 20x less strong than when cutting. I never saw the 5 nanometer and 10 nanometer readings go above 1, I suspect this detector is incapable of classifying anything larger than 2.5 nanometers.  Also you can see in this graph that the sensor peaks out at 65535, and that was with the sensor being upwind from the laser and not really in the heavy smoke.

    Looking at the raw sensor data, it turns out the PM 2.5 and PM 5 values are in fact fairly useless.  They don't have a fractional component so they are in fact only set to 1,2,3... and even at high smoke...

    Read more »

  • Good Vibrations

    David Tucker05/07/2022 at 00:16 0 comments

    At work I needed to precisely measure the vibration frequencies of a device.  I pulled out a M5StickC that I had laying about and wrote some custom code for it.  This is a small ESP32 based micro controller with a built in LED display, battery, accelerometer, compass and enough processing power to run a proper FFT in a reasonable amount of time, all in a package the size of your thumb.

    Anyway I needed to measure as high a frequency as I could, but out of the box the accelerometer was only outputting data at around 100 Hz, much too slow for my needs.  A little dig through the documentation and I came up with this function to bump the update rate to 1 KHz.

    void MPU6886_I2C_Write_NBytes(uint8_t start_Addr, uint8_t number_Bytes, uint8_t *write_Buffer)
    {
      Wire1.beginTransmission(MPU6886_ADDRESS);
      Wire1.write(start_Addr);
      Wire1.write(*write_Buffer);
      Wire1.endTransmission();
    }
    
    void speedUpSampleRate()
    {
      uint8_t regdata;
    
      // try and boost the i2c update rate, to 400KHz
      Wire1.setClock(400000);
    
      // up the sample rate
      //regdata = 0x08; // 4 KHz, no filtering
      regdata = 0x00; // 1 KHz, 230 Hz lp filter
      MPU6886_I2C_Write_NBytes(MPU6886_ACCEL_CONFIG2, 1, regdata);
    
      // turn off sample rate divider
      regdata = 0x00; // no divider
      //regdata = 0x01; // 1 divider
      MPU6886_I2C_Write_NBytes(MPU6886_SMPLRT_DIV, 1, regdata);
    }
    
    void setup()
    {
      M5.begin();
      M5.MPU6886.Init();
      speedUpSampleRate();
    }
    

     I also needed to take the collected data and convert it to the frequency domain via a FFT.  I wanted to do this on the device itself, rather than sending it over the serial port before processing.  I quickly found the Arduino FFT library, it seems to be what everyone uses.  It worked fine out of the box, it was fast and seemed accurate.  However it had one problem, the amplitudes that came out of the library were suspect at best.  I dug around for a while and found that others had come to the same conclusion.  After experimenting with all there ideas I came up with this simplified version of the Arduino FFT library that fixes things so the amplitudes are valid. I spent the better part of a day pushing data through this to verify it is in fact working now.

    Note that when you call ComplexToMagnitude the input is the sine()/cosine() pair for each frequency and the output should be the amplitude and phase shift for each frequency.  However this code only computes the amplitude and basically trashes the phase shift info.  It is a shortcoming that needs to be fixed someday.  This is 90% based on the developer branch of the arduinoFFT library, but backported to the main branch without reorganizing the code.  Just  save it to a arduinoFFT.h file and drop it into the same folder as your .ino file if you want to use it, no need to import it as a library.  I stripped out all the legacy calls, and replaced them with a single updateDataSet() call, mostly to stop all the compiler warnings cause by the defines sprinkled around the original code.

    These two pieces of code together have me reliably getting frequency data from accelerations between 0 and 500 Hz and with a FFT size up to 4096 bins.  This is not your fathers arduino, that is for sure!

    Oh, and I used this project from SwitchScience as the base for all my work, but modified it heavily.  It is an interesting site and a fun read.  You probably need to install google translate in your browser, if you don't read Japanese, it works quite well.  I'm not going to publish my full project, I did that on company time, but the above code snippets should be more than enough to get you up to speed, and hopefully it will help someone else who also wants to dig into FFT on an embedded microprocessor in the future.

    /*
    
       FFT library
       Copyright (C) 2010 Didier Longueville
       Copyright (C) 2014 Enrique Condes
    
     This program is free software: you can redistribute...
    Read more »

View all 183 project logs

Enjoy this project?

Share

Discussions

murauchi wrote 04/14/2022 at 13:00 point

I will write to you for the first time. It was
I really like this project CNC.
I think it's a very well thought out article.
I had a desire to make my own CNC for a long time, so I made a plan to make it immediately. However, instead of making the data of this article as it is, I am trying to make it using the parts I have. The only difference is the diameter of the shaft. (12mm⇒8mm) There is something I don't understand in the article. This is a method to prevent backlash. I don't know the combination of parts. Please tell me a little more detail.

  Are you sure? yes | no

Sandro Magi wrote 03/30/2022 at 12:26 point

Regarding the brass threaded inserts, I'm wondering whether you tried inserted steel nuts to provide the clamping force needed? Screwing directly into the printed parts would definitely increase risk of cracking, but I don't have a good intuition on how the brass inserts would compare to steel nuts inserted either during the print, or afterwards by leaving a slot open to slide them in.

  Are you sure? yes | no

David Tucker wrote 03/31/2022 at 03:50 point

I tested out using captive nuts in a slot as well as the brass inserts and bare plastic.  The nuts fall in the middle, they are stronger than plastic but not as strong (or stable) as the inserts.  I think there may be a picture of one of my test pieces with nuts in it somewhere in all of this.

  Are you sure? yes | no

Sandro Magi wrote 03/31/2022 at 13:47 point

Interesting, because that seems a little counterintuitive depending on the method of inserting the captured nut (for instance, leaving a slot for post-print insert vs. inserting it mid-print).

I wonder if "soldering" the nut in (like https://www.seniorcare2share.com/how-to-solder-3d-printed-parts/) and thus providing a better bond with the walls would close that strength gap. If it's not melted or otherwise secured in place, the nut might be jiggling around, eroding or cracking the plastic around it.

If that closes the strength gap, then you could use locknuts to maybe solve your bolts shaking loose from time to time without resorting to loctite.

  Are you sure? yes | no

lucas.michael.cnc wrote 06/23/2021 at 09:59 point

I know it's a bit old topic, but since then there are lasers from Opt Lasers , very good quality as you can see on their website ;https://optlasersgrav.com/?opt=y2123

  Are you sure? yes | no

bedaliger wrote 06/16/2021 at 08:11 point

Hello David, what kind of 3d printer do you use to make such big parts?

  Are you sure? yes | no

Raunchy Butts wrote 04/14/2021 at 22:36 point

Really nice effort on the write-up and parts list, thanks. Have you tried machining aluminum on it yet? Very curious to see how that turns out.

  Are you sure? yes | no

[deleted]

[this comment has been deleted]

David Tucker wrote 12/22/2020 at 22:36 point

I'm not sure how to generate gcode from a Linux tool path.  You will need to do some research on that.  I did a small writeup on how I do it using Fusion 360 if you are interested.

https://docs.google.com/document/d/1j7bN3EDspqFdop7lzfCD5yb5QjX1i-MaceniBL3TV7U/edit?usp=sharing

  Are you sure? yes | no

David Tucker wrote 12/23/2020 at 19:20 point

Check out tutorials on LinuxCNC, they will have pointers on how to do cam (convert a 3D model to grbl) in Linux.  And since your already on Linux you can consider using this as your sender and controller as well.

http://linuxcnc.org/

  Are you sure? yes | no

Peter van der Walt wrote 10/07/2021 at 06:54 point

checkout https://cam.openbuilds.com - web based / cross platform

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates