Montaje Coche 4 ruedas Arduino

Compartir :

Montaje Coche 4 ruedas Arduino

Montaje Coche 4 ruedas Arduino

Como la reparacion electr贸nica y la inform谩tica en este trabajo lo tienes que llevar en la sangre y si te gusta es una pasi贸n, por navidades le he regalado a mis hijos un kit de Arduino para construir un coche con 4 ruedas.

La parte buena de la compra es que de esta manera se ve un prop贸sito directo de construir y programar m煤ltiples elementos en un solo aparato.

Este coche tambi茅n se puede comprar en AMAZON en este enlace, el precio es mas caro, pero la calidad y cantidad de informaci贸n y de componentes es mayor.

 

Y a los ni帽os le encanta. Bueno he comprado tambi茅n otro kit, pero eso lo veremos en otro post.

Todo el kit lo ped铆 en Aliexpress por que el precio es bastante econ贸mico y como es para mi mismo no importa que surja alg煤n problema.

Una vez llegado sacamos todas las piezas y tenemos esto.

Montaje Coche 4 ruedas Arduino

Montaje Coche 4 ruedas Arduino

 

Una de las bases de pl谩stico una vez quitada la proteccion para que no se raye y el arduino Uno, el “cerebro de la bestia” 馃檪

La calidad de los pl谩sticos es bastante buena, y tiene agujeros suficientes para m煤ltiples montajes.

Como las instrucciones son un poco b谩sicas, y lo que sacamos de Internet no lo explica muy bien o no lo entendemos del todo, y teniendo en cuenta que lo hace mi hijo, me gusta que pruebe y que se equivoque, de esa manera va aprendiendo.

Montar Coche 4 ruedas Arduino

Montar Coche 4 ruedas Arduino

Por lo que montamos primero las ruedas en la base negra, las ruedas tienen que tener el conector de los cables hacia dentro de la placa y las conexiones juntas.

Para聽Montaje Coche 4 ruedas Arduino tenemos que ir paso a paso.

Tambi茅n lleva unas piezas met谩licas que son las que cojen al motor y a la base de pl谩stico, estas piezas solo llevan rosca por un lado.

 

Colocamos la placa controladora de motores, y los cables, pero nos damos cuenta que si ponemos los sensores de ca铆da, rozan en el suelo, por lo que algo hemos hecho mal.

Mirandolo mejor todo vemos que los motores van por bajo de la placa de pl谩stico y la controladora por arriba, otra vez a desmontar y montar las ruedas.

Montar coche Aliexpress Arduino

Montar coche Aliexpress Arduino

Cambiamos todo lo montado hasta ahora y conectamos los cables, las ruedas izquierdas van juntas y las derechas tambien, por lo que solo manejamos izquiera y derecha de forma conjunta a traves de la controladora.

A si queda con los detectores de ca铆da, aunque luego los separamos un poco mas, ya que lleva varios agujeros. Por ahora tiene buena pinta.

Como en el kit de coche con arduino viene una placa de conexiones r谩pida para montar encima del arruino, luego conectaremos directamente de los detectores de ca铆da, del servo, y del radar directamente a esta placa, as铆 como la controladora de motores.

Por medio de los separadores largos, colocamos la placa transparente encima de la negra y el arduino.

El servo y el radar cuesta un poco mas, ya que el kit que venden es estandart y no acopla todo correctamente, tengo que cortar las palas de plastico para adaptarlas al soporte del servo, pero queda bien, lo que no queda muy profesional es el soporte al radar de proximidad y en distintas paginas lo ponen con una goma.

Servo Arduino para coche Aliexpress

Servo Arduino para coche Aliexpress

Montadolo luego funciona perfectamente pero…

De forma frontal se ve asi.

Una vez que tenemos todo montado, lo conectamos y nos hacemos un listado de las conexiones al Arduino, por lo que tenemos una lista para saber que entradas y salidas usamos.

Las conexiones no son complicadas, ya que del adaptador de las pilas va un cable al controlador de motores, y una clavija para el Arduino.

El servo, el radar, los detectores de ca铆da, el sensor de infrarrojos y la controladora de las ruedas, se conectan a todas las salidas digitales del Arduino, apuntando donde va cada una.

Y empezamos a programar poco a poco.

PROGRAMACI脫N COCHE 4 RUEDAS ARDUINO

En cuanto a programaci贸n esta la cosa mas complicada, el software que distribuye el vendedor, esta en chino, y no deja claro nada, muchos archivos pero dif铆ciles de interpretar, pero nos sirven de ejemplo.

El prop贸sito principal de comprarle este kit a mis hijos era aprender a programar. Programar en Arruino es sencillo y muy visual, y es un lenguaje b谩sico que puede servir para abrir la mente programadora.

Leer los c贸digos del mando infrarrojo

Para leer los datos de los infrarrojos del mando a distancia para poder luego manejar el coche, copio un programa para tomar lecturas.

Montar y programar KEYES

Montar circuito infrarrojo

Es un c贸digo sacado de Internet, hay que instalar la librer铆a IRremote y ver el resultado por el puerto serie a la velocidad 9600 del programa de Arduino.

#include <IRremote.h> 
int RECV_PIN = 11; //declaramos el pin que recibira la se帽al 
IRrecv irrecv(RECV_PIN); 
decode_results results; 

void setup() { 
Serial.begin(9600); //inicializamos el puerto serial a 9600 
irrecv.enableIRIn(); // Comienza a recibir los datos 
} 

void loop() { 
if (irrecv.decode(&results)) { 
Serial.println(results.value, HEX); // imprime el valor en codigo hexadecimal 
irrecv.resume(); // Se preparar para recibir el siguiente valor 
delay(10); 
} 
}

con esto tengo los siguientes c贸digos que me interesan

Tecla 2=arriba=FF18E7
Tecla 6=derecha=FF5AA5
Tecla 8=Abajo=FF4AB5
Tecla 4=Izquierda=FF10EF
Tecla 5=Parar=FF38C7

Manejando control de motores.

Este circuito el L298N no lo hab铆a visto yo anteriormente por lo que no pude ayudar mucho a mi hijo y tuvimos que estudiar juntos el funcionamiento, aunque no fue tan facil ya que los circuitos que hay por Internet no son iguales al que enviaron en el kit.

Lo b谩sico del circuito L298N es, que tiene :

  • dos salidas para + y – del Motor A y + y – del Motor B,
  • una entrada de Alimentaci贸n de Gnd Y >7V que aqu铆 conectamos la salida de las pilas.
  • Y luego el control de cada lado de los motores, ENA ,IN1, IN2
  • Y el lado Izquierdo ENB, IN3, IN4

    Programacion circuito L298N

    circuito L298N

La disposici贸n de los conectores depende del circuito, hay muchas variantes.

La programaci贸n de este circuito no nos funcionaba bien, ya que en teor铆a si pones en HIGH el IN1 y LOW el IN2 los motores derecho se ponen en marcha hacia adelante, sin decirle nada al ENA, pero en cambio si pones en HIGH el IN3 y LOW el IN4 sin poner el ENB en HIGH no funciona el lado izquierdo.

Despu茅s de hacer varias pruebas tenemos el c贸digo que hace que el coche vaya unos segundos hacia adelante y otros segundos hacia atr谩s.

//Circuito de mover coche con arduino adelante y atras,
// Realizado por Mario Grau Y Guillermo Grau, de Sator Electronica.
// www.sator.es

int IN2 = 2; //Pin 2 donde esta conectado el motor
int IN3 = 3; //Pin 3 donde esta conectado el motor
int IN4 = 4; //Pin 4 donde esta conectado el motor
int IN5 = 5; //Pin 5 donde esta conectado el motor
int ENB = 6; //Pin 6 donde esta conectado el ENABLE B
int ENA = 1; //Pin 1 donde esta conectado el ENABLE A

void setup()
{
//ASIGNO TODOS LAS CONEXIONES COMO SALIDAS OUTPUT
pinMode (IN2, OUTPUT); // Input2 conectada al pin 2
pinMode (IN3, OUTPUT); // Input3 conectada al pin 3
pinMode (IN4, OUTPUT); // Input4 conectada al pin 4
pinMode (IN5, OUTPUT); // Input5 conectada al pin 5
pinMode (ENB, OUTPUT); // ENB conectada al pin 6
pinMode (ENA, OUTPUT); // ENB conectada al pin 6
}
void loop()
{
// MOTOR GIRA HACIA ADELANTE
digitalWrite (IN2, HIGH);
digitalWrite (IN3, LOW); //lo ponemos en LOW por si acaso
digitalWrite (IN4, HIGH);
digitalWrite (IN5, LOW); //lo ponemos en LOW por si acaso
digitalWrite (ENB, HIGH);
digitalWrite (ENA, HIGH);

// MOTOR SE PARA 1 SEGUNDO
digitalWrite (IN2, LOW);
digitalWrite (IN4, LOW);
delay(1000);
// MOTOR GIRA HACIA ATRAS
digitalWrite (IN3, HIGH); // no hace falta poner IN2 y IN4 en LOW por que estamos seguros que ya estaban
digitalWrite (IN5, HIGH);
delay(2000);
// Motor no gira
digitalWrite (IN3, LOW);
digitalWrite (IN5, LOW);
delay(1000);
}

Bueno ya tenemos el coche funcionando, eso ilumina la cara de mi hijo, ya van dando resultado el c贸digo.

MOVER COCHE CON ARDUINO Y MANDO IR.

Ahora lo siguiente es manejar el coche con el mando, para hacerlo sencillo cada instrucci贸n mover谩 el coche 1 segundo hacia delante y hacia atr谩s, pero 300 milisegundos en los giros.

#include <IRremote.h> //incluimos libreria infrarrojos

int MOTORDERDELANTE = 2;
int MOTORDERATRAS = 3;
int MOTORIZQDELANTE = 4;
int MOTORIZQATRAS = 5;
int MOTORENB = 6;
int MOTORENA = 1;
const int PININFRARROJO = 10;
IRrecv irrecv(PININFRARROJO);
decode_results results;
const int DELANTE = 0xFF18E7; //Defino las constantes de la lectura de infrarrojo
const int DETRAS = 0xFF4AB5;
const int IZQUIERDA = 0xFF10EF;
const int DERECHA = 0xFF5AA5;
const int REPETIR = 0xFFFFFFFF;

void setup() {
pinMode (MOTORDERDELANTE, OUTPUT); // Input2 conectada al pin 2
pinMode (MOTORDERATRAS, OUTPUT); // Input3 conectada al pin 3
pinMode (MOTORIZQDELANTE, OUTPUT); // Input4 conectada al pin 4
pinMode (MOTORIZQATRAS, OUTPUT); // Input5 conectada al pin 5
pinMode (MOTORENB, OUTPUT); // ENB conectada al pin 6
pinMode (MOTORENA, OUTPUT); // ENB conectada al pin 6

}

void loop() {

if (irrecv.decode(&results)) //activo la lectura del infrarrojo
{
switch (results.value)
{
case DELANTE:
digitalWrite (MOTORDERDELANTE, HIGH);
digitalWrite (MOTORIZQDELANTE, HIGH);
digitalWrite (MOTORENB, HIGH);
digitalWrite (MOTORDERATRAS, LOW);
digitalWrite (MOTORENA, HIGH);
digitalWrite (MOTORIZQATRAS, LOW);
delay(1000);
break;
case DETRAS:
digitalWrite (MOTORDERDELANTE, LOW);
digitalWrite (MOTORIZQDELANTE, LOW);
digitalWrite (MOTORENB, HIGH);
digitalWrite (MOTORDERATRAS, HIGH);
digitalWrite (MOTORENA, HIGH);
digitalWrite (MOTORIZQATRAS, HIGH);
delay(1000);
break;
case DERECHA:
digitalWrite (MOTORDERDELANTE, LOW);
digitalWrite (MOTORIZQDELANTE, HIGH);
digitalWrite (MOTORENB, HIGH);
digitalWrite (MOTORDERATRAS, HIGH);
digitalWrite (MOTORENA, HIGH);
digitalWrite (MOTORIZQATRAS, LOW);
delay(300);
break;
case IZQUIERDA:
digitalWrite (MOTORDERDELANTE, HIGH);
digitalWrite (MOTORIZQDELANTE, LOW);
digitalWrite (MOTORENB, HIGH);
digitalWrite (MOTORDERATRAS, LOW);
digitalWrite (MOTORENA, HIGH);
digitalWrite (MOTORIZQATRAS, HIGH);
delay(300);
break;
}
irrecv.resume();
}

}

El principal problema que se nos presenta para manejar el coche con un mando infrarrojo es que cuando mantienes pulsada una tecla, no se repite el mismo c贸digo, si no que emite FFFFFFFF, como c贸digo repetido, independientemente que tecla pulses.

Como no nos gusta mucho este funcionamiento, hacemos otro c贸digo en el que habilitamos la tecla parar, y el coche se mueve hacia adelante y atr谩s hasta que pulsemos parar.

Para eso leemos otro codigo que va a ser la tecla 5, y quitamos los tiempos del CASE DELANTE Y DETR脕S y lo hacemos con IF.

IMPLEMENTANDO EL MOVIMIENTO DEL SERVO Y SENSOR DE PROXIMIDAD.

Vamos poco a poco implementado sensores,el Montaje Coche 4 ruedas Arduino y como el control del servo y el ultrasonidos hay muchos ejemplos en Internet, leemos 2 teclas mas para poder mover el servo y que haga como una cabeza moviendo el sensor de ultrasonidos.

Sensor ultrasonico Arduino Sator Electronica.

Sensor ultrasonido Arduino Sator Electronica.

El c贸digo lo modificamos para que si pulsamos hacia adelante la tecla 2 el coche se mueva y si ve un obst谩culo a menos de 20 cm se para.

 

 

 

Tenemos que poner la librer铆a servo.h mas lecturas de teclas del mando de infrarrojos para que se mueva el servo y creamos el objeto servo para que se incremente el valor de la posici贸n en mas 20 grados o menos 20 grados.

Tambi茅n leemos la distancia del sensor de proximidad copiando y adaptando un c贸digo de Internet.

#include <Servo.h>
#include <IRremote.h>

const int EchoPin = 12;
const int TriggerPin = 11;
int PININFRARROJOS = 10;
int PINSERVO = 0;
int MOTORDERDELANTE = 2;
int MOTORDERATRAS = 3;
int MOTORIZQDELANTE = 4;
int MOTORIZQATRAS = 5;
int MOTORENB = 6;
int MOTORENA = 1;
int POSICIONSERVO = 90;
//******
long ADELANTE = 0xFF18E7;
long ATRAS = 0xFF4AB5;
long PARAR = 0xFF38C7;
long IZQUIERDA = 0xFF10EF;
long DERECHA = 0xFF5AA5;
long SERVOIZQUIERDA = 0xFF30CF;
long SERVODERECHA = 0xFF7A85;
Servo miservo; // crea el objeto servo
IRrecv irrecv(PININFRARROJOS);
decode_results results;

void setup()
{
miservo.attach(PINSERVO); // vincula el servo al pin digital 9
pinMode(PININFRARROJOS, INPUT);
pinMode (MOTORDERDELANTE, OUTPUT); // Input2 conectada al pin 2
pinMode (MOTORDERATRAS, OUTPUT); // Input3 conectada al pin 3
pinMode (MOTORIZQDELANTE, OUTPUT); // Input4 conectada al pin 4
pinMode (MOTORIZQATRAS, OUTPUT); // Input5 conectada al pin 5
pinMode (MOTORENB, OUTPUT); // ENB conectada al pin 6
pinMode (MOTORENA, OUTPUT); // ENB conectada al pin 6
pinMode(TriggerPin, OUTPUT);
pinMode(EchoPin, INPUT);
irrecv.enableIRIn(); // COnecta el receptor de Infrarrojos
}

void loop()
{
miservo.write(POSICIONSERVO);
int cm = ping(TriggerPin, EchoPin);

if (cm < 20 )
{
digitalWrite (MOTORDERDELANTE, HIGH);
digitalWrite (MOTORIZQDELANTE, HIGH);
digitalWrite (MOTORENB, HIGH);
digitalWrite (MOTORDERATRAS, HIGH);
digitalWrite (MOTORENA, HIGH);
digitalWrite (MOTORIZQATRAS, HIGH);
}
if (irrecv.decode(&results))
{
if (results.value == SERVOIZQUIERDA )
{ POSICIONSERVO = POSICIONSERVO + 20;
}
if (results.value == SERVODERECHA )
{ POSICIONSERVO = POSICIONSERVO – 20;
}
if (results.value == ADELANTE )
{ digitalWrite (MOTORDERDELANTE, HIGH);
digitalWrite (MOTORIZQDELANTE, HIGH);
digitalWrite (MOTORENB, HIGH);
digitalWrite (MOTORDERATRAS, LOW);
digitalWrite (MOTORENA, HIGH);
digitalWrite (MOTORIZQATRAS, LOW);

}

if (results.value == ATRAS )
{ digitalWrite (MOTORDERDELANTE, LOW);
digitalWrite (MOTORIZQDELANTE, LOW);
digitalWrite (MOTORENB, HIGH);
digitalWrite (MOTORDERATRAS, HIGH);
digitalWrite (MOTORENA, HIGH);
digitalWrite (MOTORIZQATRAS, HIGH);
}
if (results.value == IZQUIERDA )
{ digitalWrite (MOTORDERDELANTE, HIGH);
digitalWrite (MOTORIZQDELANTE, LOW);
digitalWrite (MOTORENB, HIGH);
digitalWrite (MOTORDERATRAS, LOW);
digitalWrite (MOTORENA, HIGH);
digitalWrite (MOTORIZQATRAS, HIGH);
delay (300);
digitalWrite (MOTORDERDELANTE, HIGH);
digitalWrite (MOTORIZQDELANTE, HIGH);
digitalWrite (MOTORENB, HIGH);
digitalWrite (MOTORDERATRAS, HIGH);
digitalWrite (MOTORENA, HIGH);
digitalWrite (MOTORIZQATRAS, HIGH);
}
if (results.value == DERECHA )
{ digitalWrite (MOTORDERDELANTE, LOW);
digitalWrite (MOTORIZQDELANTE, HIGH);
digitalWrite (MOTORENB, HIGH);
digitalWrite (MOTORDERATRAS, HIGH);
digitalWrite (MOTORENA, HIGH);
digitalWrite (MOTORIZQATRAS, LOW);
delay (300);
digitalWrite (MOTORDERDELANTE, HIGH);
digitalWrite (MOTORIZQDELANTE, HIGH);
digitalWrite (MOTORENB, HIGH);
digitalWrite (MOTORDERATRAS, HIGH);
digitalWrite (MOTORENA, HIGH);
digitalWrite (MOTORIZQATRAS, HIGH);
}
if (results.value == PARAR )
{
digitalWrite (MOTORDERDELANTE, HIGH);
digitalWrite (MOTORIZQDELANTE, HIGH);
digitalWrite (MOTORENB, HIGH);
digitalWrite (MOTORDERATRAS, HIGH);
digitalWrite (MOTORENA, HIGH);
digitalWrite (MOTORIZQATRAS, HIGH);
}
irrecv.resume(); // Recibe el proximo valor
}
}
int ping(int TriggerPin, int EchoPin) {
long duration, distanceCm;

digitalWrite(TriggerPin, LOW); //para generar un pulso limpio ponemos a LOW 4us
delayMicroseconds(4);
digitalWrite(TriggerPin, HIGH); //generamos Trigger (disparo) de 10us
delayMicroseconds(10);
digitalWrite(TriggerPin, LOW);

duration = pulseIn(EchoPin, HIGH); //medimos el tiempo entre pulsos, en microsegundos

distanceCm = duration * 10 / 292 / 2; //convertimos a distancia, en cm
return distanceCm;

Por hoy no nos da mas tiempo, a programar, a sido una tarde impresionante, con cada logro y cada fallo aprendiendo con mi hijo.

Para Montaje Coche 4 ruedas Arduino tenemos que seguir poniendo los detectores de ca铆da, haciendo que el mando funcione cuando sigues pulsando una tecla que recuerde la pulsada anteriormente.

 

SATOR

Reparar es un hobby, no lo estropees. SATOR Estamos en C/.dr Fleming 46, San Vicente del Raspeig Alicante Consultas a sator@sator.es

Tambi茅n te podr铆a gustar...

Deja un comentario

Tu direcci贸n de correo electr贸nico no ser谩 publicada. Los campos obligatorios est谩n marcados con *

Este sitio usa Akismet para reducir el spam. Aprende c贸mo se procesan los datos de tus comentarios.