Buongiorno,

in questi giorni mi chiedevo cosa significhi fare una "buona" didattica ( qualcuno oserebbe il termine "efficace"); ad oggi ancora non ho trovato una possibile risposta e fortunatamente non credo ci sia, altrimenti perderei il gusto di continuare a cercare e ricercare.

Dare delle regole? ma sì , anche se probabilmente saranno tutte sbagliate!

Sicuramente per fare della buona didattica occorre tenere a mente alcune regole.

Una prima regola: fai ciò che ti piace! e questo vale per il docente, ma soprattutto per gli studenti. La seconda regola che darei agli studenti (ma anche ai docenti) è: sbaglia, permetti l'errore altrui, ma soprattutto non vergognarti ad esprimere i tuoi dubbi, usando anche termini non adatti. Questa regola è quella che preferisco, la rete è intrisa di colleghi che propongono le proprie idee, i loro progetti dove al centro vi è un solo soggetto : IO, IO , IO, IO.

Se si osa esprimere una opinione diversa dalla massa, allora sei escluso (in questo siamo tra le categorie che trasudano saccenza e verità assolute)!

Regola numero tre: cosa vogliono davvero i nostri studenti? quando ero al Liceo durante le ore di matematica e fisica mi addormentavo! Non era irriverenza la mia, semplicemente non stavo facendo ciò che mi piaceva, pertanto "facevo finta " di dormire e pensavo alle mie cose (all'epoca , come oggi, tutto incentrato sulla fisica e la cosmologia)

Quarta regola: divertiti con i tuoi studenti! Questa regola dice tutto! Il lavoro che vi presento oggi racchiude un pò tutte queste regole! Gli studenti hanno progettato, immaginato, sognato una idea, relativamente complessa (una serra automatizzata) e l'hanno realizzato, così come la vedrete nel corso nell'articolo! Il progetto è partito dall'idea di Expo su Cibo e vita, che poi sì è trasformato in energia in cibo in vita.

Come hanno lavorato gli studenti con il docente? Semplicemente divertendosi! Ognuno ha buttato giù la sua idea, senza remore, sbagliando linee di codici,con qualche cavo messo male, chiamando tensione ciò che era corrente, ma cosa importa? Cosa sarà mai questo oggetto? cosa importa se all'inizio non riconosci un diodo o un Mosfet, quello che conta non è dare un nome alle cose, ma capire a cosa possa servire ed a come funziona quella cosa .

Il lavoro è frutto di un progetto di squadra pomeridiano, di tipo aziendale (ognuno portava la sua idea, assemblava un suo pezzo di programma, chiedeva all'altro mi serve questo, lo fai tu o lo faccio io?), fatto di riunioni, dove ognuno esprimeva liberamente i propri dubbi, dove anche l'insegnante diceva la sua (e non sempre era la soluzione migliore!)

Ci siamo divertiti, abbiamo giocato, abbiamo avuto delle soddisfazioni (terzo posto al Concorso Sperimentando di Padova, Partecipazione alla Fiera Agenda21 For.Este sull'ecosostenibilità), ma soprattutto siamo ancora curiosi ed entusiasti di continuare a sperimentare

Alfonso D'Ambrosio

11185664 653121161499243 570146764 n

 

Il video della serra in azione è disponibile su youtube al seguente link

https://youtu.be/sBugQnuMMbw

Descrizione: E’ stato realizzato un prototipo di una serra per la coltivazione di piante ornamentali dove le varie fasi del processo di coltivazione sono state automatizzate e regolamentate grazie all’impiego della nuova tecnologia Arduino. La serra si pone, inoltre, come un progetto che coniuga tecnologia e rispetto per  l’ambiente grazie all’impiego di energia rinnovabile proveniente da un pannello fotovoltaico per l’alimentazione del sistema.

Cosa osservare: Dal display si può osservare la variazione del grado di umidità del terreno e la conseguente accensione o spegnimento dell’impianto di irrigazione.

Contestualmente un pannello fotovoltaico ruota per mantenere sempre l’irradiazione solare massima possibile e garantire la massima efficienza.

Spiegazione: Grazie al programma (sketch) realizzato con linguaggio di programmazione Arduino e implementato sulla scheda è stato possibile comandare dei sensori di umidità inseriti nel terreno che rilevando un basso grado di umidità azionano una pompa. Ciò permette di accendere un impianto a pioggia che irriga le piante. Raggiunto il grado di umidità necessario nel terreno l’impianto di irrigazione si ferma.

 Il grado di umidità e l’eventuale necessità di  irrigazione vengono visualizzati su un piccolo display che garantisce all’utente un costante monitoraggio delle condizioni del sistema.

L’illuminazione della serra e l’azionamento dell’impianto di irrigazione avvengono grazie all’impiego di energia solare prodotta da un pannello fotovoltaico che viene messo in rotazione da un servomotore azionato tramite Arduino e da delle fotoresistenze. Grazie a tali fotoresistenze il pannello ruota mantenendo su di sé la maggiore irradiazione possibile con  la massima efficienza garantita e produce energia pulita per far funzionare l’intero ambiente (dimostrazione con accensione led.)

La serra senza l’uomo:

Serra con tecnologia Arduino

  • Alunni: Rosso Stefano, Stevanin Riccardo, Nucibella Erik, Cocchio Luca, Voinea Stefan
  • Docenti coordinatori:  Veronese Silvia, D’Ambrosio Alfonso.
  • Premessa:

La scelta di utilizzare la tecnologia Arduino per questo progetto nasce dal fatto che la scheda ARDUINO UNO permette una rapida e veloce programmazione e nasconde all’utente tutta una serie di passaggi e configurazioni solitamente richiesti all’ utente che necessiterebbe quindi di notevole esperienza in ambito elettronico. Grazie alla scheda Arduino e all’ambiente di sviluppo, l’IDE (Integrated, Development, Environment) la realizzazione di progetti è divenuta molto più semplice. Il cui cuore della scheda  è un microcontrollore della famiglia AVR di Atmel. Il codice viene scritto sulla memoria flash del microcontrollore grazie ad un collegamento USB al PC. Anche l’alimentazione può essere fornita direttamente dal PC tramite USB oppure esiste un connettore per collegare un alimentatore esterno da 7 a 12 V tensione che viene poi ridotta ai canonici 5V e 3.3V da un regolatore presente sulla scheda.

Con la sua schiera di porte e di pin d’ingresso e di uscita, Arduino UNO è in grado di acquisire informazioni da una miriade di sensorie gadget elettronici, potendo allo stesso tempo accendere luci e dispositivi, pilotare motori o emettere suoni.

I programmi di Arduino si chiamano Sketch e il linguaggio utilizzato per programmare è una versione semplificata di C/C++ arricchito da una serie di comandi creati appositamente per dare accesso alle varie funzionalità della scheda. Come ogni programma, anche i programmi Arduino vengono realizzati in un ambiente di programmazione, nello specifico l’IDE, per poi essere compilati ed eseguiti.

Dal punto di vista dell’hardware, Arduino offre collegamenti ingesso e uscita sia di tipo analogico che digitale.

I/O Digitale: i pin digitali sono progettati per essere bidirezionali, ovvero in grado di passare dalla modalità di ingresso a quella di uscita attraverso la scrittura di opportuni valori nei registri di controllo ( aree di memoria speciali interne al microcontrollore). Quando sono in modalità Output, possono assumere valore logico 0 e 1 corrispondenti a 0V e 5V.I pin configurati come ingressi, da un punto di vista strettamente elettronico, non rappresentano un carico di cui preoccuparsi e quindi anche sensori e dispositivi a bassa potenza possono generare i livelli logici necessari. Da 0 a 2,5 volt avremo una lettura dello stato logico 0, mentre oltre i 2,5 volt e fino a 5 volt saranno considerati come stato logico 1. I pin di uscita di Arduino UNO hanno dei circuiti di pilotaggio definiti come simmetrici, ovvero in grado di generare dei livelli 0 e 1 non solo con carichi ad alta impedenza (e quindi bassissimo assorbimento), ma anche su carichi che assorbono un massimo di 40 mA, fino a raggiungere un totale complessivo per tutti i vari pin di 150 mA.

serra1

Ingresso analogico: il comportamento con i segnali analogici non è simmetrico fra ingresso e uscita, ovvero non possiamo generare segnali analogici con la stessa precisione che abbiamo in ingresso e il tipo di segnale analogico non è neppure un vero livello di tensione fra un minimo e un massimo, a meno che non si usi un circuito di integrazione.

serra2

Tale limite viene superato a livello software. Per meglio capire come un dispositivo digitale gestisca  la lettura di un segnale analogico, ricordiamo come funziona un  convertitore analogico digitale A/D. Il convertitore A/D è un circuito che misura istantaneamente la tensione d’ingresso ogni volta che viene interrogato e la converte in un valore binario. L’intervallo di tensioni misurabile viene suddiviso in tanti livelli discreti, o scalini, questi sono i valori esprimibili con i bit a disposizione. Se il convertitore è a 8bit si potranno esprimere 256 valori; Arduino ha un convertitore A/D a 10bit e quindi si potranno esprimere 1024 valori diversi. In pratica con Arduino UNO possiamo leggere valori analogici fra 0 e 5 volt con 1024 livelli discreti. La lettura è lineare e quindi il valore 512 corrisponde a 2,5V mentre 128 corrisponde a 0,625V e così via. Un singolo livello è pari a 0,0048 volt e questa di fatto è la risoluzione teorica del convertitore della nostra scheda Arduino.

Uscita analogica – PWM: le uscite analogiche di Arduino UNO non sono realmente in gardo di produrre una tensione variabile, sempre a step discreti, da 0 a 5V, ma sfruttano la tecnica del PWM (Pulse Width Modulation) per ottenere un effetto pressoché equivalente. Sostanzialmente il segnale prodotto varia solo tra i livelli logici 0 e 1, par a 0 e 5V, ma il rapporto fra i livelli viene variato all’interno del singolo ciclo per simulare una variazione di tensione. Per esempio per fornire 0,5V al mio dispositivo genero un segnale PWM con il 10% del ciclo positivo; per fornire 2,5V il ciclo sarà positivo per il 50%. Facendo una media nel tempo della tensione si ottiene effettivamente una serie di livelli variabili tra 0 e 5V pari agli step disponibili per il duty cycle del PWM. Nel caso di Arduino Uno il PWM è a 8 bit ovvero 256 livelli. Se fosse proprio indispensabile avere una tensione e non un segnale PWM si può usare un filtro passa basso opportunamente dimensionato.

  • La realizzazione pratica della serra

La serra è stata realizzata con del tondino di acciaio piegato e saldato al fine di ottenere una struttura a tre campate. Nella prima campata si è lasciato spazio ai dispositivi hardware che sono stati racchiusi in scatole elettriche al fine di inibire l’ingresso dell’eventuale umidità prodotta dall’impianto d’irrigazione durante l’innaffiatura. Nella seconda e terza campata sono state posizionate selle vaschette in plastica riempite con terriccio fertile che simulano i vari settori di coltivazione della serra. Un tondino in ferro attraversante le due campate sostiene il tubicino che svolge la funzione di irrigatore a goccia. In alto una striscia di led illumina la serra e varia la colorazione a seconda delle necessità delle piante coltivate.

L’intera struttura è posizionata su fondo in legno e parzialmente coperta con plexiglass trasparente che permette il filtraggio della luce ma contemporaneamente conferisce robustezza alla struttura stessa.

  • L’hardware
 
   

serra3

 

Il sistema è formato da 4 componenti principali: Sensore di Umidità e Temperatura, Display che visualizza livello dell’Umidità del terreno e i valori del precedente sensore, il gruppo di quattro sensori di Umidità del terreno e le due pompe con i tubi per distribuire l’acqua.

Il sensore di Umidità e Temperatura ambientale combinato, lavora con output digitali.

Il display è un pannello LCD con due file da 16 caratteri ciascuna. La versione da noi utilizzata, comunica con Arduino tramite un nuovo protocollo I2C, utilizzando solo due pin, risparmiando spazio sulla scheda e snellendo la comunicazione e l’uso del processore.

I sensori di umidità del terreno vengono piantati nelle vasche di terra, due per ogni lato. Viene fatta una media dei sensori per lato e vengono attivate indipendentemente le due pompe.

L’alimentazione delle pompe viene fornita da un alimentatore esterno a 12 V e distribuita con dei relè a 5 V comandati da output digitali di Arduino.

Come descritto sopra, l’attivazione delle pompe è determinata dal valore dei sensori di umidità del terreno.  I sensori sono dei trasduttori di segnale che trasformano l’umidità presente nel terreno in un segnale elettrico. Questo è letto attraverso dei valori di resistenza da 0 a 700 in base alla presenza di acqua (0 se secco, 700 se bagnato). Il calcolo è una semplice somma e media.

Il progetto, dalla prima bozza alla costruzione finita della serra ha richiesto 3 mesi di lavoro. Non tanto per il reperimento o la costruzione stessa della struttura, ma a causa degli impegni scolastici ed extra dei componenti del gruppo.

Inoltre, abbiamo più volte cambiato diverse parti della serra, discutendo e provando diverse soluzioni sia per la copertura, sia per il posizionamento della strumentazione e della scheda di controllo.

  • Il software:  lo sketc
  1. #include "DHT.h"
  2. #include <SPI.h>
  3. #include <Wire.h>
  4. #include <LiquidCrystal_I2C.h>
  5. #define DHTPIN 2
  6. #define DHTTYPE DHT11   // DHT 11
  7. DHT dht(DHTPIN, DHTTYPE);
  1. //Inizializzazione Pin
  2. int sensoreTerra1 = A0;
  3. int sensoreTerra2 = A1;
  4. int sensoreTerra3 = A2;
  5. int sensoreTerra4 = A3;
  6. int Rele1 = 6;
  7. int Rele2 = 5;
  8. int Button = 4;
  9. int ledtest = 13;
  1. int sensorValue1 = 0;
  2. int sensorValue2 = 0;
  3. int sensorValue3 = 0;
  4. int sensorValue4 = 0;
  5. double MediaSensori1 = 0.0;
  6. double MediaSensori2 = 0.0;
  7. double temp1 = 0.0;
  8. double temp2 = 0.0;
  9. boolean StatoPompa1 = false;
  10. boolean StatoPompa2 = false;
  1. LiquidCrystal_I2C lcd(0x27, 16, 2);
  1. void setup()
  2. {
  3.   pinMode(sensoreTerra1, INPUT);
  4.   pinMode(sensoreTerra2, INPUT);
  5.   pinMode(sensoreTerra3, INPUT);
  6.   pinMode(sensoreTerra4, INPUT);
  7.   pinMode(Rele1, OUTPUT); //Inzializza Relè 1
  8.   pinMode(Rele2, OUTPUT); //Inzializza Relè 2
  9. }
  1. void loop()
  2. {
  3.   sensorValue1 = analogRead(sensoreTerra1);
  4.   sensorValue2 = analogRead(sensoreTerra2);
  5.   sensorValue3 = analogRead(sensoreTerra3);
  6.   sensorValue4 = analogRead(sensoreTerra4);
  7.   temp1 = 0.0;
  8.   temp2 = 0.0;
  9.   temp1 = temp1 + sensorValue1 + sensorValue2;
  10.   temp2 = temp2 + sensorValue3 + sensorValue4;
  11.   //Ora fa la media tra i sensori per poi attivare le pompe separatamente
  12.   MediaSensori1 = (temp1 / 2);
  13.   MediaSensori2 = (temp2 / 2);
  1.   int h = dht.readHumidity();
  2.   int t = dht.readTemperature();
  3.   buttonState = digitalRead(Button);
  1.   if (MediaSensori1 < 60)
  2.   {
  3.     digitalWrite(Rele1, LOW);
  4.     StatoPompa1 = true;
  5.   }
  6.   else
  7.   {
  8.     digitalWrite(Rele1, HIGH);
  9.     StatoPompa1 = false;
  10.   }
  11.   if (MediaSensori2 < 60)
  12.   {
  13.     digitalWrite(Rele2, LOW);
  14.     StatoPompa2 = true;
  15.   }
  16.   else
  17.   {
  18.     digitalWrite(Rele2, HIGH);
  19.     StatoPompa2 = false;
  20.   }
  1.   if (StatoPompa1 == true)
  2.   {
  3.       if(StatoPompa2 == true)
  4.       {
  5. }
  6.      else
  7.      {
  8. }
  9.   }
  10.   else
  11.   {
  12.     if(StatoPompa2 == true)
  13.       {
  14. }
  15.      else
  16.      {
  17. }
  18.   }
  19.   delay(300);
  20. }
  • Il software : dettaglio sketch

Analizziamo i punti principali del codice.

Righe 1-4 inclusione di librerie di sistema per Arduino DHT.h , SPI.h, Wire.h,LiquidCrystal_I2C.h

Le righe 6-8 e 28 sono la dichiarazione delle variabili di tipo DHT (per il sensore di temperatura) e LiquidCrystal (per il display).

La funzione setup vede la dichiarazione dei pin di lettura dei sensori di umidità,

Entrando nella funzione loop, le righe 45-48 leggono il dato analogico dei sensori di umidità, le righe 51-55 fanno la media dei valori e le inseriscono nelle variabili MediaSensori . N.B. Le variabili temp sono azzerate ogni ciclo.

Le righe 83-113 sono gli If di controllo: prima il controllo per la pompa 1, poi per la pompa2.

Le scritte del display sono controllate da un “terzo” if che si basa sulle variabili StatoPompa.

  • Bibliografia

http://www.instructables.com/id/Arduino-TempHumidity-with-LCD-and-Web-Interface/step3/DHT11-library-and-test-sketch/

http://linuxmx.it/elettronica/arduino/514-pilotare-lcd-tramite-i2c.html

http://www.seeedstudio.com/wiki/Grove_-_Moisture_Sensor

http://www.instructables.com/id/Controlling-AC-light-using-Arduino-with-relay-modu/

Elettronica In:Primi passi con Arduino/ Edizioni futura group/

Tralasciando le parti fondamentali di uno sketch per Arduino (librerie e uso delle funzioni loop e setup),