Cierto día allí por principios del mes de Julio sali de vacaciones de mi trabajo, eran tres semanas las cuales debía aprovechar... Pero ¿Que podría hacer?.
Que debia hacer,... Bueno, intente conseguir algunos pics, y los consegui buscando en tarjetas electronicas en la chatarra que tenia por alli,... Use algunos dias para leer toda la documentacion que se me cruzaba en el camino ,... Llegue a un obstaculo, no tenia forma de programarlo, ni ganas de hacer un programador....
En mi segunda semana de vacaciones pude tener en mis manos una plataforma que esta muy de moda,... "Arduino", me la presto uno de los catedraticos en la universidad. Pues bien, con ella en mis manos comence a leer documentacion por la
playground...
Para los que trabajamos en la automatizacion industrial esta plataforma parece de "juguete", sin embargo utilizando la imaginacion pueden lograrse cosas increibles.
La primera cosa que se me ocurrio hacer con Arduino fue un muy muy sencillo pero funcional vehiculo capaz de evaluar el terreno, elegir la mejor ruta (basada en los parametros) y bueno si se encuentra un obstaculo en su camino esquivarlo....
Empezando, le nombre Wall-E a la tortrix, un sencillo roboduino divertido de hacer
El cerebro utilizado es un Arduino Uno Revision 3
Una plataforma que nos sirve un
microcontrolador Atmega328P-PU un prcesador de 8 bits en formato DIP (algo muy ventajoso para este tipo de proyectos, ya que permite su facil reemplazo en caso de dañarlo), dandonos un facil acceso a sus puertos de comunicacion a través de headers hembra, muy utilies para prototipado.
La dificultad mas grande para construir mi pequeño roboduino, era la construccion del chasis, bueno, tambien consegui uno muy completo con sus motores, cajas reductoras, ruedas, rueda loca... etc....
A por cierto, como bien sabemos un pequeño microcontrolador no esta diseñado para manejar potencias, por esta razon intentar mover los motores directamente con arduino haria que este de dañara,... Permanentemente... Para el control de forma comoda de los motores utilice un
puente H basado en el circuito integrado L298N, este artilugio me permite controlar no solo el sentido de giro de los motores, tambien puedo controlar la velocidad de rotacion utilizando las salidas PWM del arduino, de esta manera se tiene un control completo del roboduino.
En todo proyecto que se desea sea autonomo, por decir que va a moverse solito por alli sin necesidad de que estemos sobre el, o que dependa de cables, se necesita de una buena fuente de alimentacion, pues bien las pilas son lo mas aconsejable.
Utilice dos packs de pilas de niquel cadmio de 1300 mAh, uno de 7.2V y otro de 3.6V conectados en serie y con un punto en comun, la razon de hacerlo asi es porque para alimentar la placa del arduino necesitamos de un minimo de 7 voltios (si la alimentamos con menos no funciona bien, ya que se torna en exceso inestable) y para los motores 7.2 + 3.6 = 10.8v bueno, la razon de proporcionar un alto voltaje me viene por el torque que deseo en las ruedas, ya que la velocidad de avance del roboduino es reducida, para darle tiempo de reaccionar sin problemas ante los obstáculos del camino. Cabe destacar que como seguridad el pack de pilas tiene un fusible rearmable, por aquello que se desconecte un cable y haga de las suyas provocando cortocircuito, es sabido que las pilas de alto ratio de descarga son altamente peligrosas en este aspecto y pueden fácilmente provocar accidentes.... Ahora bien, para que el microcontrolador pueda percibir el mundo exterior necesita algo muy importante,... Si, necesita sensores.
Sensores:
Como sensor principal utilice un practico HC-SR04 este sensor emite una onda ultrasonica cuando enviamos una señal por el pin trigger, luego su pin echo permanecera activo el tiempo que la onda ultrasonica tarde en regresar, sabiendo esto y la velocidad del sonido nos resulta sumamente sencillo calcular la distancia a la que se encuentra el objeto, o lo que sea que haga que la onda de sonido rebote hasta el receptor. En la imagen a la derecha se puede ver la base que use para montarlo, si, esa cosa celeste que esta alli la construi con el shield de un cargador de una laptop, y la ruedita venia con el servomotor que mueve al sensor, todo esta construido de forma en que se adapte y se acople de forna facil y precisa. Este sensor ultrasonico se encarga de funcionar como sonar para poder detectar cual es el camino mas factible.
Para detectar los obstaculos, utilice sensores infrarrojos, pero no, no de esos que compras, como los famosos Sharp, esas cosas son demasiado caras para lo que sirven, y como buenos hobistas que somos, por que no desarrollar nuestros propios sensores infrarrojos?.....
Pues los sensores se construyen muy facilmente utilizando dos diodos IR comunes y un foto transistor IR comun, ambos deben trabajar en la misma longitud de onda claro esta. Mis sensores tiene 4 cables, algo que resulto despues de muchas pruebas, errores y pruebas, hasta desarrollar un algoritmo que me permitiera controlarlos de forma correcta.
El circuito electronico como se puede apreciar en la imagen, es muy sencillo, un simple divisor de voltaje y nuestro sistema de IR's, la resistencia que utilice es de 10K porque ese fue el valor que me dio mejores resultados durante las pruebas, el valor de medicion en la entrada analogica se mantiene estable y nuca llega a mas de 1000 aunque se tape por por completo el fototransistor. La entrada digital de este sensor, es simplemente para encender y apagar los diodos IR, en intervalos de 1mS, esto lo veremos ahora en la parte del algoritmo utilizado en los sensores.
El codigo es realmente sencillo, casi no pareciera que llegar a ese algoritmo fue una batalla campal, y que luego de idearlo, testearlo y recibir los resultados que deseaba, lo que invadio mi mente en ese momento solo lo podria coprender aquella persona que por fin logro alcanzar la cima del mote everest (bueno quiza no tanto asi, pero para poder darse una idea del tiempo y esfuerzo invertido para lograr el desarrollo del algoritmo mas optimo. La explicacion es muy sencilla y viene asi: En primer lugar los parametros que recibe esta funcion son tres.
1. Lecturas: La cantidad de veces que se almacenaran los valores analogicos para luego promediarlos, el valor mas optimo lo encontre en cinco, pero la funcion admite cualquier valor por si alguien encuentra mejor una cantidad distinta.
2. pinDigital: Simplemente el pin que utilizaremos para enviar el tren de pulsos.
3. pinAnalogo, el pin en el cual leeremos los valores.
En primer lugar inicalizamos a cero los valores, pues si no se nos quedan almacenados en la Ram de nuestro pequeño arduino y van a pasar cosas feas hasta que se nos desborde la pila.
Luego, leemos el valor de los fototransistores y lo almacenamos en la variable IrAmbiente, despues, prendemos los led IR y leemos el valor analogico para guardarlo en la variable irReflejo, estos dos valores los restamos, y la diferencia sera la cantidad de rayos o la densidad de luz IR que se recogieron en el fototransistor, de esta manera nos aseguramos que la luz del Sol no nos afectara en nada,... Simple, sencillo pero muy eficaz.
Bueno, estas fueron las cosas mas relevantes en la construccion del automata, por lo cual personalmente no veo necesario explicar como se arma el chasis, y como se montan las piezas, eso queda en la creatividad de cada quien.... Bueno, eso seria lo mejor.....
Cabe destacar que para evitar ruidos y perturbaciones en las entradas analogicas opte por instalar capacitores ceramicos en las terminales de los motores los causantes de que las lecturas en las terminales analogicas del pequeño arduino, sean de lo mas inestables.
Dejo el repo en GitHub, por si quieres mejorar mi codigo fuente, o simplemente necesitas una pequeña guia para hacer el tuyo.
https://github.com/Servtes/Wall-Eduino/
Si tienes alguna duda, o algo por el estilo puedes comunicarte conmigo al mail jose_sosa@ymail.com.