Hardware Setup
What You Need
The Community Robot Arm uses standard, easy-to-find parts. For the electronics, you will need:
Main Motors: Three NEMA17 Stepper Motors, with standard drivers (A4988 or DRV8825).
Gripper Motor: One BYJ-48 Stepper Motor and a ULN2003 driver board for the gripper.
Microcontroller: Arduino Uno or Arduino Nano.
Expansion Shield: CNC GRBL Shield (Version 3 for Uno; Version 4 for Nano).
Limit Switches: Three mechanical switches for homing the arm.
Power Supply: A DC power supply that can power all four motors at once.
Safety: A shared ENABLE wire connected to all NEMA drivers so you can quickly cut power if needed.
3D Printed Parts
The arm’s structure is based on the open-source Florin Tobler design. You can download the STL files to 3D print the parts here: Community Robot Arm Repository.
Important Hardware Notes
1. Setting Motor Current (VREF) Before connecting the NEMA17 motors, you must manually tune the reference voltage (VREF) on each A4988 or DRV8825 driver using the small screw (potentiometer). This limits the maximum current going to the motors. If you skip this, your drivers will overheat and break. For step-by-step instructions, see these guides:
2. Fixing the CNC V4 Shield Bug If you are using an Arduino Nano with the CNC V4 Shield, you need to fix a known manufacturing defect on the board. The microstepping pins (MS1, MS2, MS3) are accidentally connected to ground by the board’s copper traces, forcing the motors to run in noisy full-step mode. To fix this and get smoother movement, you must cut those traces and connect the pins to 5V. Read this guide for the fix: How to Use the CNC V4 Board despite Its quirks.
Wiring Guide
The software expects specific pins to be used. This mapping is defined in firmware/RobotArm/Config_Pinout.h. Make sure you wire everything exactly like this:
Component Function |
Arduino Pin |
|---|---|
Theta 1 (Base) Step |
D6 |
Theta 1 (Base) Direction |
D3 |
Theta 2 (Shoulder) Step |
D5 |
Theta 2 (Shoulder) Direction |
D2 |
Theta 3 (Elbow) Step |
D7 |
Theta 3 (Elbow) Direction |
D4 |
Global Driver Enable |
D8 |
Theta 1 Limit Switch |
D10 |
Theta 2 Limit Switch |
D9 |
Theta 3 Limit Switch |
D11 |
Gripper IN1 |
A0 |
Gripper IN2 |
A1 |
Gripper IN3 |
A2 |
Gripper IN4 |
A3 |
Wiring Limit Switches
The software uses the Arduino’s built-in pull-up resistors (INPUT_PULLUP). By default, it expects the switches to trigger when connected to ground (ENDSTOP_ACTIVE_LOW true).
To wire the limit switches for the default setup:
Connect the Common (COM) pin of the switch to Ground.
Connect the Normally Open (NO) pin of the switch to the correct Arduino signal pin.
With this setup, the pin reads HIGH when the switch is untouched, and LOW when it is pressed. If your setup requires the opposite, change ENDSTOP_ACTIVE_LOW to false in the code before uploading.