Código de búsqueda

Lección 24/31: Coche Inteligente Parte 2: Avanzar, Reversa, izquierda y derecha y Control de Velocidad del Coche

Lección 24/31: Coche Inteligente Parte 2: Avanzar, Reversa, izquierda y derecha y Control de Velocidad del Coche

24-SunFounder-Car-Speed sobre el pavimento

Esta lección se centra en la segunda fase de la construcción de tu coche inteligente: tomar el control de su movimiento usando código de Arduino. Mientras que el primer proyecto puede haber hecho que el coche se moviera de una manera básica, esta guía te enseña cómo ordenar al coche que avance, retroceda, gire a la izquierda, gire a la derecha y se detenga con precisión. También aprenderás a controlar su velocidad, permitiendo una aceleración y desaceleración suaves. Este es un paso fundamental para cualquier proyecto de robótica, ya que te da la lógica base para crear comportamientos autónomos más complejos.

26-SunFounder-Car-4-Ultrasonic.mp4_snapshot_00.00.000

Dominar estos controles de movimiento abre un mundo de posibilidades. Aquí hay algunas aplicaciones prácticas para este conocimiento:

  • Robots seguidores de línea: Usa las funciones de giro a la izquierda y a la derecha para mantener un robot en una pista.
  • Vehículos con evitación de obstáculos: Programa el coche para avanzar, detenerse y girar cuando detecte un objeto en su camino.
  • Exploración por control remoto: Combina estos comandos con un módulo inalámbrico para conducir el coche por tu casa o jardín.
  • Sistemas de entrega automatizados: Crea un robot a pequeña escala que pueda moverse entre puntos establecidos, deteniéndose y arrancando según sea necesario.

Hardware y Componentes

Este proyecto se basa en el kit Arduino 3 en 1 de SunFounder. No se requieren componentes adicionales más allá del kit básico, pero necesitarás conectar cuatro cables extra al Arduino para controlar el driver del motor. Los componentes esenciales son:

  • Arduino Uno (o placa compatible)
  • Chasis de coche inteligente SunFounder con motores
  • Placa driver del motor (incluida en el kit)
  • Cables jumper
  • Paquete de baterías para el coche
  • Cable USB para programación
smarcar_turning_right  arriba
smartcar_turning_left arriba

Guía de Cableado

El cableado de este proyecto es crucial para controlar la dirección de cada motor. El video explica que los cuatro cables de control del motor desde la placa driver están conectados a los pines 5, 6, 9 y 10 del Arduino. Estos pines son especiales porque soportan Modulación por Ancho de Pulso (PWM), que es esencial para el control de velocidad.

En el video, el instructor los conecta en un orden específico usando cables amarillos y azules, como se muestra en el diagrama a continuación.

Una nota de seguridad crítica mencionada en el video es desconectar la alimentación de la batería del coche (el cable rojo a 5V y el cable negro a GND) mientras programas el Arduino vía USB. Esto evita que el puerto USB se sobrecargue y potencialmente se apague.

Explicación del Código

El código para esta lección está estructurado para ser fácil de modificar y entender. La clave para controlar el coche reside en las definiciones de pines al inicio del sketch. Puedes cambiarlas si decides usar diferentes pines en tu Arduino.

const int in1 = 5;
const int in2 = 6;
const int in3 = 9;
const int in4 = 10;

Estas líneas definen los pines del Arduino conectados a las entradas del driver del motor. in1 e in2 controlan un motor, mientras que in3 e in4 controlan el otro. Al establecer estos pines en ALTO o BAJO, controlas la dirección de rotación de cada motor.

Para controlar la velocidad del coche, el código usa dos funciones personalizadas: moveForward(int speed) y moveBackwards(int speed). Estas funciones toman un valor entero entre 0 y 255 como argumento. Un valor de 0 detiene el motor, mientras que 255 es la velocidad máxima. Por ejemplo, para mover el coche hacia adelante a máxima velocidad, llamarías a moveForward(255). Para moverlo hacia atrás lentamente, usarías moveBackwards(100).

El video también demuestra una secuencia de "aceleración" y "desaceleración" usando bucles for. Esta es una técnica poderosa para una aceleración suave.

for(int i=0;i<=255;i+=5){
  moveForward(i);
  delay(100);
}

Este bucle comienza con i en 0 y lo incrementa en 5 en cada pasada hasta que alcanza 255. Cada vez, llama a moveForward(i), aumentando gradualmente la velocidad del coche. El delay(100) proporciona una pausa de 100 milisegundos en cada paso de velocidad, haciendo visible la aceleración. Un bucle similar con un valor decreciente de i se usa para desacelerar el coche.

Demostración del Proyecto en Vivo

En el video, el instructor demuestra el proyecto en dos etapas principales. Primero, muestra los movimientos básicos del coche. Al cargar el código "move", el coche ejecuta una secuencia preprogramada: avanzar durante dos segundos, detenerse, retroceder durante dos segundos, detenerse, girar a la izquierda y luego girar a la derecha. Esto confirma visualmente que el cableado y la lógica son correctos.

La segunda demostración se centra en el control de velocidad. El instructor carga el código de "aceleración", que acelera gradualmente el automóvil hacia adelante hasta alcanzar la velocidad máxima y luego desacelera suavemente hasta detenerse. Luego muestra una versión con velocidad fija, donde el automóvil avanza a 255, se detiene y luego retrocede a una velocidad más lenta de 100, imprimiéndose los valores en el Monitor Serie para su verificación.

Capítulos

  • [00:00] Introducción al Control de Movimiento del Automóvil
  • [01:44] Configuración del Cableado para el Control por Código
  • [02:07] Demostración del Movimiento Hacia Adelante y Hacia Atrás
  • [03:18] Demostración de Giros a la Izquierda y a la Derecha
  • [05:05] Conexión de Cables a los Pines del Arduino
  • [07:00] Explicación del Código para el Control de Dirección
  • [11:44] Introducción al Control de Velocidad
  • [12:16] Explicación del Código para la Aceleración Progresiva
  • [14:45] Uso del Monitor Serie para la Depuración
  • [17:10] Demostración en Vivo del Control de Velocidad
  • [19:45] Prueba Final al Aire Libre y Conclusión

Imágenes

26 SunFounder Car 4 ultrasonic video snapshot 00.00.000
26 SunFounder Car 4 ultrasonic video snapshot 00.00.000
Smartcar turning left
Smartcar turning left
Smartcar turning right
Smartcar turning right
24 SunFounder Car speed on the pavement
24 SunFounder Car speed on the pavement
900-Lesson 24/31: Smart code speeds up
Idioma: C++
/*
Lesson 24/31: Smart code speeds up
Get this code and watch video Download and resource page https://robojax.com/RJT607
YouTube video https://www.youtube.com/watch?v=QzcUig2L3dM

*/
const int in1 = 5;
const int in2 = 6;
const int in3 = 9;
const int in4 = 10;

void setup() {
  pinMode(in1, OUTPUT);
  pinMode(in2, OUTPUT);
  pinMode(in3, OUTPUT);
  pinMode(in4, OUTPUT);
  Serial.begin(9600);
  Serial.println("SunFounder Arduino Course");
  Serial.println("Lesson 3: Speed up");
  Serial.println("www.Robojax.com");
  
}

void loop() {
    
    moveForward(255);
    Serial.print("Forward at: ");
    Serial.println(255);
    delay(5000);//for 5 seconds

    Serial.println("Stopped ");
    moveForward(0);//stop the car
    delay(2000);//for 2 seconds
    
    moveBackwards(100);
    Serial.print("Reverse at: ");    
    Serial.println(100);    
    delay(5000);//for 5 seconds

    Serial.println("Stopped ");
    moveForward(0);//stop the car
    delay(2000);//for 2 seconds   
 
}

void moveForward(int speed) {
  analogWrite(in1, 0);
  analogWrite(in2, speed);
  
  analogWrite(in3, speed);
  analogWrite(in4, 0);
}

void moveBackwards(int speed) {
  analogWrite(in1, speed);
  analogWrite(in2, 0);
  
  analogWrite(in3, 0);
  analogWrite(in4, speed);
}
901-Lesson 24/31: Smart code speeds up (Custome code)
Idioma: C++
/*
Lesson 24/31: Smart code speeds up (custom code)
Get this code and watch video Download and resource page https://robojax.com/RJT607
YouTube video https://www.youtube.com/watch?v=QzcUig2L3dM

*/
const int in1 = 5;
const int in2 = 6;
const int in3 = 9;
const int in4 = 10;

void setup() {
  pinMode(in1, OUTPUT);
  pinMode(in2, OUTPUT);
  pinMode(in3, OUTPUT);
  pinMode(in4, OUTPUT);
  Serial.begin(9600);
  Serial.println("SunFounder Arduino Course");
  Serial.println("Lesson 3: Speed up");
  Serial.println("www.Robojax.com");
  
}

void loop() {
  Serial.println("Loop 1: Speeding Up"); 
  for(int i=0;i<=255;i+=5){
    moveForward(i);
    Serial.print("i= ");
    Serial.println(i);
    delay(100);
  }
    Serial.println("Loop 2: Slowing down "); 
  for(int i=255;i>=0;i-=5){
    moveForward(i);
    Serial.print("i= ");
    Serial.println(i);    
    delay(100);
  }
 
}

void moveForward(int speed) {
  analogWrite(in1, 0);
  analogWrite(in2, speed);
  
  analogWrite(in3, speed);
  analogWrite(in4, 0);
}

Archivos📁

Bibliotecas de Arduino (zip)