Abbiamo già visto in questo articolo il Display TFT Touch Screen di Kuman ed è arrivato il momento di realizzarci un bel progetto. Anticipiamo dicendo che per questi progetto sono stati utilizzati sensori già in nostro possesso, ma nulla impedisce a voi di rivoluzionarlo e ottimizzarlo.

Progetto

La Stazione Meteo Arduino con Touch Screen parte dall’idea di rilevare temperatura, umidità e pressione di una stanza, al fine di ottimizzare le condizioni ambientali. Di sé e per sé, il progetto è semplice nella costituzione, di meno nella realizzazione. Rilevare questi valori e non andare oltre sarebbe stato banale, quindi, oltre a stamparli su display, abbiamo pensato di sfruttareil touch screen e usarlo per aprire nuove finestre e leggeri altri risultati da rilevare e memorizzare ad intervalli regolari. Il risultato finale è un dispositivo che vi da informazioni utili e attendibili.

Componenti

Veniamo ai componenti della Stazione Meteo Arduino con Touch Screen: il display Kuman da 3,5″ è la componente principale che sappiamo sfrutta la maggior parte dei pin della dev-board. Per utilità, è stato utilizzato un Arduino Mega, così da sfruttare tutti i pin che restavano liberi senza troppi intralci. Per le rilevazioni abbiamo adoperato un DHT22, un sensore umidità e temperatura con variabili in virgola mobile e un BMP280 per rilevare pressione e temperatura (anche qui abbiamo la virgola mobile). Come si evince, entrambi i sensori rilevano temperatura in virgola mobile, pertanto faremo la media dei risultati. Infine, per rilevare le variabili ad intervalli regolari abbiamo utilizzato un modulo DS3231 RTC (real time clock) dotato di batteria tampone 2032 da 3,3V (la batteria va acquistata separatamente).

Ecco la lista dei materiali necessari:

ARDUINO MEGA: http://s.click.aliexpress.com/e/MS7VdpC4
KUMAN DISPLAY TFT 3.5″: https://amzn.to/36b5qiT
DHT22: http://s.click.aliexpress.com/e/spEvap0k
BMP280: http://s.click.aliexpress.com/e/tK6Zo91m
RTC DS3231: http://s.click.aliexpress.com/e/4gZe5TK0



Collegamenti

Il display Kuman è facilmente collegabile: basterà poggiarlo sopra l’Arduino Mega ed il gioco è fatto. Tuttavia, sebbene sia il più semplice, vi consiglio di lasciarlo per ultimo. Anticipiamo pure che tutti i sensori e il modulo RTC utilizzano i 5V. Nello schema sottostante della Stazione Meteo Arduino con Touch Screen, si può vedere che il DHT22 è stato collegato al pin digitale 53, i pin SDA e SCL del BMP280 sono invece collegati ai pin digitali 20 e 21, mentre il modulo RTC è collegato ai pin SDA e SCL.

Solo dopo aver fatto questi collegamenti potrete fissare il display. Lo spazio è angusto, quindi vi consiglio di piegare leggermente i pin header dei jumper e armarvi di pazienza. Un’altra soluzione è saldare i cavi sotto Arduino Mega, ma anche in questo caso vi consigliamo pazienza e, soprattutto, non fatelo se siete alle prime armi.



Codice

La Stazione Meteo Arduino con Touch Screen sfrutta diverse librerie, alcune delle quali sono “proprietarie” di Kuman, quindi se usate un display diverso, utilizzate le opportune librerie. Ad ogni modo, vi lascio un link per le librerie necessari e lo sketch:

ADAFRUIT_GFX
ADAFRUIT_TFTLCD
TOUCHSCREEN
MCUFRIEND_KBV
BMP280
DHT22
DS3231

SKETCH



Una delle cose principali da fare, una volta effettuati correttamente tutti i collegamenti, è eliminare i commenti a questa parte di codice contenuta nel VOID SETUP.

//rtc.setDOW(SUNDAY);
//rtc.setTime(13, 21, 00);
//rtc.setDate(21, 10, 2019);

Sarà necessario al fine di settare in modo corretto l’orario del modulo RTC. Ricordatevi di cambiare il valori con l’orario e la data corrente. Caricato lo sketch, riapplicate i commenti e ricaricatelo una seconda volta. Tornando al codice, nel VOID LOOP ci dedichiamo alla gestione del touch screen, attivato in 3 punti specifici del display, che corrispondono ai risultati che vediamo nella schermata.

void loop()
{

TSPoint p = ts.getPoint();
if (p.z > ts.pressureThreshhold){

p.x = map (p.x , TS_MINX, TS_MAXX, 0, 480 );
p.y = map (p.y , TS_MINY, TS_MAXY, 0, 320 );

Serial.print ("x= ");
Serial.println(p.x);
Serial.print ("y= ");
Serial.println(p.y);
delay(500);

if(p.x>320 && p.x<480 && p.y>150 && p.y<250 && buttonEnabled01) { pinMode(XM, OUTPUT); pinMode(YP, OUTPUT); tft.fillRect(0,105, 480, 220, BLACK); tempday(); delay (5000); tft.fillRect(0,105, 480, 220, BLACK); Home(); } if(p.x>10 && p.x<160 && p.y>150 && p.y<250 && buttonEnabled02) { pinMode(XM, OUTPUT); pinMode(YP, OUTPUT); tft.fillRect(0,105, 480, 220, BLACK); humday(); delay (5000); tft.fillRect(0,105, 480, 220, BLACK); Home(); } if(p.x>10 && p.x<270 && p.y>250 && p.y<320 && buttonEnabled03)

{

pinMode(XM, OUTPUT);
pinMode(YP, OUTPUT);
tft.fillRect(0,105, 480, 220, BLACK);
presday();
delay (5000);
tft.fillRect(0,105, 480, 220, BLACK);
Home();
}
}

if (p.z == 0) {
pinMode(XM, OUTPUT);
pinMode(YP, OUTPUT);
Home();
}

}

Basterà cliccare su uno dei valori per far apparire una schermata diversa. Vengono richiamate diverse funzioni: la funzione Home() è quella della schermata principale, in cui vengono stampanti i valori in tempo reale, la data, l’orario e le icone di temperatura e umidità con i rispettivi spazi. Ad ogni tocco sull’apposito spazio, si apre una schermata che vi mostra i risultati rilevati ogni 6 ore. Per creare questo era indispensabile il modulo RTC, in modo che ad ogni orario preimpostato Arduino memorizzasse sulla schermata il valore. Per fare questo abbiamo usato un ciclo IF/ELSE che riportiamo qui in esempio:


if (tempo.hour == 0 && tempo.min == 0 && tempo.sec > 0 && tempo.sec < 4)
{ t1 = TempMed; 
} 
if (tempo.hour == 6 && tempo.min == 0 && tempo.sec > 0 && tempo.sec < 4)
{ t2 = TempMed; 
} 
if (tempo.hour == 12 && tempo.min == 0 && tempo.sec > 0 && tempo.sec < 4)
{ t3 = TempMed; 
} 
if (tempo.hour == 18 && tempo.min == 0 && tempo.sec > 0 && tempo.sec < 4)
{
t4 = TempMed;
}

È stato necessario usare un intervallo tra i secondi perché l’Arduino Mega non era sempre in grado di gestire velocemente un display da 3.5″. Infatti, se non avessimo avuto questo tipo di display avremmo optato per un display differente a cui collegare una ESP32, molto più performante di Arduino Mega. La parte più sfiziosa è stata realizzare a mano le icone a forma di goccia e le icone della temperatura, volutamente realizzate con un aspetto pixelloso. Parliamo di icone temperatura perché in base a tre livelli di temperatura, il termometro salirà o scenderà.


if (TempMed < 10)
{ 
termo00(); 
} 
else if (TempMed >= 10 && TempMed < 27 ) {
termo01();
}
else {
termo02();
}

Per dare corrente a questo dispositivo si sta attualmente utilizzando un alimentatore da 9V e 0,6A appartenente ad un vecchio modem Tp-Link ormai defunto. Potete anche usare un Powerbank e collegarlo alla porta USB di Arduino Mega.

Conclusioni

Il costo per realizzare questo progetto è stato di circa 50€, acquistando tutto o quasi da Aliexpress. Il display rimane la componente più costosa con un prezzo di 18€, ma come abbiamo visto, in realtà, è relativamente conveniente. Il progetto Stazione Meteo Arduino con Touch Screen ha richiesto qualche settimana di programmazione e circa 6 giorni di test continui, oltre ad una bella sensazione di aver realizzato un progetto valido che, prima o poi, riceverà una scocca e sarà in pianta fissa in una delle stanze della nostra abitazione.