En este artículo vamos realizar un pequeño robot casero controlado por la placa Arduino UNO. El objetivo del auto será el de evitar obstáculos mediante un sensor por ultrasonidos si se activa “ON” y si se quiere controlar a través de comandos de flechas se tendrá que activar el botón “Bluetooth”.
Materiales:
- Una placa Arduino.
- Puente H (L293D).
- Dos motores DC .
- Dos ruedas para los Motores.
- Una Rueda loca.
- Un sensor ultrasonido.
- Modulo Bluetooth HC-06.
- Una batería de 7,2v.
- Una Protoboard .
- Unos cables Macho Macho.
Sensor Ultrasonido HC-SR04
El sensor HC–SR04 es un módulo que incorpora un par de transductores de ultrasonido que se utilizan de manera conjunta para determinar la distancia del sensor con un objeto colocado enfrente de este. Un transductor emite una “ráfaga” de ultrasonido y el otro capta el rebote de dicha onda.
Puente H L293D
El circuito integrado L293D incluye en su interior 4 drivers o medio puente H. La corriente máxima que el L293D puede manejar es de 600 mA con voltajes desde 4.5 volts a 36 volts.
Gracias a que este circuito integrado es capaz de producir corrientes bidireccionales, es útil en aplicaciones que requieran controlar la dirección de giro y velocidad de motores de DC.
Motores DC
El motor de corriente continua, denominado también motor de corriente directa, motor CC o motor DC (por las iniciales en inglés direct current), es una máquina que convierte energía eléctrica en mecánica, provocando un movimiento rotatorio, gracias a la acción de un campo magnético.
Montaje:
El montaje de los elementos puede ser en la misma protoboard de 800 puntos, pero lo pueden hacer en una madera “MDF“, algún soporte realizado en impresión 3D. Es de acuerdo a la estética que le quieran dar al auto a control.
Conexiones:
para controlar el auto deberán descargar la siguiente aplicación para el smartphone “Arduino Control Robot“:
En cuanto al código tiene la posibilidad de que el auto funcione como un esquiva obstáculo si se presioma el botón “On” , si se vincula a través del botón “Bluetooth” va a pasar a funcionar por medio de los comandos de flechas y el botón centrar sirve para frenar. El código tiene diferentes funciones para cuando se requiera desplazar hacia la derecha, izquierda, adelante, atrás y frenado.
//Definición de variables
int izqA = 5; // Pines que se conecta al arduino
int izqB = 6;
int derA = 9;
int derB = 10;
int vel = 255; // Velocidad de los motores (0-255)
int estado = 'c'; // inicia detenido
int pecho = 2; // define el pin 2 para el Ultrasonido
int ptrig = 3; // define el pin 3 para el Ultrasonido
int duracion, distancia; // para calcular distancia
//Seteo de la configuración
void setup() {
Serial.begin(9600); //inicia el puerto serial para comunicación Bluetooth
pinMode(derA, OUTPUT);
pinMode(derB, OUTPUT);
pinMode(izqA, OUTPUT);
pinMode(izqB, OUTPUT);
pinMode(pecho, INPUT); // define el pin 2 como entrada pecho
pinMode(ptrig,OUTPUT); // define el pin 3 como salida ptrig
pinMode(13,OUTPUT);
}
void loop() {
if(Serial.available()>0){ // lee el bluetooth si es mayor a 0
estado = Serial.read(); // lo almacena en estado
}
// Pregunta por diferentes opciones
if(estado=='a'){ // Para desplazar al Frente
Desplazar_frente ();
}
if(estado=='b'){ // Para desplazar izquierda
Desplazar_izquierda ();
}
if(estado=='c'){ // Para frenar el auto
Frenar_auto ();
}
if(estado=='d'){ // Para desplazar a la derecha
Desplazar_derecha ();
}
if(estado=='e'){ // Para desplazar hacia atrás
Desplazar_atras ();
}
// Funcionamiento de modo esquiva obstáculos
if (estado =='f'){ //Si se hace clic en ON se mueve sensando distancia
digitalWrite(ptrig, HIGH); // genera el pulso de trigger
delay(0.01);
digitalWrite(ptrig, LOW);
duracion = pulseIn(pecho, HIGH); // Lee el tiempo del Echo
distancia = (duracion/2) / 29; // calcula la distancia en centimetros
delay(10);
if (distancia <= 15 && distancia >=2){
digitalWrite(13,HIGH); // Enciende LED
analogWrite(derB, 0); // Parar los motores 200 miliseg
analogWrite(izqB, 0);
analogWrite(derA, 0);
analogWrite(izqA, 0);
delay (200);
analogWrite(derB, vel); // marcha atras 500 miliseg
analogWrite(izqB, vel);
delay(500);
analogWrite(derB, 0); // Girar durante 600 milisegundos
analogWrite(izqB, 0);
analogWrite(derA, 0);
analogWrite(izqA, vel);
delay(600);
digitalWrite(13,LOW);
}
else{ // Si no hay obstaculos se desplaza al frente
analogWrite(derB, 0);
analogWrite(izqB, 0);
analogWrite(derA, vel);
analogWrite(izqA, vel);
}
}
}
void Desplazar_frente ()
{
analogWrite(derB, 0);
analogWrite(izqB, 0);
analogWrite(derA, vel);
analogWrite(izqA, vel);
}
void Desplazar_izquierda ()
{
analogWrite(derB, 0);
analogWrite(izqB, 0);
analogWrite(derA, 0);
analogWrite(izqA, vel);
}
void Frenar_auto ()
{
analogWrite(derB, 0);
analogWrite(izqB, 0);
analogWrite(derA, 0);
analogWrite(izqA, 0);
}
void Desplazar_derecha ()
{
analogWrite(derB, 0);
analogWrite(izqB, 0);
analogWrite(izqA, 0);
analogWrite(derA, vel);
}
void Desplazar_atras ()
{
analogWrite(derA, 0);
analogWrite(izqA, 0);
analogWrite(derB, vel);
analogWrite(izqB, vel);
}
Bueno espero que les sea útil este tutorial . Saludos Maqui
- Tutorial
- Arduino