Arranque remoto del coche mediante Bluetooth (5 / 8 paso)

Paso 5: Código de Arduino

Probablemente el paso más intimidante para mí en todo este proceso estaba escribiendo el código de Arduino. Como he mencionado anteriormente, este código escrito cosas era todo nuevo para mí. Sin embargo, fue bastante rápida con el diagrama de flujo en la mano.

Usted notará en la primera parte del código que dos señales diferentes se pueden utilizar para iniciar el comando de arranque de coche:

1) envío una "s" a la Arduino a través del módulo de bluetooth (que actúa como un puerto serie) puede utilizarse para iniciar la secuencia de arranque. Esto se usa cuando se arranca el vehículo desde una terminal en una computadora.

2) poniendo un alfiler en el Arduino alta también iniciará la secuencia de salida. Este perno de la entrada en el Arduino está conectado a la tarjeta de Bluetooth. Cuando se utiliza la aplicación de Margarita ON/OFF desde un teléfono Android, la aplicación hará el pin en la placa de Bluetooth a alta, que a su vez será vista por el Arduino y la secuencia de salida comenzar.

Este es mi código:

/ * Programa: arranque remoto de coches
* Autor: Chris Johnson
* Revisado: 05 de diciembre de 2011
*
* Entradas: BT módulo señal "ON"
* Señal de "OFF" BT módulo
* Sensor de RPM del vehículo
* Vehículo Sensor de posición de punto muerto
* Sensor de velocidad del vehículo
* Puerto serie
* Salidas: Relé de Control de ignición
* Accesorios de control
* Relé de Control el arranque
* Embrague de seguridad interruptor relé
* Serial Port
*/

EQUIVALE
Entradas
int BT_on = 2;                                               Bluetooth inputed de señal "ON" al pin 2
int RPM_sens = 3;                                       Sensor de RPM del vehículo introducido al pin 3
int neutral_sens = 4;                                    Sensor de posición de neutro de vehículo introducido al pin 4 (12 voltios +-0,5 voltios)
int speed_sens = 5;                                     Sesor de velocidad del vehículo introducidos al pin 5
int BT_off = 7;                                                Bluetooth "OFF" señal inputed en pin 7

Salidas
int ign_ctrl = 8;                                               Relé de Control de ignición controlada por el pin 8
int start_ctrl = 9;                                             Relé de Control de arranque controlada por el pin 9
int clutch_sfty = 10;                                       Relé de Swithc de seguridad embrague controlado por el perno 10
int acc_ctrl = 11;                                            Accesorio relé de Control controlado por el pin 11

start_time largo sin firmar;                            Variable utilizada para almacenar el momento en el que participa el motor de arranque

char datos = 0;                                                 Variable utilizada para almacenar los datos recibidos a través del puerto serie

DEFINICIONES
void setup()
{
pinMode (BT_on, entrada);                          Definir pines de entradas y salidas
pinMode (RPM_sens, entrada);
pinMode (neutral_sens, entrada);
pinMode (speed_sens, entrada);
pinMode (BT_off, entrada);

pinMode (ign_ctrl, salida);
pinMode (start_ctrl, salida);
pinMode (clutch_sfty, salida);
pinMode (acc_ctrl, salida);

Serial.Begin(9600);                                     Inicializar el puerto serie con una velocidad en baudios de 9600
}

PROGRAMA

Función de bucle: esperar a que un comando de START recibir (comandos por puerto serie o
voltaje aplicado al pin BT_on)
void loop()
{
Si (Serial.available() > 0) //Check si se dispone de datos seriales
{
datos = Serial.read();                                Variable "Datos" del sistema a los datos actualmente disponibles en serie
Check();                                                      Ir a la para función "comprobar" si se dispone de datos en serie
}
else if (digitalRead(BT_on) == HIGH) //Check si módulo BT ha pin alto
{
begin();                                                       Begin Inicio secuencia si el pin es de alta
}
otra cosa
{
Loop();                                                          Esta función de repetición hasta que se recibe un comando de START
}
}

Comprobar funcionamiento: prueba para el carácter propio de BT
check() vacío
{
Si (datos == de ') //Check si ha sido enviada a una "s"
{
begin();                                                  Begin Inicio secuencia si "s" ha sido enviado
}
otra cosa
{
Serial.println ("comando no válido");  Si hay algo que se ha enviado una "s", envía mensaje de error "Comando no válido"
Loop();                                                    Volver al inicio del programa
}
}

Comenzar la función: activar el accesorio y encendido
begin() vacío
{
Delay(500);                                     0.5 demora segundos
digitalWrite (acc_ctrl, HIGH);        Activar accesorios en el
digitalWrite (ign_ctrl, HIGH);         Gire a ON (encendido)
Delay(500);                                      0.5 demora segundos
neutral();                                          Ir a la función «neutral»
}

Neutral de la función: verificar si la transmisión del vehículo en la posición neutral.
Continuar si el vehículo está en punto muerto. Salida Inicio secuencia si el vehículo está en marcha.
void neutral()
{
Si (digitalRead(neutral_sens) == HIGH) //Continue sólo si el vehículo está en punto muerto
{
Start();                                                                Arrancar el vehículo en caso de neutro
}
otra cosa
{
Serial.println ("vehículo no en punto muerto");       En caso de cambios, envía mensaje de error "Vehículo no en punto muerto"
vehicle_off();                                                     Salida Inicio secuencia en caso de cambios
}
}

Función: participar arranque sólo si el motor no está en ejecución.
void start()
{
int RPM = pulseIn (RPM_sens, alta, 1000000);    Obtener valor RPM
if(RPM == 0) //Continue Inicio secuencia sólo si el vehículo no está funcionando.
{
digitalWrite (clutch_sfty, HIGH);             Embrague "Presione"
digitalWrite (acc_ctrl, bajo);                   Apagar accesorios
Delay(500);                                               0.5 demora segundos
digitalWrite (start_ctrl, HIGH);                Realizar arranque
start_time = millis();                                El tiempo en que fue contratado el motor de arranque
starter_engaged();                                 Ir a la función Starter_engaged
}
otra cosa
{
Serial.println ("vehículo ya funcionando");  Mensaje "Vehículo ya corre" si previamente se inició el motor de
vehicle_off();                                                    Salida Inicio secuencia si ya está ejecutando
}
}

Función Starter_engaged: desactivar arrancador después de vehículo de motor de arranque o apagar el motor de arranque si
vehículo no ha comenzado dentro de 4 segundos.
void starter_engaged()
{
int RPM = pulseIn (RPM_sens, alto);            Obtener valor RPM
Si //Continue (RPM > 1000) si el motor ha comenzado (alcanzado bajo ralentí)
{
Serial.println ("motor funcionando");                  Mensaje "Motor en marcha" una vez arrancado el motor
disengage_starter();                                        Ir a disengage_starter después de motor está en marcha
}
else if ((start_time+4000) < millis()) //Test si 4 segundos ha pasado desde que fue contratado el motor de arranque
{

disengage_starter_timeout();                 Ir a disengage_starter si el motor no ha comenzado dentro de 4 segundos de compromiso motor de arranque
}
otra cosa
{
starter_engaged();                                    Repetir esta función si el motor no se ha iniciado o no haya transcurrido 4 segundos
}
}

Función Disengage_starter: desactivar el motor de arranque.
void disengage_starter()
{
digitalWrite (start_ctrl, bajo);                   Desengrane el motor de arranque
digitalWrite (clutch_sfty, bajo);               "Liberación" del embrague
digitalWrite (acc_ctrl, HIGH);                   Activar accesorios en el
vehicle_off_sense();                                Ir a la función vehicle_off_sense
}

Función Disengage_starter_timeout: desactivar el motor de arranque (usado después de 4 segundos ha transcurrido sin un arranque del motor)
void disengage_starter_timeout()
{
digitalWrite (start_ctrl, bajo);                                 Desengrane el motor de arranque
digitalWrite (clutch_sfty, bajo);                              "Liberación" del embrague
Serial.println ("vehículo arranque fallido");      Enviar "Vehículo Inicio fallido"
vehicle_off();                                                            Secuencia de arranque de salida
}

Función Vehicle_off_sense: esperando una señal "off" para el motor en marcha.
Si se recibe ninguna señal "off", se apaga el vehículo transcurrido 30 minutos desde el arranque.
void vehicle_off_sense()
{
móvil int = pulseIn (speed_sens, HIGH);                Obtener la velocidad del vehículo
Si (movimiento > 1000) //Check si el vehículo está en movimiento
{
Serial.println ("vehículo--movimiento");           Enviar "Vehículo de movimiento--" mensaje ifvehcile se está moviendo
vehicle_off();                                                               Apague el vehículo si se mueve
}
else if (start_time + 1800000 < //Check millis()) si han transcurrido 30 minutos desde el arranque del motor
{
Serial.println ("vehículo, tiempo de espera automático");  Mensaje "Vehículo apagado--automático tiempo de espera", si ha sido
funcionar por 30 minutos
vehicle_off();                                                                    Apague el vehículo si el motor está en marcha durante 30 minutos
}
else if (Serial.available() > 0) //Check si ha enviado una señal a través de los datos en serie
{
datos = Serial.read();                                                      Tienda serie envía datos en serie
Si (datos == ' o ') //Check si la señal enviada es un comando de apagado ("o")
{
Serial.println ("vehículo--al mando de usuario");   Mensaje "Vehículo apagado--usuario manda" si los datos en serie están el
comando ("o")
vehicle_off();                                                                     Apagar el vehículo si fuera comando es enviado a través de los datos en serie
}
}
else if (digitalRead(BT_off) == HIGH) //Check si fuera comando se ha enviado vía el módulo de BT
{
Serial.println ("vehículo--al mando de usuario");     Mensaje "Vehículo apagado--usuario ordenó" if OFF
comando fue enviado
vehicle_off();                                                                       Apagar el vehículo si fuera comando fue enviado vía el módulo de BT
}
otra cosa
{
vehicle_off_sense();                                                   Esta función de repetición si ninguna de las anteriores condiciones han sido cumplida
}
}

Vehicle_off función: desactiva el vechile y comienza todo el programa sobre
void vehicle_off()
{
digitalWrite (ign_ctrl, bajo);                           Apague la ignición
digitalWrite (acc_ctrl, bajo);                           Apagar accesorios
Loop();                                                Repetición de programa (busque la orden de marcha)
}

Artículos Relacionados

Cómo actualizar el control remoto del coche rc

Cómo actualizar el control remoto del coche rc

En esta guía explico como actualizar el control remoto del coche rc.lo que necesita:1. el control remoto del coche rc2. eléctrico del alambre (no flexible)3. más lindoEsto es todo, ahora se puede comenzar!Paso 1: Haga la antenaahora es necesario hace
Instalación de arranque remoto de coches!

Instalación de arranque remoto de coches!

Durante casi una década he disfrutado de un arranque a control remoto viper en mi coche. Me encanta la capacidad de calentar el motor y el funcionamiento del aire acondicionado por el momento que me siento en el asiento del conductor.Yo quería la mis
Conecte su arranque remoto de coches a tu RPi\Arduino

Conecte su arranque remoto de coches a tu RPi\Arduino

Lo que necesitarás:MaterialesUn arrancador del coche de control remoto repuestoAlambreMicrocontrolador \ ordenador con GPIO (Raspberry PI, Beagle hueso negro, etc...)Transistor NPN (utilicé un PN2222)Un Resistor (usé 1 K Ohm. otros valores probableme
Altavoces para audio del coche de bluetooth

Altavoces para audio del coche de bluetooth

Esto es una continuación de la configuración de bluetooth.Este tutorial le mostrará cómo hacer de altavoz para los altavoces.Se necesita un taladro: Sierra 4 en agujero, 2 en la sierra.Dremel herramienta: broca, broca de lijado, pulido pocoDebo adver
Sistema de arranque remoto de coches camiones y suv

Sistema de arranque remoto de coches camiones y suv

esto un Instructable sobre cómo hacer una base remota Inicio sistema suv y un coche camión y algunos cortacéspedes de casos lo hice debido a que tenía una llave extra para mi coche así que le dije a mi mismo por qué no controla el interruptor acc y b
Abridor de puerta de garaje de Bluetooth y el arrancador del coche

Abridor de puerta de garaje de Bluetooth y el arrancador del coche

Si eres como yo, casi siempre llevar tu teléfono o están con frecuencia en una computadora. A menudo encuentro más conveniente cuando yo puedo interactuar con las cosas a mi alrededor como puertas de garaje, arrancador del coche, aspersores, mantas e
Coche de Control remoto con Arduino y Bluetooth

Coche de Control remoto con Arduino y Bluetooth

Este proyecto consiste en hacer un coche de control remoto mediante una conexión bluetooth. Este coche está destinado a ser utilizado en un globo hacer estallar la competencia contra otros coches similares. La conexión inalámbrica se consigue mediant
Núcleo de la chispa activa un arrancador del coche de control remoto por WiFi

Núcleo de la chispa activa un arrancador del coche de control remoto por WiFi

Arrancadores remotos en los coches son impresionantes! Caliente el coche durante el invierno y fresco durante el verano. ¿Es bueno tener un mando a distancia, pero lo que si quiere trabajar más lejos?En mi oficina, mi control remoto no puede llegar h
IOS de Bluetooth del coche de RC DIY

IOS de Bluetooth del coche de RC DIY

Hola todos, hoy les mostraré cómo hice un coche de RC, que se puede controlar a través de iOS. Sé lo difícil que es conectar un módulo Bluetooth para el iOS, así que hoy que voy a mostrar cómo la mía, y realmente es bastante simple.Paso 1: Lista de p
Hack del coche - bluetooth controlado por Android app

Hack del coche - bluetooth controlado por Android app

Estoy seguro que cada uno de vosotros puede encontrar en casa sin usar vehículo RC. Estas instrucciones le ayudará a cambiar su viejo coche RC a regalo original :) Debido a que el coche RC que tenía era de tamaño pequeño he elegido Arduino Mini Pro c
Bluetooth coche audio cassete cuando no toma en su estereofonia del coche!

Bluetooth coche audio cassete cuando no toma en su estereofonia del coche!

Problema: construir en sistema audio del coche sin salida de audio jack.Solución: Audio Cassette compacto con integrado bluetooth A2DP para escuchar música directamente desde tu teléfono.Medidas futuras-construir en bluetooth con función manos libres
Añadir Bluetooth a tu vieja-alta fidelidad del coche

Añadir Bluetooth a tu vieja-alta fidelidad del coche

Hola todo el mundo!En este rápido ible te mostraré otra forma de actualizar tu viejo coche con solo 5$ y menos de 30 minutos de trabajo. Si quieres ver la última actualización simple que hice en mi coche, tienes que ver mi ible "Termómetro – actualiz
Añadir bluetooth a la radio del coche

Añadir bluetooth a la radio del coche

Tengo un stereo en mi auto, pero no tiene bluetooth, por lo que aunque bien, ¿por qué no agregarlo?Paso 1: Dongle Pedí un par de dongles de bluetooth de eBay para $14 entrega de china, con apoyo AD2P que era la característica requerida.Desarmarla.Pas
Modificaciones del coche de Control remoto

Modificaciones del coche de Control remoto

Hola, este es mi primer instructable para que por favor sea amable en los comentarios, cualquier critica constructiva es muy bienvenida!Cuando vi la competencia de robot me inspiré y decidí modificar un viejo coche de control remoto que tenía, este i