Nell’articolo di oggi vedremo come realizzare una stazione con Arduino, un display TFT 1,8″ ST7735 e un sensore di temperatura e umidità DHT11.
In meteorologia la stazione meteorologica è un insieme di strumenti di misura che permettono di controllare/monitorare le condizioni fisiche dell’atmosfera in un dato luogo, per un tempo indefinito, relativamente ai suoi parametri fondamentali, a fini meteorologici e climatici.
Sensore DHT 11: datasheet
Il sensore DHT è un sensore in grado di rilevare umidità e temperatura grazie alle semplici librerie forniteci da Adafruit.
Le specifiche tecniche sono le seguenti:
- Range di misurazione: Umidità: 20-90%RH , Temperatura: 0-50°
- Accuratezza umiditià: Umiditià ±5%RH
- Accuratezza Temperatura: ±2℃
- Risoluzione: 1
- Alimentazione: 3-5.5v
Attenzione, in alcuni modelli di sensore DHT 11 i pin Vcc e Signal possono essere invertiti. Un eventuale problema per il quale il programma compilato non funzioni potrebbe consistere in questo motivo.
Il sensore DHT11 espone 3 pin denominati:
- GND: piedino di massa
- VCC: piedino di alimentazione
- sitgnal: piedino di comunicazione dati 1-wire
Il DHT11 va alimentato con una tensione compresa tra i 3 e 5V. In che modo rileva l’umidità relativa e la temperatura? Il DHT11 è in grado di rilevare il valore percentuale dell’umidità relativa misurando la resistenza elettrica tra i due elettrodi. La conduttività tra gli elettrodi aumenta all’aumentare dell’umidità relativa. Mentre per quanto concerne la temperatura il DHT11 utilizza un sensore NTC.
Le specifiche tecniche di questo display sono le seguenti:
- risoluzione 128×160 a 65 mila colori
- dimensioni: 28x35mm
- driver: st7735
- 5v o 3.3v
- Opzioni SD Card reader
- Interfaccia SPI
- 1,8″
I materiali da utilizzare per il collegamento del display TFT 1,8″ alla board Arduino sono:
- Arduino Uno
- Display TFT 1,8″
- Cavo USB
- 11x jumper maschio-maschio
- 1x breadboard
- DHT11
COLLEGAMENTO
Ci sono tantissimi display TFT da 1,8″ nel mercato, quindi il collegamento potrebbe cambiare da display a display. I display possono avere la posizioni di alcuni pin differente ma comunque sono presenti le “stesse sigle” che permettono quindi di effettuare correttamente il collegamento prendendo anche come riferimento altri display con la posizione dei pin diversa. Rispetto a questo display ce ne potrebbero essere altri con pin BLK (blacklight), che in questo caso non è presente, ma niente di preoccuparsi, lo puoi collegare al pin 12
Ecco una schema che può tornare utile:
Ecco il diagramma di collegamento:
CODICE E TEST
Se è la prima volta che utilizzi il display, prima di scrivere il codice ti consiglio vivamente di leggere questo articolo introddutivo sul collegamento e configurazione del display ST7735 TFT 1,8″
Come collegare display TFT 1,8″ ST7735 ad Arduino
Forse ad alcuni occorre installare la libreria DHT.h. Non sai come fare? Tranquillo, leggi questo articolo:
Arduino IDE: come installare una libreria #10.1
Ecco il codice:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
#include <Adafruit_GFX.h> // include Adafruit graphics library #include <Adafruit_ST7735.h> // include Adafruit ST7735 TFT library #include <SPI.h> #include <EEPROM.h> #include "DHT.h" #define DHTPIN 2 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); #define TFT_RST 8 // TFT RST pin is connected to arduino pin 8 #define TFT_CS 10 // TFT CS pin is connected to arduino pin 10 #define TFT_DC 9 // TFT DC pin is connected to arduino pin 9 // initialize ST7735 TFT library Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST); // define device I2C address: 0x76 or 0x77 (0x77 is library default address) void setup(void) { dht.begin(); tft.initR(INITR_BLACKTAB); // initialize a ST7735S chip, black tab tft.fillScreen(ST7735_BLACK); // fill screen with black color tft.drawFastHLine(0, 30, tft.width(), ST7735_WHITE); // draw horizontal white line at position (0, 30) tft.setTextColor(ST7735_WHITE, ST7735_BLACK); // set text color to white and black background tft.setTextSize(1); // text size = 1 tft.setCursor(4, 0); // move cursor to position (4, 0) pixel tft.print("ARDUINO + ST7735 TFT"); tft.setCursor(19, 15); // move cursor to position (19, 15) pixel tft.print("WEATHER STATION"); tft.drawFastHLine(0, 76, tft.width(), ST7735_WHITE); // draw horizontal white line at position (0, 76) tft.drawFastHLine(0, 122, tft.width(), ST7735_WHITE); // draw horizontal white line at position (0, 122) tft.setTextColor(ST7735_RED, ST7735_BLACK); // set text color to red and black background tft.setCursor(25, 39); // move cursor to position (25, 39) pixel tft.print("TEMPERATURE ="); tft.setTextColor(ST7735_CYAN, ST7735_BLACK); // set text color to cyan and black background tft.setCursor(34, 85); // move cursor to position (34, 85) pixel tft.print("HUMIDITY ="); tft.setTextSize(2); // text size = 2 } // main loop void loop() { char _buffer[8]; // read temperature, humidity and pressure from the BME280 sensor int humi = dht.readHumidity(); int temp = dht.readTemperature(); // print temperature (in °C) if(temp < 0) // if temperature < 0 sprintf( _buffer, "-%02u.%02u", (int)abs(temp), (int)(abs(temp) * 100) % 100 ); else // temperature >= 0 sprintf( _buffer, " %02u.%02u", (int)temp, (int)(temp * 100) % 100 ); tft.setTextColor(ST7735_YELLOW, ST7735_BLACK); // set text color to yellow and black background tft.setCursor(11, 54); tft.print(_buffer); tft.drawCircle(89, 56, 2, ST7735_YELLOW); // print degree symbol ( ° ) tft.setCursor(95, 54); tft.print("C"); // 2: print humidity sprintf( _buffer, "%02u.%02u %%", (int)humi, (int)(humi * 100) % 100 ); tft.setTextColor(ST7735_MAGENTA, ST7735_BLACK); // set text color to magenta and black background tft.setCursor(23, 100); tft.print(_buffer); delay(1000); // wait a second } // end of code. |
Il codice è commentato, il funzionamento è semplice, la parte più importanti sono quelle legate al calcolo e quelle grafiche.
Carichiamo il codice sulla scheda.
Ecco qui un risultato.
Voglio ringraziare AZ-Delivery per avermi dato la possibilità di avere il display st7735.
Preferireste aspettare 8 settimane per l’autoimportazione dalla Cina, incerti se le merci arriveranno mai, le terre alla dogana o semplicemente saranno rispedite indietro? O acquistare in Germania ad un prezzo totalmente gonfiato da un rivenditore specializzato? Preferisci acquistare il prodotto a buon mercato in Cina senza essere sicuro di quale versione del prodotto riceverai, o ordinarlo dal rivenditore tedesco incl. istruzioni e scheda dati?
Nel seguente link è presente il sito ufficiale AZdelivery
Iscriviti ai nostri gruppi Telegram
Link utili