LIDAR/Ultrasonic Transducer -- MC1 Obstacle Avoiding Robot W/Arduino Uno
By mtripoli3
Project Overview
This project details the construction of an autonomous obstacle-avoiding robot using an Arduino Uno, an ultrasonic ranging transducer, and a LIDAR sensor (VL53L0X Time-of-Flight). The robot navigates autonomously, avoiding obstacles without user intervention. The creator envisions future enhancements, such as using a solar cell to create a "light tracking robot" that seeks the brightest spot.
The project defines a "true robot" as one that is fully autonomous, distinguishing it from remote-controlled devices often categorized as "toy robots".
Supplies
List of components:
- Base chassis: A robot kit designed for Raspberry Pi was used for convenience.
- Arduino UNO R3
- Arduino motor shield
- Arduino blank breadboards and headers for making a shield
- 10mm RGB common anode diffused LED's
- DROK SMPS power supply: Used to convert 8.4VDC battery power to 5VDC for the steering servo.
- Ultrasonic Model HC-SR04
- VL53L0X Time-of-flight Distance Sensor
Step 1: Start With Bare Chassis With 2 Drive Motors and a Servo Steering
The initial chassis came with thin motor wires, which were replaced with more substantial wire. Each rear wheel is driven by its own motor, currently operating in tandem (forward and reverse together). Future plans include individual wheel control for enhanced maneuverability, coordinated with the front steering servo.
[Image Description: A front view of the obstacle-avoiding robot, showcasing its 'eyes' (green LEDs), ultrasonic sensors, and headlights.]
Step 2: Attach Arduino UNO
A pattern was drilled into the chassis to mount the Arduino UNO R3 using M3 metric brass stand-offs. The motor shield was then attached to the UNO.
[Image Description: The robot chassis, showing the mounting points for the Arduino UNO and motor shield.]
Step 3: LED EYE's for Fun and Feedback
10mm RGB diffused LEDs were used to create the robot's "eyes". Ballast resistors were soldered to each LED, and heatshrink tubing was applied over the connections for protection and aesthetics. These are common anode LEDs, requiring a small drive circuit as they are driven by a voltage higher than 5V. A simple 2N7000 N-channel MOSFET in an "open drain" configuration is used, allowing the Arduino UNO's logic level to control the MOSFET and thus the LED color. The Arduino code drives the LEDs GREEN when the robot moves forward. When an obstacle is detected, the GREEN light turns off, and the RED LEDs flash briefly during the "avoidance" mode. The code also includes routines for other colors like yellow, magenta, and white, though these are not yet assigned to specific functions.
[Image Description: A close-up of the Arduino UNO and motor shield, detailing the connections for the LEDs and other components.]
Step 4: Building a "breadboard Shield"
Interface circuitry is required to drive the LED "eyes" and a DC-dc voltage converter circuit. The image shows the completed shield attached to the UNO. To ensure proper alignment, headers are placed and inserted into the UNO to hold them in position while the board's leads are carefully soldered. Care must be taken to avoid excessive solder, which could prevent the shield from inserting correctly into the UNO.
[Image Description: A close-up of a green perfboard (breadboard shield) with headers soldered in place, ready to be attached to the Arduino UNO.]
Step 5: Attach EYE LED's and Power Converter Circuitry
The DROK SMPS (switch mode power supply) is shown connected to the power pin of the steering servo. The three 2N7000 MOSFETs connected to the EYE LEDs are not fully visible but are configured in an "open drain" setup where the LED is in the "drain" and the Arduino controls the gates. This is a common circuit with many examples available online. The photo also shows the solar cell, which outputs approximately 4V in bright light, and the breadboard shield.
[Image Description: A close-up showing the DROK SMPS (switch mode power supply) connected to the steering servo's power pin, along with the solar cell and breadboard shield.]
Step 6: Battery Power
To power the robot, custom battery packs were built. An 8.4V@2500mAh Li-ion pack was assembled. In the lower left corner of the photo, a switch is visible that controls the robot's power (on/off) or charging. Zip ties are used to secure the battery in place. The dual motor drive system, including the motors and gearheads, is also visible.
[Image Description: A close-up of the robot's internal components, featuring the 8.4V Li-ion battery pack secured with zip ties, and the dual DC motors with gearheads.]
Step 7: Ultrasonic Transducer
This step focuses on testing the performance of the ultrasonic transducer, which is the primary reason for building the robot. The sensor comprises two parts: a "send" unit and a "receive" unit, located below the LED "eyes". It operates on a "time of flight" principle: the transmit sensor is driven with a high voltage for 10µS, emitting a pulse at a specific frequency. The circuit then switches to receive mode, listening for the return pulse reflected off an object. The time between pulse generation and signal reception is measured and converted into distance units, in this case, centimeters.
[Image Description: A front view of the robot, highlighting the ultrasonic transducer sensors positioned below the LED 'eyes'.]
Step 8: VL53L0X Time-of-Flight Distance Measurement Sensor
The VL53L0X is a "time of flight" transducer, also known as LIDAR (Light Detection and Ranging). LIDAR is a method for determining distances by targeting an object with a laser and measuring the time for the reflected light to return. This process is similar to the ultrasonic transducer but uses light instead of sound. The VL53L0X device is a small unit with a white rectangle, containing a 940nM laser that emits pulses and measures their return time. Testing indicates a range of approximately 2 meters. By positioning the ultrasonic device upwards and the LIDAR sensor level with the ground, different fields of view (FOV) are captured.
[Image Description: A close-up of the VL53L0X Time-of-Flight distance sensor module, showing its small size and the labeled pins (XSHUT, GPIO1, SDA, SCL, GND, VIN).]
Step 9: Putting It All Together W/CODE
The robot is shown operating in a living room environment. Its maneuvering algorithm is simple: upon detecting an obstacle, it executes a random turn (left or right) until the obstacle is no longer detected, then centers its steering and continues. Further fine-tuning is planned, including integrating the solar cell light detector routine to enable the robot to steer towards the brightest spot.
A video demonstrating the robot's operation is available at: Download Video
[Image Description: A front view of the completed obstacle-avoiding robot, with its LED 'eyes' illuminated.]