A remote-controlled robot designed for inspecting hard-to-reach crawlspaces, featuring tank treads, a 2-DOF robotic arm, live video streaming, and environmental sensors.
- Tank Tread Drive System - L298N dual motor driver for precise maneuvering
- Wireless Control - NRF24L01+ 2.4GHz communication up to 100m range
- DIY Controller - Custom controller with joysticks for intuitive operation
- Live Video Stream - ESP32-CAM module with WiFi streaming
- Distance Monitoring - VL53L4CD Time-of-Flight sensor (up to 1.3m range)
- Environmental Data - BME688 sensor (temperature, humidity, pressure, gas)
- Safety System - Automatic motor stop when obstacle detected (<150mm)
- 2-DOF Robotic Arm - SG90 servos with 3D-printed arm structure
- Remote Arm Control - Potentiometers on controller for precise positioning
- Arduino Uno microcontroller
- L298N motor driver module
- 2x DC motors with tank treads
- 2x SG90 servo motors
- NRF24L01+ wireless module
- ESP32-CAM camera module
- BME688 environmental sensor (Modulino Thermo)
- VL53L4CD distance sensor (Modulino Distance)
- 7.4V LiPo battery with 5V step-down converter
- Arduino Nano microcontroller
- 2x Analog joysticks
- 2x Potentiometers (arm control)
- NRF24L01+ wireless module
- 9V battery or USB power
ArduinoCrawspaceRobot/
├── robot/
│ ├── main.ino # Main robot control code
│ └── config.h # Pin definitions and constants
├── controller/
│ └── transmitter.ino # Controller/transmitter code
├── esp32_cam/
│ └── camera.ino # ESP32-CAM streaming code
├── 3d_models/
│ ├── arm/ # 2-DOF arm STL files
│ ├── mounts/ # Component mounting brackets
│ └── enclosure/ # Electronics protection enclosure
└── docs/
├── BOM.md # Bill of Materials
├── wiring.md # Wiring diagrams and connections
├── assembly.md # Step-by-step assembly guide
└── troubleshooting.md # Common issues and solutions
- Arduino IDE - Version 1.8.19+ or Arduino IDE 2.0+
- Required Libraries:
- RF24 (by TMRh20)
- Adafruit_BME680
- Adafruit_VL53L4CD
- Servo (built-in)
- ESP32 Board Support - For programming ESP32-CAM
- 3D Printer - Or access to 3D printing service
-
Install Libraries
Arduino IDE → Tools → Manage Libraries Search and install: RF24, Adafruit_BME680, Adafruit_VL53L4CD -
Hardware Assembly
- Follow the detailed assembly guide
- Refer to wiring diagram for connections
- Use BOM to source components
-
Upload Code
- Robot: Upload
robot/main.inoto Arduino Uno - Controller: Upload
controller/transmitter.inoto Arduino Nano - Camera: Upload
esp32_cam/camera.inoto ESP32-CAM (update WiFi credentials)
- Robot: Upload
-
Test & Operate
- Power on both robot and controller
- Check Serial Monitor for initialization
- Access camera stream at
http://<ESP32-IP> - Test motors, servos, and sensors
All pin definitions are in robot/config.h. Default pinout:
Robot (Arduino Uno):
- Motors: D2-D5 (control), D9-D10 (PWM)
- Servos: D6 (base), D7 (arm)
- NRF24: D8 (CE), D53/D10 (CSN), D11-D13 (SPI)
- Sensors: A4 (SDA), A5 (SCL) for I2C
Controller (Arduino Nano):
- Joysticks: A1 (forward/back), A2 (turn)
- Arm Control: A6 (base), A7 (joint)
- NRF24: D9 (CE), D10 (CSN), D11-D13 (SPI)
Modify in config.h:
#define SAFETY_DISTANCE_MM 150 // Stop if obstacle <150mm
#define MAX_MOTOR_SPEED 255 // Maximum PWM (0-255)- Left Joystick Y-axis - Forward/Backward movement
- Right Joystick X-axis - Left/Right turning (tank steering)
- Arm Base Potentiometer - Rotate arm base (0-180°)
- Arm Joint Potentiometer - Move arm up/down (0-180°)
- Automatic motor stop when obstacle detected <150mm
- Battery voltage monitoring (if implemented)
- Wireless connection loss handling
- Ensure ESP32-CAM is powered and connected to WiFi
- Check Serial Monitor for assigned IP address
- Open web browser:
http://<ESP32-IP> - Video stream will display automatically
- Bill of Materials - Complete parts list with estimated costs
- Wiring Diagram - Detailed connection guide
- Assembly Instructions - Step-by-step build guide
- Troubleshooting - Common issues and fixes
All STL files are located in the 3d_models/ directory:
- arm/ - 2-DOF robotic arm components
- mounts/ - Motor, sensor, and electronics mounts
- enclosure/ - Protective enclosure for electronics
Print with 20-30% infill, 0.2mm layer height, PLA or PETG recommended.
- Add LED lighting for dark crawlspaces
- Implement return-to-home feature
- Add battery voltage monitoring
- Integrate GPS for outdoor use
- Add emergency stop button on controller
- Adjust motor speeds in
robot/main.ino - Change wireless channel/address in
config.h - Modify servo ranges for different arm designs
- Implement PID control for smoother movement
If you encounter issues:
- Check power connections and battery charge
- Verify all wiring matches the diagram
- Test components individually
- Review Serial Monitor for error messages
- Consult troubleshooting guide
Common issues:
- No wireless connection: Add 10µF capacitor to NRF24L01
- Motors don't run: Check L298N power and control pins
- Servos jitter: Use external 5V power supply
- Camera won't connect: Verify 2.4GHz WiFi and credentials
- Always test in open area before crawlspace use
- Monitor battery voltage to prevent over-discharge
- Keep electronics away from water/moisture
- Ensure proper ventilation in crawlspace
- Never operate unattended
- Follow local regulations for robotic devices
Contributions are welcome! Areas for improvement:
- Enhanced motor control algorithms
- Better power management
- Additional sensor integrations
- Improved 3D models
- Documentation enhancements
This project is provided as-is for educational and hobbyist use.
- Uses RF24 library by TMRh20
- Adafruit sensor libraries
- Arduino and ESP32 communities
- Inspired by crawlspace inspection needs
For questions, issues, or contributions:
- Open an issue on GitHub
- Check existing documentation
- Review troubleshooting guide
- Arduino community forums
Built with ❤️ for makers and DIY enthusiasts