Control de un coche Arduino por Bluetooth

Descrición

Imos a controlar a velocidade e o sentido de avance dun coche con Arduíno mediante Bluetooth.

  • Faremos o control de sentido de xiro de dous motores de corrente continua.
  • Mediante PWM imos controlar as súas velocidades de xiro.

Materiais:

  • Placa Arduino
  • Placa Protoboard
  • Pila 9 V
  • Módulo Bluetooth HC-05
  • 2 Resistencias: unha de 1kΩ e outra de 560Ω, para o divisor de tensión do BT.
  • Módulo integrado L298N (para o control dos motores)
  • Dous motores de corrente continua
  • Dúas rodas para os motores
  • Unha roda tola
  • Chasis

rodalocaarduinocar

(1: Bluetooth, 2: Conrolador de motores L298N, 3: Motor e roda, 4: Roda tola)
chasismedidaschasis

(Chasis)

Para a montaxe do chasis podes consultar esta páxina.

Que é o controlador L298N?

O L298 tamén, coñecido como driver ou dobre ponte h, é un dispositivo electrónico, en forma de circuíto integrado, formado a base de transistores para poder controlar, con base a pulsos, o sentido da corrente, podendo inverter así, a polaridade das súas saídas. Esta formado, a grandes liñas, por dúas pontes h, que poden controlar motores de corrente continua (D.C.) de 5 e 12 voltios e pode soportar ata 1 e 2 Amperios.

Pins do módulo L298N

  1. l298_numeradasOUT1: Conexión “+” para o motor A.
  2. OUT2: Conexión “-” para o motor A.
  3. +12V: Conexión de alimentación, máximo 35 V DC.
  4. GND
  5. +5V: Proporciona 5 V para alimentar a placa Arduíno.
  6. ENA: Habilita o motor A. Hai que quitar a ponte, así podemos introducir por el pulsos PWM e controlar a velocidade do motor de continua.
  7. IN1: Pins de control dos motores
  8. IN2
  9. IN3
  10. IN4
  11. ENB: Habilita o motor B. Hai que quitar a ponte, así podemos introducir por el pulsos PWM e controlar a velocidade do motor de continua.
  12. OUT3: Conexión “+” para o motor B.
  13. OUT4: Conexión “-” para o motor B.

Conexións

l298n_bb

No módulo L298N é posible que as entradas ENA e ENB traian unha ponte de fábrica… quitamos as pontes das entradas ENA e ENB.

  • Conectamos un motor ás saídas OUT1 e OUT2.
  • Conectamos o outro motor ás saídas OUT3 e OUT4.

Realizamos as seguintes conexións, dende o módulo L298N a Arduino:

  • ENA ⇒ 10
  • In1 ⇒ 9
  • In2 ⇒ 8
  • In3 ⇒ 7
  • In4 ⇒ 6
  • ENB ⇒ 5
  • Alimentamos con 9 V o módulo L298N, conectándoo a +12V (Vcc) e Gnd.
  • Conectamos a saída de 5 V e o Gnd do módulo L298N aos 5 V e Gnd do Arduíno. É moi importante non esquecer conectar o cable do Gnd ao Arduíno.

Ao conectalo desta maneira, a saída de 5 V do módulo L298N alimentará ao Arduíno, e non necesitaremos alimentar o Arduíno con ningunha outra fonte de alimentación.

Realizamos as seguintes conexións, dende o Bluetooth HC-05 a Arduino:

  • VCC ⇒  3.3V
  • GND ⇒ GND
  • TXD ⇒ 0 → RX
  • RXD ⇒ TX→1

O módulo Bluetooth aliméntase con 3,3 V.

Programación en IDE de Arduíno

Cando vaias  cargar o programa ao Arduíno, quita o cable vermello de alimentación do módulo Bluetooth (se tentas cargar co módulo Bluetooth conectado, dará erro). Unha vez cargado o programa no Arduíno, volve conectar o cable vermello do módulo Bluetooth.

// Conexións do Motor A
char val;
int enA = 10;
int in1 = 9;
int in2 = 8;
 
// Conexións do Motor B
int enB = 5;
int in3 = 7;
int in4 = 6;
 
void setup() { 
  Serial.begin(9600);
  // Terminais de saida no Arduino
  pinMode(enA, OUTPUT);
  pinMode(enB, OUTPUT);
  pinMode(in1, OUTPUT);
  pinMode(in2, OUTPUT);
  pinMode(in3, OUTPUT);
  pinMode(in4, OUTPUT);
  analogWrite(enA, 90);
  analogWrite(enB, 90);
}
 
void loop() { 
  
  if( Serial.available() )
  val = Serial.read();
  
  // Avanza Motor A
  if( val == '1' )
  { 
    digitalWrite(in1, HIGH);
    digitalWrite(in2, LOW);
  }
 
  // Avanza Motor A e B
  if( val == '2' )
  { 
    digitalWrite(in1, HIGH);
    digitalWrite(in2, LOW);
    digitalWrite(in3, HIGH);
    digitalWrite(in4, LOW);
  }
 
  // Avanza Motor B
  if( val == '3' )
  { 
   digitalWrite(in3, HIGH);
    digitalWrite(in4, LOW);
  }
 
  // Parar A
  if( val == '4' )
  { 
    digitalWrite(in1, LOW);
    digitalWrite(in2, LOW); 
  } 
 
  // Parar A e B
  if( val == '5' )
  { 
    digitalWrite(in1, LOW);
    digitalWrite(in2, LOW);  
    digitalWrite(in3, LOW);
    digitalWrite(in4, LOW);
  } 
 
  // Parar B
  if( val == '6' )
  { 
    digitalWrite(in3, LOW);
    digitalWrite(in4, LOW);
  } 
 
  // Retrocede A
  if( val == '7' )
  { 
    digitalWrite(in1, LOW);
    digitalWrite(in2, HIGH);
  } 
 
  // Retrocede A e B
  if( val == '8' )
  { 
    digitalWrite(in1, LOW);
    digitalWrite(in2, HIGH);  
    digitalWrite(in3, LOW);
    digitalWrite(in4, HIGH); 
  } 
 
  // Retrocede B
  if( val == '9' )
  {  
    digitalWrite(in3, LOW);
    digitalWrite(in4, HIGH); 
  } 
 
  if( val == 'A' )
  { 
    analogWrite(enA, 70);
    analogWrite(enB, 70);
  } 
  if( val == 'B' )
  { 
    analogWrite(enA, 110);
    analogWrite(enB, 110);
  } 
  if( val == 'C' )
  { 
    analogWrite(enA, 150);
    analogWrite(enB, 150);
  } 
  if( val == 'D' )
  { 
    analogWrite(enA, 200);
    analogWrite(enB, 200);
  } 
  if( val == 'E' )
  { 
    analogWrite(enA, 250);
    analogWrite(enB, 250);
  } 
  
}

Segundo se envíen os caracteres A, B, C, D o E, a velocidade dos motores será 70, 110, 150, 200 o 250 respectivamente. Estes valores producen distintos ciclos útiles (Duty Cycle) de PWM.

Programación en App Inventor

Deseño

desenoarduinocar

Inserimos os elementos indicados:

  • sdl_Conectar é un SelectorDeLista.
  • Btn_Desconectar é un Botón.
  • B1 … B9 son Botóns.
  • A … E son Botóns.
  • ClienteBluetooth1
  • Notificador1

Programación de bloques

conectararduinocar

b1_b9arduinocar

a_barduinocar

  • Vinculamos o Bluetooth e do dispositivo Android.
  • Segundo a tecla pulsada envíase un carácter mediante BT.
  • Coas teclas “Avanza” moverase cara adiante o motor A, o motor B ou os dous.
  • Coas teclas de “Parar” pararase o motor A, o motor B ou os dous.
  • Coas teclas de “Retro” retrocederá o motor A, o motor B ou os dous.
  • Para controlar a velocidade dos motores utilizaremos 5 botóns, segundo o botón pulsado enviarase o carácter: A, B, C, D ou E, que indicará un nivel de velocidade.

A  lento (70), B un pouco máis rápido (110), C máis rápido (150), D moi rápido (200) e E máxima velocidade (250).

Poderíase enviar a velocidade mediante un Deslizador (como vimos no titorial de Bluetooth co LED RGB), pero é máis sinxelo enviando só 5 niveis de velocidade con estes botóns. Xa que resulta máis sinxelo enviar un carácter que varios, se tivésemos que enviar a velocidade 125, por exemplo, o código complicaríase.

Nota:

O movemento do coche pode ter problemas pola falta de paralelidade das rodas. Posiblemente un motor vire máis rápido que o outro. Podes tentar corrixilo mediante a variable de velocidade.