Polls

A quale categoria appartienni?

Visualizza risultati

Loading ... Loading ...
Seguimi su Facebook
Seguimi su Twitter
Categorie

Come creare un sistema di allarme con Arduino

Utilizzare un sensore PIR per creare un rilevatore di movimento per sistema di allarme

Un rilevatore di movimento è utile non solo per i sistemi di allarme domestici ma anche per rilevare animali che si intrufolano in ambienti chiusi o aperti.
La realizzazione di questo sistema è semplice e richiede un investimento esiguo. Ho acquistato per circa 8€ un sensore PIR (Passive Infra-Red) della Parallax molto compatto che dispone di una lente di Fresnel e di un circuito di amplificazione che lo rende molto sensibile e capace di rilevare corpi in movimento a distanze di qualche metro.
I pin di collegamento di questo modulo sono tre di cui due per l’alimentazione ed uno per l’uscita del segnale.

Sensore infrarosso di movimento

L’uscita è un singolo bit, alto quando viene rilevato un movimento e basso in mancanza di rilevamento. L’alimentazione del dispositivo può variare da 3 a 6 Vdc.
Il sensore dispone anche di un selettore per aumentare o diminuire la sua sensibilità.

Impiegare questo sensore in un circuito risulta veramente semplice sia nei collegamenti hardware sia nella gestione software.
Vediamo insieme come impiegarlo utilizzando Arduino UNO con lo schema seguente:

Arduino PIR Sensor

L’uscita del sensore è collegata al pin2 dell’Arduino UNO precedentemente configurato via software come ingresso. La resistenza da 10Kohm, posta tra il pin2 e la massa, serve per creare un riferimento verso certo (pull-down) per evitare false letture.

Il codice di esempio permette di leggere, a tempi ciclici, lo stato dell’uscita del sensore PIR e di spedire tramite seriale questo valore. L’invio del dato risulta interessante per creare un log dei rilevamenti del sensore, magari per creare dei grafici o memorizzarli per una futura consultazione.
Un sistema di allarme che si rispetti possiede giustamente un attuatore necessario a far demordere il tentativo di furto o intrusione tramite una sirena o degli indicatori luminosi. Questo può avvenire tramite i pin dell’Arduino non utilizzati per pilotare dei relè che agiscono sulla sirena o sulle luci.

int StatoSensore = 0;

void setup()
{
  //Init Seriale
  Serial.begin(9600);
  //Config porta 2 come ingresso
  pinMode(2, INPUT);

}

void loop()
{
  //leggo segnale Sensore PIR
  StatoSensore = digitalRead(2);
  //Invio dati alla seriale
  Serial.print(StatoSensore);
  //Lettura ogni secondo
  delay(1000);

}

Sebbene questo codice funzioni, risulta poco efficace in quanto l’invio dei dati avviene a prescindere dallo stato rilevato dal sensore quindi credo sia meglio inviarli solamente quando questo rileva un movimento. Aggiungendo un blocco if otteniamo questa funzionalità:

/*
Marco Lai
Ago 2011
PIR Sensor with Parallax 555-28027
*/

int StatoSensore = 0;

void setup()
{
  //Init Seriale
  Serial.begin(9600);
  //Config porta 2 come ingresso
  pinMode(2, INPUT);

}

void loop()
{
//leggo segnale Sensore PIR
StatoSensore = digitalRead(2);

//invia i dati solo se rilevo un movimento
if (StatoSensore == HIGH)
    //Invio dati alla seriale
    Serial.println("PIR ATTIVO");

    //Lettura ogni mezzo secondo
    delay(500);

}

Il dato viene inviato tramite la porta USB per ogni rilevazione di movimento. Questi dati possono essere acquisiti tramite un software capace di leggere dalla porta seriale. Il software deve semplicemente configurarsi per leggere dalla stessa porta che hai selezionato per programmare l’Arduino UNO:

Seleziona porta dove è collegato Arduino Uno

Arduino in Risorse del Computer

Nel mio caso è la COM4 e di seguito uno spezzone di codice C# utilizzato per leggere dalla porta:

    //seleziono nome porta dove è mappato l'Arduino UNO
    serialPort1.PortName = "COM4";
    //apro la porta seriale
    serialPort1.Open();
    //creo un gestore di evento per la ricezione
    serialPort1.DataReceived += new SerialDataReceivedEventHandler(Data_RX);

Data la sua utilità realizzare un sistema di allarme è, grazie a questo sensore, una procedura molto semplice e rapida da realizzare. Nulla ci vieta di utilizzare più sensori PIR per tenere sotto controllo più aree. Questo sensore avendo anche una buona corrente in uscita si presta ad essere collocato anche a diversi metri di distanza dalla board Arduino.

Suggerimenti e commenti sono sempre graditi, grazie!

Progetto Arduino IDE: PIR_Sensor
Codice di esempio C#: PIR_Reader

10 risposte a Come creare un sistema di allarme con Arduino

  • luigi scrive:

    Ciao Marco,
    la resistenza da 10K di pull-down l’ho messa tra uscita del pir e massa.
    Ho provato a spostare il led in un’altra stanza ma non cambia nulla :(

    quando accendo il led(sul pin 8) arriva tensione al pin 7 portandomi alta l’entrata.

    nel programma ho messo una semplice condizione:

    StatoSensore = digitalRead(7);

    if (StatoSensore == HIGH){
    Serial.println(“1″);
    }else{

    }

    • Marco scrive:

      Escludi il pir e metti un led anche sul pin 7 e vedi cosa succede quando poni alto il pin8, Verifica meglio il codice e se hai qualche dubbio puoi mandarmelo via mail così posso vedere se c’è qualche problema di programmazione che ti è sfuggito!

      a presto
      Marco

  • Luigi scrive:

    Ciao Marco,
    innanzitutto complimenti per il sito e per le guide.
    Ho creato un web server con arduino dal quale controllo una serie di sensori (gas, una ventola, led,…).
    Ho acquistato da poco il sensore Pir 555-28027 ed ho seguito la tua guida per farlo funzionare.
    Il sensore pir l’ho collegato al pin 7 di Arduino sul pin 8 ho collegato un led.

    il pir funziona. Quando rileva qualcosa nel suo raggio di azione il pin 7 viene portato alto e quando nn rileva nulla non arriva tensione sul pin 7.

    il problema è che quando accendo il led sul pin 8, anche se il pir non rileva nulla (non c passo sopra la mano) al pin 7 arriva tensione, portando “alto”, come se il pir rilevasse qualcosa….

    Non sono un esperto di elettronica e non so come risolvere il problema.
    Puoi aiutarmi?

    grazie in anticipo.

    • Marco scrive:

      Ciao Luigi
      grazie dei complimenti! Hai collegato la resistenza da 10Kohm tra il pin 7 e la massa? quando accendi il led sul pin8 forse potrebbe succedere che una componente ir della luce emessa dal led ecciti il PIR, assicurati che il led non illumini il pir.

      Fammi sapere
      a presto
      Marco

  • Andrea scrive:

    Ciao Marco seguo da un pò il sito ed i tuoi progetti, complimenti , bei progetti e bel sito!
    Vorrei contattarti per chiederti delle cose circa il mondo di arduino & co e qualche progetto che ho in mente, come faccio?
    Non ho trovato email!
    Grazie e ancora complimenti!

    • Marco scrive:

      Ciao Andrea, grazie per i complimenti, sono sempre graditi ;)
      in privato puoi contattarmi a questa mail info [at] logicaprogrammabile.it

      a presto
      Marco