PROYECTO DE ELECTRÓNICA Sistema de Alarma Raúl Lapaz de Juan Francisco Javier López Alcarria 1
ÍNDICE - Objetivo:... 3 - Justificación:... 3 - Plan de trabajo:... 3 A) Montaje del circuito en protoboards:... 3 B) Programación:... 7 - La pantalla LCD:... 8 - El teclado:... 9 - El zumbador:... 10 - El módulo GPRS:... 11 - El módulo Bluetooth:... 12 - Pines seriales:... 12 - EEPROM:... 12 - La función millis():... 13 C) Diseño y montaje:... 7 2
- Objetivo: El Objetivo principal de este proyecto es realizar un sistema de alarma controlado manualmente. Dispondrá de varios modos con los que nos moveremos por el programa (alarma apagada, encendida, etc.), de contraseña de una temporización para la activación de la alarma, de un dispositivo de sonido como un zumbador y de una pantalla LCD en la que se nos mostrará la información necesaria para interactuar con el programa. Para el segundo trimestre hemos mejorado notablemente el programa, hemos añadido un módulo Bluetooth para poder controlarlo con una aplicación Android desde un móvil, y un módulo GPRS que realizará una llamada al número móvil que designemos en el programa cuando se active la alarma. - Justificación: Realizar un sistema de alarma barato, fácil de usar y con una contraseña que podremoscambiar cuando deseemos. - Plan de trabajo: Montaje del circuito en protoboards: Ésta será la primera fase del proyecto, realizar el circuito del proyecto usando las placas prototipo, conociendo en todo momento las entradas y salidas que usaremos en el arduino, para una programación correcta. Para ello usaremos los siguientes materiales: - Pack Arduino UNO: del pack usaremos la placa Arduino UNO, la pantalla LCD y el teclado. - 3 pulsadores. - 1 zumbador. - 1 potenciómetro. - 4 leds, uno de ellos para comprobar que el sensor funciona correctamente. - Un total de 15 resistencias 3
Para el montaje del circuito podemos seguir el siguiente esquema: Nuestra pantalla LCD sólo tiene 4 patillas: VCC, GND, SCL y SDA. La patilla SCL la conectaremos a la entrada analógica A5 del Arduino, y la SDA a la A4 El sensor de movimiento lo conectaremos de esta manera, la primera patilla a masa, la segunda a 5 Voltios y la tercera al pin 5 del Arduino: 4
El teclado requiere de 8 patillas digitales del arduino normalmente, pero podemos utilizar solo una entrada analógica, si usamos un divisor de tensión para cada tecla y un método en la programación que explicaremos más tarde, ahorrando un gran número de patillas, sin las que nos sería imposible realizar el proyecto. Lo conectaremos de la siguiente manera: En la parte de programación veremos para que utilizaremos cada uno de estos materiales, ya que explicaremos el funcionamiento del programa por partes 5
En el segundo trimestre se han añadido un módulo GSM y un módulo Bluetooth. El módulo GPRS usa los pines 0, 1 y 2 del Arduino. En la placa que hicimos al final le pusimos unos pines para poder sujetar bien este módulo. También necesita estar conectado externamente a los pines GND y a VIN del arduino. El Arduino debe estar alimentado a 12 V para que pueda funcionar el GPRS. El módulo Bluetooth debe estar conectado a GND y a 3 3V. Para alimentarlo correctamente lo conseguimos con 3 diodos 1N4007 en serie, que restarán tensión suficiente a los 5V del Arduino, quedándonos unos 2 8 3 Voltios suficientes para alimentar el Bluetooth. Nosotros hemos hecho una placa para el Bluetooth siguiendo el siguiente esquema: Nota: RX del Bluetooth debe ir a TX del Arduino y viceversa. Podéis encontrar más información en la Documentación de estos módulos. 6
FOTOS DEL MONTAJE: 7
B) PROGRAMACIÓN POR PARTES: - La pantalla LCD: Para conectar la pantalla al Arduino, debemos conectar la patilla SCL a la entrada analógica A5 y SDA la conectaremos a la A4. Para poder usar la pantalla LCD en el compilador tenemos que poner esta librería: Después, en la función void setup () ponemos esto: Con esto ya podremos usar la LCD, para ello se usarán los siguientes comandos: lcd.clear(); // para borrar el contenido de la pantalla, es indispensable si queremos escribir algo en ella distinto de lo anterior, ya que si no se nos solaparán los dígitos. lcd.print ( ejemplo ); // para escribir lo que queramos en la pantalla. lcd.setcursor (x,y); // con ésto seleccionaremos la casilla de la LCD en la que queremos empezar a escribir, siendo x las columnas e y las filas (las dos empiezan por la columna y fila 0). 8
- El teclado: Para poder conectar el teclado al Arduino usando sólo una entrada analógica, lo haremos con el divisor de tensión que hemos explicado anteriormente. De esta manera cada tecla nos enviará una señal analógica distinta de las otras, por lo tanto mediante los rangos de la señal podremos asignar cada valor a un número del teclado. Lo podremos hacer de esta forma: do int numero2= analogread (teclado); if ((numero2 > 845) && (numero2 < 865)) nf = 1; else if ((numero2 > 635) && (numero2 < 655)) nf = 2; else if ((numero2 > 503) && (numero2 < 520)) nf = 3; else if ((numero2 > 785) && (numero2 < 805)) nf = 4; else if ((numero2 > 600) && (numero2 < 620)) nf = 5; 9
else if ((numero2 > 480) && (numero2 < 495)) nf = 6; else if ((numero2 > 720) && (numero2 < 740)) nf = 7; else if ((numero2 > 560) && (numero2 < 580)) nf = 8; else if ((numero2 > 460) && (numero2 < 475)) nf = 9; else if ((numero2 > 545) && (numero2 < 555)) nf = 0; En este proyecto solo hemos usado los números, así que si queremos añadir el resto de teclas de nuestro teclado, comprobaremos los rangos de señal que puede dar cada tecla y lo añadiremos en el compilador de la manera anterior. - El zumbador: El zumbador es un dispositivo para crear sonidos. El tono del sonido lo podemos regular usando distintas frecuencias. También podemos controlar su intermitencia con el uso de la función delay(). Ejemplo: tone (zumbador, 1000); // para activar el zumbador y su tono delay (150); notone (zumbador); // para desactivar el zumbador tone (zumbador, 1000); delay (150); notone (zumbador); 10
- El módulo GPRS: Es el dispositivo encargado de realizar una llamada perdida cuando salte la alarma. En el siguiente ejemplo veremos un simple programa encargado de esa función (para más información ver la documentación): int pinactivargprs = 2; // pin para activar el módulo GPRS int timestosend = 1; // numero de llamadas a realizar int contador = 0; //para solo repetir una vez el loop void activarmodulogprs() digitalwrite(pinactivargprs, HIGH); delay(2000); digitalwrite(pinactivargprs, LOW); void setup() pinmode(pinled, OUTPUT); pinmode(pinactivargprs, OUTPUT); Serial.begin(19200); //velocidad de conexión con módulo GPRS GSM activarmodulogprs(); //activamos el modo GPRS GSM delay(20000); //esperamos 20 segundos a que se active el módulo GPRS void loop() while (contador < timestosend) delay(1500); Serial.println("ATD659111905;"); //numero_movil numero al que realizaremos la llamada delay(12000); Serial.println("ATH"); //colgaremos y finalizaremos la llamada delay(5000); contador++; if (contador == timestosend) Serial.println("AT*PSCPOF"); // desactivar el módulo GPRS contador++; 11
- El módulo Bluetooth: Con este módulo podremos controlar el sistema de alarma con un móvil y una aplicación Android (para más información ver documentación). A continuación veremos algunas funciones que se han usado en el programa para interactuar con el Bluetooth. char bluetooth = Serial.read (); // para leer valores recibidos del Bluetooth Serial.println ("VERDE = Setup // ROJO = Activar Alarma"); // para imprimir textos en el móvil - Cómo añadir más pines seriales: Como en este programa usamos dos módulos que funcionan con pines seriales necesitaremos crear una pareja nueva de pines seriales para el Bluetooth, por ejemplo. Para ello incluiremos la biblioteca que nos viene con el Arduino: #include <SoftwareSerial.h> Después declaramos los pines que deseamos usar como seriales de la siguiente forma: SoftwareSerial myserial(5, 6); // pin 5 = RX -------- pin 6 = TX Luego, en la función setup pondremos lo siguiente: myserial.begin (9600); Y ya con esto podremos trabajar con las siguientes funciones, por ejemplo: myserial.println ("VERDE = Setup // ROJO = Activar Alarma"); bluetooth = myserial.read (); - Cómo guardar y leer datos en la EEPROM: El Arduino tiene integrada una memoria EEPROM, la cuál es útil si queremos guardar datos que perduren cuando el Arduino sea desconectado. Lo primero que tenemos que hacer es incluir la biblioteca: #include <EEPROM.h> Después, escribiremos y leeremos datos de la EEPROM con las siguientes funciones: EEPROM.write (direccion, dato); // dirección puede ser 1 y dato puede ser 224, por ejemplo Variable = EEPROM.read (dirección); // siguiendo el ejemplo de la línea anterior, si dirección es 1, Variable pasará a valer 224 12
- La función millis(): La función millis() es una forma de usar temporizaciones, ya que calcula los milisegundos que lleva encendido el Arduino. Es más complicada de usar que la función delay(), pero esta última tiene el inconveniente de que para completamente el programa durante los milisegundos que hayamos puesto, sin poder hacer nada. En este proyecto la hemos usado para introducir la contraseña antes de que acabe la temporización guardada en la EEPROM. En el siguiente ejemplo veremos como encender un led durante 10 segundos digitalwrite (led, LOW); millis1 = millis(); millis1 = millis1 / 1000; // pasamos los milisegundos a segundos millis2 = millis1 + 10; // de esta forma conseguiremos una temporización de 10 segundos do millis1 = millis(); millis1 = millis1 / 1000; digitalwrite (led, HIGH); while (millis1 < millis2); digitalwrite (led, LOW); La función dowhile trabajará mientras que millis1 sea menor que millis2, que es 10 veces mayor que millis1 al comienzo del dowhile 13
DISEÑO DE PLACAS: A continuación veremos las placas que hemos hecho para el proyecto con el programa Diptrace. La placa del Bluetooth: El divisor de tensión para el teclado: 14
El panel de control con los leds, botones, el potenciómetro y el zumbador: 15
Y finalmente la placa de conectores más el módulo GSM: 16
Una vez terminadas las placas, procedimos al montaje en la maqueta 17