jueves, 17 de enero de 2019

Robot oruga con Arduino


Sobre un chasis de cadenas con dos motores, hemos colocado un Arduino, una batería de 12 voltios y un driver de motores, el doble puente H (L298N). El precio de este driver en Aliexpress es de 1,45 €. Los pines que utiliza el driver de motores son el 2, 3, 4 y 5. También dispone de un receptor de infrarrojos conectado en el pin 6.


El chasis oruga está comprado en Aliexpress por 66 €. Tiene una longitud de 235 mm, una anchura de 180 mm y una altura de 70 mm. Su peso in los otros elementos es de 845 gramos. Dispone de de dos motorreductores de 12 voltios, pero pueden funcionar con cinco voltios perfectamente.

La pieza que alberga la batería y sobre la que se sitúan la placa Arduino UNO, el driver de motores y el interruptor está construida con la impresora 3D y su archivo se puede encontrar en Thingiverse.









Programa de Arduino

#include <IRremote.h>

IRrecv receptorinfra(6);     //Se crea un receptor de infrarrojos de nombre "receptorinfra", conectado al pin 6
decode_results valor;        //En la variable "valor" se guardan los valores enviados por el mando a distancia
int tecla;   //En esta variable se guardan los valores asignados a cada tecla del mando a distancia


void setup()
{
Serial.begin(9600);
receptorinfra.enableIRIn(); // Se reinicia el receptor de infrarojos
pinMode (3, OUTPUT);
}


void loop() {

if (receptorinfra.decode(&valor)) {              //Si se recibe algun dato del mando a distancia
tecla=valor.value;
Serial.println(tecla);

if (tecla==-1786){                                                    // Código de la tecla adelante
digitalWrite(2, LOW);
digitalWrite(3, HIGH);
digitalWrite(4, LOW);
digitalWrite(5, HIGH);
}

if (tecla==31620){                                              // Código de la tecla atras
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
digitalWrite(4, HIGH);
digitalWrite(5, LOW);
}

if (tecla==11220){                                                    // Código de la tecla izquierda
digitalWrite(2, LOW);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, LOW);
}

if (tecla==-9946){                                              // Código de la tecla derecha
digitalWrite(2, HIGH);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, HIGH);
}

if (tecla==31110){                                              // Código de la tecla encender/apagar, para parar el robot
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
}

receptorinfra.resume();                                       // Recibe el siguiente valor
}
delay(100);                                                              //Espera 100 milisegundos
}

No hay comentarios: