iz3gak
Loc. JN65KO - E-Mail: iz3gak@alfa.it
CQ ZONE 15 - ITU ZONE 28 - WIP VENEZIA
Op. Cristian Voltarel
Via Perugia, 19
30021 Caorle VENEZIA
            Italy

Allarme con Arduino di IZ3GAK - 15/12/2006

Lo scopo del progetto è quello di creare un semplice sistema di allarme; nel caso specifico l'allarme ha 2 sensori posizionati all'esterno che fanno scattare il sistema appena qualcuno entra in giardino. In pratica suona prima che ci si avvicini troppo alla casa.
In questo progetto ho utilizzato arduino come centralina e 2 semplici sensori di prossimità. Una volta attivato il sistema, la centralina attende circa 20sec prima di attivare i sensori, per dargli modo di leggere la volumetria che c'è intorno. Il display indicerà il conto alla rovescia. Terminato il conteggio il display visualizzerà:

CASA SICURA = indica che l'allarme è attivo e i sensori sono in allerta;
E = indica lo stato del sensore verso l'entrata, visualizza OK se non si sono verificati allarmi, ALL se si è verificato un allarme.
G = indica lo stato del sensore verso il retro (giardino), visualizza OK se non si sono verificati allarmi, ALL se si è verificato un allarme.
T = indica il numero di volte che è andato in allarme

Un Led verde indica lo stato di allerta, mentre un led rosso indica lo stato di ALLARME.
Durante un allarme verrà attivato un relè al quale è collegata una sirena; è inoltre presente anche un cicalino che suona durante l'allarme ed è posizionato dentro casa.








Successivamente ho optato per un Arduino Nano per poter risparmiare oltre che denaro anche spazio, quindi ho ricollegato il tutto come si vede dalle foto successive.





Componenti e materiale:

1 scatola per impianti elettrici dove contenere la centralena
1 interuttore
1 led verde
1 led rosso
1 cicalino
1 resistenza da 470ohm
1 arduino UNO o arduino NANO
1 scheda relè per arduino
1 LCD 1602
1 modulo I2C per il display
2 sensori PIR
1 basetta millefori

Collegamenti:



Sketch:

/*
//download libreria e rinominare in LiquidCrystal copiare sotto libraries
//https://bitbucket.org/fmalpartida/new-liquidcrystal/downloads
//quella usata è NewliquidCrystal_1.3.4.zip
*/

/** ALLARME ANTIFURTO ADATTATO DA CRISTIAN VOLTAREL IZ3GAK   **
/**                                      www.iz3gak.it                                         **
/*************************************************************/

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);

/************ DEFINIZIONI VARIABILI ********************
/*******************************************************/

int ledBoard = 13;     //il led presente su arduino
int ledGreen = 3;      //collegare qui il led verde
int ledRed   = 4;      //collegare qui il led rosso
int buzzer   = 12;     //collegare qui il buzzer
int sensore_1= 5;      //collegare qui il sensore 1 ENTRATA
int sensore_2= 6;      //collegare qui il sensore 1 GIARDINO
int rele1 = 7;
int rele2 = 8;
boolean stato = 0;    //variabile che serve per un doppio sul ciclo IF
String volte1 = "OK"; //volte che è andato in allarme il sensore 1
String volte2 = "OK"; //volte che è andato in allarme il sensore 2
int volte =-1;        //volte che è andato in allarme

// definizione variabili per il ciclo di calibrazione
int sec_calibrazione = 20;
int sec_mancanti = 0;
int sec_passati = 0;

int i = 0;  //variabile per i cicli for


void setup()
{
    //Serial.begin(9600);
    //metti i 2 // se vuoi eliminare i msg seriale,
    //altrimenti resra acceso sempre il led TX su arduino
   
  lcd.begin(16,2);
  
calibrazione ();

  pinMode(buzzer,OUTPUT);
 
  pinMode(rele1,OUTPUT);
  pinMode(rele2,OUTPUT);
 
  pinMode( ledBoard, OUTPUT );
  pinMode( ledGreen, OUTPUT );
  pinMode( ledRed, OUTPUT );
 
  digitalWrite( rele1, HIGH );
  digitalWrite( rele2, HIGH );
   
  digitalWrite( ledBoard, LOW );
  digitalWrite( ledGreen, LOW );
  digitalWrite( ledRed, LOW );

if ( digitalRead (5)==HIGH)  stato=1;
if ( digitalRead (5)==LOW)  stato=0;
if ( digitalRead (6)==HIGH)  stato=1;
if ( digitalRead (6)==LOW)  stato=0;

}

/***************************************************************
/*****           INIZIO PROGRAMMA                        *******
/***************************************************************/
void loop()
{
  int pirSensore_1 = digitalRead( sensore_1 );
  int pirSensore_12= (pirSensore_1 == HIGH)? LOW:HIGH;
 
  int pirSensore_2 = digitalRead( sensore_2 );
  int pirSensore_22= (pirSensore_2 == HIGH)? LOW:HIGH;

// **************** LETTURA SENSORI *********************
// *** gli stati dei LED sono invertiti *****************

if (pirSensore_1 == HIGH)//così il buzzer è intermittente
{
  digitalWrite( rele1, LOW);
  digitalWrite( ledGreen, HIGH);
  digitalWrite( ledRed, LOW);
 
  stato=0;
  volte1="ALL";
  
  Serial.println("Sensore ENTRATA");
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Sensore ENTRATA");
  lcd.setCursor(0,1);
  lcd.print("---> IN ALLARME");

  cicalino();
 
}
  else if (pirSensore_2 == HIGH)//così il buzzer è intermittente
{
  digitalWrite( rele1, LOW);
  digitalWrite( ledGreen, HIGH);
  digitalWrite( ledRed, LOW);
 
  stato=0;
  volte2="ALL";
 
  Serial.println("ALLARME");
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Sensore Giardino");
  lcd.setCursor(0,1);
  lcd.print("---> IN ALLARME");

  cicalino();

}

else if (pirSensore_1 == LOW && stato == 0)
{
  digitalWrite( rele1, HIGH);
  digitalWrite( ledGreen, LOW);
  digitalWrite( ledRed, HIGH);
 
 
  stato=1;
  volte++;
 
  Serial.println("SICURO");
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("E=");
  lcd.print(volte1);
  lcd.print(" G=");
  lcd.print(volte2);
  lcd.print(" T=");//numero di volte in allarme totati
  lcd.print(volte);
  lcd.setCursor(0,1);
  lcd.print("* CASA  SICURA *");
}
  delay(100);
}

/***************************************************************
/***** BLOCCHI RICHIAMATI ALL'INTERNO DEL PROGRAMMA ************
/***************************************************************/

void calibrazione (void) // ciclo per la calibrazione dei sensori
{
  for (sec_passati = 0; sec_passati <= sec_calibrazione; sec_passati++)
  {
  lcd.clear();
  lcd.setCursor(0,0);
  lcd.print("Attivazione tra");
  lcd.setCursor(0,1);
  sec_mancanti = sec_calibrazione - sec_passati;
  lcd.print(sec_mancanti);
  lcd.print (" secondi");
  delay (1000);    
  }
}

void cicalino (void) // blocco che fa suonare il buzzer
{
  tone(buzzer,600,200);     //suona nota sul pin 12 alla frequenza di 600Hz
  delay(100);                //aspetta
  noTone(buzzer);            //non suona
  delay(100);                //aspetta
}

Ulteriori annotazioni:

Verificare bene i collegamenti, ricordarsi di collegare correttamente il display quando si usa arduino nano.


Home Page