Me apetecía mucho tener un robotito con ruedas para cacharrear un poco y que el enano su fuera hiciendo a él, pero los kits robóticos son caros, así que me puse con ello y decidí diseñarme mi propia plataforma. Ahora, aparte de un ahorro considerable, tengo un diseño modular que puedo ir modificando a mi antojo.
Mi diseño no es nada del otro mundo, de hecho me he basado en un diseño de los chinos y le he aplicado mis mejoras (ellos de hecho ya se habrán basado en otro diseño), así que busqué unas cuantas fotos en Google, y empecé a diseñar a partir de ahí.
Previamente, como sí tenía claro los motores y ruedas que iba a llevar, los pedí a una página china, buscando el precio más económico que encontré. Lo encontré en Banggood a unos 10$. ¿Por qué no me imprimí las ruedas? Porque necesitamos que sean de goma o patinan. Ya probé y el robot no agarra al moverse y girar.
Lo siguiente que necesitabamos era una electrónica. En mi caso he usado un Arduino Uno R3 que tenía por casa, pero un clon es barato en ebay. Por 5€ es nuestro.
El Arduino necesita conectarse a un shield para controlar los motores. Un shield no es más que una placa que se conecta al arduino por encima y le proporciona otras funciones. También tenía uno por casa, pero por menos de 6€ lo teneis en ebay.
Ya lo tenemos casi todo y nos hemos gastado 20€, por el momento. En esta primera versión he reciclado una batería que tenía por casa, pero voy a rediseñar alguna cogida para ponerle un portapilas. ¿Por qué? Porque no me gusta que el niño juegue con una lipo. Para vuestras pruebas la lipo es ok y es esta, de Hobbyking. Unos 6€ desde el almacén europeo.
En esta primera versión he instalado en el paragolpes delantero un sensor sharp infrarrojo de proximidad. Este sensor es un poco caro, pero funciona muy bien y es muy fiable. Para la revisión que le estoy haciendo voy a meter sensores de un par de euros, al menos 3, para que «vea» por los lados. Lo tenemos en ebay desde UK a unos 11€.
El resto es irnos a la ferretería y comprar tornillos M3, vamos a usar de 10, 15 y 25 mm. También algunas tuercas y ya estaremos listos para empezar a fabricar el chasis. Yo le añadí un interruptor normal y corriente, de cualquier tienda de electrónica. Es muy comodo para apagarlo y encenderlo.
Todo el proyecto lo he subido para descarga libre desde Thingiverse. Las dos partes del chasis las vais a encontrar en STL y en DXF. STL es para imprimirlo con la 3D, DXF es para cortarlo o fresarlo sobre material de 3mm. En mi caso lo he impreso, si lo cortais en CNC me contáis que tal.
Si os fijais, el chasis tiene muchos menos agujeros que la versión que os podeis bajar. Para ir distribuyendo los distintos elementos parto de una base y luego la voy taladrando, una vez voy colocando cada elemento en su lugar mas idóneo realizo las modificaciones en el software de 3D, por eso entre las fotos que veis y la versión que vais a realizar puede haber algunas diferencias.
Una vez tenemos el chasis imprimimos las cogidas de los motores.
El chasis se llama chasis01.STL o chasis02.DXF, las cogidas de los motores se llaman soporte motor.STL y soporte motor2.STL, tenéis que imprimir 2 de cada uno.
Colocamos el arduino en el chasis y el shield por encima. Primero tendreis que coger con tornillos el Arduino al shasis y luego colocarle el shield. A los 4 motores tenéis que soldarle un par de cables a cada. Mirad la polaridad en las fotos o el robot andará loco. En los motores poned cable negro arriba y rojo abajo, en el shield los positivos por fuera y los negativos por dentro.
En paralelo imprimimos los separadores de 30mm, los pilares centrales y el paragolpes delantero y trasero y los atornillamos. Debemos colocar también el cable de alimentación en el conector lateral del shield.
El sensor sharp lo podeis colocar con un poco de cola caliente en el paragolpes delantero. Ahora debeis conectarlo al Arduino. Se trata de un sensor analógico, en el caso del código que yo he subido debeis soldarlo al pin A5 (cable amarillo), de un pin de encima tomais la masa y de otro superior tomais el positivo. Si mirais 4 fotos más arriba se aprecia el conexionado.
Antes de cerrarlo vamos a programarlo. Hay que descargar la última versión del IDE de Arduino, conectamos, configuramos placa y puerto, abrimos el fichero .ino y lo subimos a la placa.
Es posible que os de un error al subirlo, se porque teneis que instalar la librería que nos va a permitir usar el shield. La podeis descargar aquí.
El código que podeis usar de partida es el siguiente:
#include <AFMotor.h>
AF_DCMotor motor1(1, MOTOR12_64KHZ); // create motor #1, 64KHz pwm
AF_DCMotor motor2(2, MOTOR12_64KHZ); // create motor #2, 64KHz pwm
AF_DCMotor motor3(3, MOTOR12_64KHZ); // create motor #1, 64KHz pwm
AF_DCMotor motor4(4, MOTOR12_64KHZ); // create motor #2, 64KHz pwmint sensorPin = 5; // pin del sensor
double sensorValue = 0; // variable para almacenar los valores del sensor
int iTurnTime = 100; // milisegindos de cada giro
int c = 0;void setup() {
Serial.begin (115200);
Serial.println («WatsonBot v1»);motor1.setSpeed(120); // set the speed to 255/255
motor2.setSpeed(120); // set the speed to 255/255
motor3.setSpeed(120); // set the speed to 255/255
motor4.setSpeed(120); // set the speed to 255/255}
void loop() {
if (iReadSensor() > 550) // a mayor valor menos distancia de deteccion
vBack();
else if (iReadSensor() < 550 && iReadSensor() > 250)
vTurnLeft();
else
vMoveFwd();c = analogRead(sensorPin); // lee valor del sensor
Serial.println(c); // manda valor del sensor al serie
delay(100); // esperas y sigue}
int iReadSensor() {
sensorValue = analogRead(sensorPin);
if (sensorValue != 0)
{
return sensorValue;
}
}void vMoveFwd() {
motor1.run(FORWARD);
motor2.run(FORWARD);
motor3.run(FORWARD);
motor4.run(FORWARD);
}void vTurnLeft() {
motor1.run(BACKWARD);
motor2.run(FORWARD);
motor3.run(FORWARD);
motor4.run(BACKWARD);
delay(iTurnTime);
}void vStop() {
motor1.run(RELEASE);
motor2.run(RELEASE);
motor3.run(RELEASE);
motor4.run(RELEASE);
}void vBack() {
motor1.run(BACKWARD);
motor2.run(BACKWARD);
motor3.run(BACKWARD);
motor4.run(BACKWARD);
}
El código se entiende con facilidad. Lo mejor es que lo trasteeis y modifiqueis a vuestro gusto, le cambieis los valores de detección del sensor y las velocidades de los motores, y defináis nuevos comportamientos.
Una vez lo programeis y veáis que funciona bien lo podeis cerrar, dejando la batería por fuera. En el paragolpes trasero hay un hueco, os servira para conectar el USB del arduino, por si lo programais de nuevo.
En un futuro próximo está montarle un sensor sigue líneas y sensores de detección más económicos. Iré actualizando tanto este post como el repositorio en Thingiverse con las modificaciones.
Update 01/04/2015
El medio 3dprint.com ha publicado un artículo acerca de Watson (Ver artículo). Es una gran alegría que esté gustando el robot de esta manera.
He aprovechado y le he hecho el soporte de la batería lipo y una tapa para tapar el compartimento de acceso al USB y los cables. Los STL están el repositorio de thingiverse.
Algunos usuarios de impresoras tipo prusa, con camas de 20×20 o algo inferiores me han pedido que adaptara el diseño a sus máquinas. He subido los dos chasis partidos en 2 con una pieza de union con tornillos M3.