Sistema di allarme con Multi Test Shield e HC-SR501

In questo articolo vederemo come realizzare un sistema di allarme antintrusione basato sul sensore infrarosso PIR tipo HC-SR501 in grado di rilevare un corpo caldo in movimento e che utilizza il Multi test Shield per il collegamento delle varie parti

Multi test Shield hc-sr501

Sensore infrarosso HC-SR501

Il  sensore infrarosso  passivo piroelettrico (PIR) tipo HC-SR501 è basato sul chip BISS0001, integrato U4 (datasheet)  per l’interfaccia, l’alimentazione è regolata al valore di 3,3V tramite apposito regolatore (IC1), ed è presente un diodo (D1) a protezione dell’inversione di polarità.
Sulla scheda del sensore HC-SR501 sono presenti due trimmer, uno regola la sensibilità e l’altro tempi di uscita.

Datasheet

Per quanto riguarda la sensibilità avremo che ruotando in senso orario => Alta sensibilità, mentre in senso antiorario => bassa sensibilità (intervallo compreso tra 3-7 m).
Per i tempi di uscita, in senso orario => lungo, antiorario => corto (intervallo compreso tra 3-300 sec)
Sul connettore d’uscita, abbiamo il polo di alimentazione Vcc (+ 5-20V), quello centrale è il pin d’uscita del segnale, mentre l’ultimo rappresenta il terminale di massa.
L’uscita è alta (3,3 V) o bassa (0 V)

Caratteristiche del sensore

  • Tensione di alimentazione: da 4,5Vdc a 20Vdc
  • Tensione di uscita: 0-3,3V
  • Corrente di uscita: 10mA
  • Angolo di visione: <140°
  • Distanza di rilevamento: da 3 a 7 mt

Il sensore di movimento PIR HC-SR501 è uno dei più facili da collegarsi ad un Arduino o a qualsiasi altro microcontrollore, tra l’altro può essere utilizzato anche come un rilevatore di movimento autonomo.
Si possono trovare due versioni della scheda. Uno con un jumper a 3 poli ed uno con piazzole di saldatura.

  • Con il ponticello messo nella sua posizione inferiore (con la scheda ancora di fronte, come descritto) non vi è alcun ripristino. No reset
  • Ponticello nella sua posizione superiore (H) è in modalità ripristino automatico. Auto-reset

Quando impostato su No reset sensore di rilevamento si ferma una volta che ha innescato, e l’uscita rimane alta per il periodo di tempo prestabilito.
Se è impostato su auto-reset il segnale del sensore rimarrà alto fino a quando il movimento si arresta. Dopo, se non viene rilevato un movimento l’uscita diminuirà.
Per scegliere una di queste impostazioni, è sufficiente creare una saldatura-ponte tra il pad con l’etichetta e il pad in mezzo. il default è ‘L’

Componenti utilizzati

Scheda Arduino UNO Multi test Shield con Display OLED Sensore PIR HC-SR501
KY-006 Small passive buzzer KY-011 2 color LED module KY-019 5V relay module

Multi test Shield

Il Multi Test Shield è uno shield auto costruito realizzato per testare la serie di sensori contenuti nella confezione “37 in 1 Sensor Module Board Set” compatibile con la scheda Arduino UNO R3 originale e relativi cloni.
Sulla scheda sono disponibili molti connettori che risultano già opportunamente collegati con le porte digitali o analogiche di Arduino.
In realtà, la scheda, oltre ai sensori presenti nel kit “37 in 1 Sensor Module Board Set” permette di testare altri sensori, servo, ecc per un totale di oltre 50 tipi, la presenza di un connettore bus I2C espande ulteriormente la tipologia di dispositivi che lo shield permette.
Sulla scheda è anche presente un connettore per il collegamento di un piccolo Display OLED da 0.95″risoluzione 96×64 pixel, 65536 Colori, su di esso potranno essere mostrati dei messaggio o i valori misurati dai sensori.

Multi test Shield hc-sr501

homotix

Collegamento dei modulo sullo Shield

Per collegare il Multi test Shield al sensore HC-SR501 occorrerà semplicemente posizionare i vari componenti e in particolare

Modulo Connettore
Display OLED da 0.95″risoluzione 96×64 pixel, 65536 Colori  DISP1
Sensore PIR HC-SR501  JP4
KY-006 Small passive buzzer module JP8
KY-011 2 color LED module JP6
KY-019 5V relay module  JP1

Multi test Shield hc-sr501

Multi test Shield hc-sr501

Multi test Shield hc-sr501

Multi test Shield hc-sr501

Programma

Il programma accenderà in sequenza i tre led interni rosso, blu, verde in sequenza e poi simultaneamente per l’emissione della luce bianca. Mostrerà sul display OLED le varie fasi di esecuzione del programma

// Definizione dei pin di collegamento
#define sclk 13
#define mosi 11
#define cs   10
#define rst  9
#define dc   8

//Definizione dei PIN
#define pirPin 17   // pin per il sensore HC-SR501  
#define pinRele 2   // pin per il mudulo KY-019 5V relay module
#define greenpin 5  // pin per il LED verde KY-011 2 color LED module
#define redpin 6    // pin per il LED rosso KY-011 2 color LED module
#define buzzerPin 4 // Pin per il  KY-006 Small passive buzzer module

// Tempo di calibrazione del sensore
int calibrationTime = 10;

//Il tempo in cui l'uscita sia bassa
long unsigned int lowIn;

// valore di millisecondi, per cui si ritiene che ci sia "quiete"
long unsigned int pause = 3000;

boolean lockLow = true;
boolean takeLowTime;


// Definizione dei colori
#define BLACK           0x0000
#define BLUE            0x001F
#define RED             0xF800
#define GREEN           0x07E0
#define CYAN            0x07FF
#define MAGENTA         0xF81F
#define YELLOW          0xFFE0
#define WHITE           0xFFFF

#include &lt;Adafruit_GFX.h&gt;
#include &lt;Adafruit_SSD1331.h&gt;
#include &lt;SPI.h&gt;

Adafruit_SSD1331 display = Adafruit_SSD1331(cs, dc, rst);

// Impostazione del sensore
void setup() {
  Serial.begin(9600);
  display.begin();
  pinMode(pirPin, INPUT);
  pinMode (pinRele, OUTPUT);
  pinMode(greenpin, OUTPUT);
  pinMode(redpin, OUTPUT);
  pinMode(buzzerPin, OUTPUT);
  digitalWrite(pirPin, LOW);

  // Messaggio iniziale
  display.fillScreen(BLACK);
  display.setTextSize(1);
  display.setTextColor(BLUE);
  display.setRotation(2); //Ruota display
  display.setCursor(0, 0);
  display.println("www.adrirobot.it");
  display.println("");
  display.setTextColor(GREEN);
  display.println("Multitest shield");
  display.println("");
  display.println("Allarme con PIR");
  display.println("Sensore HC-SR501");
  delay(2000);

  //Fase di calibrazione
  Serial.print("Calibrazione del sensore ");
  display.fillScreen(BLACK);
  display.setTextColor(BLUE);
  display.setCursor(0, 0);
  display.println("CALIBRAZIONE");

  for (int i = 0; i &lt; calibrationTime; i++) { Serial.print("."); delay(1000); } Serial.println(" Fatto"); Serial.println("SENSORE ATTIVO"); display.fillScreen(BLACK); display.setTextColor(BLUE); display.setCursor(0, 0); display.print("SENSORE ATTIVO"); tone(buzzerPin, 1000, 500); //suona una nota alla frequenza di 1000Hz delay(1000); digitalWrite (redpin, LOW); // spegne led rosso digitalWrite (greenpin, HIGH); // accende led verde display.fillScreen(BLACK); display.setTextColor(YELLOW); display.setCursor(0, 0); display.println("STATO ALLARME"); delay(50); } void loop() { // Questo IF permette di stabilre se il sensore rileva un oggetto in movimento if (digitalRead(pirPin) == HIGH) { digitalWrite (redpin, HIGH); // accende led rosso digitalWrite (greenpin, LOW); // spegne led digitalWrite(pinRele, HIGH); if (lockLow) { lockLow = false; Serial.println("---"); Serial.print("Movimento rilevato a "); digitalWrite (redpin, HIGH); // accende led rosso digitalWrite (greenpin, LOW); // spegne led display.fillRect(0, 45, 96, 15, BLACK); display.fillRect(0, 45, 96, 15, BLACK); display.setCursor(0, 45); display.setTextColor(RED); display.print("ALLARME"); tone(buzzerPin, 500, 500); //suona una nota alla frequenza di 1000Hz digitalWrite(pinRele, HIGH); Serial.print(millis() / 1000); Serial.println(" sec"); delay(50); } takeLowTime = true; } // Questo IF permette di stabilire se non c'è più nessun movimento if (digitalRead(pirPin) == LOW) { digitalWrite (redpin, LOW); // spegne led rosso digitalWrite (greenpin, HIGH); // accende led verde display.fillRect(0, 45, 96, 15, BLACK); display.setCursor(0, 45); display.setTextColor(GREEN); display.print("NESSUNO"); digitalWrite(pinRele, LOW); if (takeLowTime) { lowIn = millis(); takeLowTime = false; } if (!lockLow &amp;&amp; millis() - lowIn &gt; pause) {

      lockLow = true;
      Serial.print("Movimento terminato a ");      //output
      Serial.print((millis() - pause) / 1000);
      Serial.println(" sec");
      delay(50);
    }
  }
}

 Messaggi mostrati dal display

Multi test Shield hc-sr501

Multi test Shield hc-sr501

Multi test Shield hc-sr501

Multi test Shield hc-sr501

Multi test Shield hc-sr501

Multi test Shield hc-sr501

Accensione led verde – Impianto non in allarme

Multi test Shield hc-sr501

Accensione led rosso – Impianto in allarme

 

Lascia un commento

Your email address will not be published.