Archivi tag: sensore

Arduino: water sensor

Per le attività in programma per il corso sui laboratori green, spiegherò come controllare il livello d’acqua in una cisterna utilizzata per l’irrigazione. A livello prototipale svolgerò prima sperimentazioni su singola pianta utilizzando il “water sensor” che potete acquistare per pochi centesimi online. In una fase successiva impiegherò dei sensori di livello che vengono comunemente impiegati in cisterne e controlleremo il riempimento e lo svuotamento della cisterna.

Il “water sensor” misura il livello di conduttività elettrica del liquido, conduttività che sarà funzione della quantità di superficie del sensore immerso.
Nell’acqua ed in generale nei liquidi, il passaggio di corrente è dovuto alla presenza di sali, infatti l’acqua pura non risulta conduttiva.
Le piste parallele di rame presenti sul sensore sono connesse al potenziale positivo e al GND, quando il sensore viene immerso nel liquido viene misurata una differenza di potenziale tra i due poli, d.d.p. che dipenderà dalla quantità di superficie immersa, pertanto al variare della quantità d’acqua varierà il valore di resistenza tra i due potenziali.

Sottolineo che il sensore non è preciso e richiede una taratura iniziale che dipende prevalentemente dall’acqua, inoltre sensori diversi potrebbero fornirvi misure diverse.

Il segnale di uscita del sensore (pin S) verrà inviato su un pin analogico di Arduino e da esso convertito in un valore numerico che oscillerà tra ~ 0 e ~500, pertanto se il sensore non è immerso il valore misurato sarà di circa 0, mentre se sarà totalmente immerso raggiungerà il valore massimo rilevato.

Sul sensore sono presenti 10 piste di rame parallele, connesse in modo alternato, in modo che vi siano 5 piste connesse ad un potenziale alto e 5 piste connesse a GND. E’ presente inoltre un LED che indica quando il sensore viene alimentato.

  • S (Signal): uscita analogica da connettere ad un ingresso analogico di Arduino
  • +Vcc: potenziale positivo dell’alimentazione. Si consiglia di alimentare il sensore con una tensione compresa tra 3,3 V e 5V. Si ricorda che l’uscita analogica del sensore varierà in funzione della tensione di alimentazione del sensore.
  • – : da connettere al GND

Attenzione che il sensore non è progettato per essere completamente immerso, fate in modo che solo le tracce ramate parallele esposte sul PCB vengano a contatto con l’acqua.

Continua a leggere

Costruire una sonda di umidità del terreno

Durante il prossimo corso: realizzare laboratori green con il Making e il Coding, utilizzerò diversi sensori per misurare grandezze fisiche. Poiché in questi giorni sono occupato con la preparazione delle sperimentazioni che svolgerò durante il corso, pubblicherò di volta in volta su questo sito indicazioni e suggerimenti sui materiali da utilizzare, in questo modo potrete trovarvi pronti nel svolgere insieme a me le sperimentazioni.

Alcuni sensori possono essere costruiti con materiali che abbiamo in casa, un semplice sensore di umidità del terreno può essere costruito con due chiodi in acciaio. Tecnicamente inserendo i due chiodi nel terreno e connettendoli opportunamente ad un microcontrollore saremo in grado di valutare approssimativamente il livello di umidità del terreno, la modalità di taratura e di lettura verrà mostrata durante il corso.

Per mantenere ordine durante le fasi di sperimentazioni suggerisco due semplicissime soluzioni che permettono di realizzare una sonda di umidità:

  • la prima fa uso di un mammut, una morsettiera elettrica che tipicamente viene utilizzata negli impianti elettrici civili, usata per unire cavi elettrici;
  • la seconda soluzione fa uso di un oggetto stampato in 3D.

Sonda di umidità realizzata con un mammut

L’utilizzo di un mammut permette di vincolare i chiodi. Tra la testa del chiodo e il mammut inseriremo il connettore a coccodrillo.

Modo 1

Questa soluzione potrebbe causare il contatto tra i due terminali che deve essere assolutamente evitato. Potreste procedere isolando con nastro isolante.

Modo 2

Separare i punti di connessione dei due chiodi

Per queste soluzioni ho utilizzato mammut per cavi da 6mm^2 e chiodi di acciaio da 90 mm

Sonda di umidità realizzata con supporto stampato in 3D – Moisture Sensor

In questa soluzione dovrete stampare in 3D un elemento che permette agevolmente di inserire nel terreno la sonda e realizza una separazione elettrica tra i morsetti a coccodrillo connessi ai due chiodi. I due chiodi di acciaio sono lunghi 80 mm

Se desiderate prelevare e stampare il supporto seguite il link.

Durante il corso vedremo come utilizzare la sonda con diversi dispositivi: micro:bit, Arduino, Raspberry Pi e sperimenteremo l’uso di altre tipologie di sonde resistive e successivamente analizzeremo l’uso di sonde capacitive.

Buon Making Green a tutti 🙂

Prove tecniche per la realizzazione di un sismografo con Arduino

Recentemente ho realizzato una breve lezione sull’uso del sensore piezoelettrico con Arduino e durante le prossime lezioni di sistemi elettronici, per le classi 3′, vedremo come sfruttare questo sensore per la realizzazione di un semplice sismografo per la rilevazione delle oscillazioni del pavimento dei corridoi della scuola, durante l’attività aggiungeremo la regolazione della sensibilità e la visualizzazione del grafico delle oscillazioni su un display oled, il passo successivo sarà quello di realizzare un sismografo con un pendolo.

Anteprima dell’attività di laboratorio:

Buon Making a tutti 🙂

Arduino: Sensore Piezoelettrico

Per effettuare una misura dinamica di pressione o allungamento o vibrazione di superfici è possibile utilizzare sensori che si basano su quello che viene comunemente chiamato “effetto piezoelettrico”, la parola “piezoelettrico” deriva dalla parola greca “piezein” che significa premere. La piezoelettricità è la proprietà di alcuni cristalli, che se sottoposti all’azione di una forza esterna esterna, provoca in essi una migrazione di cariche elettriche. Con l’utilizzo di un apposito circuito elettronico, la migrazione di cariche elettriche può essere tradotta una differenza di potenziale.

L’effetto piezoelettrico è un effetto reversibile, ciò vuol dire che una volta che abbiamo applicato una variazione meccanica sul cristallo si ottiene una variazione di cariche e in maniera analoga quando viene fornita una carica elettrica al sensore, questo si allungherà o si comprimerà.

Quando applichiamo al cristallo una forza meccanica le cariche elettriche si spostano accumulandosi sulle facce opposte del cristallo:

I materiali piezoelettrici utilizzati possono essere naturali o di sintesi dopo polarizzazione:

Materiali naturali

  • Quarzo cristallino (SiO2)
  • sale di Rochelle o sale di Seignette (tartrato di Sodio e Potassio)
  • Tormalina

Materiali di sintesi

  • Piezoceramici
    • Titanio Zirconato di Piombo (PZT)
    • Titanio di Bario (BaTiO3)

L’effetto piezoelettrico può essere sfruttato per:

  • generare energia elettrica
  • in campo medicale: ecografi
  • sensori di vibrazione per allarmi
  • sensori di impatto
  • sonar (in campo militare)
  • viene utilizzato negli accendini
  • per gli orologi
  • per rilevare variazioni meccaniche
  • produrre suoni, come nelle chitarre elettriche
  • messa a fuoco di strumenti ottici
  • sensori in capo ambientale per il radio tracking
  • ecc…

Esempio tipico è quello dei cicalini piezoelettrici, conosciuti anche come buzzer, che vengono utilizzate in molte delle sperimentazioni con Arduino, infatti sottoponendo a tensione elettrica e ad una determinata frequenza il materiale piezoelettrico all’interno del buzzer, viene posta in oscillazione e questo muovendo l’aria, dall’apposita apertura collocata sul buzzer, permette di percepire il suono.

Nelle sperimentazioni con Arduino è tipico usare sensori piezoelettrici economici che generalmente hanno forma circolare. Questi sensori non hanno gradi di precisioni elevati e sono utilizzati prevalentemente per rilevare vibrazioni. Per capire come sono realizzati questi sensori immaginate ad un sandwich in in cui l’elemento piezoelettrico, costituito da piombo-zirconato è inserito tra due piastre metalliche. Il loro utilizzo in circuito con microcontrollori è particolarmente semplice anche perché funzionano con le tensioni e le correnti che si hanno direttamente dai pin di uscita di questi circuiti elettronici.

Nel caso abbiate necessità di consultare i dati tecnici di diverse tipologie di dispositivi piezoelettrici vi rimando al questi due datasheet:

Realizziamo ora un circuito che ci permette, mediante il sensore piezoelettrico e Arduino, la rilevazione di vibrazioni e urti. Colleghiamo il sensore sulla breadboard e dalla breadboard ad Arduino, in questo modo eviteremo di far vibrare il sensore quando tocchiamo Arduino per effettuare i collegamenti.

Colleghiamo il filo rosso del sensore ad un ingresso analogico di Arduino, ad esempio A0 mentre il filo nero lo colleghiamo. In parallelo al sensore bisognerà inserire una resistore con resistenza da 1MOhm, ciò è necessario perché un piezo è un componente con caratteristiche capacitive e la resistenza in parallelo permette di assorbire le cariche che vengono accumulate sulla capacità.

Il circuito proposto è estremamente semplice ed è riportato di seguito:

Esempio 1

/*
 * Prof. Maffucci Michele
 * data: 22.01.2021
 * Lettura sensore piezoelettrico
 * 
 * Esempio 1: stampa dei valori sulla serial monitor
 * e visualizzazione del grafico sulla serial Plot
 * 
 * Si ricorda che la Serial Plotter e la Serial Monitor
 * non possono essere usati contemporaneamente
 * 
 */


void setup(){
   // Inizializzazione della serial monitor
  Serial.begin(9600);
}

void loop(){
  // val contiene il valore letto dal sensore  
  int val = analogRead(A0);
  Serial.println(val);
  delay(20);
}

Se si selezione Serial Plotter dal menù Tools:

si avrà la visualizzazione del grafico degli urti provocati sul sensore:

Come si può notare i valori sull’asse delle ordinate è compreso tra 0 e 1023.

Esempio 2

Arduino, come già spiegato nelle mie slide: Alfabeto di Arduino – Lezione 4, non è in grado di leggere direttamente valori di tensione, bisognerà utilizzare il convertitore analogico/digitale (ADC) integrato in esso per convertire una tensione elettrica in un valore numerico. L’ADC di Arduino è a 10 bit, quindi potrà mappare valori compresi tra 0V e 5V in valori numerici compresi tra 0 e 1023. (1024 valori), pertanto si avrà una risoluzione di 5/1024 = 4,88 mV.

Per ottenere la tensione elettrica partendo dai valori restituiti dall’ADC, sarà sufficiente prendere il valore restituito dall’analogRead() e moltiplicarlo per la tensione unitaria corrispondente ad una unità 5/1024 = 4,88 mV. Traduciamo questo in codice per visualizzare la tensione elettrica sulla Serial Plotter.

/*
 * Prof. Maffucci Michele
 * data: 22.01.2021
 * Lettura sensore piezoelettrico
 * 
 * Esempio 2: stampa dei valori della tensione elettrica
 * sulla Serial Monitor e Serial Plotter
 * resitituita dal sensore nell'intervallo 0V - 5V
 * 
 * Si ricorda che la Serial Plotter e la Serial Monitor
 * non possono essere usati contemporaneamente
 * 
 */

void setup(){
   // Inizializzazione della serial monitor
  Serial.begin(9600);
}

void loop(){
  // val contiene il valore letto dal sensore  
  int val = analogRead(A0);
  // tensione contiene il valore di tensione elettrica
  float tensione = val *(5.0/1024);
  Serial.println(tensione);
  delay(20);
}

Esercizio 1

Realizziamo un interruttore on/off, possiamo utilizzare gli esempi già disponibili all’interno dell’IDE di Arduino e che in altre occasioni ho utilizzato su questo sito.  L’idea è quella di realizzare un sistema antirimbalzo software (debounce) e attivare l’on o l’off su un LED se l’intensità della forza meccanica impressa è superiore ad un valore di soglia che impostiamo nel codice.

Esercizio 2

Collegare 10 LED ad Arduino ed utilizzare un sensore piezoelettrico per accendere una quantità di LED proporzionale alla forza impressa sul sensore.

Esercizio 3

Realizziamo un dimmer, un sistema in grado di regolare l’intensità luminosa di un LED. La regolazione dell’intensità luminosa sarà fatto toccando il sensore piezoelettrico. Il doppio tocco veloce (in un intervallo di tempo prestabilito da voi) inverte la modalità di variazione dell’intensità luminosa (aumentare/diminuire), nel caso non si riesca a realizzare lo sketch con il doppio tocco veloce, utilizzare un pulsante esterno per invertire la modalità intensità luminosa prodotta.

Esercizio 4

Utilizzando la stessa logica di funzionamento dell’esercizio 2, utilizzare ora una striscia LED per misurare l’intensità della forza meccanica con cui sollecitiamo il sensore piezoelettrico.

Buon Coding a tutti 🙂

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

/*
 * Prof. Michele Maffucci
 * Data 01.03.2021
 * 
 * Oggetto: sensore di seduta a pressione
 * 
*/

// variabile in cui verrà memorizzato il valore presente sul pin A0
const int misura = A0;

// valore restituito dall'analogRead
int val = 0;

// pin a cui è connesso il LED del sensore di seduta
int pinLed = 2;

// LED che segnala la seduta della persona
int pinLedAlert = 13;

void setup() {
  // Inizializzazione della Serial Monitor
  Serial.begin(9600);

  // ledPin è il pin a cui è connesso il LED del sensore di seduta
  pinMode(pinLed, OUTPUT);

  // pinLedAlert è il pin a cui è connesso il LED che segnala la seduta della persona
  pinMode(pinLedAlert, OUTPUT);

  // Attivazione del LED del sensore di seduta
  digitalWrite(pinLed, HIGH);

  // Messaggio di avvio
  Serial.println("Sistema di rilevazione seduta");
  Serial.println("-----------------------------");
  Serial.println(""); 
  delay(1000);
}

void loop() {
  // analogRead leggerà il valore su A0 restituendo un valore tra 0 e 1023
  val = analogRead(misura);

  // il valore di controllo nell'if deve essere sperimentato in funzione
  // delle necessità costruttive (ad es. la lunghezza del tubo)

  // se vero la persona è seduta
  if (val >= 100) {
    digitalWrite(pinLedAlert, HIGH);                      // accensione del LED di avviso
    Serial.println("Persona NON seduta alla scrivania");  // segnalazione di assenza persona
    Serial.print("Valore letto dal sensore = ");          // Stringa di stampa 
    Serial.println(val);                                  // Valore restituito dall'AnalogRead
    Serial.println("");                                   // Stampa linea vuota di separazione
    delay(1000);                                          // Intervallo di 1 secondo tra ogni stampa
  }
  else
  {
    digitalWrite(pinLedAlert, LOW);                       // spegnimento del LED di avviso
    Serial.println("Persona seduta alla scrivania");      // segnalazione di presenza persona
    Serial.print("Valore letto dal sensore = ");          // Stringa di stampa 
    Serial.println(val);                                  // Valore restituito dall'AnalogRead
    Serial.println("");                                   // Stampa linea vuota di separazione
    delay(1000);                                          // Intervallo di 1 secondo tra ogni stampa
  }
}

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 🙂