In questa sesta lezione su Arduino, parleremo di un interessante trasduttore, che può essere utile per tantissimi progetti: il sensore di presenza. Ecco una breve descrizione tratta da Wikipedia:

sensori di prossimità (chiamati anche proximity) sono dei sensori in grado di rilevare la presenza di oggetti nelle immediate vicinanze del “lato sensibile” del sensore stesso, senza che vi sia un effettivo contatto fisico.La distanza entro cui questi sensori rilevano oggetti è definita portata nominale (o campo sensibile). Alcuni modelli dispongono di un sistema di regolazione per poter calibrare la distanza di rilevazione.L’assenza di meccanismi d’attuazione meccanica, e di un contatto fisico tra sensore e oggetto, fa sì che questi sensori presentino un’affidabilità elevata.

Dal punto di vista circuitale, un sensore di presenza, ha 3 PIN.

  • VCC: Per l’alimentazione
  • OUT: Ha un valore 1 o 0 logico, a seconda della presenza di un oggetto in movimento
  • Ground

Nei prossimi programmi, vedremo come utilizzare il sensore PIR per monitorare la presenza di oggetti in movimento, creare un piccolo sistema d’allarme oppure accedere una luce.

Requisiti per i programmi

  • Arduino Uno

  • Shield EthernetServe per ottenere l’ora

  • Sensore di presenza PIR HC-SR501 Costo 4-5 Euro, acquistabile su Ebay

  • Relè


 

1° Programma: Rileviamo la presenza di un oggetto in movimento e accendiamo un LED

I collegamenti, per questo programma sono abbastanza semplici. Basta collegare i cavi del sensore PIR, come riportati in figura.

 

Da notare, una interessante caratteristica, è quella di poter aumentare il periodo in cui l’uscita sia ad un livello logico alto, regolando la manopola di destra. In questo caso, non si fa altro che variare una resistenza, che fa aumentare il tempo in cui l’uscita sia ad 1 logico.

 

123

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

/* Programam che utilizza il sensore di presenza PIR HC-SR501,per rilevare la presenza di un oggetto in movimento e accende un LED,collegato al PIN 13*/

 

// Tempo di calibrazione del sensore

intcalibrationTime = 30;

 

//Il tempo in cui l’uscita sia bassa

longunsigned intlowIn;

 

// valore di millisecondi, per cui si ritiene che ci sia “quiete”

longunsigned intpause = 5000;

 

boolean lockLow = true;

boolean takeLowTime;

 

intpirPin = 3;    //il PIN di Arduino a cui è collegato il sensore

intledPin = 13;   //il PIN a cui è connesso il LED

 

// Impostazione del sensore

voidsetup(){

Serial.begin(9600);

pinMode(pirPin, INPUT);

pinMode(ledPin, OUTPUT);

digitalWrite(pirPin, LOW);

 

//Fase di calibrazione

Serial.print(“calibrating sensor “);

for(inti = 0; i < calibrationTime; i++){

Serial.print(“.”);

delay(1000);

}

Serial.println(” done”);

Serial.println(“SENSOR ACTIVE”);

delay(50);

}

 

voidloop(){

 

// Questo IF permette di stabilre se il sensore rileva un oggetto

in movimento

if(digitalRead(pirPin) == HIGH){

digitalWrite(ledPin, HIGH);   /Accendiamo il LED

if(lockLow){

 

lockLow = false;

Serial.println(“—“);

Serial.print(“motion detected at “);

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(ledPin, LOW);  //Si spegne il LED

 

if(takeLowTime){

lowIn = millis();

takeLowTime = false;

}

 

if(!lockLow && millis() – lowIn > pause){

 

lockLow = true;

Serial.print(“motion ended at “);      //output

Serial.print((millis() – pause)/1000);

Serial.println(” sec”);

delay(50);

}

}

}

 


 

2°Programma: Creiamo un un piccolo sistema di allarme con il sensore PIR

Questo programma permette di creare un piccolo sistema d’allarme, grazie ad Buzzer, LED e al sensore PIR. I collegamenti sono indicati nel codice del programma.

123

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

/* Programma che fa emettere un suono e accedere un LED, quandoc’è un oggetto in movimento, grazie ad un sensore PIR*/ 

intpirPin = 2;

intpinSpeaker= 10;

intledPin = 13;

voidsetup(){

Serial.begin(9600);

pinMode(pirPin, INPUT);

pinMode(ledPin, OUTPUT);

pinMode(pinSpeaker, OUTPUT);

}

voidloop(){

intpirVal = digitalRead(pirPin);

Serial.println(“starting to read PIR”);

analogWrite(ledPin, 0);

delay(2000);

if(pirVal == LOW) {

analogWrite(ledPin, 255);

Serial.println(“Motion Detected”);

tone(10, 700, 100);

delay(2000);

}

}

voidtone(longduration, intfreq) {

duration *= 1000;

intperiod = (1.0 / freq) * 1000000;

longelapsed_time = 0;

while(elapsed_time < duration) {

digitalWrite(pinSpeaker,HIGH);

delayMicroseconds(period / 2);

digitalWrite(pinSpeaker, LOW);

delayMicroseconds(period / 2);

elapsed_time += (period);

}

}