MONITOR DE VEÍCULO ESTACIONADO

MONITOR DE VEHÍCULO ESTACIONADO

Hoy en día, la mayoría de personas dispone de un coche para sus desplazamientos diarios, gracias a la facilidad de financiación y a las diversas opciones de pago. Con el crecimiento explosivo de las ventas en el sector del automóvil, la gestión del tráfico y el aparcamiento son ahora dos problemas importantes, especialmente en las ciudades metropolitanas. Dejando de lado el problema del tráfico, el aparcamiento se ha convertido en un gran problema, ya sea en oficinas o en casa. No siempre es posible encontrar una plaza de aparcamiento y es posible que tengas que aparcar tu coche en cualquier lugar disponible. Esto llevó a otro problema de robo de automóviles. El automóvil permanece seguro en un estacionamiento, pero cuando se estaciona en un lugar distante, es vulnerable a ser dañado o robado por elementos maliciosos. El sistema de cierre centralizado viene, pero sólo protege el precioso vehículo contra robos y no contra daños intencionados.

En este proyecto se diseñó un Sistema Antirrobo y de Seguridad para Automóviles basado en ATMega8 que se puede instalar junto con Sistemas de Cierre Centralizado. El sistema embebido desarrollado en este proyecto proporciona al usuario un dispositivo de monitorización remota del coche que por defecto funciona como un reloj digital y es capaz de avisar al usuario si algún elemento malicioso intenta dañar el coche, intenta forzar puertas o intenta de otro modo capaz de arrancar el coche ilegalmente usted mismo.

El sistema consta de dos dispositivos a bordo, uno que debe instalarse en el coche y otro un reloj digital que es a la vez un sistema de alerta de seguridad del coche. Ambos dispositivos están construidos sobre el microcontrolador ATMega8. El sistema instalable fue diseñado interconectando el módulo Acelerómetro GY-61, que puede detectar cualquier golpe en el automóvil, y el módulo Bluetooth HC-12, que permite la comunicación de mensajes de alerta al reloj digital remoto y al sistema de seguridad del automóvil. El sistema de monitor remoto se construye mediante la interfaz entre RTC-DS1307 y una pantalla LCD de 16 × 2 caracteres para mostrar mensajes de alerta, de lo contrario, fecha y hora actuales. El dispositivo de monitoreo también se comunica con el sistema integrado instalado a través del módulo Bluetooth HC-12.

Dispositivo integrado en el coche para protección y robo de vehículo

Figura 1: Prototipo de dispositivo integrado en el automóvil para protección y robo de automóviles

Ambos dispositivos están diseñados en microcontroladores AVR ATMega8 y están programados utilizando C integrado. El código fue escrito, compilado y grabado en los respectivos sistemas utilizando AVR Studio.

Monitoreo remoto del estado del automóvil con dispositivo de reloj digital en tiempo real
Fig. 2: Prototipo de monitorización remota del estado del vehículo y dispositivo de reloj digital en tiempo real
Componente requerido – Diagrama de bloques - Diagrama de bloques del sistema de seguridad y antirrobo de automóviles basado en AVR ATmega8
Figura 3: Diagrama de bloques del sistema de seguridad y antirrobo de automóviles basado en AVR ATmega8
Habilidades previas – Antes de intentar este proyecto, el desarrollador debe tener los siguientes requisitos previos: 1) El Desarrollador debe tener conocimientos básicos del microcontrolador AVR. 2) El desarrollador debe estar familiarizado con la programación en AVR Studio 4. 3) El desarrollador debe saber cómo conectar la pantalla LCD de 16×2 con el AVR. 4) El desarrollador debe saber cómo conectar el RTC con el AVR. Conexiones de circuito –
Este sistema implica dos dispositivos integrados: uno, un dispositivo de instalación en el automóvil y el segundo, un dispositivo de monitoreo remoto. El dispositivo montado en el automóvil está equipado con sensores para detectar cualquier incidente de avería en el automóvil y actualiza continuamente mensajes de alerta en tiempo real al dispositivo de monitoreo remoto cada 500 milisegundos a través de Bluetooth. El dispositivo de monitoreo remoto está diseñado como un reloj digital que recuerda continuamente al dispositivo de instalación del automóvil que actualice el estado y, si hay alguna alerta, la muestra en su pantalla.
Sistema antirrobo de coche en una placa de pruebas.
Fig. 4: Imagen del sistema antirrobo del coche en una protoboard
El dispositivo de instalación en el automóvil se diseña realizando las siguientes conexiones de circuito:
1) AVR ATmega8: Atmega8 es un microcontrolador AVR de 8 bits con 23 pines de E/S. Interactúa con el sensor acelerómetro GY-61 y el módulo Bluetooth HC-12 en el circuito de este proyecto.
2) Módulo acelerómetro GY-61 (ADXL335): el GY-61 es un módulo acelerómetro de 3 ejes. Interactúa con el controlador para detectar cualquier vibración en el automóvil. El módulo viene con 5 terminales: VCC, GND, El pin X del GY-61 está conectado al pin 23 del ATmega8, que es el canal 0 del ADC del microcontrolador. El pin Y del GY-61 está conectado al pin 24 del ATmega8, que es el canal 1 del ADC del microcontrolador, y el pin Z del GY-61 está conectado al pin 25 del ATmega8, que es el ADC canal 2 del microcontrolador.
3) Módulo HC-12: HC-12 es un módulo de comunicación de puerto serie inalámbrico Bluetooth. Se utiliza para transmitir los datos desde el dispositivo de instalación en el automóvil al dispositivo de monitoreo remoto. El módulo tiene 5 terminales: VCC, GND, Rx, Tx y SET. El pin VCC del HC-12 está conectado a 5 V CC y el pin GND del HC-12 está conectado a tierra común. El pin TX del HC-12 está conectado al segundo pin del ATmega8, el pin RX del HC-12 está conectado al tercer pin del ATmega8 y el pin SET del módulo HC-12 está conectado al 4to pin del ATmega8.
4) Conexiones opcionales: además de estas conexiones, el dispositivo de instalación del automóvil se puede conectar para usar tres canales ADC más del microcontrolador ATMega8. Ya se utilizan tres canales ADC para leer datos del sensor acelerómetro GY-61. Se puede utilizar un canal ADC para registrar cambios en el voltaje debido al arranque automático del automóvil. Opcionalmente se pueden utilizar dos canales ADC para conectar el interruptor/relé de la llave de encendido y el sistema de bloqueo de puertas.
5) Fuente de energía: el dispositivo de instalación del automóvil puede funcionar con la batería del automóvil. El voltaje de la batería deberá regularse a 5 V CC mediante un regulador de voltaje IC como el 7805.
El dispositivo de monitoreo remoto se diseña realizando las siguientes conexiones de circuito:
1) AVR ATmega8: se utiliza el mismo microcontrolador AVR ATMega8 en el dispositivo de monitoreo remoto. En el dispositivo de monitoreo remoto, el controlador interactúa con una pantalla LCD de 16 × 2 caracteres, un módulo Bluetooth HC-12 y RTC DS1307 en el circuito de este proyecto.
2) Pantalla LCD de 16×2: una pantalla LCD de caracteres interactúa con el controlador para mostrar la fecha y hora actuales y el estado del vehículo. Los pines VSS/GND y LED del módulo LCD están conectados a tierra y los pines VCC y LED+ del LCD están conectados a 5 V CC. El pin VEE de la pantalla LCD está conectado a un trimpot de 5k. El pin EN de la pantalla LCD está conectado al pin 16 del ATmega8 y el pin RS está conectado al pin 15 del ATmega8. El pin RW de la pantalla LCD está conectado a tierra. La pantalla LCD interactúa en modo de 4 bits. Así, los pines de datos D4, D5, D6 y D7 están conectados a los pines 26, 25, 24 y 23 del ATmega8 respectivamente.
3) RTC DS1307: RTC DS1307 es un reloj en tiempo real que interactúa con el AVR ATmega8 para mostrar la hora y fecha actuales de forma predeterminada en la pantalla. El octavo pin del DS1307 está conectado a 5 V CC y el cuarto pin está conectado a tierra. Los pines primero y segundo están conectados al oscilador de cristal externo. El tercer pin del DS1307 está conectado al terminal positivo de una batería de 3V y el cuarto pin está conectado al terminal negativo de una batería de 3V. El séptimo pin de DS1307 está conectado al terminal negativo de un LED, mientras que el terminal positivo del mismo LED está conectado a 5 V CC a través de una resistencia pull-up. Los pines 5 y 6 del DS1307 están conectados a los pines 27 y 28 del microcontrolador ATmega8.
4) Transistor BC548 – BC548 es un transistor NPN que se utiliza para activar el zumbador de la señal del microcontrolador AVR. El terminal base del transistor está conectado al pin 14 del ATmega8. El terminal del colector está conectado al zumbador y el terminal del emisor está conectado a tierra.
5) Módulo HC-12: el mismo módulo de comunicación inalámbrico de puerto serie Bluetooth se utiliza en el dispositivo de monitoreo remoto para comunicar mensajes de alerta con el dispositivo de instalación en el automóvil. El pin VCC del HC-12 está conectado a 5 V CC y el pin GND del HC-12 está conectado a tierra. El pin TX del HC-12 está conectado al segundo pin del ATmega8, el pin RX del HC-12 está conectado al tercer pin del ATmega8 y el pin SET del módulo HC-12 está conectado al cuarto pin del microcontrolador ATmega8.
Cómo funciona el circuito –
El funcionamiento de este sistema se puede entender por lo que hacen ambos dispositivos de comunicación inalámbricos integrados. La función y el funcionamiento de ambos dispositivos se describen a continuación:
Dispositivo de instalación en el automóvil: cuando el controlador del dispositivo del automóvil recibe alimentación de una fuente de 5 V CC, los LED rojo y verde comienzan a brillar por un momento y se detienen. Finalmente, solo el LED rojo se ilumina por un momento, lo que es una indicación de que el dispositivo está verificando el módulo HC-12 y leyendo voltajes analógicos del módulo del acelerómetro en los pines del ADC (ADC0 a ADC5). Después de comprobar que el módulo Bluetooth funciona bien y que los datos analógicos del sensor del acelerómetro se han recibido correctamente, el LED rojo deja de brillar. El LED verde parpadea continuamente, lo que indica que el microcontrolador está verificando el estado de todos los canales ADC cada 500 milisegundos. Si el LED rojo se enciende continuamente, indica que hay un problema de comunicación con el módulo HC-12. Si el LED rojo comienza a parpadear, esto indica que uno o más canales ADC están leyendo cambios de voltaje debido a vibraciones o fluctuaciones en la fuente de alimentación. Una vez que se recibe la solicitud de estado del dispositivo de monitoreo remoto, el LED rojo se detiene. Por lo tanto, el LED rojo se utiliza como indicador de error y el LED verde se utiliza como intermitente.
Dispositivo de monitoreo remoto: el dispositivo de monitoreo remoto, de forma predeterminada, actúa como un reloj digital en tiempo real mientras emite cualquier mensaje de alerta y activa el timbre cuando recibe el mensaje apropiado del dispositivo del automóvil. Cuando el controlador del dispositivo de monitoreo remoto recibe alimentación de una fuente de 5 V CC, inicialmente todos los LED conectados brillan por un momento y el zumbador genera un pequeño pitido. Después de eso, la pantalla LCD muestra un mensaje de bienvenida y verifica la comunicación y conexión del módulo HC-12 con el módulo RTC DS1307. Si hay un error en la comunicación a través del módulo HC-12 o DS1307, se mostrará un mensaje de error en la pantalla LCD. Si todas las conexiones están bien, comenzará a mostrar la hora y fecha actuales en la pantalla LCD. El dispositivo sigue enviando "?" envía un carácter al dispositivo del automóvil como una solicitud de estado cada 500 milisegundos y espera la respuesta. Si la respuesta del dispositivo del automóvil contiene algún mensaje de alerta, el timbre recibirá una señal PWM para emitir un pitido y la pantalla LCD mostrará el mensaje de alerta. Para detener el pitido, el usuario debe presionar el interruptor S1, que configura el microcontrolador para el siguiente ciclo de monitoreo. Si el RTC DS1307 no está conectado, se debe poner en cortocircuito a través del puente J1, que pasa por alto el RTC y muestra un mensaje formal "Que tengas un buen día" en la pantalla LCD.
La hora y la fecha en el dispositivo de monitoreo remoto se pueden actualizar usando los botones S2 y S3. Cuando se presiona el botón S2, el dispositivo ingresa al modo de edición. El botón S3 se puede usar para cambiar el valor del parámetro seleccionado, después de lo cual se puede usar el botón S2 para seleccionar el parámetro que necesita cambiarse. Una vez actualizada la hora y fecha, el usuario deberá abandonar el dispositivo durante 5 segundos. Después de 5 segundos, la hora y la fecha se guardan en el RTC DS1307 y la fecha/hora actual se muestra en la pantalla LCD.
El dispositivo dentro del vehículo puede comunicar los siguientes mensajes de alerta al dispositivo de monitoreo remoto:
1) “SIN SEÑAL. REVISAR VEHÍCULO Y EMBARQUE” – Este mensaje significa que el vehículo está fuera del alcance de la señal (robo) o que el dispositivo del automóvil no responde por falta de energía. Por lo tanto, el usuario debe comprobar inmediatamente el estado del vehículo y de la batería.
2) “SACUDOS/VIBRACIONES/MOTOR/LLAVE USADA” – Este mensaje significa que las entradas ADC del dispositivo del automóvil han observado algunos cambios en sus voltajes de señal, ya sea por GY-61 o por el arranque del motor o la apertura de la puerta, etc.
3) “SEÑAL DÉBIL O LARGA DISTANCIA”: este mensaje significa que el dispositivo del automóvil recibió la señal codificada, pero tiene valores incorrectos. Por lo tanto, el usuario necesita estacionar el vehículo un poco más cerca para deshacerse de las malas señales y comunicar los mensajes de estado correctamente.
4) “FECHA y HORA” o muestra “TENGA UN BUEN DÍA” – Estos mensajes significan que no se observaron errores y que el vehículo se encuentra en condiciones seguras.
Fecha y hora mostradas en el sistema antirrobo del coche.
Fig. 5: Imagen de fecha y hora mostrada en el sistema antirrobo del automóvil
Fig. 6: Mensaje de alerta mostrado en el sistema antirrobo del vehículo
Precauciones -
La instalación del dispositivo en el automóvil implica esencialmente las siguientes precauciones:
1) El dispositivo instalado en el vehículo debe instalarse en un lugar que quede protegido contra sobrecalentamiento del motor, derrames de agua, etc. .
2) El usuario debe contar con la ayuda de un mecánico especializado para conectar las Entradas de Señal 1 y 2, que son conexiones opcionales de sensores para el indicador de puerta abierta y el indicador de llave de encendido. Estas conexiones sólo las puede realizar un mecánico experimentado.
Guía de programación –
Ambos circuitos están basados ​​en el AVR ATmega8. El AVR se programa en C integrado usando AVR Studio 4 o se puede programar a través de otras herramientas de programación como Atmel Studio o Notepad++, que también se pueden usar para escribir y compilar el código. En primer lugar, el usuario debe agregar los archivos de biblioteca requeridos adjuntos a continuación en un archivo zip y luego copiar y pegar el código en AVR Studio 4 para generar el archivo hexadecimal. En el dispositivo automotriz, el ATmega8 se utiliza para detectar vibraciones a través del GY-61 y los datos detectados en el ADC se envían al dispositivo de monitoreo remoto a través del módulo Bluetooth HC-12. El dispositivo de monitoreo remoto muestra por defecto la fecha y hora actuales, de lo contrario muestra cualquier mensaje de advertencia de la instalación del automóvil en una pantalla LCD de caracteres.
El código AVR del dispositivo del automóvil tiene la siguiente división:
Constantes utilizadas en el código: –
#define F_CPU 1000000UL: constante utilizada para definir la frecuencia de reloj de la MCU
#define FCPU_BY_100 F_CPU/100: -Frecuencia dividida por 100 para calcular la velocidad de transmisión
#define ADCAVGDIFF 100: – utilizado para determinar el cambio de valor de ADC
#define ADCEXTREMEDIFF 50: – utilizado para determinar el cambio de valor de ADC
#define BLINKER_LED 0b00100000: - LED parpadeante conectado al pin 5 del puerto D
#define ERROR_LED 0b00100000: LED de error conectado al pin 5 del puerto B
#define HC12_SET 0b00000100: -El pin SET del HC-12 está conectado al pin 2 del puerto D
#define ON 1: – Para encender el LED
#define OFF 0: -Para apagar el LED
#define TOGGLE 2: -Para hacer parpadear el LED
#define USART_MAX_RECV_BUF_SIZE 10: – Tamaño máximo de datos recibidos
Variable utilizada en el código: –
uint8_t isHC12ERROR = 0: – verificar error en la comunicación HC-12
uint8_t USART_RECD_DATA_POS=0: – la posición de la matriz de búfer
uint8_t isUSARTQUERY=0: – si se solicita RX para consulta
uint8_t USART_RXD = 0: – Para almacenar los datos recibidos
int ADCHIVALUE(6)={0, 0, 0, 0, 0, 0}: – Para establecer el valor predeterminado del ADC
int ADCLOVALUE(6)={1024,1024,1024,1024,1024,1024}: – Para establecer el valor ADC predeterminado
int ADCVALUE (6): – Para almacenar valores ADC
int ADCAVGVALUE(6): – el valor promedio del ADC
uint8_t ADC_ERROR_CODE = 0: -Se utiliza para enviar código a RX si hay un cambio en el valor de ADC
Archivo de encabezado y bibliotecas utilizadas en el código: –
#incluir : – Cabecera AVR estándar para entrada/salida
#incluir :-Encabezado AVR estándar para proporcionar retrasos de tiempo
#incluir :-Encabezado AVR estándar para interrupciones
Función utilizada en el código: –
initPorts: - inicializa el puerto como entrada y salida
initAdc: -ADC inicializado
readAdc: -Lee el valor de los canales.
USART_init: - inicializa la comunicación UART
HC12_sendChar: – envía carácter a HC-12
HC12_sendString: - envía una cadena a HC-12
HC12_sendCommand: - envía comandos al HC-12
HC12_start: – comprobar la comunicación HC-12
setBlinker: -controla el LED intermitente
setError: -controla el LED de error
sendStatus: - envía el estado de los canales ADC
readAdcValues: -Lee el valor ADC de todos los canales.
setAdcValues: -establecer valores ADC predeterminados
checkAdcValues: - comprueba si hay un cambio en el valor del ADC
Lo sé: - habilitar interrupciones
Algoritmo: –
1) Inicialmente, en el programa principal, el puerto se inicializa para entrada y salida, luego el LED parpadeante y el LED de error se encienden por un momento y ambos se apagan. Después de esto, se inicializó UART para iniciar la comunicación.
_delay_ms(100);
puertos iniciales;
_delay_ms(10);
establecerBlinker(ON);
establecerError(ON);
_delay_ms(500);
establecer intermitente (apagado);
establecerError(APAGADO);
USART_init;
_delay_ms(100);
2) El ADC se inicializa y el LED de error se enciende, luego se usa una función para configurar los valores predeterminados del ADC. Después de eso, el LED de error se apaga. La función "saber" se utiliza para habilitar interrupciones. Después de eso, se verifica e inicia la comunicación a través de HC-12.
initAdc;
_delay_ms(100);
establecerError(ON);
establecerAdcValues;
_delay_ms(200);
establecerError(APAGADO);
saber ;
HC12_inicio;
3) El programa ingresa a un bucle while, donde la variable de bucle se usa para hacer parpadear el LED de Error cuando hay un error en los valores del ADC. En los primeros 10 ciclos busca errores y coincide con diferentes condiciones.
si (bucle>10)
{
establecerBlinker(ALTERNAR);
si (esHC12ERROR)
establecerError(ON);
de lo contrario si (ADC_ERROR_CODE)
setError(ALTERNAR);
otro
establecerError(APAGADO);
ciclo=0;
}
4) La función “readAdcValues” se usa para leer los valores ADC de todos los canales y la función “checkAdcValues” se usa para verificar los valores en busca de errores.
leerAdcValues ​​​​;
comprobarAdcValues;
5) Si el dispositivo de monitoreo remoto envía una solicitud de estado, se enviará mediante el siguiente fragmento de código.
si (esUSARTQUERY==1)
{
enviarestado;
esUSARTQUERY = 0;
ADC_ERROR_CODE=0;
}
El código AVR del dispositivo de monitoreo remoto tiene la siguiente división:
Constantes utilizadas en el código: –
#define F_CPU 1000000UL: constante utilizada para definir la frecuencia de reloj de la MCU
#define FCPU_BY_100 F_CPU/100: - Frecuencia dividida por 100 para calcular la velocidad de transmisión
#define ON 1: – Para encender el LED
#define OFF 0: – Para apagar el LED
#define TOGGLE 2: – Para hacer parpadear el LED
#define ERROR 1: – se utiliza cuando hay un error
#define BUTTONS_PORT PIND: – puerto del botón definido como puerto D
#define BUTTON_UP 0b10000000: - S3 está conectado al pin 7 del puerto D
#define BUTTON_NEXT 0b01000000: - S2 está conectado al pin 6 del puerto D
#define BUTTON_MUTE 0b00100000: - S1 está conectado al pin 5 del puerto D
#define BUTTON_SETTING 0b01000000: - S2 está conectado al pin 6 del puerto D
#define RTC_BIT 0b00010000: - puente J1 conectado al cuarto pin del puerto D
#define HC12_SET 0b00000100: -El pin de configuración del HC-12 está conectado al pin 2 del PUERTO D
#define BLINKER_LED 0b00100000: - LED parpadeante conectado al pin 5 del PUERTO B
#define BUZZER_BIT 0b00000001: -el zumbador está conectado al pin 0 del puerto B
#define USART_MAX_RECV_BUF_SIZE 40: – el tamaño máximo del valor del buffer recibido
Variables utilizadas en el código: –
char USART_RECV_BUF(USART_MAX_RECV_BUF_SIZE+1): – utilizado para almacenar el búfer recibido
char TEMP_STR(20): – para almacenar el valor de tiempo
uint8_t CURRENT_PROCESS = 0: – Reloj de proceso
uint8_t HC12error = 0: – usado para verificar si hay errores en HC-12
uint8_t RTCerror = 0: - usado para verificar el error en RTC
uint8_t isUSART_DATA_READY=0: -comprueba los datos recibidos de Tx
uint8_t USART_RECD_DATA_POS=0: – la posición de la matriz de búfer
uint8_t USART_RXD = 0: – Para almacenar los datos recibidos
uint8_t errorloop = 0: -indicación del zumbador de control
Archivo de encabezado y bibliotecas utilizadas en el código: –
#incluir : – Cabecera AVR estándar para entrada/salida
#incluir :-Encabezado AVR estándar para proporcionar retrasos de tiempo
#incluir :-Encabezado AVR estándar para interrupciones
#incluir :-usado para realizar operaciones de cadena
#incluye “FHN_LCD4_LIB.C”: – Biblioteca LCD
#include “FHN_TWI_LIB.C”: -biblioteca para interfaz de dos cables
#incluye “fhn_rtc_ds1307_lib.C”: -Biblioteca RTC
Funciones utilizadas en el código: –
initPorts: - inicializa el puerto como entrada y salida
initAdc: -ADC inicializado
readAdc: -Lee el valor de los canales.
USART_init: - inicializa la comunicación UART
HC12_sendChar: – envía carácter a HC-12
HC12_sendString: - envía una cadena a HC-12
HC12_sendCommand: - envía comandos al HC-12
HC12_start: – comprobar la comunicación HC-12
setBlinker: -controla el LED intermitente
setBuzzer: – controla el timbre
showDateTime: - muestra la hora en la pantalla LCD
sendMessage: - envía mensaje a través de HC-12
editDateTime: -editar hora para RTC
clearUsartRx: – Borra los datos recibidos en el UART
Lo sé: - habilitar interrupciones
Algoritmo: –
1) Inicialmente, la variable “errorloop” se utiliza para apagar el timbre cuando hay un error. El puerto se inicializa para entrada y salida. A continuación, el LED intermitente se enciende durante un momento y se apaga. Después de eso, el timbre emite un breve pitido.
bucle de error uint8_t = 0;
_delay_ms(100);
puertos de inicio;
_delay_ms(500);
configurar el intermitente (ENCENDIDO);
_delay_ms(500);
configurar el intermitente (APAGADO);
establecerZumbador(ON);
_delay_ms(200);
establecerZumbador(APAGADO);
2) La pantalla LCD se inicializa y luego se borra, lo que borra cualquier valor inútil. Al principio, la pantalla LCD muestra el mensaje "Monitoreo de vehículo estacionado –fnn/.." que indica que la pantalla LCD está funcionando correctamente. Luego el LED intermitente se enciende por un momento y luego se apaga.
Inicio_LCD ( );
_delay_ms(100);
LCD_clrscr;
LCD_writeString(“VEHÍCULO ESTACIONADO”);
LCD_gotoRowCol(2, 1);
LCD_writeString(“MONITOR -fhn/..”);
configurar el intermitente (ENCENDIDO);
_delay_ms(500);
configurar el intermitente (APAGADO);
_delay_ms(100);
3) La función "saber" se utiliza para habilitar interrupciones. Luego, la UART se inicializa para la comunicación Bluetooth. Nuevamente el LED intermitente permanece encendido por un momento y luego se apaga. Se inicia la comunicación a través de HC-12 y se comprueba si hay algún mensaje de alerta a través de la comunicación HC-12. Nuevamente, el LED intermitente permanece encendido por un momento y luego se apaga. La pantalla LCD está limpia.
saber ;
USART_init;
configurar el intermitente (ENCENDIDO);
_delay_ms(500);
configurar el intermitente (APAGADO);
_delay_ms(500);
Error HC12 = HC12_start ( );
configurar el intermitente (ENCENDIDO);
_delay_ms(500);
configurar el intermitente (APAGADO);
_delay_ms(500);
//RTC_Inicio;
_delay_ms(100);
LCD_clrscr;
4) El código verifica si el puente J1 está conectado y luego omite el RTC. Si J1 no está conectado, lee el valor RTC. Si hay un error al leer los datos RTC, se mostrará el mensaje "NO conectado". Luego la pantalla LCD se apaga.
si ((PIND y RTC_BIT) == 0)
{
LCD_writeString(“COMPROBACIÓN DE DESVÍO”);
LCD_gotoRowCol(2, 1);
LCD_writeString(”RTC:DS1307″);
Error RTC = 5;
}
otro
{
LCD_writeString(“Verificar RTC:DS1307”);
LCD_gotoRowCol(2, 1);
RTCerror=RTC_getTime;
strcpy (TEMP_STR, TIMESTR);
si (RTCerror) //error
LCD_writeString(“ERROR”);
de lo contrario si (strcmp (TIMESTR, “HH:MM:SS”)==0)
{
LCD_writeString(“NO CONECTADO”);
Error RTC = 2;
}
}
_delay_ms(1500);
LCD_clrscr;
5) El programa entra en un bucle while. Primero, configura el LED para que parpadee en cada ciclo. Borra la UART. Si se presiona el interruptor S1, el timbre se apagará. Si se presiona el interruptor S2, ingresará al modo de edición de hora. Envía una solicitud de estado al dispositivo del automóvil a través de Bluetooth.
establecerBlinker(ALTERNAR);
borrarUsartRx;
si ((BUTTONS_PORT & BUTTON_MUTE) == 0)
{
bucle de error = 0;
}
si ((BUTTONS_PORT & BUTTON_SETTING) == 0)
{
editarFechaHora;
}
enviar mensaje ( "?" );
6) Si el puente J1 está conectado, se mostrará el mensaje “TENGA UN BUEN DÍA MONITOR DEL VEHÍCULO” en la pantalla LCD. De lo contrario, si J1 no está conectado, se mostrarán la hora y fecha actuales del RTC.
si (bucle de error==0)
{
si (error RTC)
{
LCD_gotoRowCol(1,1);
LCD_writeString ("QUE TENGAS UN BUEN DÍA");
LCD_gotoRowCol(2,1);
LCD_writeString (“MONITOR DEL VEHÍCULO “);
_delay_ms(100);
}
otro
{
RTC_getDatos;
_delay_ms(100);
LCD_gotoRowCol(1,1);
LCD_writeString (“FECHA: “);
LCD_writeString (FECHASTR);
LCD_gotoRowCol(2,1);
LCD_writeString (“TIEMPO: “);
RTC_getTime;
LCD_writeString (TIMESTR);
LCD_writeString(””);
}
}
7) Si los datos recibidos de UART tienen algunos valores incorrectos, se mostrará el mensaje "SEÑAL DÉBIL O LARGA DISTANCIA" en la pantalla LCD. Si los datos recibidos contienen algún mensaje de advertencia, se mostrará el mensaje “JEARK/VIBRATION/ENGINE/KEY USED” en la pantalla LCD. Si no hay comunicación entre los dos módulos HC-12, se mostrará el mensaje "NO HAY SEÑAL VERIFICAR EL VEHÍCULO Y LA TARJETA" en la pantalla LCD.
si (esUSART_DATA_READY==1)
{
si (USART_RECV_BUF(0) != '<' USART_RECV_BUF(3) != '>' (USART_RECV_BUF(1)!=USART_RECV_BUF(2)) )
{
bucle de error ++;
LCD_gotoRowCol(1,1);
LCD_writeString (“SEÑAL DÉBIL O “);
LCD_gotoRowCol(2,1);
LCD_writeString (“LARGA DISTANCIA”);
}
de lo contrario si (USART_RECV_BUF(1)!= 0x80)
{
bucle de error ++;
si (USART_RECV_BUF(1) y 0x07)
{
LCD_gotoRowCol(1,1);
LCD_writeString (“empujes/vibración/”);
}
si (USART_RECV_BUF(1) y 0x38)
{
LCD_gotoRowCol(2,1);
LCD_writeString (“MOTOR/LLAVE USADA “);
}
}
}
else // la señal está fuera de cobertura
{
bucle de error ++;
LCD_gotoRowCol(1,1);
LCD_writeString (“SIN SEÑAL. COMPROBAR”);
LCD_gotoRowCol(2,1);
LCD_writeString (“VEHÍCULO Y PLACA PLACA.”);
}
8) Si el dispositivo del automóvil detecta alguna vibración, activa el timbre para emitir un pitido.
si (bucle de error > 0)
{
_delay_ms(250);
establecerZumbador(ON);
bucle de error = 1;
}
Consulte el código completo y comience rápidamente a construir este apasionante proyecto. Tenga en cuenta que el sistema diseñado aquí está destinado a automóviles y otros vehículos de cuatro ruedas. Sin embargo, se puede instalar en bicicletas y scooters donde solo se pueden usar tres canales ADC para detectar vibraciones y un canal ADC para detectar encendido o arranque automático.
Desafío de bricolaje –
Qué emocionante hubiera sido si, en lugar de recibir los mensajes de alerta en un dispositivo de monitoreo remoto integrado, el usuario pudiera recibir los mismos mensajes en su teléfono inteligente. Intente desarrollar el mismo proyecto con una aplicación móvil donde el dispositivo de instalación en el automóvil se conecta a una aplicación móvil y la aplicación móvil muestra y emite pitidos de advertencia.
Compra este proyecto ahora –
Cantidad requerida de componente
Microcontroladores ATmega8(A)2
Pantalla LCD de 16×2 1
HC-12 2 módulos
GY-61 Módulo 1
DS 1307 CI 1
7805 CI2
Transistor BC548 1
Batería de 3V (C2032) 1
Timbre piezoeléctrico 1
Potenciómetro 5K 1
Condensador 470uf 25V 2
Condensador 47uf 16V 2
Condensador de 8 discos de 0,1 uf
resistencia 1K 2
Resistencias 3.3K 11
Resistencia 10K 7
Resistencia 33K 3
Resistencia 47K 1
1N4007 4 Diodos
LED de 3 mm 6
32,758 kHz Cristal 1
1 soporte para batería de 3V
Base 2 CI de 28 pines
Base 1 del circuito integrado de 8 pines
Botón táctil de 2 pines 5
Presione para encender los interruptores 2
Programador AVR 1
PCB/placa de pruebas según sea necesario
Cable de conexión según sea necesario

Código fuente del proyecto

 //Programa para
 ​/ *

 nombre de archivo: ParkedVehicleRx.C

 autor: fhn

 fecha: 02-marzo-2019

 mcu: atmega8 (A)

 Uso: para recibir datos a través de HC-12 y configurar la alarma en consecuencia. de lo contrario, solo muestra la fecha y la hora

 */


 #definir F_CPU 1000000UL

 #definir FCPU_BY_100 F_CPU/100


 #definir EN 1

 #definir APAGADO 0

 #definir ALTERNAR 2

 #definir ERROR 1

 #definir Aceptar


 #definir BOTONES_PUERTO PIND

 #definir BOTÓN_ARRIBA 0b10000000

 #definir BUTTON_NEXT 0b01000000

 #definir BUTTON_MUTE 0b00100000

 #definir BUTTON_SETTING 0b01000000

 #definir RTC_BIT 0b00010000 //puertoD

 #definir HC12_SET 0b00000100 //puertoD

 
#definir BLINKER_LED 0b00100000 //puertoB

 #definir BUZZER_BIT 0b00000001 //puertoB



 #definir USART_MAX_RECV_BUF_SIZE 40

 char USART_RECV_BUF(USART_MAX_RECV_BUF_SIZE+1);

 carácter TEMP_STR(20);



 #incluir

 #incluir

 #incluir

 #incluir


 uint8_t CURRENT_PROCESS = 0;

 uint8_t HC12error=0, RTCerror=0;

 uint8_t esUSART_DATA_READY=0;

 uint8_t USART_RECD_DATA_POS=0;

 uint8_t USART_RXD = 0;


 #incluir "FHN_LCD4_LIB.C"

 #incluir "FHN_TWI_LIB.C"

 #incluye "fhn_rtc_ds1307_lib.C"

 //================================================== =============

 anular los puertos de inicio ( )

 {

 DDRB=0;

 DDRC=0;

 DDRD=0;

 LCD_DATA_REG = (LCD_DATA_BITS);

 LCD_CTRL_REG = (LCD_ENABLE LCD_RS);


 DDRD = 0b00000110;

 DDRB = (BLINKER_LED BUZZER_BIT);


 cli; //todas las interrupciones deshabilitadas

 }

 //================================================== =============

 int USART_init ()

 {


 // INICIA EL FORMATO 9500-8-N-1


 UBRRL = 12;

 UBRRH = 0;


 UCSRA = (1<  '9') ch="0";

 si (ch>'3' && pos==0)

 ch="0";

 si (ch>'1' && (pos==3 pos==7))

 ch="0";

 si (ch>'1' && DATESTR(0)=='3' && pos==1)

 ch="0";
 
si (ch>'2' && DATESTR(3)=='1' && pos==4)

 ch="0";

 FECHASTR(pos%10) = canal;

 LCD_gotoRowCol(1,1);

 LCD_writeString (FECHASTR);

 }

 demás

 {

 canal = TIMESTR(pos%10);

 ch++; si (ch>'9') ch="0";

 si (ch>'5' && (pos==13 pos==16))

 ch="0";

 si (ch>'2' && pos==10)

 ch="0";

 si (ch>'3' && TIMESTR(0)=='2' && pos==11)

 ch="0";

 TIMESTR(pos%10) = canal;

 LCD_gotoRowCol(2,1);

 LCD_writeString (TIMESTR);

 }

 }

 else if ((BUTTONS_PORT & BUTTON_NEXT) == 0 ) // SE MUEVE A LA SIGUIENTE POSICIÓN

 {

 //está editado=1;

 bucle = 0;

 pos++;

 si (pos>=18)

 pos=0;

 si (pos==2 pos==5 pos==12 pos==15)

 pos++;

 if (pos==6) // para la serie del año 2000

 pos++;

 if (pos==7) // para la serie del año 2000

 pos++;

 }

 demás

 {

 bucle++;

 }

 }

 // configurado para ser infalible excepto el 29 de febrero en años bisiestos (siempre 28 días como máximo)

 si (está editado==1)

 {

 si (FECHASTR(0)=='3' && FECHASTR(1)>'1')

 { FECHASTR(1)='1'; }

 si (FECHASTR(3)=='1' && FECHASTR(4)>'2')

 { FECHASTR(4)='2'; }

 si ( FECHASTR(0)=='3' && FECHASTR(3)=='0' && FECHASTR(4)=='2')
 
{ FECHASTR(0)='2'; FECHASTR(1)='8'; }

 if ( FECHASTR(0)=='3' && FECHASTR(1)>'0' && FECHASTR(3)=='0' &&(FECHASTR(4)=='4' FECHASTR(4)=='6' FECHASTR(4)=='9' ))

 { FECHASTR(1)='0'; }

 si ( FECHASTR(0)=='3' && FECHASTR(1)>'0' && FECHASTR(3)=='1' && FECHASTR(4)=='1')

 { FECHASTR(1)='0'; }

 RTC_WriteDate (FECHASTR);

 RTC_WriteTime (TIMESTR);

 LCD_gotoRowCol(2,11);

 LCD_writeString("GUARDADO");

 _delay_ms (2000);

 }

 LCD_writeCommand (0x0C);



 }

 //================================================== =============

 anular clearUsartRx ( )

 {

 USART_RECD_DATA_POS=0;

 esUSART_DATA_READY=0;

 USART_RECV_BUF(0)=0;

 USART_RECV_BUF(1)=0;

 USART_RECV_BUF(2)=0;

 USART_RECV_BUF(3)=0;

 }

 //================================================== =============

 int principal()

 {


 bucle de error uint8_t = 0;


 _delay_ms (100);


 puertos de inicio;

 _delay_ms (500);


 establecerBlinker(ON);

 _delay_ms (500);

 establecer intermitente (apagado);

 establecer zumbador ( ENCENDIDO );

 _delay_ms (200);

 establecer zumbador ( APAGADO );


 Inicio_LCD ( );

 _delay_ms (100);


 LCD_clrscr;

 LCD_writeString("VEHÍCULO ESTACIONADO");
 
LCD_gotoRowCol(2, 1);

 LCD_writeString("MONITOR -fhn/..");


 establecerBlinker(ON);

 _delay_ms (500);

 establecer intermitente (apagado);

 _delay_ms (100);




 saber ;


 USART_init ( );


 establecerBlinker(ON);

 _delay_ms (500);

 establecer intermitente (apagado);

 _delay_ms (500);


 HC12error = HC12_start ( );


 establecerBlinker(ON);

 _delay_ms (500);

 establecer intermitente (apagado);

 _delay_ms (500);



 //RTC_Inicio ( );

 _delay_ms (100);

 LCD_clrscr;

 si ((PIND y RTC_BIT) == 0)

 {

 LCD_writeString("COMPROBACIÓN DE DESVÍO");

 LCD_gotoRowCol(2, 1);

 LCD_writeString("RTC:DS1307");

 Error RTC = 5;

 }

 demás

 {

 LCD_writeString("Verificar RTC:DS1307");

 LCD_gotoRowCol(2, 1);

 RTCerror=RTC_getTime ( );

 strcpy (TEMP_STR, TIMESTR);

 si (RTCerror) //error

 LCD_writeString("ERROR");

 de lo contrario si (strcmp ( TIMESTR, "HH:MM:SS")==0)

 {

 LCD_writeString( "NO CONECTADO" );

 Error RTC = 2;

 }

 }


 _delay_ms (1500);


 LCD_clrscr;

 mientras(1)

 {

 establecerBlinker(ALTERNAR);

 borrarUsartRx ( );

 si ((BUTTONS_PORT & BUTTON_MUTE) == 0)

 {

 bucle de error = 0;

 }

 si ((BUTTONS_PORT & BUTTON_SETTING) == 0)

 {

 editarFechaHora;

 }


 enviar mensaje("?");


 si (bucle de error==0)

 {

 si (error RTC)

 {
 
LCD_gotoRowCol(1,1);

 LCD_writeString ("QUE TENGAS UN BUEN DÍA");

 LCD_gotoRowCol(2,1);

 LCD_writeString ("MONITOR DEL VEHÍCULO");

 _delay_ms(100);

 }

 demás

 {

 RTC_getDate ( );

 _delay_ms(100);

 LCD_gotoRowCol(1,1);

 LCD_writeString("FECHA: ");

 LCD_writeString (FECHASTR);

 LCD_gotoRowCol(2,1);

 LCD_writeString("TIEMPO: ");

 RTC_getTime ();

 LCD_writeString (TIMESTR);

 LCD_writeString (" " );

 }

 }

 _delay_ms(500);


 si (isUSART_DATA_READY==1)

 {


 si ( USART_RECV_BUF(0) != '<' USART_RECV_BUF(3) != '>' (USART_RECV_BUF(1)!=USART_RECV_BUF(2)) )

 {

 bucle de error ++;

 LCD_gotoRowCol(1,1);

 LCD_writeString ("SEÑAL DÉBIL O ");

 LCD_gotoRowCol(2,1);

 LCD_writeString ("LARGA DISTANCIA");

 }

 de lo contrario si (USART_RECV_BUF(1)!= 0x80)

 {

 bucle de error ++;

 si (USART_RECV_BUF(1) y 0x07)

 {

 LCD_gotoRowCol(1,1);

 LCD_writeString ("Sacudidas/VIBRACIÓN/");

 }

 si (USART_RECV_BUF(1) y 0x38)

 {

 LCD_gotoRowCol(2,1);

 LCD_writeString ("MOTOR/LLAVE USADA");

 }

 }

 }

 else // la señal está fuera de cobertura

 {

 bucle de error ++;

 LCD_gotoRowCol(1,1);

 LCD_writeString ("SIN SEÑAL. COMPROBAR");

 LCD_gotoRowCol(2,1);
 
LCD_writeString ("VEHÍCULO Y BORDE.");


 }

 establecerZumbador(APAGADO);

 si (bucle de error>0)

 {

 _delay_ms(250);

 establecer zumbador ( ENCENDIDO );

 bucle de error = 1;

 }

 }

 }



 //================================================== =============

 ISR (USART_RXC_vect)

 {

 USART_RXD = UDR;



 si (USART_RECD_DATA_POS <USART_MAX_RECV_BUF_SIZE && USART_RXD>0)

 USART_RECV_BUF(USART_RECD_DATA_POS++) = USART_RXD;


 si (USART_RECD_DATA_POS>=4) //( USART_RXD == '>')

 esUSART_DATA_READY=1;

 }

 //================================================== =============

Diagramas de circuito

RX
Texas

Ficha Técnica del Proyecto

https://www.engineersgarage.com/wp-content/uploads/2019/10/library_attechment.zip



Vídeo del proyecto

Volver al blog

Deja un comentario

Los comentarios deben ser aprobados antes de su publicación.