Archivi tag: sensore di seduta

Arduino – realizzare un sensore di seduta a pressione con un tubo di gomma

Questa mattina, durante la realizzazione e l’analisi dei problemi per il progetto di PCTO: “misura di sedentarietà delle persone sedute alla scrivania” che stanno realizzando i miei studenti di 3′ Elettronica, è nata l’esigenza di associare un doppio controllo per la valutazione della presenza della persona seduta alla scrivania, un controllo effettuato con PIR HC-SR501 ed un sensore di forza resistivo (FSR) inserito all’interno del cuscino della seduta.

Per evitare l’acquisto di un sensore di forza resistivo e non pesare sulle finanze dei ragazzi le modalità sono tre:

  • richiesta alla scuola
  • compra il Prof.
  • farlo costruire ai ragazzi

l’acquisto da parte della scuola o mia non è un problema, ma la terza soluzione è quella che in questo momento prediligo, perché può essere realizzata in 5 minuti, credo che possa gratificare di più lo studente Maker in erba 🙂 , inoltre ritengo importante che gli allievi assumano la capacità di costruire il sensore perché ne dovranno ottimizzare l’uso, scontrandosi inevitabilmente con una serie di variabili fisiche che dovranno gestire.

Ma come si costruisce il sensore?

E’ indispensabile piccolo tubo cilindrico non trasparente, preferibilmente nero che possa essere compresso e al termine della compressioni ritorni abbastanza velocemente nella sua posizione di riposo. Possiamo ricavare il tubo sguainando un cavo elettrico o cavo di rete, oppure come ho fatto in questo tutorial, prendendo una guaina termorestingente.

Inserire un diodo LED ad un’estremità del cilindro e dalla parte opposta inserire un LDR.
Collegare il sistema nella solita modalità, inserendo in serie al LED un resistore da 220 Ohm e creando un partitore di tensione tra l’LDR e un resistore da 10KOhm, così come indicato nel circuito indicato di seguito.

Come test di funzionamento utilizzare il semplice sketch che trovate di seguito, nei commenti la spiegazione di tutte le parti del codice.

Aprite la Serial Monitor e premete e rilasciate il tubo

1/*
2 * Prof. Michele Maffucci
3 * Data 01.03.2021
4 *
5 * Oggetto: sensore di seduta a pressione
6 *
7*/
8 
9// variabile in cui verrà memorizzato il valore presente sul pin A0
10const int misura = A0;
11 
12// valore restituito dall'analogRead
13int val = 0;
14 
15// pin a cui è connesso il LED del sensore di seduta
16int pinLed = 2;
17 
18// LED che segnala la seduta della persona
19int pinLedAlert = 13;
20 
21void setup() {
22  // Inizializzazione della Serial Monitor
23  Serial.begin(9600);
24 
25  // ledPin è il pin a cui è connesso il LED del sensore di seduta
26  pinMode(pinLed, OUTPUT);
27 
28  // pinLedAlert è il pin a cui è connesso il LED che segnala la seduta della persona
29  pinMode(pinLedAlert, OUTPUT);
30 
31  // Attivazione del LED del sensore di seduta
32  digitalWrite(pinLed, HIGH);
33 
34  // Messaggio di avvio
35  Serial.println("Sistema di rilevazione seduta");
36  Serial.println("-----------------------------");
37  Serial.println("");
38  delay(1000);
39}
40 
41void loop() {
42  // analogRead leggerà il valore su A0 restituendo un valore tra 0 e 1023
43  val = analogRead(misura);
44 
45  // il valore di controllo nell'if deve essere sperimentato in funzione
46  // delle necessità costruttive (ad es. la lunghezza del tubo)
47 
48  // se vero la persona è seduta
49  if (val >= 100) {
50    digitalWrite(pinLedAlert, HIGH);                      // accensione del LED di avviso
51    Serial.println("Persona NON seduta alla scrivania");  // segnalazione di assenza persona
52    Serial.print("Valore letto dal sensore = ");          // Stringa di stampa
53    Serial.println(val);                                  // Valore restituito dall'AnalogRead
54    Serial.println("");                                   // Stampa linea vuota di separazione
55    delay(1000);                                          // Intervallo di 1 secondo tra ogni stampa
56  }
57  else
58  {
59    digitalWrite(pinLedAlert, LOW);                       // spegnimento del LED di avviso
60    Serial.println("Persona seduta alla scrivania");      // segnalazione di presenza persona
61    Serial.print("Valore letto dal sensore = ");          // Stringa di stampa
62    Serial.println(val);                                  // Valore restituito dall'AnalogRead
63    Serial.println("");                                   // Stampa linea vuota di separazione
64    delay(1000);                                          // Intervallo di 1 secondo tra ogni stampa
65  }
66}

Il risultato sulla Serial Monitor è il seguente

Il valore di soglia scelto deve essere ricavato sperimentalmente in funzione della lunghezza e della trasparenza del tubo.

Buon Making a tutti 🙂