Tomado del proyecto de Jun Peng Arduino Home Security System
En este proyecto se va a utilizar la tarjeta MEGA 2560, así que hay que considerar cambiar el IDE para que no cause errores en la compilación.
Se van a utilizar los siguientes periféricos:
Sensor de movimiento
Modulo de fecha y hora
Pantalla de cristal líquido (LCD
Teclado matricial 4X4
Relevador para motor AC
Revisando el codigo…..
/*Titulo: Sistema de seguridadAutor: Jorge Luis HerreraFecha Inicio: 15 Jun 2015Fecha Term: Version: A*/ #include <LiquidCrystal_I2C.h> #include <Wire.h> #include <Keypad.h> #include <Password.h> #include <Servo.h> #include "RTClib.h" LiquidCrystal_I2C lcd(0x3F,20,4); //Servo Servo myservo; // create servo object to control a servo int pos = 0; // variable to store the servo position //Real Time Clock RTC_DS1307 RTC; //Password int passwd_pos = 12; Password password = Password( "1234" ); const byte ROWS = 4; // Four rows const byte COLS = 4; // Four columns char keys[ROWS][COLS] = { // Define the Keymap {'1','2','3','A'}, {'4','5','6','B'}, {'7','8','9','C'}, {'*','0','#','D'} }; byte rowPins[ROWS] = {2,3,4,5}; //connect to the row pinouts of the keypad byte colPins[COLS] = {6,7,8,9}; //connect to the column pinouts of the keypad // Create the Keypad Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS ); //constants for LEDs, inputs and outputs int ledDelay = 50; int redPin = 22; int greenPin = 24; int bluePin = 26; // LEDs int greenLED = 28; int redLED = 30; // PIR pins //int speakerPin = 32; int pirPin = 32; int relay = 34; // Inicializando la alarma int alarmStatus = 0; int zone = 0; int alarmActive = 0; int delayPeriod = 100; void setup(){ Serial.begin(9600); lcd.backlight(); lcd.init(); Wire.begin(); RTC.begin(); RTC.adjust(DateTime(__DATE__, __TIME__)); myservo.attach(36); // attaches the servo on pin 36 to the servo object displayCodeEntryScreen(); //setup and turn off both LEDs pinMode(redPin, OUTPUT); pinMode(greenPin, OUTPUT); pinMode(bluePin, OUTPUT); // enciende apaga LEDs pinMode(redLED, OUTPUT); pinMode(greenLED, OUTPUT); //pinMode(speakerPin, OUTPUT); //relevadores para motor y sensor pasivo pinMode(relay, OUTPUT); pinMode(pirPin, INPUT); //INICIALIZA LED'S digitalWrite(redLED, HIGH); //Sistema desactivado digitalWrite(greenLED, LOW); //Sistema activado //digitalWrite(speakerPin, LOW); digitalWrite(relay, HIGH); // motor externo conectado a relevador 120V keypad.addEventListener(keypadEvent); //add an event listener for this keypad myservo.write(pos); } void loop(){ //Desplegar Fecha y Hora DateTime now = RTC.now(); //FECHA //Dia lcd.setCursor(0,0); lcd.print(now.day(), DEC); lcd.print('/'); //Mes lcd.print(now.month(), DEC); lcd.print('/'); //Anio lcd.print(now.year(), DEC); lcd.print(' '); //Hora lcd.setCursor(10,0); lcd.print(now.hour(), DEC); lcd.print(':'); //lcd.setCursor(13,1); lcd.print(now.minute(), DEC); lcd.print(':'); lcd.print(now.second(), DEC); //delay(1000); keypad.getKey(); //Serial.println(digitalRead(reedPin2)); Serial.print(digitalRead(pirPin)); Serial.print(digitalRead(relay)); Serial.print(alarmActive); Serial.println(alarmStatus); delay(100); if (alarmActive == 1){ if (digitalRead(pirPin) == HIGH) { zone = 1; alarmTriggered(); } } } //Functions //take care of some special events void keypadEvent(KeypadEvent eKey){ switch (keypad.getState()){ case PRESSED: if (passwd_pos - 12 >= 5) { return ; } lcd.setCursor((passwd_pos ++),1); switch (eKey){ case '*': //* START to validate password passwd_pos = 12; checkPassword(); break; case '#': //# STOP to reset password attempt passwd_pos = 12; password.reset(); //lcd.clear(); // TODO: clear the screen output break; default: password.append(eKey); lcd.print("*"); } } } void alarmTriggered(){ //int expected_pos; //int incr; //digitalWrite(speakerPin, HIGH); digitalWrite(relay, LOW); //digitalWrite(relay3, LOW); digitalWrite(redLED, HIGH); digitalWrite(greenLED, LOW); password.reset(); alarmStatus = 1; alarmActive = 0; if (zone = 1){ lcd.clear(); lcd.setCursor(0,2); lcd.print("Movimiento en Garage"); myservo.write(120); StrokeLight(); } } void StrokeLight(){ //Stroke LED Lights for (int i = 0; i < 20; i++) { digitalWrite(redPin, HIGH); // turn the red light on delay(ledDelay); // wait 50 ms digitalWrite(redPin, LOW); // turn the red light off delay(ledDelay); // wait 50 ms digitalWrite(redPin, HIGH); // turn the red light on delay(ledDelay); // wait 50 ms digitalWrite(redPin, LOW); // turn the red light off delay(ledDelay); // wait 50 ms digitalWrite(redPin, HIGH); // turn the red light on delay(ledDelay); // wait 50 ms digitalWrite(redPin, LOW); // turn the red light off delay(ledDelay); // wait 50 ms delay(10); // delay midpoint by 100ms digitalWrite(bluePin, HIGH); // turn the blue light on delay(ledDelay); // wait 50 ms digitalWrite(bluePin, LOW); // turn the blue light off delay(ledDelay); // wait 50 ms digitalWrite(bluePin, HIGH); // turn the blue light on delay(ledDelay); // wait 50 ms digitalWrite(bluePin, LOW); // turn the blue light off delay(ledDelay); // wait 50 ms digitalWrite(bluePin, HIGH); // turn the blue light on delay(ledDelay); // wait 50 ms digitalWrite(bluePin, LOW); // turn the blue light off delay(ledDelay); // wait 50 ms } delay (300); } void checkPassword(){ // To check if PIN is corrected, if not, retry! if (password.evaluate()) { if(alarmActive == 0 && alarmStatus == 0) { activate(); } else if( alarmActive == 0 && alarmStatus == 1) { deactivate(); } } else { invalidCode(); } } void invalidCode() // display meaasge when a invalid is entered { password.reset(); lcd.clear(); lcd.setCursor(1,0); lcd.print("INCORRECTO!"); lcd.setCursor(1,2); lcd.print("INTENTE NUEVAMENTE!"); digitalWrite(greenLED, LOW); digitalWrite(redLED, HIGH); delay(2000); digitalWrite(redLED, LOW); delay(1000); displayCodeEntryScreen(); } void activate() // Activate the system if correct PIN entered and display message on the screen { //if((digitalRead(reedPin1) == HIGH) && (digitalRead(reedPin2) == HIGH)){ digitalWrite(redLED, HIGH); digitalWrite(greenLED, LOW); delay(3000); digitalWrite(greenLED, HIGH); digitalWrite(redLED,LOW); lcd.clear(); lcd.setCursor(0,1); lcd.print("Sistema Activado!"); alarmActive = 1; password.reset(); delay(200); //} //else{ //deactivate(); // if PIN not corrected, run "deactivate" loop //} } void deactivate() { //digitalWrite(camera, LOW); digitalWrite(redLED, HIGH); digitalWrite(greenLED, LOW); lcd.clear(); lcd.setCursor(0,0); lcd.print("Sistema desactivado!"); //digitalWrite(speakerPin, LOW); digitalWrite(pirPin, LOW); alarmStatus = 0; alarmActive = 0; password.reset(); myservo.write(pos); delay(500); //digitalWrite(relay2, HIGH); digitalWrite(relay, HIGH); displayCodeEntryScreen(); } void displayCodeEntryScreen() // Dispalying start screen for users to enter PIN { lcd.clear(); lcd.setCursor(0,1); lcd.print("Enter PIN:"); lcd.setCursor(0,2); lcd.print("Home Security System"); lcd.setCursor(0,3); lcd.print("By Jorge Herrera."); }
Bandera Suiza (Ejemplo de Inkscape)