Project – GRBL Controller Board


Anything would help really. My goal is to have this website ad free and so you can enjoy my content without having to look at ads. Thank you



1. Introduction
2. Bill of Materials
3. Schematic
4. 3D Redering
5. Final Thoughts
6. Download Original files


With all the low cost CNC machines out in the market, there is also an abundant of GRBL shields for the arduino platform. Like always, I’m always looking to for ways to customize and improve whats in the market.

What I’ve created is a slightly better GRBL controller board for low cost CNC machines. This uses the Arduino Nano instead of the Uno as this allowed for more flexibility on the size of the board. It also integrates the relay switch for the spindle with an integrated flywheel diode to avoid over voltage spikes when the spindle is first turned on.

Below I’ll discuss in more detail along with the files you need to create this board.


Click here to download the bill of materials


Here in the schematic you can see a couple of items that are different from the traditional ebay/amazon grbl shields. First of all this is not a shield per say but more of a standalone controller board.

  • Since the capacitors that are used to filter the stepper drivers are 35V rated, I’ve limited the input voltage to 24V
  • I’ve added a TVS diode at the power input that protects from over voltage spikes.
  • Used better output connectors for the stepper motor drivers
  • Added 0.1uF capacitor for the probe pin for autoleveling
  • Added x3 5V rail connectors
    • One thing to add is that these connectors are taking power from the USB port and should not be loaded more than 0.2A combined
    • I added these for low current 5V noctua fans to cool the stepper drivers
  • Added relay control on the main board to eliminate adding external relay switch for the spindle.
    • some newer versions of the grbl software, I believe v1.1 has the spindle pin and z-axis switch so thats why I included the option to switch between the two
    • I believe you can switch this back in the firmware of the grbl settings. But none the less the option is there
  • The relay controller also includes a 1000uF and a flywheel diode to prevent voltage spikes on turn-on


Here is a 3D Rendering from Kicad of the board. I’ve added this rendering because I thought it looked really cool.

Here is a picture of the final board below:

Below is the board fully soldered and it works amazing. I will add some images of the quality of boards my machine makes with the new controller board.

Future revisions of the board I will increase the 5V rail to supply up to 1A of current for high current draw fans and order accessory’s. Also, I will try to route out the limit switch pins. This will require me to remove the z-limit switch pin that connects to the spindle control but that should not be an issue.

If you have any comments or suggests please feel free to send them my way.

Thank you!!

Download original files here.

I have about 8 extra PCB boards that I’d be willing to sell. Let me know in the comments below if that’s something you’d like to buy

Project – DC Power and Efficiency Meter


Anything would help really. My goal is to have this website ad free and so you can enjoy my content without having to look at ads. Thank you



1. Introduction
2. Bill of Materials
3. Schematic
4. Code
5. ME Cad design
6. Final Thoughts
7. Download Original files



This is a fun little project that actually took me awhile to put together.  What makes this project interesting and useful is that it will display your voltage, current, and power of any device you plug it into.  What also makes this project useful is that it will calculate the efficiency of your device for example a dc dc converter.

The heart of this project is two INA219 high side current sensors from Texas Instruments.  With this sensor you can measure up to 26V DC and up to +/-3.2A with a 0.1ohm shunt resistor (if you swap out the shunt with a 0.01ohm shunt you can measure up to +/-32A)


Click Here for bill of materials


Here you can see a block diagram showing how I connected the different boards to create this project. Since I used my CNC machine to create the boards, it’s always much easier to separate the circuits into different boards for routing.

The main board consist of an arduino pro mini to keep the footprint as small as I can and also host a 5V boost converter being power from the 18650 lithium ion battery.  In order to charge the battery without having to remove it from the enclosure, I decided to add a lithium ion charger board that connects in parallel with the battery.  Its powered by a 5V USB mini connector and can be bought on amazon.

The second board host x2 INA219 high side I2C current, voltage, and power sensor by Texas Instrument.  This IC is an amazing little thing because it takes a lot of the number crunching away from the Arduino and just sends the data over I2C that you need.

The final piece of this is the I2C liquidcrystal display for the arduino.  I used this library here for the display.  Make sure you connect the display and run an i2c address scanner on the examples for arduino because sometimes the displays have a different address than the default one listed.



 * Name: Steven Guzman
 * Date: 2018/03/18
 * Description: This is a DC power meter that measures input and output
 *              power and calculates the efficiency of the system.
 *              It can also measure voltage and current of one or two
 *              voltage sources

LiquidCrystal_I2C lcd(0x3F,20,4); // Set the LCD address

 * Below are the array values to store the measurements
 * and then used to convert float to string
char float_volt1[8];  // voltage 1 array
char batt0[21];
char float_volt2[8];  // voltage 2 array
char batt1[21];
char float_current1[8]; // current 1 array
char curr1[21];
char float_current2[8]; // current 1 array
char curr2[21];
char float_eff[8];  // efficiency variable array
char line6[21];
char float_batt[6]; // battery voltage array
char line5[21];

// Analog sampling number
int sample = 20;

// Inialize current sensors.
// ina219_A default address is 0x40
Adafruit_INA219 ina219_A;
Adafruit_INA219 ina219_B(0x43);

// Variables to store current sensor data
float busvoltage1 = 0;
float busvoltage2 = 0;
float current_mA1 = 0;
float current_mA2 = 0;

float batt = 0.00;

void setup()




void loop()
  float xbat = 0.00;

  for(int x=0;x<sample;x++)
    batt = analogRead(A0);
    xbat = xbat + batt;
  // Read voltage levels from the voltage address
  // of the IN219 on both ICs
  busvoltage1 = ina219_B.getBusVoltage_V();
  busvoltage2 = ina219_A.getBusVoltage_V();

  // Read current levels from the current address
  // of the IN219 on both ICs
  current_mA1 = ina219_B.getCurrent_mA();
  current_mA2 = ina219_A.getCurrent_mA();

  // Average out the analog measurements
  // for the lithum ion battery voltage
  // sensing
  xbat = xbat/sample;
  float battery = xbat * (5.00/1024);
  sprintf(line5, "Battery:%-5s",float_batt);
  char temp3[] = "V";

  // Convert float values into an char array to
  // better update on the lcd screen without
  // having to use the lcd.clear function
  sprintf(batt0, "V1:%-5s",float_volt1);
  char temp2[] = "V";
  strcat(batt0, temp2);

  sprintf(batt1, "V2:%-5s",float_volt2);
  char temp1[] = "V";
  strcat(batt1, temp1);

  // Convert mA to A readings
  float C1 = current_mA1/1000;
  float C2 = current_mA2/1000;

  sprintf(curr1, "C1:%-5s",float_current1);
  char temp4[] = "A";
  strcat(curr1, temp4);

  sprintf(curr2, "C2:%-5s",float_current2);
  char temp5[] = "A";
  strcat(curr2, temp5);

  float power1 = busvoltage1 * C1;
  float power2 = busvoltage2 * C2;

  float eff = (power2/power1)*100;

  sprintf(line6, "Efficiency:%-7s",float_eff);

   * Display on LCD screen all the values.
   * I used char arrays to update the values on the
   * screen.  Using the lcd.clear caused flickering
   * and was annoying.  With char array you can include
   * the units and it will update properly and not
   * overright the units.








There might be some issues with how wordpress displays the arduino code but I attached the original files at the end this tutorial.

As mentioned before, the libraries used here I obtained from other sources:

  1. Liquid crystal display library
  2. INA219 adafruit library


I designed the enclosure in fusion 360 and printed the both with matterhackers pro series PETG red.  I used a monoprice maker select v2 to print this enclosure.

Here is the step file for the enclosure


This was one of my favorite projects yet because the design alone makes me feel accomplished learning everything on my own.  I still feel like I can make some upgrades to how I mount the internals and to be honest, I really rushed this part because I wanted to finish it.

Some upgrades I’m considering is using the arduinos internal 1.1V reference with a voltage divider to measure the battery voltage because it wasn’t as accurate as I wanted it to be.

Thank you for visiting and reading my project. if you have any questions or comments or suggestions please don’t hesitate to ask.


Original files

Electronics: FTDI USB TO UART


Anything would help really. My goal is to have this website ad free and so you can enjoy my content without having to look at ads. Thank you





1. Introduction
2. Bill of Materials
3. Schematic
4. Oshpark
5. Final Thoughts
6. Download Original files


With the Arduino mini, there is a need for a USB to UART controller to upload your sketches and this could also be used for the ESP8266.

This project is inspired and based off the Sparkfun’s FT231X breakout board design.  I’ve created this project because 1. I like designing and soldering electronics 2. Try to create a cheaper alternative to the popular FT232RL and also add 1 or 2 features to the current FT231X breakout board.


For the bill of materials, its pretty straight forward.  I’ve attached links to digikey for each component as I find them easier to order from but you could also get the parts from arrow or mouser as well.



Component Description Part number Quantity Link
47pF, 0603, 50V C1608C0G1H470J080AA 2 Digikey
0.1uF, 0603, 25V CGA3E2X7R1E104K080AA 4 Digikey
10uF, 0805, 6.3V TCJN106M006R0250 1 Digikey
Micro B Connector 10118192-0001LF 1 Digikey
6-pin Header M20-7910642R 1 Digikey
N-Channel FET BSS84-FDICT-ND 1 Digikey
27 ohm, 1206 RC1206JR-0727RL 2 Digikey
10k, 0603 RT0603DRD0710KL 2 Digikey
FT231X, SSOP-20 FT231XS-U 1 Digikey


Below I’ve attached an image of the schematic but i’ve also attached the original kicad files and a PDF version of the schematic at the end of the post.


If you feel like you want to get this board made, I’ve attached a link to my oshpark project.  With oshpark, I find they make great quality boards at a great price for small sized boards.

Order from OSH Park


I know this was a short post and project but I found it important to share another option for those’s who want to find a cheaper solution and want to learn along the way.  You can find a lot cheaper solutions on amazon that are china made but i’ve read stories in some cases that they were not genuine FT232RL ICs.  If you wish to build your own, its very easy and rewarding at the same time.

In the next revision I will add LEDS for TX and RX indication as for this version I eliminated to save some cost and space.

Hope you enjoyed this post, THANK YOU 🙂





Anything would help really. My goal is to have this website ad free and so you can enjoy my content without having to look at ads. Thank you




1. Introduction
2. Bill of Materials
3. Block Diagram
4. Schematics/CAD DESIGN
5. Assembly
6. Final Thoughts/ Improvements
7. Download Original Files



Arduino and the implementation of GRBL has allow for amazing things to be created.  One of those things are low cost CNC machines that enable us to create anything we want.

I bought myself a low cost CNC engraver from amazon and after modifying it, it has been one of my best investments because as en electrical engineer I can create PCB boards to test my designs here at home and verify before getting them sent out. One problem I usually have is that I use my laptop to run the gcode software and my laptop is really big and sometimes a hassle to keep on my desk.

My solution was to create this project and make a standalone CNC machine controller to run the gcode software in a compact package.  I tried fiddling around with using a raspberry pi 2 as my main PC but I’m still a beginner with raspberry pi’s and I had issues getting the settings right.  My next option was to use a windows based machine and luckily I found just the solution.

In this tutorial I will explain how I put this together and what improvements could be made.


Component Quantity Link
Windows computer stick 1 Amazon
Wireless keyboard/mouse 1 Amazon
DIY HDMI male adapter angled 1 Adafruit
DIY HDMI female adapter 1 Adafruit
DIY HDMI Ribbon cable 20cm 1 Adafruit
3.5 inch Screen 1 Amazon
Left angled micro usb cable 1 Amazon
Top angled usb 3.0 extension 1 Amazon
USB Board
USB Female Connector 2 Sparkfun
5VWM TVS Diode 1 Digikey
0.1uF 50V X7R 1206 1 Digikey
1uF 25V X7R 0805 1 Digikey
10uF 16V X5R 0805 1 Digikey
100 OHM 0.1% 1/8W 0805 2 Digikey


Visio_blog - block diagram

Here is the block diagram for how this project is wired.  With the exception of the enclosure itself and the usb power board, everything was bought ready to go.  I’ve added a fan as a just in case because the computer stick does generate some heat so the fan will prevent the system from over heating but so far it does not seem to be an issue with heat and therefore is an option.

The 5V and 12V supply are coming from my 24V power supply that powers my Arduino GRBL shield.  What I did was use two step down converters 1) For 5V step down and 2) For 12V step down.  I realized this might not be idle but it is my first revision of this project.


The only schematics I have is for the USB power board and I created that using Kicad.  The board was basic, since both the screen and the windows computer stick ran on 5V via micro USB, I needed to distribute power from one source into two loads.  To add some safety, I did add a TVS 5VWM diode to prevent over voltage spikes from destroying the devices along with some filtering capacitors.

Electronics_pdf - cnc usb power board-1

If its a little blurry don’t worry because all original files will be included in a download link at the end.

Now for the enclosure, I designed it using Fusion 360.  Honestly, I am not a Mechanical engineer/Designer so this was my first attempt at designing something in a CAD software.  Mine you its really just a box but Fusion 360 makes it really easy to design for someone who had no prior experience.

I designed this in two pieces:

  1. The bottom portion of the enclosure:CAD_pdf - Enclosure Drawings-1
  2. The Lid for the enclosure:CAD_pdf - Lid Drawings-1

For material used for making this enclosure, I used my Maker Select V2 3D printer with PETG filament for the temperature resistance and flexibility.

I will include the STL files so you guys can 3D print this yourself.


Now for the fun part, putting this thing together and hoping everything works without the magic white smoke lol jk.  This was actually very easy to put together though there were a couple of design hick ups.

Since I wanted to get the print out as fast as possible, I sacrificed quality of the print which is why it looks the way it does but its very function.

As I mentioned I did have some design issues after I was putting this thing together.  If you look at image 3, you can see that the usb power board is tilted up and thats because I placed the cooling fan to close.  The board was able to fit but I could not connect anything because the fan was blocking the connectors.

I decided to use hot glue to hold everything down because it wouldn’t be a DIY project if hot glue wasn’t involved.

In image 4, you can see I used some basic terminal block connectors to attach my 5V and 12V supply.  You can also see the USB port to connect the arduino grbl controller board.


Overall I enjoyed putting this project together.  It’s made my project efficiency increase dramatically because I don’t have to take it out and set it up every time I want to make a board.

With anything we do, there’s always room for improvements.  In a future version of this project I plan to improve the way I connect my external 5V and 12V supply instead of using the terminal blocks.  I might possibly use some type of molex connector that can easily detach.  To reduce the amount of external connectors, I could switch out the 12V fan with a 5V fan and run it with only one step down converter.  I’m going to also move the fan placement so that I do not have to angle the usb power board.


Bill of Materials

KiCad files

3D STL files

PDF Documents

Thank you for visiting and I hope you enjoyed this project.

Please leave a comment and let me know about your thoughts, improvements or any issues you see with this post.  All comments are welcomed 🙂