Siguiendo la tradición del los robots de madera y con el objetivo de emplear la RaspberryPi en un robot se procede a crear a MiniAntimorlacoPi.
Componentes necesarios:
- RaspberryPi + SD
- USB wifi EDUP http://www.aliexpress.com/snapshot/232335587.html
- Batería externa USB 5200mAh http://www.amazon.es/Romoss-5200mAh-cargador-Micro-USB-Smartphone/dp/B00BH90LAM
- Kit de motores y ruedas http://www.aliexpress.com/item/2sets-Smart-Car-Robot-Rubber-Tire-Wheel-N20-DC-Geared-Motor-3V-9V-free-shipping/763323807.html
- Controladora de motores http://www.aliexpress.com/item/FREE-SHIPPING-L298-L298N-motor-driver-board-motor-drive-module/1053402330.html
- Detectores de distancia http://www.aliexpress.com/item/Free-shippping-5pcs-Smart-car-robot-E18-D80NK-infrared-obstacle-avoidance-sensor-proximity-switch-3-80cm/905509966.html (Estos para la versión segunda)
- Conversores de nivel http://www.aliexpress.com/item/HOT-SALE-7pc-Logic-Level-Converter-converts-3-3V-5V-TTL-logic-level-conversion-bidirectional-Mutual/858000551.html (Estos para la segunda versión)
- Rueda loca
- Madera
- Batería de 9v
- Cables, tornillos, etc.
Montando la plataforma:
Siguiendo el diseño de Antimorlaco con varias capas de madera obtenemos la estructura en la cual se van a montar los motores, ruedas y controladora.
Probando la controladora con la RaspberryPi:
En la siguiente dirección se puede encontrar un manual de la controladora de motores:
http://www.mineco.gob.es/stfls/mineco/prensa/ficheros/noticias/2013/130802_APLSCP_2_agosto.pdf
Como se ve en la siguiente figura no es exactamente la misma controladora pero es muy similar.
Para manejar los botones se necesitan 6 salidas (ENA, ENB, IN1, IN2, IN3 e IN4). Estas están agrupadas de tres en tres (ENA-IN1-IN2 y ENB-IN3-IN4). La entradas INx sirven para seleccionar la dirección de giro, y las ENx para habilitar el motor o no, en este caso estas entradas conectadas a una salida PWM permitirían manejar la velocidad de giro.
Para manejar estas 6 señales se van a emplear seis pines de la RaspberryPi (hay que tener en cuenta que las E/S son de 3.3v, aunque en este caso, en principio da lo mismo). Para manejarlos se va a emplear la librería Wiring Pi:
“WiringPi is a GPIO access library written in C for the BCM2835 used in the Raspberry Pi. It’s released under the GNU LGPLv3 license and is usable from C and C++ and many other languages with suitable wrappers (See below) It’s designed to be familiar to people who have used the Arduino “wiring” system” http://wiringpi.com/
La placa tiene dos conectores, P1 y P5, con los pines GPIO
Se conectaran directamente los pines de la Raspberry a la controladora (la numeración de pines es la indicada para WiringPi):
- ENA -> Pin 0
- IN1 -> Pin 2
- IN2 -> Pin 3
- ENB -> Pin 1
- IN3 -> Pin 4
- IN4 -> Pin 5
Para probar el funcionamiento, una vez conectado todo, se alimenta la placa controladora con una fuente de 9v y habrá que hacer un programa en C para activar y desactivar las distintas salidas. Para ello se va a emplear la librería WiringPi, para instalarla hay que seguir los siguientes pasos (http://wiringpi.com/download-and-install/)
- sudo apt-get install git-core
- sudo apt-get update
- sudo apt-get upgrade
- git clone git://git.drogon.net/wiringPi
- cd wiringPi
- git pull origin
- cd wiringPi
- ./build
Una vez hecho esto hay gran variedad de ejemplos de demostración de uso de las GPIO, PWM, I2C, etc.
Para probar si está bien instalado:
- cd ./wiringPi/gpio
- ./pintest
- ./gpio readall
Para la prueba inicial basta con realizar un programa que maneje los seis pines:
- Declarar la librería: #include <wiringPi.h>
- Inicializar: wiringPiSetup();
- Configurar los pines: pinMode(ENA,OUTPUT);
- Escribir un valor: digitalWrite(ENA, HIGH);
Para realizar una prueba modificando la velocidad de giro de los motores se va a emplear PWM, como solamente se dispone de un PWM hardware se va a emplear PWM software, para ello:
- Declarar adicionalmente la librería: #include <softPwm.h>
- Iniciar los PEM software: softPwmWrite(ENA, 0, RANGO);
- Dar un valor: softPwmWrite(EN1, velocidad);
Con esto, y unas funciones para pasar de valores de velocidad de avance y giro a valores de PWM y determinar el sentido de giro, ya se podrían controlar los motores.
Todo junto:
Ahora, para ver como se mueve la plataforma, hay que montar el soporte junto a la RaspberryPi y las baterías.
Primera prueba:
La primera prueba realizada se ha hecho siguiendo lo visto anteriormente, un programa que según se pulsen las teclas O,P,Q,A se mueva el robot, y pulsando N y M que se permita variar la velocidad. Con este programa se ha probado los motores, al aire, y después para manejarlo de forma remota simplemente se ha iniciado una conexión ssh remota y se ha arrancado el programa desde el terminal.
Segunda prueba:
La segunda prueba realizada en vez de arrancar un terminal remoto… lo que se ha creado es un servidor al cual se puede conectar un cliente y mandarle órdenes de movimiento por un socket. En este caso se ha respetado el protocolo empleado en Antimorlaco, con lo que el mismo programa cliente podría conectarse a los dos robots sin necesidad de modificaciones.
Reutilizando el software existente para Antimorlaco se ha creado el servidor (RaspberryPi-Linux) y el cliente (Windows 7).
Y con esto ya está preparado para la segunda versión en la que se añadirán los detectores de proximidad y seguidores de líneas.
Galería completa:
Se han bloqueado los comentarios.