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.

Abrir chat
1
¿Necesitas Ayuda?
Hola, 🙋‍♀️
¿Como podemos ayudarte? 👨🏻‍🔧
Powered by