The idea behind the explorer Arduino robot is simple. As it travels autonomously, the robot is able to sense the surroundings and transmit the collected data wirelessly. We’ve built a simple wheeled robot in the past: How To Make Your Own Robot and How To Make Your Own Robot (Part 2). The goal of this project is to prototype an explorer robot, equipped with a set of sensors such as temperature and pressure, which will be able to send collected information in real time with the help of digital radio communication modules (RF). In this tutorial, we’ll also cover how to design your own PCB using EagleCAD. We opted for PCB for this project because it enables more stable connections between the components and aesthetically it looks more presentable.
The control and management of the transmitted information can be done via an application that runs under Windows. The intermediate connection between the robot and the C# application was made with a remote control, which receives information from the robot and sends them to laptop/PC as long as the distance between the remote control and robot does not exceed 400m. Both the robot and the remote use a transceiver NRF24l01+ for communication.
The chassis is the base frame of the robot. It is the principal element which supports other electronic components mounted later (i.e. the cooling part, the sensors and the engines, etc). This is made of glass-textolite, the same material used for producing circuit boards (with a 0.8 mm thickness). What is glass-textolite? Defence Technical Information Center (DTIC) defines it as “a glass fabric material which is impregnated with furil, epoxy, polyester, silicone-organic or other resins”. I’ve chosen this material because it’s sturdy and easy to work with. Glass-textolite also doesn’t require a complex cutting such as CNC machine so we can easily achieve desired shape(s).
The robot uses two Pololu motors in order to provide the traction; the robot is able to maneuver and change directions just by rotating the two front wheels. Although these engines are pretty small (23.87 x 9.90 x 11.93 mm), they have pretty impressive specs. A Pololu motor is equipped with a 100:1 gearbox, providing a maximum torque of 1.8 kg/cm (6V). Rubber wheels are attached to a plastic support where the wheels are snugly mounted on the motor shaft (external dimensions: 42 x 19 mm).
Figure 1: The chassis diagram
Let’s design a PCB! We’ll be using Eagle to design our PCB. Don’t worry if you’re not familiar with Eagle platform. I’ll provide a step-by-step tutorial on how to design in Eagle. For demonstration, we will be using a simple circuit in order to familiarize ourselves with the tool. In the example below, we will design the connections between a motor and a driver. This circuit will be later incorporated to control the motors. Due to the sheer number of wires the PCB will have 2 surfaces.
A well-designed schematic is critical to the overall PCB design process. It will help you to detect any error(s) before the board is fabricated. It’ll also help you debug your PCB when something goes wrong and it doesn’t work.
First, let’s download Eagle. Please refer to Eagle setup instructions here.
1. Create a Project
We need to create a project where we will save all our designs.
Open Eagle → File → New → Project
Figure 2: Creating new Project
2. Create a Schematic
To wire between the components we need to create schematic.
Right click on new project → New → Schematic
Figure 3: Adding new Schematic
3. Using the ADD Tool
The ADD tool is used to place every single component on the schematic. It can be found on the left toolbar or under the Edit menu.
Figure 4: ADD Button
Figure 5: Search for components
The ADD tool also has search functionality. This can be used when you need to navigate through multiple libraries to find a specific part. It’s case sensitive, please make sure that there are no typos. To add wildcards to the search, you can please an asterisk (*) before and/or after the search term. For example, to search atmega328, type in *atmega328* (asterisk before & after). By doing so, it will also show two more versions of the IC (because they’re actually named “ATMEGA328P”), instead of a single part or package combo in the SparkFun-DigitalIC library.
Figure 6: Connection between the motor driver and motors
ADD the following components to your current project:
For this particular example only: I decided to use only the microcontroller because the Arduino board occupies a large space. You will understand how to make the layout after you see the diagrams.
Figure 7: Wire diagram of L298 and micromotor
After you have designed the board, you need to generate the board. It’s quite simple and it can be done in the following manner:
1. Press “Generate/Switch to board” button to create a board based on your designed layout/schematic.
Figure 6: Eagle menu
2. Create Board From Schematic
Figure 9: Example board for L298 and micromotor
3. Place Components
Figure 10: Board maker
It’s recommended that you place the components similar to the placement in the designed schematics. This way you can eaily troubleshoot the circuit later if something goes wrong.
To update the yellow airwires, click on “Rastnest” from the “Tools”.
Figure 11: The PCB board without the Ground Plane
Figure 12: Connections between L298 and diodes
For an accurate PCB, it is recommended to have a ground plane; this shorten the number of the routes. In this project the ground plane isn’t used, let me explain why it’s so useful:
We’ll use the ROUTE tool for sketching the routes. After we made the connections, we saw in the picture that only one route was not drawn: GND. Our next step is to make GROUND PLANE. (A ground plane takes up all the unused space on the board and connects it to the ground net.) Try running ratsnest aftering creating the plane. You will see the number of airwires drop drastically.
Run Polygon command to make a GROUND PLANE. You’ll need to set the Layer to Bottom then draw a box around the outside. Use Name command to change the plane’s name to GND by clicking on the blue line.
Figure 13: Renaming the polygon to the “GND”
Figure 14: The final scheme of the L298 and the connections between the components
In order to supply the entire setup, we used 7 AA Ni-Mh accumulators grouped in series. Consequently, this provides a proper voltage for the regulator’s input which needs at least 6.7V. The regulator is a LM7805 which produces 5V. This voltage regulator helps supplying power to the microcontroller, the transistor-zener 3.3V regulator and the motor driver.
Figure 15: Voltage regulator
The robot is composed of two boards, both designed using EagleCAD. The first board includes the processing part and the information transmitting block. Because the provided voltage from battery is too high for the microcontroller, this has to be stepped down to avoid a damage. The voltage regulation for the value of 5V is made using a 3 points linear regulator, which take a fraction of voltage in order to provide 5V. The input capacitor has the scope of voltage filtration by eliminating the over-voltages which can appear in the commutation processes. As soon as the input voltage goes under 6.7V, the regulator stops working and the microcontroller won’t be supplied anymore. The crystal provides a fixed clock frequency.
The chosen microcontroller is an ATMEGA328, which is a very practical choice, because despite of its reduced number of pins it provides a number of great features (i.e. six analog inputs and five PWM outputs). The schematic allows its programming without its decoupling. Even if I obtained a 5V voltage, this is more than sufficient to supply the transceivers, which requires 3.3V with a minimum tolerance.
This is why it was necessary to design a transistor-zener regulator in order to obtain the desired value. The zener diode stabilize the electrical potential in transistor’s base, which assures a fixed voltage between the emitter and ground equal to the zener voltage without 0.6V. The resistance was calculated by the zener’s maximum power. This is divided with the zener voltage to find the maximum current through zener; with the obtained value we can estimate a resistor value with half of the zener’s maximum current.
Figure 16: From 5V to 3V3
In order to make the whole design for this processing block as compact as possible, we used only the microcontroller plus its required additional circuits (i.e. the crystal and reset resistance). The microcontroller should operate independent from its development board (the programming part can’t be done). It’s necessary to detach the microcontroller in the first step and then to use the Arduino board for uploading the program.
Figure 17: Microcontroller’s pins
The second board contains the motor’s driver, a L298. Its main ability is to command the motors with a high current. The main property of a driver is that it generates a waveform after the input signal. So if the input signal is a square wave with 50% duty cycle and the supply voltage for the driver is 10V, we will have a signal with the same duty cycle and 10V amplitude on the output.
The two motors were linked together on one of the two outputs and the steering one on the other. The maximum current for each channel is 2A. For cooling, an aluminum cooler was mounted on driver. Apart from the previous board, this was done on two layers because of the amount of nets. The diodes protect the driver from overvoltages generated by the inductive effect of the engines. I placed a capacitor in parallel on each engine in order to compensate the brushes effect.
Figure 18: Motor driver schematic
Figure 19: The board for the motor driver
The main purpose of this tutorial is to build an autonomous robot that is capable of self-navigating, collecting data from the surrounding environment, and transmitting the data wirelessly. The prototype can be further improved and designed using another chassis which allows the robot to explore more dangerous environments. In this way, human involvement may not be required. In Part 2, we will be putting everything together and actually test the working prototype.