Saltar al contenido
Roobotica

Coche Robot 2WD Arduino

19 de enero de 2023
Coche Robot 2WD Arduino
''''''''
5/5 - (12 votos)

En este tutorial vamos a construir un coche robot de 2 ejes o 2wd controlado con arduino, comprado en aliexpress y os cuento mi opinión sincera.

Mis hijos ya tienen 7 años y me apetecía compartir con ellos un bonito momento construyendo algún proyecto con arduino e iniciarlos en el mundillo de la robótica.

Si son peques y les gusta el mundillo te recomiendo que visiten el Museo Robótica en Madrid donde se engancharán para siempre.

Me pareció buena idea comprar un coche robot en aliexpress ya que son baratos y puedes conseguir todas las piezas que necesites.

Elegí el más básico que puedes encontrar en aliexpress y el coche robot 2wd es barato y fácil de montar.

Índice

    Los mejores Coche Robot de arduino en Amazon

    Fasizi Encoder elegante de la velocidad del equipo del chasis de la caja de la batería del coche del robot del motor para Arduino
    Fasizi Encoder elegante de la velocidad del equipo del chasis de la caja de la batería del coche del robot del motor para Arduino
    13,99 €
    DollaTek Smart Motor Robot Car Battery Box Kit de Chasis Speed ​​Encoder para Arduino -Cuatro Llantas
    DollaTek Smart Motor Robot Car Battery Box Kit de Chasis Speed ​​Encoder para Arduino -Cuatro Llantas
    19,99 €
    AptoFun 2WD Smart Robot Car Set compatible con Arduino IDE Electrónica Kit de construcción con 2 motores de engranaje, microcontrolador, placa ATmega328P, placa de expansión V5, etc.
    AptoFun 2WD Smart Robot Car Set compatible con Arduino IDE Electrónica Kit de construcción con 2 motores de engranaje, microcontrolador, placa ATmega328P, placa de expansión V5, etc.
    43,99 €
    Playtronix Carro Inteligente con sensores para armar con Arduino
    Playtronix Carro Inteligente con sensores para armar con Arduino
    33,95 €
    AptoFun 2WD Motor Smart Car Chassis for Arduino- with 2 Gear Motor and Battery Box
    AptoFun 2WD Motor Smart Car Chassis for Arduino- with 2 Gear Motor and Battery Box
    14,90 €
    Freenove 4WD Car Kit (Compatible with Arduino IDE), Line Tracking, Obstacle Avoidance, Ultrasonic Sensor, IR Wireless Remote Control Servo
    Freenove 4WD Car Kit (Compatible with Arduino IDE), Line Tracking, Obstacle Avoidance, Ultrasonic Sensor, IR Wireless Remote Control Servo
    51,95 €
    OSOYOO Robot Car Starter Kit for Arduino UNO | STEM Remote Control App Educational Motorized Robotics for Building, Programming & Learning How to Code | IOT Mechanical DIY Coding for Kids Teens Adults
    OSOYOO Robot Car Starter Kit for Arduino UNO | STEM Remote Control App Educational Motorized Robotics for Building, Programming & Learning How to Code | IOT Mechanical DIY Coding for Kids Teens Adults
    69,99 €
    OSOYOO V2.1 Smart Robot Car Kit for Arduino – Controller Board Line Tracking, Ultrasonic Sensor, Bluetooth, Motor Shield, IR Remote Control, Mobile App – Battery and Charger Included
    OSOYOO V2.1 Smart Robot Car Kit for Arduino – Controller Board Line Tracking, Ultrasonic Sensor, Bluetooth, Motor Shield, IR Remote Control, Mobile App – Battery and Charger Included
    74,45 €
    KEYESTUDIO Kit de Tanque de Robot Inteligente para Arduino IDE, Kit de construcción electrónica con UNO R3, Sensor ultrasónico, etc. Robot Educativo de programación Stem DIY
    KEYESTUDIO Kit de Tanque de Robot Inteligente para Arduino IDE, Kit de construcción electrónica con UNO R3, Sensor ultrasónico, etc. Robot Educativo de programación Stem DIY
    79,99 €
    Freenove 4WD Car Kit for ESP32-WROVER (Included) (Compatible with Arduino IDE), Camera, Dot Matrix Expressions, Obstacle Avoidance, Line Tracking, Light Tracing, Colorful Light, Remote, App
    Freenove 4WD Car Kit for ESP32-WROVER (Included) (Compatible with Arduino IDE), Camera, Dot Matrix Expressions, Obstacle Avoidance, Line Tracking, Light Tracing, Colorful Light, Remote, App
    69,95 €
    OSOYOO Robot Car Starter Kit for Arduino | Stem Remote Controlled Educational Motorized Robotics for Building Programming Learning How to Code | IOT Mechanical DIY Coding for Kids Teens Adults
    OSOYOO Robot Car Starter Kit for Arduino | Stem Remote Controlled Educational Motorized Robotics for Building Programming Learning How to Code | IOT Mechanical DIY Coding for Kids Teens Adults
    Precio recomendado: 121,54 €
    116,18 €
    Ahorras 5,36 € (4%)

    El coche arduino 2WD es barato y fácil de montar.

    Tardó en llegar a casa 2 semanas, algo de esperar si compras en un portal de ventas chino, así que nada que objetar.

    Bien embalado y cada cosa en sus bolsita, todo bien ordenado.

    Lo sacamos todo y lo presentamos encima de la mesa donde vamos a montar el coche arduino.

    Robot 2wd piezas aliexpress
    Robot 2wd piezas aliexpress

    Coche arduino- Instrucciones

    Una vez identificadas todas las piezas y agruparlas para que luego sea más fácil localizarlo todo comenzamos por la base de metacrilato.

    La base donde irá el coche 2wd es de metacrilato pero necesita que quitemos el papel que va pegado, así que comenzamos por retirar el papel.

    Base de metacrilato coche robot
    Base de metacrilato coche robot

    Como podéis ver en la foto tenemos el primer problema, la base viene partida, por lo que podría partirse en dos si apretamos los tornillos demasiado o no la tratamos con sumo cuidado.

    Sin embargo sigo adelante con el montaje. Una vez retirado todo el papel hay que montar la rueda trasera, con sus separadores para que la rueda quede a la misma altura que las ruedas delanteras que son de más tamaño.

    Coche Robot rueda trasera
    Coche Robot rueda trasera

    Segundo problema, aliexpress sólo me ha incluido 4 separadores dorados, los que podéis ver en la foto anterior, por lo que no puedo ponerle los 4 a la rueda trasera del robot, y más delante me faltarán para montar lo demás….muy mal por aliexpress.

    Montar los motores 2wd

    A continuación hay que montar los motores, que por cierto vienen sin los cables soldados, así que necesitarás un soldador, si no tienes te recomiendo este soldador barato que es con el que hemos soldado este proyecto.

    Motores arduino coche robot
    Motores arduino coche robot

    Puedes soldar los cables como tu prefieras, pero yo te recomiendo soldar los cables iguales.

    Debes saber que los motores de corriente continua no tienen polaridad, es decir, puedes poner los cables positivo y negativo como tu quieras, la diferencia es que el motor va a girar en un sentido o en otro, pero yo recomiendo que los hagas los dos iguales para evitar problemas con el código de arduino que explicaré más tarde.

    Motores arduino coche 2wd
    Motores arduino coche 2wd

    Como te muestro en la foto, para montar el motor DC necesitas las pequeñas piezas de metraquilato que vienen con el papel marrón.

    Una vez retirado el papel de todas las piezas de metacrilato, debes meter estas piezas por los huecos donde marco con una flecha, por debajo.

    Anclado de los motores al metacrilato

    Una pieza va por debajo como te he mencionado antes y la otra justa al borde de la base de metacrilato en una pequeñe hendidura para colocarla.

    El motor va atornillado a este metacrilato, aunque en la foto muestra la posición de motor con los cables hacía fuera del coche, recomiendo que lo montéis al revés con los cables hacía dentro.

    Motor arduino DC
    Motor arduino DC

    Así es como dejé en principio los dos motores para arduino montados en su base de metacrilato, pero como he comentado antes, es mejor que los cables queden hacía dentro, tuve que desmontarlo todo cuando me di cuenta y darle la vuelta.

    En este punto ya puedes ponerle las ruedas en el eje exterior a presión, pero no te pases porque rozará con la base de metacrilato, y en el eje interior del motor DC ( de corriente continua ) irán las ruedas de los encoder, quedando sobre el hueco del metacrilato como podéis ver en la siguiente foto.

    Interruptor para arduino
    Interruptor para arduino

    Lo siguiente que hice fue colocar el interruptor de encendido, va a presión, pero nuevamente tengo un problema, el hueco es demasiado grande y el interruptor se mueve.

    En mi caso no tuve más remedio que pegarlo con pegamento mientras me acordaba del chino, y aunque le eché muy poco se quedo la marca en el metacrilato.

    El interruptor debes soldarlo también con los cables que vienen incluidos, estos cables irán directamente al L298N motor driver.

    Problemas con la base del coche robot

    Me encuentro con otro problema, al intentar montar la placa del arduino uno. LOS AGUJEROS NO COINCIDEN.

    Como lo habéis leído, la base parece que no coincidía con nada, sólo con el montaje de los motores, pero para el resto del proyecto no había manera de montar nada.

    Después de mi enfado con aliexpress y llegados a este punto lo mejor era agujerearlo..

    Usé un taladro con una broca de madera, recomiendo que lo hagáis lentamente porque si le subís muchas revoluciones al taladro se quemará el metacrilato por la temperatura.

    Base de metacrilato de coche no coinciden agujeros
    Base de metacrilato de coche no coinciden agujeros

    Marqué con rotulador donde necesitaba los agujeros.

    Agujeros al metacrilato para coche robot
    Agujeros al metacrilato para coche robot

    Con taladrar sólo un poco con la punta es suficiente para que entren los tornillos.

    Base de metacrilato de coche agujeros
    Base de metacrilato de coche agujeros

    Así es como quedaron, quizás si los lijara quedaría con un acabado más fino, pero me arriesgaba a que se arañara el metacrilato y después de todo, no se iba a ver una vez le ponga los tornillos.

    También coloqué la placa arduino con los separadores, que como recordáis aliexpress sólo me incluyeron 4, cuando necesitaba 12 para todo, así que sólo le pude colocar 2 al arduino.

    H L298N Motor Driver

    H L298N motor driver para coche robot
    H L298N motor driver para coche robot

    Con el H L298N control driver, me pasó lo mismo, no había manera de fijarlo a la base porque no había agujeros así que marqué, hice agujeros y atornille.

    Hacemos un inciso con el tutorial de montaje de este coche robot 2wd para hablar un poco sobre esta placa.

    Debéis saber que los motores de de corriente continua como estos, consumen una gran cantidad de corriente cuando giran.

    En nuestro caso estos motores consumen hasta unos 500 mA cada uno, pero claro, nuestra placa Arduino uno solo puede proporcionar 40 mA a 5 V en sus pines digitales.

    Cuál es la solución? utilizar una fuente de alimentación externa (baterías) para proporcionar a los motores la potencia necesaria para funcionar correctamente sin dañar la placa Arduino. 

    Si tu batería es de mayor voltaje puedes usar un regulador de tensión para bajar la tensión. Para mas información puedes ver mi articulo del divisor de tensión donde diseñamos lo mismo con un par de resistencias, aunque para este caso lo que recomendamos es un regulador de tensión.

    También vamos a necesitar separar ese circuito de alimentación (la pila) del circuito de control ( Arduino uno).

    • Usaremos 4 pilas AA, en total 6 voltios como fuente de energía para alimentar a los motores.
    • Y utilizaremos una pila de 9v para alimentar al arduino.

    El L298N motor driver es un circuito de doble puente en H que le permite alimentar estos motores con la potencia necesaria desde una fuente de alimentación externa.

    También controlará la dirección de rotación de los motores con un arduino.

    Es un controlador de dos canales, es decir que puede conectar dos motores de corriente continua diferentes y controlar cada uno de forma independiente.

    Entre sus especificaciones tenemos que puedes conectar motores entre 5-35 V y con una corriente máxima de 2 A en cada canal.

    L298N motor driver para arduino
    L298N motor driver para arduino

    Y como hemos mencionado las 4 pilas alimentarán el L298 y una pila de 9v alimentará al arduino.

    Alimentación arduino pila
    Alimentación arduino porta pila

    Necesitarás un conectar para pilar de 9v y un conector de alimentación, entiendo que aliexpress no lo incluya porque puedes alimentar el arduino de la manera que quieras, por suerte tenia ambas cosas.

    Si no sabes donde conseguirlos, os dejo el enlace donde los compro yo.

    Montaje del servo SG90

    El servomotor puede con 1.5kg, más que suficiente para mover el detector de ultrasonidos HC-SR04 y detectar la distancia.

    La idea es que se moverá de izquierda a derecha para controlar si estamos cerca de un objeto.

    El servo SG90 viene en una bolsa con 3 piezas diferentes según lo necesites, nuevamente no viene la pieza que necesito y que va dentro de la base del servo, así que toca coger una de ellas y recortarla con unos alicates de corte.

    pieza cabeza servomotor
    Pieza cabeza servomotor
    Base del servo motor arduino
    Base del servo motor arduino

    Una vez recortada ya se puede meter en la base donde irá el servo.

    Yo recomiendo que le echéis pegamento fuerte, porque se saldrá constantemente sobre todo si el coche robótico choca contra algún objeto que no detente el sensor de ultrasonidos HC-SR04.

    Además de pegarlo, hay que atornillarlo al servo por debajo, pero primero colocamos el servo entre las dos piezas diseñadas para ello, y va a presión.

    montando el servo motor
    Montando el servo motor
    Montando el servomotor
    Montando el servomotor

    Ya tendríamos todo para poder montar el servo SG90 en el la base.

    Base del servomotor montada
    Base del servomotor montada

    Sólo quedaría unir ambas piezas para tener el conjunto completo.

    Montando el servomotor-2
    Montando el servomotor-2
    montando el servo motor-3
    Montando el servo motor-3

    Pero antes de fijarlo a la base, y como dije anteriormente, hay que atornillar la base al servo por debajo de la base.

    Base del servomotor atornillado
    Base del servomotor atornillado

    Y así es como quedaría todo el conjunto

    Servomotor montado en el coche robot 2wd
    Servomotor montado en el coche robot 2wd

    Sensor de ultrasonidos HC-SR04

    Bien, llegados a este punto nos faltaría colocar el sensor de ultrasonidos HC-SR04 para controlar la distancia encima del servo.

    Nuevamente aliexpress hace de las suyas y no viene nada para poder montarlo.

    He visto otros proyectos en los que lo sujetan con bridas, pero creo que acabaría moviéndose con tanto movimiento del servo.

    Pegarlo con pegamento además de feo, marcaría las piezas para siempre, sobre todo la placa del circuito del sensor de ultrasónico HC-SR04.

    Así que he optado por silicona térmica, ya que se puede retirar en cualquier momento y aguantará bien el movimiento, y lo que es mejor, no le afectará a la placa del circuito si toca con algo.

    Sensor ultrasonidos arduino coche robot
    Sensor ultrasonidos arduino coche robot

    Tan solo bastó echar una gotita de silicona térmica en las esquinas del sensor ultrasónico HC-SR04 para que quedara bien fija a la estructura de plástico del servo.

    Esquema del cableado del coche autómata

    Con esto, ya tendríamos todas las piezas montadas sobre la base de metacrilato, y nos quedaría cablearlo todo y programar el arduino.

    Explicar todo el cableado sería muy tedioso tanto para mi, como para ti, así que mejor dejo un esquema muy claro donde van todos los cables.

    esquema cableado coche robot 2wd
    Esquema cableado coche robot 2wd

    El compañero Omar me comentaba que era confuso el esquema, y tiene toda la razón, me olvidé comentar que el kit del coche arduino viene con un arduino UNO, y además viene con una placa de expansión llamada Sensor Shield que hay que colocar justo encima del arduino y conectar ambas por medio de sus pines.

    Una vez hecho esto, el cableado se hace desde la misma placa de expansión tal como os pongo en el diagrama.

    En Amazon podéis encontrar esta placa de expansión en el siguiente enlace.

    Si no tenéis prisa siempre podéis optar por comprarla en china, aunque tardará bastante en llegar.

    Espero que os haya aclarado las cosas de lo contrario no dudéis en comentarlo más abajo en la zona de comentarios.

    Código Arduino para este proyecto

    Una vez todo montado y cableado sólo nos queda programar el arduino desde su IDE.

    Si no lo tienes aún, os dejo donde descargar el IDE de Arduino oficial.

    Una vez descargado e instalado, tu ordenador debería detectar tu arduino al conectarlo.

    configurar puerto arduino
    Configurar puerto arduino

    Debería de detectar automáticamente el modelo de ardunio en Herramientas/Placa Arduino en nuestro caso Arduino Uno.

    El puerto te debe aparecer justo debajo, en mi caso me lo detecta en el COM3 pero te puede salir cualquier otro.

    Una vez conectado sólo queda el programa, el cuál dejo un ejemplo completo para que copies y pegues, todo muy fácil y sin saber programar.

    #include <Servo.h>          //Servo motor library. This is standard library
    #include <NewPing.h>        //Ultrasonic sensor function library. You must install this library
    
    //our L298N control pins
    const int LeftMotorForward = 5;
    const int LeftMotorBackward = 4;
    const int RightMotorForward = 3;
    const int RightMotorBackward = 2;
    
    //sensor pins
    #define trig_pin A1 //analog input 1
    #define echo_pin A2 //analog input 2
    
    #define maximum_distance 200
    boolean goesForward = false;
    int distance = 100;
    
    NewPing sonar(trig_pin, echo_pin, maximum_distance); //sensor function
    Servo servo_motor; //our servo name
    
    
    void setup(){
    
      pinMode(RightMotorForward, OUTPUT);
      pinMode(LeftMotorForward, OUTPUT);
      pinMode(LeftMotorBackward, OUTPUT);
      pinMode(RightMotorBackward, OUTPUT);
      
      servo_motor.attach(11); //our servo pin
    
      servo_motor.write(90);
      delay(2000);
      distance = readPing();
      delay(100);
      distance = readPing();
      delay(100);
      distance = readPing();
      delay(100);
      distance = readPing();
      delay(100);
    }
    
    void loop(){
    
      int distanceRight = 0;
      int distanceLeft = 0;
      delay(50);
    
      if (distance <= 20){
        moveStop();
        delay(300);
        moveBackward();
        delay(400);
        moveStop();
        delay(300);
        distanceRight = lookRight();
        delay(300);
        distanceLeft = lookLeft();
        delay(300);
    
        if (distance >= distanceLeft){
              turnRight();
              moveStop();
              }
              else{
                turnLeft();
                moveStop();
              }
            }
        else{
          moveForward(); 
            }
        distance = readPing();
    }
    
    
    int lookRight(){  
      servo_motor.write(10);
      delay(500);
      int distance = readPing();
      delay(100);
      servo_motor.write(90);
      return distance;
    }
    
    int lookLeft(){
      servo_motor.write(170);
      delay(500);
      int distance = readPing();
      delay(100);
      servo_motor.write(90);
      return distance;
      delay(100);
    }
    
    int readPing(){
      delay(70);
      int cm = sonar.ping_cm();
      if (cm==0){
        cm=250;
      }
      return cm;
    }
    
    void moveStop(){
      
      digitalWrite(RightMotorForward, LOW);
      digitalWrite(LeftMotorForward, LOW);
      digitalWrite(RightMotorBackward, LOW);
      digitalWrite(LeftMotorBackward, LOW);
    }
    
    void moveForward(){
    
      if(!goesForward){
    
        goesForward=true;
        
        digitalWrite(LeftMotorForward, HIGH);
        digitalWrite(RightMotorForward, HIGH);
      
        digitalWrite(LeftMotorBackward, LOW);
        digitalWrite(RightMotorBackward, LOW); 
      }
    }
    
    void moveBackward(){
    
      goesForward=false;
    
      digitalWrite(LeftMotorBackward, HIGH);
      digitalWrite(RightMotorBackward, HIGH);
      
      digitalWrite(LeftMotorForward, LOW);
      digitalWrite(RightMotorForward, LOW); 
    }
    
    void turnRight(){
    
      digitalWrite(LeftMotorForward, HIGH);
      digitalWrite(RightMotorBackward, HIGH);
      
      digitalWrite(LeftMotorBackward, LOW);
      digitalWrite(RightMotorForward, LOW);
      
      delay(500);
      
      digitalWrite(LeftMotorForward, HIGH);
      digitalWrite(RightMotorForward, HIGH);
      
      digitalWrite(LeftMotorBackward, LOW);
      digitalWrite(RightMotorBackward, LOW);
    }
    
    void turnLeft(){
    
      digitalWrite(LeftMotorBackward, HIGH);
      digitalWrite(RightMotorForward, HIGH);
      
      digitalWrite(LeftMotorForward, LOW);
      digitalWrite(RightMotorBackward, LOW);
    
      delay(500);
      
      digitalWrite(LeftMotorForward, HIGH);
      digitalWrite(RightMotorForward, HIGH);
      
      digitalWrite(LeftMotorBackward, LOW);
      digitalWrite(RightMotorBackward, LOW);
    }

    El código no es mío, pero está compilado y comprobado por mi, y funciona perfectamente.

    Sin embargo, yo lo he mejorado a mi gusto, os dejo el mismo código para arduino desde el cuál yo partí, por si queréis mejorarlo vosotros también.

    Os voy a comentar un poco el código para que lo comprendáis.

    #include <Servo.h>          //Servo motor library. This is standard library
    #include <NewPing.h>        //Ultrasonic sensor function library. You must install this library

    Inicialmente y como en todos los proyectos con arduino lo primer es importar todas las librerías que vayamos a necesitar.

    En nuestro caso la libreria que no tenemos es NewPing.h y que la podéis descargar desde el enlace que os dejo.

    Una vez descargada la importamos a nuestro IDE.

    Cómo importar libreria arduino
    Cómo importar librería arduino

    Una vez importada ya podemos compilar el código desde el botón del menú superior y no debería darte ningún tipo de problema, en todo caso, reinicia el IDE para asegurarte que se aplican correctamente los cambios.

    Ya sin errores puedes proceder a programar el arduino con el botón de la flecha derecha en el menú superior, pero sigamos comprendiendo el código.

    Definiendo la inicialización del código

    //our L298N control pins
    const int LeftMotorForward = 5;
    const int LeftMotorBackward = 4;
    const int RightMotorForward = 3;
    const int RightMotorBackward = 2;
    
    //sensor pins
    #define trig_pin A1 //analog input 1
    #define echo_pin A2 //analog input 2
    
    #define maximum_distance 100
    boolean goesForward = false;
    int distance = 100;
    
    NewPing sonar(trig_pin, echo_pin, maximum_distance); //sensor function
    Servo servo_motor; //our servo name

    Lo primero que hace es crear unas constantes de tipo entero asignandole los pines del arduino, es decir, el pin 5 del arduino será para la constante LeftMotorForward, es decir Mover hacía adelante el motor izquierdo, etc.

    Definimos los pines analógicos del arduino tanto para el Trig (disparo) como para el el Echo
    (recepción)
    del sensor de ultrasonidos HC-SR04.

    Lo siguiente que hace el código es definir una distancia máxima en 100 y una varible booleana para saber si va hacía adelante o no, por defecto se deja en false. Y otra variable entera de distancia que se deja inicialmente en 100.

    Para conocer la distancia con este sensor de ultrasonidos HC-SR04 es como sigue:

    Distancia = {(Tiempo entre Trig y el Echo) * (V.Sonido 340 m/s)}/2

    Seguidamente se usa una función de la libreria NewPing para conocer esto mismo y se le pasa los parámetros que hemos declarado anteriormente.

    Por último le damos un nombre al servomotor.

    Configurando el código del proyecto

    Una vez que tenemos todo lo necesario inicializado vamos a proceder con el Setup()

    void setup(){
    
      pinMode(RightMotorForward, OUTPUT);
      pinMode(LeftMotorForward, OUTPUT);
      pinMode(LeftMotorBackward, OUTPUT);
      pinMode(RightMotorBackward, OUTPUT);
      
      servo_motor.attach(11); //our servo pin
    
      servo_motor.write(90);
      delay(2000);
      distance = readPing();
      delay(100);
      distance = readPing();
      delay(100);
      distance = readPing();
      delay(100);
      distance = readPing();
      delay(100);
    }

    Esta parte es muy sencilla, ponemos los pines que hemos declarado al principio como pones de salida con pinMode y la instrucción OUTPUT.

    Le decimos con servo_motor.write(90) los grados que queremos para el servo.

    1. Con 90º es que el servo está en medio
    2. Con 0º todo a la izquierda.
    3. Y con 180º todo a la derecha.

    Nunca llegaremos a sus máximos, se dejará siempre entre 10 y 170.

    Y ahora vamos alternando un retardo de 2 segundos, y lee la distancia, un retardo de 100milisegundos y vuelve a leer, así varias veces.

    Explicamos el loop que va a realizar nuestro robot

    void loop(){
    
      int distanceRight = 0;
      int distanceLeft = 0;
      delay(50);
    
      if (distance <= 20){
        moveStop();
        delay(300);
        moveBackward();
        delay(400);
        moveStop();
        delay(300);
        distanceRight = lookRight();
        delay(300);
        distanceLeft = lookLeft();
        delay(300);
    
        if (distance >= distanceLeft){
              turnRight();
              moveStop();
              }
              else{
                turnLeft();
                moveStop();
              }
            }
        else{
          moveForward(); 
            }
        distance = readPing();
    }

    Inicialmente la distancia a derecha e izquierda comenzará en 0.

    Si la distancia es menor o igual que 20:

    1. Se para, espera 300 milisegundos y el robot irá hacía atrás.
    2. Hacemos otro retardo de 400 y se para.
    3. Volvemos a hacer otro retardo o delay de 300 y escaneamos la distancia a la derecha.
    4. Esperamos 300 y volvemos a escanear a la izquierda y volvemos a esperar 300.

    Con esto hemos escaneado a los lados para saber por donde ir.

    Si la distancia que dijimos al inicio es mayor o igual que la distancia a la izquierda el coche va a girar a la derecha y se parará sino hará lo contrario se girará a la izquierda y se parará.

    En caso contrario seguirá avanzando, y por último vuelve a leer la distancia para tenerla en la variable distancia.

    Servo SG90 y sensor ultrasonidos HC-SR04

    int lookRight(){  
      servo_motor.write(10);
      delay(500);
      int distance = readPing();
      delay(100);
      servo_motor.write(90);
      return distance;
    }
    
    int lookLeft(){
      servo_motor.write(170);
      delay(500);
      int distance = readPing();
      delay(100);
      servo_motor.write(90);
      return distance;
      delay(100);
    }
    
    int readPing(){
      delay(70);
      int cm = sonar.ping_cm();
      if (cm==0){
        cm=250;
      }
      return cm;
    }

    Las funciones que usamos para que el servo pueda mirar hacia los lados y pueda medir la distancias son las que muestro, en el código anterior.

    Las dos primera funciones int lookLeft() y int lookRight() se declaran de tipo entero porque van a devolver un número entero.

    Ambos son similares solo que cambiamos los grados a los que va a mirar el servo.

    Empieza colocando el servo en una posición 10 a la izquierda, 90 en el medio y 170 para ponerlo mirando a la derecha con servo_motor.write(170);

    Es fácil de describir lo que hace, primero mira hacia un lado, vuelve al medio y se gira hacia el otro lado.

    Depués devuelve la distancia obtenida.

    La función int readPing() devuelve un número entero, será los centímetros, que obtenemos con sonar.ping_cm()

    Controlando el movimiento de los motores

    En esta ocasión no podré todas las funciones que permite el movimiento, pero las nombraremos en la siguiente lista:

    • moveStop() Paramos los motores.
    • moveForward() Avanzamos hacía adelante.
    • moveBackward() Volvemos hacía atrás.
    • turnRight() Giramos a la derecha.
    • turnLeft() Giramos a la izquierda.

    Básicamente para parar ponemos todos los pones de ambos motores en estado LOW

      digitalWrite(RightMotorForward, LOW);
      digitalWrite(LeftMotorForward, LOW);
      digitalWrite(RightMotorBackward, LOW);
      digitalWrite(LeftMotorBackward, LOW);

    Para movernos en el resto de funciones comprovamos la variable goesForward para ver su estado y en base a eso avanzamos o no.

    Si dejamos ambos motores en HIGH en su Forward y en LOW sus Backward el coche avanzará.

    digitalWrite(LeftMotorForward, HIGH);
    digitalWrite(RightMotorForward, HIGH);
      
    digitalWrite(LeftMotorBackward, LOW);
    digitalWrite(RightMotorBackward, LOW);

    Y si hacemos lo contrario, el coche irá hacia atrás.

    digitalWrite(LeftMotorBackward, HIGH);
    digitalWrite(RightMotorBackward, HIGH);
      
    digitalWrite(LeftMotorForward, LOW);
    digitalWrite(RightMotorForward, LOW); 

    Para finalizar la explicación del código usamos la lógica, si queremos que el robot gire, un motor debe girar hacia un lado y el otro debe girar hacía el otro tal que así.

    digitalWrite(LeftMotorForward, HIGH);
      digitalWrite(RightMotorBackward, HIGH);
      
      digitalWrite(LeftMotorBackward, LOW);
      digitalWrite(RightMotorForward, LOW);
      
      delay(500);
      
      digitalWrite(LeftMotorForward, HIGH);
      digitalWrite(RightMotorForward, HIGH);
      
      digitalWrite(LeftMotorBackward, LOW);
      digitalWrite(RightMotorBackward, LOW);

    Con este código giramos hacia la derecha, pero te preguntarás, para que es el DELAY ???

    Con el delay controlamos cuanto queremos que gire, si hay más retardo, los motores giran más tiempo por lo que girara más, si ponemos un retardo muy corto, los motores giraran durante muy poco tiempo y girará menos.

    Problemas y soluciones con el coche 2WD

    • El coche no anda, sólo gira el servo hacía los lados: Debes mirar que esté correctamente alimentado el L298N motor driver.
    • El robot avanza pero no detecta obtáculos: Comprueba que los pines de Trigger y Echo, están correctamente colocados.
    • Arduino está encendido y el L298N también pero no hace nada: El código está correcto y comprobado, revisa que lo hayas cargado correctamente en tu arduino.
    • Mi pc no detecta el puerto del arduino: A veces suele pasar y se soluciona instalando unos driver, si no los encuentras déjame un mensaje en los comentarios y encantado los compartiré con todos.

    Conclusiones finales

    Si te gusta el cacharreo, construir, solucionar problemas y estas cosas, aquí te vas a distraer bastante.

    Lo que te mande el chino de aliexpress puede ser toda una sorpresa sobre todo si la base del autómata no tiene nada que ver con las piezas, pero bueno todo tiene solución.

    Si tuviera que comprarlo de nuevo, yo no lo haría, compraría todas las piezas sueltas, por lo menos la base y los tornillos y separadores, para que no te falte nada.

    El precio no es malo teniendo en cuenta que incluye un arduino UNO, el controlador de los motores y la base.

    Pero si lo compras todo por separado tampoco creo que te ahorres tanto.

    Sinceramente, yo hubiera pagado un poco más para que viniera todo perfecto.

    Más que nada porque es un proyecto para montar con los niños, y a edad temprana los niños se aburren ante cualquier problema.

    Si es tu caso, compra algo que no te de problemas sino los niños abandonarán a la mínima

    Resumen
    product image
    Puntuación del autor
    1star1stargraygraygray
    Puntuación añadida
    5 based on 5 votes
    Marca
    Chino
    Nombre del producto
    Coche Robot 2WD
    Precio
    EUR 22
    Disponibilidad del producto
    Available in Stock
    Configuraciones