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




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


(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
OUT1: Conexión “+” para o motor A.- OUT2: Conexión “-” para o motor A.
- +12V: Conexión de alimentación, máximo 35 V DC.
- GND
- +5V: Proporciona 5 V para alimentar a placa Arduíno.
- 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.
- IN1: Pins de control dos motores
- IN2
- IN3
- IN4
- 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.
- OUT3: Conexión “+” para o motor B.
- OUT4: Conexión “-” para o motor B.
Conexións
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
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
- 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.




