Materiales:
- Kit motores reductores + llantas (esos chinos amarillos que venden en las tiendas de electrónica).
- Modulo driver de motor L298N.
- Arduino (Uno, Nano, Mega, etc). (recomiendo el nano por el tamaño reducido)
- Modulo bluetooth hc05 0 hc06 (solo recibira datos desde el android para manejar el carrito).
- Cables machos para protoboard ( para unir el circuito en el protoboard).
- 1 switch, 1 led, 1 resistencia de 1K.
- Un mini Protoboar.
- Ball Caster o rueda loca
- Tornillos largos (para unir el ball caster o rueda loca al chasis)
- Baterias de litio, lipo o kit de pilas con voltajes de 7.4v a 9 v ( mayor a 5 V si no el arduino no arrancara).
- Portapilas AA (si utilizas pilas, compra una que venga de 6 , o sino una de 4 y la otra de 2)
- Celular o tablet android con conectividad bluetooth.
- El chasis puede ser de acrilico, triplay (darle forma ).
La Forma del Chasis:
Hay que hacer un cuadrado y dentro de el hacer una circunferencia en la plataforma (acrilico, triplay, etc) .
Luego cortar dos esquinas del cudrado, esto para colocar los motores y las llantas, hacerlo con mucho cuidado de no quebrar.
Los agujeros serviran para colocar tornillos que sujeten alos motores y ball caster o rueda loca.
Las baterias para ahorrar espacio se pueden colocar debajo.
Las baterias para ahorrar espacio se pueden colocar debajo.
El circuito electrónico:
Programa en Arduino:
En escencia lo que hace el el programa del arduino es recibir un caracter y adicionalmente una bandera para indicar si es un dato de dirección("d") o de la velocidad("#") y los concatena. De esa manera se podra manejar mejor la comunicación.
Adicionalmente el control del robot tebnra una función para aumentar o disminuir la velocidad.
////////
#include <SoftwareSerial.h> #define motor_1_a 7 #define motor_1_r 8 #define motor_2_a 5 #define motor_2_r 6 #define pin_pwm1 9 #define pin_pwm2 10 #define led1 13 #define led2 11 int numero=0; int direccion=0; SoftwareSerial bluetooth(2, 3); // RX, TX String readString=""; void motores(float pwm1, float pwm2) { int v1, v2; if(pwm1 >= 0) //para el motor 1 { digitalWrite(motor_1_a, HIGH); digitalWrite(motor_1_r, LOW); v1 = pwm1; } else if(pwm1 < 0) { digitalWrite(motor_1_a, LOW); digitalWrite(motor_1_r, HIGH); v1 = pwm1 * (-1); } //para el motor 2 if(pwm2 >= 0) { digitalWrite(motor_2_a, HIGH); digitalWrite(motor_2_r, LOW); v2 = pwm2; } else if(pwm2<0) { digitalWrite(motor_2_a, LOW); digitalWrite(motor_2_r, HIGH); v2 = pwm2 * (-1); } analogWrite(pin_pwm1, v1); analogWrite(pin_pwm2, v2); } void setup() { delay(500); pinMode(led1, OUTPUT); pinMode(led2, OUTPUT); pinMode(motor_1_a, OUTPUT); pinMode(motor_1_r, OUTPUT); pinMode(motor_2_a, OUTPUT); pinMode(motor_2_r, OUTPUT); pinMode(pin_pwm1, OUTPUT); pinMode(pin_pwm2, OUTPUT); digitalWrite(led1,HIGH); delay(500); digitalWrite(led1,LOW); delay(500); digitalWrite(led1,HIGH); delay(500); digitalWrite(led1,LOW); delay(500); digitalWrite(led1,HIGH); delay(500); Serial.begin(9600); bluetooth.begin(9600); } void loop() { readString=""; while( bluetooth.available()) { delay(2); char c=bluetooth.read(); if(c=='#')//bandera velocidad { numero=readString.toInt(); //convierte cadena a entero numero numero=numero*2.54; Serial.println(numero); } if(c=='d')//bandera direccion { direccion=readString.toInt(); Serial.print("dato direccion "); Serial.println(direccion); } readString+=c; //concatena datos que llegan } if(direccion==0) {digitalWrite(led2,LOW); motores(0,0);} if(direccion==1) {digitalWrite(led2,HIGH);motores(numero,numero-5);} if(direccion==2) {digitalWrite(led2,HIGH);motores(-numero,-numero);} if(direccion==3) {digitalWrite(led2,HIGH);motores(0,numero-3);} if(direccion==4) {digitalWrite(led2,HIGH);motores(numero,0);} }
Aplicacion Android ".apk":
Lo que hace la aplicación es enviar caracteres numéricos seguido de una bandera para identificar que tipo de dato es. Si es de dirección (avanzar=1, retroceder=2, izquierda=3, derecha=4) adicionando la bandera "d" que indicara que es justamente de direccion. Si no se preciona nada, entonces enviara "0" (detenido). De esta forma el robot funcionara si solamente es presionado algún boton de direccion.
Ln el slider de velocidad la logica es similar, pero en este caso enviara datos numerico que van desde 0 hasta 255, que justamente es el pwm con el cual variaremos la velocidad en el arduino, seguido de la bandera "#" que justamente identifica que es un dato de direccion.
Todo esos datos son enviados mediante la rutina call bluetoothClient como se nota en la imagen.
Puedes descargarlo desde aqui : apk carrito bluetooth
clave de cifrado: !H2nwlNrYYt_EaM-xcvGrmQKe1VcPZl8lv_xcqZQKjkI