Arduino en español
Circuitos con Arduino - Juan Antonio Villalpando
-- Tutorial de iniciación a Arduino --
Volver al índice del tutorial
____________________________
Bluetooth y Arduino. Proyecto cochecito - 1
Bluetooth y Arduino. Proyecto cochecito - 2
Bluetooth y Arduino. Proyecto cochecito - 3
29C.- Arduino - Motores de contínua - Android - Bluetooth.
Proyecto de un cochecito controlado con un móvil con Android por Bluetooth y Arduino. App inventor.
- Vamos a controlar un cochecito movido por dos motores de corriente contínua mediante Bluetooth y Arduino. El control lo haremos mediante un móvil o una tablet con Android.
- Estos elementos los puedes encontrar en Aliexpress.
- Necesitaremos:
- Un Arduino UNO.
|
- Un módulo Bluetooth para el Arduino.
|
- Un driver o controlador para los motores de contínua.
|
- Dos motores de contínua.
Se puede utilizar cualquier motorcito de contínua que funcione con 5 V... 9 V |
- Un portapilas para 6 o 9 voltios.
|
Por unos 10 € se puede encontrar el chasis, los motorcitos, las ruedas y el portapilas.
Utiliza dos ruedas de tracción y una ruedecilla libre en la parte de atrás.
Uno de los problemas que tendrá este cochecito, es distinto movimiento de sus ruedas, es decir aunque los motores de iguales características, uno siempre irá más veloz de otro, de tal manera que cuando intentemos que el coche circule en línea recta, debido a las distintas velocidades de los motores, curvará su dirección. Esto ser podría correguir utilizando otra forma de dirección o controlando individualemente la velocidad de cada motor mediante una realimentación.
__________________________
Leemos estos dos tutoriales para saber el funcionamiento de nuestro proyecto:
- 1º Lees este tutorial para aprender a utilizar el Arduino, controlador de motores y los motores:
Arduino + Controlador + Motores
- 2º Lees este tutorial para aprender programar con App inventor Android, Bluetooth y Arduino:
Android + Bluetooth + Arduino con App inventor
__________________________
- Comenzamos.
- Una vez leído los dos tutoriales anteriores, comenzamos...
- Vamos a empezar por el programa que tenemos que instalar en el móvil, puede servir el que hemos visto en: Android + Bluetooth + Arduino con App inventor lo puedes instalar en el móvil desde este QR:
|
Instálalo en tu móvil escaneando este QR
|
____________________________
- Conexiones.
Módulo |
ENA |
In1 |
In2 |
In3 |
In4 |
ENB |
Arduino |
10 |
9 |
8 |
7 |
6 |
5 |
|
Módulo Bluetooh |
Arduino |
VCC |
3,3 V |
GND |
GND |
TXD |
RX (es la conexión 0 del Arduino) |
RXD |
TX (es la conexión 1 del Arduino) |
|
- El módulo Bluetooth se alimenta con 3,3 V.
- El módulo controlador de los motores alimenta al Arduino con 5 V.
- El módulo Arduino solo necesita la alimentación de 5 V que viene del controlador, no es necesario alimentar al Arduino con el USB ni con el conector negro de alimentación.
- No olvides conectar Gnd desde el controlador de motores al Gnd del Arduino.
- Cuando vayas a cargar el programa al Arduino, quita el cable rojo de alimentación del módulo Bluetooth (si intentas cargar con el módulo Bluetooth conectado, dará error). Una vez cargado el programa en el Arduino, vuelve a conectar el cable rojo del módulo Bluetooth.
IMPORTANTE:
1.- Debes vincular al módulo Bluetooth al móvil, el nombre del módulo Bluetooth será linvor o HC-06. La contraseña: 1234
2.- Para cargar el programa al Arduino debemos quitar el cable de alimentación del Bluetooth, cuando esté cargado volvemos a conectar ese cable.
____________________________
- Código.
Programa para el Arduino.
|
// Juan Antonio Villalpando
// juana1991@yahoo.com
// kio4.com
// diciembre 2015
// Conexiones del Motor A
char val;
int enA = 10;
int in1 = 9;
int in2 = 8;
// Conexiones del Motor B
int enB = 5;
int in3 = 7;
int in4 = 6;
void setup() {
Serial.begin(9600);
// Aqui establecemos la velocidad
// Terminales de salida en el 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 y 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 y 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 y 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, 100);
analogWrite(enB, 100);
}
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);
}
}
} |
- Según se envíe los caracteres A, B, C, D o E, la velocidad de los motores será 100, 110, 150, 200 o 250. Estos valores producen distintos Duty Cycle de PWM.
- Prueba poner la velocidad en A a 70, en vez de 100, ¿te funciona?
____________________________
____________________________
____________________________
____________________________
- Giro del cochecito
- Vamos a añadir dos Botones en la aplicación del móvil para poder girar a derecha e izquierda.
|
- Agregamos los Botones "Gira a izquierda" y "Gira a derecha".
- Los renombramos como X, Y.
- Añadimos los bloques siguientes...
- Es decir, cuando pulsemos el Botón a izquierda se enviará una "X". Cuando pulsemos el botón a derecha, se enviará una "Y" por Bluetooth.
|
Programa para el Arduino.
|
// Juan Antonio Villalpando
// juana1991@yahoo.com // diciembre 2015
// kio4.com
char val;
int velocidad=90;
int enA = 10;
int in1 = 9;
int in2 = 8;
// Conexiones del Motor B
int enB = 5;
int in3 = 7;
int in4 = 6;
void setup() {
Serial.begin(9600); // Aqui establecemos la velocidad
// Terminales de salida en el Arduino
pinMode(enA, OUTPUT);
pinMode(enB, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
analogWrite(enA, velocidad);
analogWrite(enB, velocidad);
}
void loop() {
if( Serial.available() ) {
val = Serial.read();
// Avanza Motor A
if( val == '1' )
{
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
}
// Avanza Motor A y 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 y 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 y 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);
}
// Velocidades. PWM.
if( val == 'A' )
{
velocidad=100;
}
if( val == 'B' )
{
velocidad=110;
}
if( val == 'C' )
{
velocidad=150;
}
if( val == 'D' )
{
velocidad=200;
}
if( val == 'E' )
{
velocidad=250;
}
analogWrite(enA, velocidad);
analogWrite(enB, velocidad);
// Giros
if( val == 'X' )
{
analogWrite(enA, 60);
analogWrite(enB, 60);
digitalWrite(in1, HIGH);
digitalWrite(in2, LOW);
digitalWrite(in3, LOW);
digitalWrite(in4, LOW); delay(800);
}
if( val == 'Y' )
{
analogWrite(enA, 60);
analogWrite(enB, 60);
digitalWrite(in1, LOW);
digitalWrite(in2, LOW);
digitalWrite(in3, HIGH);
digitalWrite(in4, LOW); delay(800);
}
}
} |
- Fíjate que he puesto la asignación de velocidad de una manera distinta al código anterior.
- En los giros, ponemos una velocidad lenta, 60, luego paramos una rueda (LOW, LOW) y accionamos la otra (HIGH LOW).
- También se podría parar una rueda mediante: analogWrite(enB, 0);
- Después del giro continuará con la misma velocidad que llevaba.
-----------------------------------
__________________________________
- Comentarios.
- El movimiento del cochecito puede tener problema por la falta de paralelidad de las ruedas.
- Posiblemente un motor gire más rápido que otro, intenta corregirlo mediante la variable velocidad.
___________________________________
___________________________________
___________________________________
- ¿Le ponemos una cámara?
- Síííííííííííí.
- Podemos elegir entre estas dos opciones:
1.- Cámara grabadora.
- Por 7 € podemos poner en nuestro cochecito esta minicámara de unos
2.7 cm x 2.7 cm x 2.6 cm.
- Realiza la grabación en una SdCard de entre 2 GB y 32 GB.
-
Resolución de vídeo: 640x480, formato AVI.
-
Resolución de la imagen: 1600x1200, formato JPG.
- Mediante esta minicámara podemos grabar en la SdCard el recorrido de nuestro cochecito, luego sacamos la SdCard y la ponemos en nuestro ordenador (o bien conectamos directamente la cámara al ordenador mediante cable USB), veremos un archivo de imagen en formato .AVI en donde estará la grabación, que podremos visualizar en el ordenador.
.... Pero yo quiero ver el recorrido en tiempo real
2.- Cámara retransmisora.
- Bueno, pues entonces compra esta otra que viene a costar unos 17 €. Esta cámara es emisora, es decir, emite en tiempo real lo que esté captando y lo recibe un receptor. Este receptor está conectado a un televisor, podemos ver en ese televisor lo que está captando la cámara.
NOTA: no he utilizado esta cámara, posiblemente al estar la cámara en movimiento sobre el cochecito, se pierda sincronización y calidad en las imágenes recibidas.
Receptor de la cámara. Se conecta a un televisor mediante dos cables RCA, amarillo para la imagen y blanco para el sonido. Se alimenta con una Fuente de Alimentación de 12 V que viene en el paquete del pedido.
Se le conecta la antena y se sintoniza entre 900 MHz y 1200 MHz.
Características:
Sensor de imagen: 1/3 CMOS
CMOS píxeles totales: PAL : 628 H x 582 V
Resolución horizontal: 380 líneas de TV
Ángulo de visión: 62
Iluminación mínima: 1.5 lux/f1.5
Control de ganancia: automático
Alcance efectivo sin obstáculos: 50 m
Canal de frecuencia: 900-1200 MHz
Precaución: Un receptor sólo puede trabajar con una cámara, la cámara no tiene audio
Especificaciones:
Especificaciones del receptor:
Fuente de alimentación: adaptador de AC-DC (dc> 6 V 800 ma)
Consumo de corriente: 400 mA
Consumo de energía: Approx.3W
Temperatura de funcionamiento:-10c-50c/> 14f-> 122F
Temperatura de almacenamiento:-40c-> 85c/-40f> 185F
Humedad de funcionamiento: 85% de humedad relativa
Radio frecuencia:
Tipo de demodulación: FM
Frecuencia: ISM 900 mhz-1230 MHz
Frecuencia intermedia: 480 MHz
Antena: 50 Ohm Conector F
Sensibilidad de recepción: <-75 dBm
El paquete incluye:
1 x Wireless Mini cámara de vigilancia
1x1.2 GHz receptor inalámbrico
1 x a/v cables
1 x adaptador de corriente 9V1A
1 x 12V1A adaptador de corriente
1 x antena
1 x clip de la batería
1 x Manual de usuario
_______________________________________________________
- Otro driver para los motores.
L298 Dual H-Bridge Motor Driver.
L298 Dual H-Bridge Motor Driver.
________________________________
|