jueves, 2 de febrero de 2023

Arduino and Educational Robotics: Self-driven Robot Car Project.

Among the many dreams that I had in childhood, I remember that I always wanted to be able to implement a robot that "had its own life", that is, that could walk through the rooms of my house without having to push or move it with a remote control.

Since in my childhood I did not have the knowledge or the necessary savings to be able to assemble a robot of these characteristics, it is that now as an adult I embarked on carrying out this project together with my son Diego, who is currently 5 years old and shares with me the curiosity of wanting to know how things work :)

This is how the "Giorbo" project was born, which consists of a robot car that is capable of moving on the ground autonomously, looking around and avoiding the obstacles it encounters on its way.

Here's a picture of what Giorbo looks like without its bodywork on:


Fig.1: Photograph of Giorbo, the robot car.

One of the challenges of this project was being able to implement this robot using low-cost parts, since generally the educational robotics kits that exist today tend to be expensive (on average they exceed USD 100), and many of them must handle abroad.

Another of the challenges of this project was to be able to give our robot "intelligence", so that it could move using its wheels and make movement decisions when facing walls, chairs, and anything that was put in front of it.

Here you can see my son releasing Giorno on the terrace of our home:

Video 1: Giorbo in action

Carrying out this project with my son was an unforgettable experience, and I recommend doing this activity to parents, educators and anyone who wants to learn how to "create artificial life", or who simply wants to discover and apply knowledge of robotics, electronics and design, among other disciplines.

1) PARTS USED TO ASSEMBLE THE ROBOT


Fig.2: Base parts to implement the robot

In order to build the robot car you need to get a set of parts, which are presented below (they are shown with a unit price in dollars and Chilean pesos, taking as reference the retail cost obtained in stores in Chile).


Nombre de PiezaChilean price $USD price
1 Arduino UNO R3 Board
8.800
12.9
1 Tower Pro Sg90 Servo Motor
2.180
3.2
1 Ultrasonic Sensor HC-SR04
2.480
3.6
1 Battery holder 4 AA
330
0.5
1 Alkaline battery 9 volts Great Value
2.690
4
4 AA alkaline batteries 1.5 volts Great Value
980
1.4
2 Gearmotors from 3.5 to 6 volts with wheel
11.980
17.6
1 Integrated Circuit L293D Motor Driver
2.400
3.5
1 Swivel wheel 40 mm.
1.350
2
1 Pack 40 male-male cables for breadboard
2.650
3.9
1 Plug connector (2.1mm) for 9 volt battery
690
1
1 Breadboard of 170 points
1.880
2.8
1 Double contact tape
980
1.4
1 Duct tape
340
0.5
TOTAL:39.73058.3
Table 1: list of robot car parts with reference price

The brain of the robot is made up of the legendary board Arduino UNO, which is one of the most currently used by the "Maker" and "DIY (Do-it-yourself) movements to make amateur electronic prototypes. In turn, the robot's head is made up of a model ultrasonic sensor HC-SR04, which acts as a "pair of eyes" and allows you to measure the distance with the closest object in front of it.Along with this, the head makes use of a model servo motor Sg90, which acts as a neck that allows the robot to turn its eyes to the left and right, thus giving it a total visibility range of 180 degrees.

Fig.3: Arduino board, servo motor and ultrasonic sensor

To mobilize the robot, a pair of geared motors is used, which correspond to small motors with gears inside. Each gearmotor must be connected to a tire with a rubber coating or other rough material, so that there can be friction between it and the surface of movement (that is, the ground), so that the robot can move forward, backward and turn. .

Fig.4: Two geared motors with their wheels

To give stability to the movement of the robot, a rotating wheel can be mounted (also known as "idle wheel") in the front part of the vehicle, which does not need to be connected to a motor, and will be used so that the robot can rotate freely in different directions.


Fig.5: Swivel wheel with base, bolts and nuts


To deliver energy to our robot, two power sources are used: a 9-volt alkaline battery that feeds the Arduino board and the ultrasonic sensor, and 4 AA 1.5-volt alkaline batteries in charge of delivering energy to drive the geared motors ( movement of the wheels) and the servo motor (movement of the "neck" of the robot). In order for the 4 batteries to deliver the voltage required by the motors (a range of 3.5 to 6 volts) they must be connected in series, so that the sum of their individual voltages allows them to reach 6 volts (that is, 4 batteries x 1.5 volts each = 6 volts). For this, a battery holder is used that allows the 4 AA type batteries to be firmly placed, and that also provides the output cables to be able to connect them.

Fig.6: 9 volt alkaline battery, battery holder and 4 AA alkaline batteries

In order for the 9-volt battery to be connected to the Arduino board, a plug-type connector can be used, which is cylinder-shaped at one end (to plug it into the board), and on the other it has a connector to connect it to the back of the board. top of the stack.

Fig.7: Plug type connector for 9 volt battery

In order to integrate all the devices that we have mentioned, we need to build the "nervous system" of our robot, so so that it allows us to orchestrate the signals that are being received from the environment (eg: there is an object ahead that is close) and allows us to make decisions to move the wheels of the car, in order to avoid obstacles and move freely. To do this, we will use a breadboard that allows us to make the appropriate connections between the pieces, using for this, a handful of male-male type cables (that is, they have a protruding tip at both ends).

Fig.8: Mini breadboard with 170 contacts, and pack of male-male cables

Unlike the vehicles that people use daily to get around, our robot only has three wheels (two rear and one front), so we cannot rotate to the left or right based on the movement of the wheels. front (we only have one, and it rotates freely without being connected to anything). To make up for the deficit of the front wheels we will use a technique known as "differential traction", which allows a vehicle to move and rotate using only two wheels based on the independent movement of each of them forwards and backwards.

To achieve this effect, we need to be able to control the direction of rotation of the geared motors, which can be achieved by reversing the polarity of the current that we apply to them. Although this can be done by manually changing the order of the cables that we connect from the batteries to each motor, the idea is that the robot can move autonomously, without external intervention. To do this, we need an electronic part called L293D, which corresponds to an integrated circuit that implements a "H-bridge" and allows to control up to two motors to make them turn in the direction you want.

Fig.9: Integrated circuit L293D with 16 pins

Along with this, our robot must have a chasis or skeleton that allows it to hold and give rigidity to all the parts that make up the vehicle. For this, it is important that this component has enough space to be able to locate all the contemplated parts, either above or below it. Also, it is required that it be made of some material that allows it to resist the weight of the pieces that are placed on top of it, and that it be as light as possible, so as not to make the complete structure of the vehicle heavier. In the case of our robot, we built the chassis using a plastic lid from an ice cream box, but we could have used acrylic, aluminum, wood or another material.

Fig.10: 800ml ice cream box lid

To be able to join different parts of the robot without having to drill and screw them, you can use a double-sided tape, which has glue on both sides and is easy to handle (it can be cut with scissors and peeled off with your hands). And of course, in order to cover the electrical cables that are exposed to the air, and also to "tie" some parts of our robot, we can use the practical and inevitable insulating tape :)

Fig.11: Double contact tape and insulating tape

2) ASSEMBLY OF THE ROBOT PARTS


Initially, the two gearmotors must be connected to their respective wheels, checking that the joint between them is firm and does not slip (if not, the wheel will not have the strength to move the robot). To validate that the assembly has been correct, the battery holder (with the 4 batteries inserted) can be connected to each of the geared motors, in order to observe if their tires rotate correctly.

Fig.12: Wheel rotation test with assembled gearmotor

Generally, geared motors do not come with built-in cables to be able to connect them to the current, so two cables must be soldered to them at the top (where there are two circular-shaped perforated metal connectors). To do this, you must use a soldering iron with soldering paste, in order to solder a cable in each of the connectors (if you have not previously soldered, this is a very good time to learn how to do it :)

Fig.13: Cables soldered to the two connectors of a geared motor


Subsequently, a strip of double contact tape must be placed on one of the faces of each gearmotor, with the aim of being able to glue it later to our chassis (the second contact surface must not yet be detached).

Fig.14: Gearmotor with double-contact tape attached on one side

In order to create the robot's head, the first thing is to join the servo motor (the "neck") with the ultrasonic sensor (the "eyes"). For this, a simple alternative is to cut and paste two pieces of double contact tape on the propeller of the servo motor, in order to later glue the ultrasonic sensor on it.

Fig.15: Servo motor with double contact tape on its propeller

At the time of gluing the ultrasonic sensor, make sure that its cables are pointing upwards; otherwise they may collide with the servo motor or other parts. 

Fig.16: Ultrasonic sensor stuck on the propeller of the servo motor

The next step is to make the necessary cable connections so that all the parts of the robot can communicate electrically. These connections must be made on the breadboard, and will allow the Arduino board to give the orders to control the servo motor, the ultrasonic sensor and the L293D integrated circuit, which in turn will regulate the rotation of the geared motors to make the vehicle move forward, backward or rotate. 

To carry out this step it is very important that the batteries are not yet connected to the circuit that is being formed, since a short circuit can be caused by having incomplete connections (the batteries must be inserted completely only when all parts of the robot are assembled).


Fig.17: Visual representation of connections between components

Once the indicated connections have been made (if you deem it convenient, you can modify the location of the cables respecting the electrical circuit), your components should be interconnected more or less in this way:

Fig.18: Electrical connection circuit between the components

Subsequently, the preparation of the chassis must be carried out. For this, it is important to validate that the Arduino board, the breadboard, the servo motor (with the ultrasonic sensor attached) and the batteries can be placed on top of the chassis surface, trying to make their weight distribution as homogeneous as possible. in order to avoid making one side of the vehicle much heavier than the other. One possible layout is to place the servo motor in the middle of the front of the chassis, further back in the center the Arduino board and on top of it the breadboard. The battery holder can be placed on one side (eg, in the middle on the right side), and the 9 volt battery in the middle on the other side. To fix the components it is possible to use double contact tape and/or insulating tape.

Fig.19: Example of distribution of components on the chassis

Once the position where each component will go has been validated, a hole must be made in the area that will correspond to the front part of the chassis, in order to make two (or four holes if desired) to install the front swivel wheel. The ideal is to first make a mark in the position to be drilled, and then go through them with a screwdriver or other equivalent tool. Having done this, the screws must be passed through the holes that the rotating wheel has through the chassis, and then secure them with nuts at the other end. Afterwards, the two gearmotors must be glued to the left and right side of the chassis, using the double contact tape that each one has.

Fig.20: Installation of rotating wheel and gearmotors in the lower part of the chassis

Once all the necessary components have been installed, the robot car should look similar to this:


Fig.21: Front view of the robot car

Fig.22: Diagonal view of the robot car

Fig.23: Rear view of the robot car


Optionally, it is possible to add a body to the robot to hide and protect all the robot circuitry, so it is up to your creativity to choose the materials and make a design to your liking to implement this part.  :)

3) CODING THE INTELLIGENCE OF THE ROBOT


For the robot car to have artificial intelligence it first needs to design the logic of the behavior that it will have , so that it can make decisions autonomously, without human intervention. Here you can see a possible algorithm, modeled as a flowchart:

Fig.24: Flowchart describing the behavior of the robot

Having defined the behavior, the programming of the robot must be carried out. To do this, it is necessary to use a computer that has the "Arduino IDE" tool installed, which works on Windows, Linux or Mac operating systems. It can be downloaded from here: https://www.arduino.cc/en/Main/Software

Once this tool is installed, the source code of our robot must be edited in it, which will contain the instructions required to control the sensors, motors and other components. The program used for the Giorbo auto-robot can be found in the following repository on the GitHub site (use the file "roboCar.ino"): https://github.com/mmadaria/arduino-robot-car

This source code makes use of two helper libraries: "Servo.h" and "NewPing.h". The first is used to control the servo motor, and is included as part of the Arduino IDE standard library. The second one is used to control the ultrasonic sensor, and must be downloaded and installed manually from the following website ("NewPing_v1.7.zip" file): https://bitbucket.org/teckel12/arduino-new-ping/downloads .If you want to learn how to install libraries you can see the following guide: https://www.arduino.cc/en/Guide/Libraries

If you want to configure the behavior parameters of the auto robot to your liking, you can modify the values of the parameters that are defined at the beginning of the file and whose lines begin with the text "#define".  For example, the line  that says "#define MIN_OBSTACLE_DISTANCE_THRESOLD 28"  indicates that the minimum distance in which the robot must stop to avoid colliding with an object is 28cms. Note that in the source code you can find the description of each of these parameters, so that you can understand what they are for.

Once you have the source code and libraries ready in the IDE, you must connect a cable to the Arduino board USB type B male (on the back), and the other end of the cable must be plugged into the computer. Once this is done, you must press the "Upload" button in the IDE, which will allow compile  and upload the program to the robot's Arduino board.


Fig.25: Arduino IDE compiling the program for the Arduino UNO board

Once the program is loaded on the board, you must unplug the USB cable from the robot. It should be noted that the program is not deleted from the board when it is without power, since it is stored in an internal memory called Flash Memory, which is non-volatile.

To make the robot run the program that we uploaded, the 9 volt battery must be plugged into the back of the Arduino board, specifically into the plug-type connector. Once this is done, the robot will start executing the program and start spinning its tires to move forward, so you can put it on the ground to make it move. To turn off the robot, all you have to do is disconnect the cable from the board.

Video 2: Robot car finished and moving

If you wish, you can add an on/off switch (two positions) to the robot to turn it on and off. To do this, an alternative is to connect the switch to the cables of the 9 volt battery, in order to allow or block the flow of current from that battery to the Arduino board.

Fig.26: two-position switch


Well, I hope you liked this tutorial as much as I liked writing it, and if you have any questions or comments you can write to me at "mmadaria@gmail.com".

Thank you very much, and enjoy your robot!

sábado, 28 de mayo de 2016

Arduino y Robótica Educativa: Proyecto Auto-Robot.

Dentro de los muchos sueños que tuve en la infancia, recuerdo que siempre quise poder llegar a implementar un robot que "tuviera vida propia", es decir, que pudiese pasearse por las piezas de mi casa sin necesidad de tener que empujarlo o moverlo mediante un control remoto.

Dado que en mi niñez no tenía los conocimientos ni los ahorros necesarios para poder llegar a armar un robot de estas características, es que me embarqué ahora siendo adulto en realizar este proyecto junto a mi hijo Diego, quien actualmente tiene 5 años y comparte conmigo la curiosidad de querer saber cómo funcionan las cosas :)

Así nació el proyecto "Giorbo", el cual consiste en un auto-robot que es capaz de moverse en el suelo de forma autónoma, mirando a su alrededor y evitando los obstáculos con que se topa en su camino.

He aquí una foto de cómo se ve Giorbo sin su carrocería puesta:


Fig.1: Fotografía de Giorbo, el auto-robot.

Uno de los desafíos de este proyecto fue el poder implementar este robot usando piezas de bajo costo, ya que generalmente los kits de robótica educativa que existen en la actualidad tienden a ser caros (en promedio superan los USD 100), y muchos de ellos deben encargarse al extranjero.

Otros de los retos de este proyecto fue poder darle "inteligencia" a nuestro robot, de modo que pudiera desplazarse usando sus ruedas y tomara decisiones de movimiento cuando se enfrentara a muros, sillas, y cualquier cosa que se le pusiera por delante.

Acá puede verse a mi hijo soltando a Giorbo en la terraza de nuestro hogar:

Video 1: Giorbo en acción

El haber llevado a cabo este proyecto junto a mi hijo fue un experiencia inolvidable, y recomiendo realizar esta actividad a padres, educadores y cualquier persona que desee aprender a "crear vida artificial", o que simplemente quiera descubrir y aplicar conocimientos de robótica, electrónica y diseño, entre otras disciplinas.

1) PARTES USADAS PARA ARMAR EL ROBOT


Fig.2: Piezas base para implementar el robot

Para poder construir el auto-robot necesitas conseguir un conjunto de piezas, las cuales se presentan a continuación (se muestran con un precio unitario en dólares y pesos chilenos, tomando como referencia el costo al por menor conseguido en tiendas de Chile).


Nombre de PiezaPrecio Chile $Precio USD
1 Placa Arduino UNO R3
8.800
12.9
1 Servo Motor Tower Pro Sg90
2.180
3.2
1 Sensor Ultrasonido HC-SR04
2.480
3.6
1 Porta pilas 4 AA
330
0.5
1 Pila alcalina 9 volts Great Value
2.690
4
4 Pilas alcalinas AA 1,5 volts Great Value
980
1.4
2 Motorreductores de 3,5 a 6 volts con rueda
11.980
17.6
1 Circuito Integrado L293D Driver Motor
2.400
3.5
1 Rueda 40 mm. giratoria
1.350
2
1 Pack 40 cables macho-macho para protoboard
2.650
3.9
1 Conector plug 2,1 mm. para batería 9 volts
690
1
1 Protoboard de 170 puntos
1.880
2.8
1 Cinta doble contacto
980
1.4
1 Cinta aislante
340
0.5
TOTAL:39.73058.3
Tabla 1: listado de piezas del auto-robot con precio de referencia

El cerebro del robot está conformado por la mítica placa Arduino UNO, la cual es una de las piezas de hardware más usadas en la actualidad por los movimientos "Maker" y "DIY (Do-it-yourself, o hazlo tú mismo) para hacer prototipos electrónicos amateurs. A su vez, la cabeza del robot está conformada por un sensor de ultrasonido modelo HC-SR04, el cual actúa como un "par de ojos" y permite medir la distancia que hay con el objeto más próximo que se encuentre adelante de él. Junto a esto, la cabeza hace uso de un servo motor modelo Sg90, el cual actúa como un cuello que permite que el robot pueda girar sus ojos hacia la izquierda y la derecha, dándole así un alcance de visibilidad total de 180 grados.

Fig.3: Placa Arduino, servo motor y sensor de ultrasonido

Para movilizar al robot se utiliza un par de motorreductores, los cuales corresponden a motores pequeños con engranajes en su interior. Cada motorreductores debe conectarse a un neumático con revestimiento de goma u otro material rugoso, con el objetivo de que pueda haber roce entre éste y la superficie de desplazamiento (es decir, el suelo), de modo que el robot pueda avanzar, retroceder y girar.

Fig.4: Dos motorreductores con sus ruedas

Para darle estabilidad al desplazamiento del robot se puede montar una rueda giratoria (también conocida como "rueda loca") en la parte delantera del vehículo, la cual no necesita estar conectada a un motor, y será usada para que el robot pueda girar libremente en distintas direcciones.


Fig.5: Rueda giratoria con base, tornillos y tuercas


Para entregar energía a nuestro robot se utilizan dos fuentes de alimentación: una pila alcalina de 9 volts que alimenta a la placa Arduino y al sensor de ultrasonido, y 4 pilas alcalinas AA de 1,5 volts encargadas de entregar energía para impulsar los motorreductores (movimiento de las ruedas) y el servo motor (movimiento del "cuello" del robot). Para que las 4 pilas puedan entregar el voltaje requerido por los motores (un rango de 3,5 a 6 volts) éstas deben ser conectadas en serie, de modo que la suma de sus voltajes individuales permitan alcanzar los 6 volts (es decir, 4 pilas x 1,5 volts cada una = 6 volts). Para ello, se utiliza un portapilas que permite colocar de manera firme las 4 pilas de tipo AA, y que además provee los cables de salida para poder conectarlas.

Fig.6: Pila alcalina de 9 volts, portapilas y 4 pilas alcalinas AA

Para que la pila de 9 volts pueda conectarse a la placa Arduino puede utilizarse un conector de tipo plug, el cual tiene forma de cilindro por un extremo (para enchufarla a la placa), y por el otro trae un conector para conectarlo a la parte superior de la pila.

Fig.7: Conector de tipo plug para pila de 9 volts

Para poder integrar todos los dispositivos que hemos mencionado necesitamos armar el "sistema nervioso" de nuestro robot, de modo que éste nos permita orquestar las señales que se van recibiendo del medio ambiente (ej: hay un objeto adelante que está cerca) y permita tomar decisiones para mover las ruedas del auto, de modo de esquivar los obstáculos y avanzar libremente. Para ello, utilizaremos una protoboard que nos permita realizar las conexiones adecuadas entre las piezas, usando para ello un puñado de cables del tipo macho-macho (es decir, que tengan una punta saliente por ambos extremos).

Fig.8: Mini protoboard de 170 contactos, y pack de cables macho-macho

A diferencia de los vehículos que las personas usamos diariamente para desplazarnos día a día, nuestro robot sólo cuenta con tres ruedas (dos traseras y una delantera), por lo que no podemos realizar rotaciones a la izquierda o derecha en base al movimiento de las ruedas delanteras (sólo tenemos una, y ésta gira libremente sin estar conectada a nada). Para suplir el déficit de las ruedas delanteras usaremos una técnica conocida como "tracción diferencial", la cual permite que un vehículo pueda realizar desplazamiento y rotaciones usando sólo dos ruedas en base al movimiento independiente de cada una de ellas hacia adelante y atrás.

Para conseguir este efecto es necesario que podamos controlar el sentido del giro de los motorreductores, lo cual puede conseguirse invirtiendo la polaridad de la corriente que les apliquemos. Si bien esto puede realizarse cambiando de forma manual el orden de los cables que conectemos desde las pilas hacia cada motor, la idea es que el robot pueda moverse de forma autónoma, sin intervención externa. Para ello, necesitamos una pieza electrónica llamada L293D, el cual corresponde a un circuito integrado que implementa un "puente H" y permite controlar hasta dos motores para hacerlos girar en el sentido que uno desee.

Fig.9: Circuito integrado L293D con 16 pines

Junto a esto, nuestro robot debe tener un chasis o esqueleto que le permita sostener y dar rigidez a todas las piezas que componen el vehículo. Para ello, es importante que esta componente tenga el espacio suficiente para poder ubicar todas las partes contempladas, ya sea por encima o por debajo de ésta. También, se requiere que esté hecho de algún material que permita resistir el peso de las piezas que se pongan por arriba de ella, y que sea lo más liviana posible, de modo de no hacer más pesada la estructura completa del vehículo. En el caso de nuestro robot el chasis lo construimos usando una tapa plástica de caja de helado, pero podríamos haber utilizado acrílico, aluminio, madera u otro material.

Fig.10: Tapa de caja de helado de 800ml

Para poder unir distintas piezas del robot sin necesidad de tener que perforarlas y atornillarlas se puede utilizar una cinta de doble contacto, la cual trae pegamento por ambas caras y es de fácil manipulación (puede cortarse con tijeras y despegarse con las manos). Y por supuesto, para poder recubrir los cables eléctricos que queden expuestos al aire, y también para "amarrar" algunas piezas de nuestro robot, podemos usar la práctica e infaltable cinta aislante :)

Fig.11: Cinta de doble contacto y cinta aislante

2) ENSAMBLAJE DE LAS PARTES DEL ROBOT


Inicialmente, se deben conectar los dos motorreductores con sus respectivas ruedas, revisando que la unión entre ellos quede firme y no patine (si no, la rueda no tendrá fuerza para poder mover al robot). Para validar que el ensamblaje haya quedado bien se puede conectar el portapilas (con las 4 pilas puestas) a cada uno de los motorreductores, de modo de observar si sus neumáticos giran correctamente.

Fig.12: Prueba de giro de rueda con motorreductor ensamblado

Generalmente los motorreductores no vienen con cables incorporados para poder conectarlos a la corriente, por lo que hay que soldarles dos cables en la parte superior (donde se encuentran dos conectores métalicos perforados con forma circular). Para ello, debe usarse un cautín con pasta soldadora, de modo de soldar un cable en cada uno de los conectores (si no has soldado previamente, este es un muy buen momento para aprender a hacerlo :)

Fig.13: Cables soldados a los dos conectores de un motorreductor


Posteriormente, se debe colocar una tira de cinta doble contacto en una de las caras de cada motorreductor, con el objetivo de poder pegarla posteriormente a nuestro chasis (aún no se debe despegar la segunda superficie de contacto).

Fig.14: Motorreductor con cinta de doble contacto adherida por un lado

Para poder crear la cabeza del robot, lo primero es unir el servor motor (el "cuello") con el sensor de ultrasonido (los "ojos"). Para ello, una alternativa sencilla es cortar y pegar dos pedazos de cinta de doble contacto sobre la hélice del servo motor, de modo de pegarle pegarse posteriormente el sensor de ultrasonido sobre ella.

Fig.15: Servo motor con cinta doble contacto en su hélice

Al momento de pegar el sensor de ultrasonido hay que fijarse que sus cables queden apuntando hacia arriba; en caso contrario éstos pueden chocar con el servo motor u otras piezas. 

Fig.16: Sensor de ultrasonido pegado sobre la hélice del servo motor

El siguiente paso es realizar las conexiones de cables necesarias para que todas las piezas del robot puedan comunicarse a nivel eléctrico. Estas conexiones deben realizarse sobre la protoboard, y permitirá que la placa Arduino pueda dar las órdenes para controlar el servo motor, al sensor de ultrasonido y al circuito integrado L293D, el cual a su vez regulará el giro de los motorreductores para hacer que el vehículo avance, retroceda o rote. 

Para realizar este paso es muy importante que no se conecten todavía las pilas en el circuito que se está formando, dado que se puede provocar un cortocircuito por tener conexiones incompletas (las pilas deben colocarse en su totalidad únicamente cuando estén ensambladas todas las partes del robot).


Fig.17: Representación visual de conexiones entre componentes

Una vez realizadas las conexiones indicadas (si lo estimas conveniente puedes modificar la ubicación de los cables respetando el circuito eléctrico), tus componentes deberían verse interconectadas más o menos de esta forma:

Fig.18: Circuito eléctrico de conexión entre las componentes

Posteriormente debe realizarse la preparación del chasis. Para ello es importante validar que la placa Arduino, la protoboard, el servo motor (con el sensor de ultrasonido pegado) y las pilas puedan ser colocados encima de la superficie del chasis, tratando de que su distribución de peso sea lo más homogénea posible, de modo de evitar que un lado del vehículo quede mucho más pesado que el otro. Una distribución posible es colocar el servo motor al medio de la parte delantera del chasis, más atrás al centro la placa Arduino y encima de ella la protoboard. El portapilas puede colocarse en un costado (ej: al medio en el lado derecho), y la pila de 9 volts al medio en el otro costado. Para fijar las componentes es posible usar cinta de doble contacto y/o cinta aislante.

Fig.19: Ejemplo de distribución de componentes sobre el chasis

Una vez que se ha validado la posición donde irá cada componente se debe realizar una perforación en la zona que corresponderá a la parte delantera del chasis, de modo de hacer dos (o cuatro orificios si se desea) para poder instalar la rueda giratoria delantera. Lo ideal es primero realizar una marca en la posición a perforar, y luego atravesarlos con un desatornillador u otra herramienta equivalente. Habiendo realizado esto se deben pasar los tornillos por los orificios que tiene la rueda giratoria atravesando el chasis, para luego asegurarlos con tuercas por el otro extremo. Después, deben pegarse los dos motorreductores al costado izquierdo y derecho del chasis, usando para ello la cinta de doble contacto que tiene cada uno.

Fig.20: Instalación de rueda giratoria y motorreductores en parte inferior del chasis

Una vez que se han instalado todas las componentes necesarias, el auto robot debe verse similar a esto:


Fig.21: Vista delantera del auto robot

Fig.22: Vista en diagonal del auto robot

Fig.23: Vista trasera del auto robot


De forma opcional es posible agregarle una carrocería al robot para ocultar y proteger toda la circuitería del robot, por lo que queda a tu creatividad el escoger los materiales y hacer un diseño a tu gusto para implementar esta parte  :)

3) CODIFICACIÓN DE LA INTELIGENCIA DEL ROBOT


Para que el auto robot tenga inteligencia artificial se necesita primero diseñar la lógica del comportamiento que tendrá, de modo que pueda tomar decisiones de forma autónoma, sin intervención humana. Acá puede verse un algoritmo posible, modelado como un diagrama de flujo:

Fig.24: Diagrama de flujo que describe el comportamiento del robot

Teniendo el comportamiento definido se debe llevar a cabo la programación del robot. Para ello se requiere hacer uso de un computador que tenga instalado la herramienta "Arduino IDE", la cual funciona sobre los sistemas operativos Windows, Linux o Mac. Ésta puede descargarse desde acá: https://www.arduino.cc/en/Main/Software

Una vez instalada esta herramienta se debe editar en ella el código fuente de nuestro robot, el cual contendrá las instrucciones requeridas para poder controlar los sensores, motores y las otras componentes. El programa usado para el auto-robot Giorbo puedes encontrarlo en el siguiente repositorio del sitio GitHub (usa el archivo "roboCar.ino"): https://github.com/mmadaria/arduino-robot-car

Este código fuente hace uso de dos librerías auxiliares: "Servo.h" y "NewPing.h". La primera es utilizada para poder controlar el servo motor, y viene incluida como parte de la biblioteca estándar de Arduino IDE. La segunda es usada para controlar el sensor de ultrasonido, y debe ser descargada e instalada manualmente desde el siguiente sitio web (archivo "NewPing_v1.7.zip"): https://bitbucket.org/teckel12/arduino-new-ping/downloads .Si deseas aprender cómo instalar librerías puedes ver la siguiente guía: https://www.arduino.cc/en/Guide/Libraries

Si desea configurar a tu gusto los parámetros del comportamiento del auto robot, puedes modificar los valores de los parámetros que se encuentran definidos al comienzo del archivo y cuyas líneas comienzan con el texto "#define". Por ejemplo, la línea  que dice "#define MIN_OBSTACLE_DISTANCE_THRESOLD 28"  indica que la distancia mínima en la que el robot debe detenerse para no chocar contra un objeto es de 28cms. Ojo que en el código fuente puedes encontrar la descripción de cada uno de estos parámetros, de modo de poder entender para qué sirven.

Una vez que tengas listo el código fuente y las librerías en la IDE debes conectar a la placa Arduino un cable USB del tipo B macho (en su parte trasera), y el otro extremo del cable debe ir enchufado al computador. Una vez hecho esto se debe presionar en la IDE el botón "Upload", el cual permitirá compilar y cargar el programa en la placa Arduino del robot.


Fig.25: Arduino IDE compilando el programa para la placa Arduino UNO

Una vez que el programa se encuentre cargado en la placa se debe desenchufar el cable USB del robot. Cabe destacar que el programa no se borra de la placa cuando está sin energía, dado que queda almacenado en una memoria interna llamada Flash Memory, la cual es de tipo no volátil.

Para hacer que el robot ejecute el programa que le cargamos se debe enchufar la pila de 9 volts en la parte trasera de la placa Arduino, específicamente en el conector de tipo plug. Una vez hecho esto, el robot iniciará la ejecución del programa y comenzará a girar sus neumáticos para moverse hacia adelante, por lo que ahí puedes ponerlo en el suelo para que se desplace. Para apagar al robot basta con que desconectes el cable de la placa.

Video 2: Auto-robot finalizado y moviéndose

Si lo deseas puedes agregarle al robot un interruptor de tipo on/off (dos posiciones) para encenderlo y apagarlo. Para ello, una alternativa es conectar el interruptor a los cables de la pila de 9 volts, de modo de permitir o bloquear el paso de corriente desde esa pila a la placa Arduino.

Fig.26: interruptor de dos posiciones


Bueno, espero que te haya gustado este tutorial tanto como a mí me gustó escribirlo, y si tienes dudas o comentarios puedes escribirme a "mmadaria@gmail.com".

¡Muchas gracias, y que disfrutes tu robot!