Archivi tag: arduino

Arduino: Sensore resistivo di umidità del terreno

Abbiamo visto nei precedenti post come rilevare l’umidità del terreno con micro:bit per controllare l’irrigazione di una pianta, vediamo ora una soluzione estremamente economica che può essere adottata con Arduino e che mostrerò nel dettaglio durante il mio prossimo corso sulla realizzazione dei laboratori green.

Il funzionamento del sensore di umidità del suolo è estremamente semplice.

La sonda a forma di forcella, con due conduttori esposti, agisce come un resistore variabile (come un potenziometro) la cui resistenza varia in base al contenuto di acqua nel terreno.

La resistenza è inversamente proporzionale all’umidità del suolo:

  • più acqua è presente nel terreno implica maggiore conduttività e quindi minore resistenza;
  • meno acqua è presente nel terreno implica minore conduttività e quindi maggiore resistenza.

Pertanto il sensore fornisce una tensione di uscita proporzionale alla resistenza misurata, in tal modo possiamo determinare il livello di umidità.

La sonda ha la forma di una forcella su cui sono disposte delle piste conduttive esposte. Le forcelle saranno da inserire all’interno del terreno o in qualsiasi altro elemento di cui bisogna misurare l’umidità.

La forcella viene connessa ad un modulo elettronico e quest’ultimo dovrà poi essere connesso ad Arduino. Il modulo fornirà una tensione di uscita proporzionale alla resistenza rilevata dalla sonda, questa tensione verrà resa disponibile ad un pin analogico di Arduino, nell’esempio che segue collegheremo la sonda al pin A0.

Nella foto si notano, sulla sinistra i due pin a cui collegheremo i pin di uscita della forcella e sulla destra quattro pin:

  • A0: uscita analogica
  • D0: uscita digitale
  • GND: ground
  • Vcc: tensione positiva di alimentazione (da 3,3V a 5V)

Il modulo è dotato di un potenziometro per la regolazione della sensibilità dell’output digitale (DO). Con il trimmer sarà possibile impostare la soglia di sensibilità, in modo tale che, quando il livello di umidità e al di sopra o al di sotto di un determinato valore, sul D0 vi sarà un segnale HIGH che potrebbe, ad esempio, attivare un relè che controlla l’avvio di una pompa di irrigazione.

Sulla scheda sono presenti inoltre un LED che segnala il funzionamento della scheda ed un LED che segnala lo stato del pin D0.

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 🙂

I miei corsi per Tecnica della Scuola: realizzare laboratori green con il Making e il Coding

Proposte didattiche innovative per la sostenibilità ambientale

Il corso nasce da un progetto che desideravo mettere in atto in periodo pre-pandemico, avevo l’esigenza di trovare soluzioni per la prevenzione e il contrasto alla dispersione scolastica, l’idea molto semplice era quella a contrastare e prevenire fenomeni di emarginazione sociale e abbandono scolastico tra gli adolescenti attraverso un percorso educativo nell’ambito dell’agricoltura e dell’automazione in campo agricolo. Nei mesi di lockdown non potendo sviluppare l’attività didattica all’aperto, mi sono quindi concentrato su attività da svolgere in laboratorio che permettessero poi di strutturare in diverse modalità il progetto attraverso serre piccole di diverso tipo, anche idroponiche, il tutto con l’obiettivo di applicare questa esperienza a serre più grandi in campo agricolo. L’esperienza del PCTO dello scorso anno dei miei studenti, che hanno sviluppato in autonomia serre idroponiche, è stato più che utile per migliorare la proposta didattica che mi ha permesso di strutturare un percorso laboratoriale che ho poi declinato negli scorsi mesi per livelli di scuola costruendo kit specifici.

Il corso che propongo è la sintesi di un’esperienza in cui vorrei mostrare come con la pratica e con il Coding è possibile sensibilizzare i ragazzi all’ambiente e allo sviluppo sostenibile.

Presentazione del corso

Il corso intende mostrare come, attraverso un’apprendimento attivo ed inclusivo, si possono sviluppare laboratori green per la transizione ecologica, sostenibili e innovativi per la scuola primaria e secondaria al fine di riqualificare giardini e cortili scolastici trasformandoli in ambienti di esplorazione e di apprendimento delle discipline curricolari in un percorso nel quale l’esperienza stessa genera conoscenza e apprendimento.

La realizzazione di orti didattici e giardini a fini didattici prevede un controllo dei parametri fisico/chimici che può essere agevolmente svolta con strumenti didattici che vengono utilizzati comunemente in attività laboratoriali per l’apprendimento del Coding e la robotica didattica.

Schede elettroniche come BBC micro:bit, Arduino, Raspberry Pi, possono assolvere a questo compito e la loro programmazione può avvenire utilizzando i linguaggi più adatti al livello di scuola a cui appartengono gli studenti, quindi si potrà optare per un linguaggio grafico a blocchi o testuale.

L’obiettivo del corso è quello di fornire le competenze necessarie per realizzare in piena autonomia attività laboratoriali volte al controllo automatico dei parametri ambientali che permettono la crescita di singole piante o piccole serre anche idroponiche con un sistema di monitoraggio delle colture basati sull’IoT (Internet of Things). Verranno inoltre mostrate attività pratiche per la realizzazione di dispositivi per il monitoraggio dell’inquinamento atmosferico, acustico e luminoso.

Continua a leggere

CoolTerm – Alternative alla Serial Monitor di Arduino

La comunicazione seriale viene usata in moltissimi dispositivi elettronici che utilizziamo ogni giorno. Rispetto alla comunicazione parallela (4, 8 o 64-bit), la comunicazione seriale è utilizzata spesso nei sistemi embedded a causa del basso costo e della trasmissione efficace nelle lunghe distanze.
Per chi opera con Arduino, sa che l’uso della Serial Monitor è necessario per la lettura di dati inviati serialemente tra Arduino ed il computer con altri dispositivi elettronici, ad esempio l’invio sulla Serial Monitor dei valori di temperatura rilevata da un sensore di temperatura connesso ad Arduino.

La comunicazione seriale è inoltre uno strumento utilissimo per effettuare il debug, ovvero inviare dei messaggi sulla seriale per l’utente al fine di rilevare errori o mettere in evidenza i passi di esecuzione di un programma o lo stato di un sistema.

I dati inviati da Arduino al Computer o viceversa possono essere visualizzati sul monitor del computer (attraverso la finestra della Serial Monitor) o su altri dispositivi come ad esempio un display LCD connesso ad Arduino.

Ho mostrato più volte in precedenti lezioni l’uso dei comandi seriali: Serial.begin(), Serial.print(), Serial.read() e l’utilizzo della Serial Plotter che permette di visualizzare il grafico su piano cartesiano dei dati seriali trasmessi da Arduino.

Sicuramente anche voi, nell’uso costante della Serial Monitor, avrete notato i limiti dello strumento, come esempio l’impossibilità del salvataggio dei dati inviati ad un file di log.
E’ utile quindi considerare l’uso di un terminale alternativo che offra maggiori funzionalità rispetto alla Serial Monitor, come ad esempio visualizzare:

  • i caratteri di controllo;
  • i dati in formato testo o binario o entrambi;
  • salvare i dati rilevati in un file di log.

Tra i molti software disponibili il mio consiglio va a CoolTerM, un terminale user-friendly estremamente utile.
CoolTerM viene distribuito con licenza freeware / donationware sviluppato da Roger Meier ed è disponibile per dispositivi Windows, Mac, Linux.

Come si usa CoolTerM per rilevare dati che provengono da Arduino.

A titolo di esempio sfruttiamo quanto già svolto in passato, visualizzimo su CoolTerM la distanza di un ostacolo rilevato da un sensore ad ultrasuoni.
Prendiamo come riferimento lo sketch che segue, tratto da una mia lezione sull’uso del sensore ad ultrasuoni per un kit robotico, nello stesso post trovate la teoria di funzionamento del sensore HC-SR04.

1/* Prof. Maffucci Michele
2    
3   Utilizzo del sensore ultrasuoni HC-SR04
4   Misura della distanza di un ostacolo
5 
6*/
7 
8long durata;          // durata dell'impulso
9long distanza;        // distanza dell'oggetto
10int pin_echo = 7;     // pin Arduino a cui è collegato il sensore SR04
11int pin_trig = 9;     // pin Arduino a cui è collegato il sensore SR04
12 
13void setup()
14{
15    Serial.begin(9600);
16    pinMode(pin_trig, OUTPUT);
17    pinMode(pin_echo, INPUT);
18    Serial.println("Sensore ad ultrasuini");
19}
20 
21void loop()
22{
23  Serial.print("Distanza ostacolo: ");
24  Serial.println(distanzaOstacolo());
25  delay(100);
26}
27 
28// rilevazione distanza ostacolo
29 
30// misura la distanza dell'ostacolo
31long distanzaOstacolo()
32{
33  digitalWrite(pin_trig, LOW);
34  delayMicroseconds(2);
35  digitalWrite(pin_trig, HIGH);
36  delayMicroseconds(10);
37  digitalWrite(pin_trig, LOW);
38  durata = pulseIn(pin_echo, HIGH);
39  distanza = (durata / 2.0) / 29.1;
40  delay(100);
41  return distanza;
42}

Con Arduino connesso al computer aprire CoolTerM e selezionare “Options”, da quì impostare la porta a cui è connessa la scheda e la velocità di connessione a 9600, una velocità diversa non permetterà una lettura corretta dei dati.

Torna alla schermata principale fate clic su “Connect”, ciò permetterà di avviare la trasmissione dei dati tra Arduino e il computer e i dati inizieranno ad apparire.
Quando desiderate interrompere la trasmissione ovviamente farete clic su “Disconnetti”.

E’ spesso utile analizzare i dati raccolti, in tal caso selezionate: Connection > Capture to Text/Binary File > Start ciò permetterà di salvare i vostri dati in un file TXT che potrà poi essere analizzato ad esempio con un foglio di calcolo.

CoolTerM offre ulteriori funzionalità molto utili:

  • se disponibile è possibile connettere più porte seriali concorrenti;
  • visualizzazione dei dati in formato semplice o esadecimale (HEX);
  • salvataggio e caricamento delle opzioni di connessione;
  • gestione dei caratteri speciali;
  • scripting;
  • eco locale di dati trasmessi / ricevuti;

Buon Making a tutti 🙂

Esercitazioni di base di Arduino – visualizzazione luminosità LED mediante una barra di avanzamento su display 16×2


Continuo nell’aggiornamento delle esercitazioni di base per gli studenti di 3′ dell’ITIS (Elettronica ed Automazione) e per gli utenti che iniziano con Arduino.
Utilizzeremo un display LCD 16×2 di tipo I2C su cui visualizzeremo mediante una barra di avanzamento, la quantità di luminosità impostata per il LED, mediante un potenziometro.

Per la gestione di un display LCD di tipo I2C rimando alla mia lezione: Utilizzo dell’LCD 16×2 Hitachi HD44780 1602 con modulo I2C PCF8574T.

Per la creazione di caratteri personalizzati rimando alla mia lezione: Disegnare caratteri personalizzati con Arduino per un LCD 16×2.

Lista componenti

  • N.1 Arduino UNO
  • N.1 Breadboard
  • N.1 LCD 16×2 I2C
  • N.1 Potenziometri da 10 KOhm
  • N.1 LED da 5 mm
  • N.1 Resistore da 220 Ohm
  • jumper

Schema di collegamento

Scketch

Di seguito viene indicato il codice i base, all’interno i commenti che ne dettagliano il funzionamento di ogni parte:

1/*
2   Prof. Maffucci Michele
4   Ver.1 - 27.12.21
5   Controllo di luminosità LED con
6   visualizzazione intensità mediante una
7   barra di avanzamento su display 16x2
8*/
9 
10#include <Wire.h>
11#include <LiquidCrystal_I2C.h>
12 
13byte pinPot = A0;           // pin analogico 0 a cui connettere il potenziometro per controllare la luminosità
14byte pinLed = 3;            // pin PWM a cui connettere il LED
15int  analogVal = 0;         // variabile in cui memorizzare il valore impostato dal potenziometro
16int  luminosita = 0;        // variabile in cui memorizzare la luminosità
17byte barraAvanzamento = 0;  // indice barra avanzamento
18 
19// Per maggiori informazioni sulla realizzazione di caratteri speciali:
21 
22// Carattere personalizzato per disegnare la barraAvanzamento di avanzamento
23byte iconaBarra[8] = {
24  B11111,
25  B11111,
26  B11111,
27  B11111,
28  B11111,
29  B11111,
30  B11111,
31};
32 
33// inizializzazione della libreria in cui è descritta la modalità di utilizzo dei pin
34// impostazione dell'indirizzo dell'LCD 0x27 di 16 caratteri e 2 linee
35LiquidCrystal_I2C lcd(0x27, 16, 2);
36//-----------------------------
37 
38void setup()
39{
40  lcd.begin();      // inizializzazione dell'LCD
41  lcd.backlight();  // attivazione della retroilluminazione
42 
43  // Inpostazione ad OUTPUT del pin a cui connettiamo il LED
44  pinMode(pinLed, OUTPUT);
45 
46  // Cancella il display
47  lcd.clear();
48 
49  // Stampa il messaggio sulla prima riga del display
50  lcd.print("Luminosita' LED");
51 
52  //Creazione del carattere per la barra di avanzamento
53  lcd.createChar(0, iconaBarra);
54}
55 
56// Per maggiori informazioni sull'uso del display 16x2 I2C:
58//-----------------------------
59 
60void loop() {
61  // Cancella il display
62  lcd.clear();
63   
64  // Stampa il messsaggio sulla prima riga
65  lcd.print("Luminosita' LED");
66   
67  //Posiziona il cursore nella seconda riga, prima colonna
68  lcd.setCursor(0,1);
69   
70  // Lettura del valore impostato dal potenziometro
71  analogVal = analogRead(pinPot);
72           
73  // Conversione del valore analogico impostato con il potenziometro
74  // in Duty Cicle per impostare la luminosità del LED
75  luminosita=map(analogVal, 0, 1024, 0, 255);
76   
77  // Impostazione della luminosità del LED
78  analogWrite(pinLed, luminosita);
79   
80  // Conversione della luminosità in quantità di caratteri della barra da stampare
81  barraAvanzamento=map(luminosita, 0, 255, 0, 15);
82   
83  // Stampa la barra di avanzamento
84  for (byte i = 0; i < barraAvanzamento; i++)
85  {
86    lcd.setCursor(i, 1);  
87    lcd.write(byte(0)); 
88  }
89  // leggero ritardo di 500 ms per visualizzare la barra
90  delay(500);       
91}

Proposta esercizi

Esercizio 1
Nell’esempio proposto viene utilizzato un delay() finale per permettere la visualizzazione dei caratteri sul display. Sostituire il delay() ed utilizzare l’istruzione millis() per valutare il tempo trascorso e controllare la stampa dei caratteri sul display.

Esercizio 2
Modificare il programma precedente raddoppiando il numero di caratteri che rappresenta la barra di avanzamento.

Esercizio 3
Modificare l’esercizio proposto variando la barra di avanzamento in funzione dell’approssimarsi al valore massimo o minimo della luminosità.

Esercizio 4
Modificare l’esercizio proposte inserendo un buzzer che emette un suono la cui frequenza varia in funzione dell’intensità luminosa del LED.

Buon Making a tutti 🙂