Arduino und 3,5-Zoll- (320 x 480) TFT-LCD (ILI9488) SPI-Schnittstelle mit DHT22-Temperatur- / Luftfeuchtigkeitsmessung: 3 Schritte

Arduino und 3,5-Zoll- (320 x 480) TFT-LCD (ILI9488) SPI-Schnittstelle mit DHT22-Temperatur- / Luftfeuchtigkeitsmessung: 3 Schritte

Inhaltsverzeichnis:

Anonim

Abstrakt

Heutzutage werden die schönen TFT-LCD-Bildschirme billiger und die Verwendung in einem eingebetteten Design macht sie benutzerfreundlicher.

In dieser Anleitung wird das Anschließen des 320 x 480, 3,5-Zoll-TFT-LCD mit ILI9488-Treiber und SPI-Schnittstelle an Arduino erläutert. Das LCD kann an den Arduinos SPI-Bus angeschlossen werden. Es benötigt eine minimale Anzahl von Port-Pins (4).

Der DHT22 (AM2302) ist ein hochpräzises Temperatursensormodul, das kalibrierte Temperatur und Luftfeuchtigkeit liefert und an den digitalen IO-Pin von Arduino angeschlossen ist.

Der DHT22 liefert die Temperatur im Celsius-Format. Das Arduino-Programm wandelt die Temperatur in Fahrenheit, Kelvin und Rankine um und sendet über die serielle Schnittstelle auch Anzeigen auf dem TFT-LCD.

Teile und Komponenten

Arduino Uno Board = 1 Nr

DHT22 (AM2302) = 1 Nr

320x480 TFT LCD (SPI-Schnittstelle, ILI9488 LCD-Controller) = 1 Nr

10K-Widerstand = 1Nein

Zubehör:

Schritt 1: SChematic

Das TFT-LCD (3,5 Zoll, 320 x 480 Pixel, ILI9488 LCD-Controller) wird für diese Anweisung verwendet.

Das LCD lässt sich problemlos mit dem Arduino SPI-Bus verbinden und benötigt mindestens vier digitale E / A-Leitungen.

Der ILI9488 LCD-Controller ist ein 16,7-Megachip-SoC-Treiber für a-Si-TFT-Flüssigkristallanzeigen mit einer Auflösung von 320 (RGB) x 480 Punkten.

Der ILI9488 besteht aus einem 960-Kanal-Sourcetreiber, einem 480-Kanal-Gatetreiber, 345.600 Byte GRAM für Grafikdaten mit 320 (RGB) x 480 Punkten und einer Stromversorgungsschaltung.

Das LCD arbeitet mit 3,3 Volt Logik.

Der Arduino SPI-Port ist mit dem LCD verbunden (D13-SCLK und D11-MOSI).

Der Arduino Digital IO-Pin D9 und D10 ist mit dem RS- und CS-Pin des LCD verbunden.

Der digitale Temperatur- / Feuchtigkeitssensor DHT22 liefert Temperaturen zwischen -40 ° C und + 80 ° C und Luftfeuchtigkeit zwischen 0% und 100%. Die Temperaturgenauigkeit beträgt ± 0,1 ° C (maximal).

Der DHT22-Datenpin ist mit dem digitalen Arduino-E / A-Pin verbunden und wird über einen 10-K-Ohm-Widerstand auf Vcc gezogen.

Der DHT22 (AM2302) gibt ein kalibriertes digitales Datensignal aus. Jeder DHT22-Sensor dieses Modells wird temperaturkompensiert und in einer genauen Kalibrierungskammer kalibriert. Der Kalibrierungskoeffizient wird im internen OTP-Speicher gespeichert.

Der Sensor unterstützt lange Übertragungsdistanzen.

Arduino liest die Temperatur und Luftfeuchtigkeit im Abstand von 2 Sekunden und sendet sie an die serielle Schnittstelle sowie auf dem LCD-Bildschirm.

Die Umrechnungsformel für Celsius in eine andere Skala ist unten angegeben.

Fahrenheit: - T (° F) = T (° C) × 9/5 + 32

Kelvin: - T (K) = T (° C) + 273,15

Rankine: - T (° R) = (T (° C) + 273,15) × 9/5

Schritt 2: Software

Installieren Sie die Gerätebibliotheken Adafruit GFX und Adafruit ILI9341.

Die Adafruit ILI9341-Bibliothek ist am besten für das ILI9488-Gerät geeignet.

Die Adafruit ILI9341-Bibliothek wurde geändert, um den ILI9488-LCD-Controller zu übernehmen.

Nur die Parameter für Höhe und Breite in der Datei Adafruit_ILI9341.h werden in geändert

#define ILI9341_TFTWIDTH 320

#define ILI9341_TFTHEIGHT 480

In der Datei Adafruit_ILI9341.cpp werden bei der Funktion Adafruit_ILI9341:: begin (void) die folgenden Zeilen geändert, um das ILI9488-Gerät (320 x 480 Pixel) anzupassen.

writecommand (ILI9341_DFUNCTR); // Funktionskontrolle anzeigen

writedata (0x02);

writedata (0x02);

writedata (0x3B);

Die mitgelieferte DHT-Bibliothek bietet die Leseschnittstelle für den Sensor.

Arduino liest die Temperatur- und Luftfeuchtigkeitswerte im Abstand von 2 Sekunden.

Die Temperatur ist im Celsius-Format, das von der Software in die Formate Fahrenheit, Kelvin und Rankine konvertiert wird.

Mit Arduino GFX lib wird eine zweispaltige, fünfzeilige, mehrfarbige Tabelle zur Anzeige von Temperatur und Luftfeuchtigkeit erstellt.

Die vier konvertierten Temperaturformate werden an die serielle Schnittstelle gesendet und auch auf dem TFT-LCD angezeigt.

// Versuch mit 3,5-Zoll-LCD (320 x 480), ILI9488-SPI-Schnittstellentreiber

// Und Experiment des digitalen Temperatur- / Feuchtigkeitssensors DHT22 // Adafruit ILI9341-Bibliothek wurde für ILI9488 (320 x 480) modifiziert

// DHT22 Datenleitung mit Arduino Digital IO 2 verbunden

// LCD MOSI zu Arduino Digital IO D11 // LCD SCLK zu Arduino Digital IO D13 // LCD CS zu Arduino Digital IO D10 // LCD RS / DS zu Arduino Digital IO D9

// Name: - M.Pugazhendi // Datum: - 01stSep2016 // Version: - V0.1 // E-Mail: - [email protected]

// Include Libraries #include #include "SPI.h" #include "Adafruit_GFX.h" #include "Adafruit_ILI9341.h"

// Konstanten #define SERIAL_DEBUG

// DHT22 #define DHTPIN 2 #define DHTTYPE DHT22

// Für den LCD-Bildschirm sind dies die Standardeinstellungen. #define TFT_DC 9 #define TFT_CS 10

// LCD initialisieren // Hardware-SPI (unter Uno, Nr. 13, Nr. 12, Nr. 11) und oben für CS / DC verwenden Adafruit_ILI9341 tft = Adafruit_ILI9341 (TFT_CS, TFT_DC);

// Wenn Sie den Breakout verwenden, ändern Sie die Pins wie gewünscht // Adafruit_ILI9341 tft = Adafruit_ILI9341 (TFT_CS, TFT_DC, TFT_MOSI, TFT_CLK, TFT_RST, TFT_MISO);

// DHT-Sensor für normales 16-MHz-Arduino-DHT-DHT initialisieren (DHTPIN, DHTTYPE);

// Variablen float hum; // Speichert den Feuchtewert float temp; // Speichert den umgerechneten Temperaturwert float = 0.00;

// Arduino-Setup void setup () {#ifdef SERIAL_DEBUG Serial.begin (9600); Serial.println ("ILI9341 Test!"); Serial.println ("DHT22 Temperatur / Feuchte Sensor Test"); #endif // TFT LCD initialisieren tft.begin ();

// Den DHT-Sensor initialisieren dht.begin (); #ifdef SERIAL_DEBUG // Diagnose lesen (optional, kann aber bei der Fehlersuche helfen) uint8_t x = tft.readcommand8 (ILI9341_RDMODE); Serial.print ("Display Power Mode: 0x"); Serial.println (x, HEX); x = tft.readcommand8 (ILI9341_RDMADCTL); Serial.print ("MADCTL Mode: 0x"); Serial.println (x, HEX); x = tft.readcommand8 (ILI9341_RDPIXFMT); Serial.print ("Pixel Format: 0x"); Serial.println (x, HEX); x = tft.readcommand8 (ILI9341_RDIMGFMT); Serial.print ("Bildformat: 0x"); Serial.println (x, HEX); x = tft.readcommand8 (ILI9341_RDSELFDIAG); Serial.print ("Selbstdiagnose: 0x"); Serial.println (x, HEX); #endif

// Bildschirm nach rechts drehen tft.setRotation (1);

// Kopfzeilen drucken printHeader (); }

// Hauptschleife void loop (void) {

// Lese Daten und speichere sie in den Variablen hum und temp hum = dht.readHumidity (); temp = dht.readTemperature (); printTemperatureHumidity ();

// Verzögerung 2 Sekunden delay (2000); }

// Kopfzeilen ohne Vorzeichen drucken long printHeader (void) {tft.fillRect (0,0,240, 64, ILI9341_GREEN); tft.fillRect (0,64, 240, 64, ILI9341_RED); tft.fillRect (0,128,240, 64, ILI9341_CYAN); tft.fillRect (0,192,240, 64, ILI9341_YELLOW); tft.fillRect (0,256,240, 64, ILI9341_ORANGE);

langer Start ohne Vorzeichen = micros (); tft.setTextColor (ILI9341_BLACK); tft.setTextSize (3); // tft.setCursor (50,0 + 20); tft.print ("CELCIUS");

// tft.setCursor (50, 64 + 20); tft.print ("FAHRENHEIT"); // tft.setCursor (50, 128 + 20); tft.print ("KELVIN");

// tft.setCursor (50, 192 + 20); tft.print ("RANKIN");

// tft.setCursor (50, 256 + 20); tft.print ("FEUCHTIGKEIT"); return micros () - start; }

// Drucktemperatur und Luftfeuchtigkeit ohne Vorzeichen long printTemperatureHumidity () {tft.fillRect (241,0,240, 64, ILI9341_CYAN); tft.fillRect (241, 64, 64, ILI9341_YELLOW); tft.fillRect (241, 128, 240, 64, ILI9341_ORANGE); tft.fillRect (241, 192, 240, 64, ILI9341_GREEN); tft.fillRect (241, 256, 240, 64, ILI9341_RED); //tft.fillScreen(ILI9341_BLUE); langer Start ohne Vorzeichen = micros (); tft.setTextColor (ILI9341_BLACK); tft.setTextSize (4);

#ifdef SERIAL_DEBUG Serial.print ("Celsius ="); Serial.print (temp); // Gradsymbol drucken Serial.write (176); Serial.println ("C"); #endif tft.setCursor (250,0 + 20); tft.print (temp); tft.print (""); tft.print ((char) 247); tft.println ("C");

// Fahrenheit // T (° F) = T (° C) × 9/5 + 32 konvertiert = (Temp * 1,8) + 32; #ifdef SERIAL_DEBUG Serial.print ("Fahrenheit ="); Serial.print (konvertiert); // Gradsymbol drucken Serial.write (176); Serial.println ("F"); #endif tft.setCursor (250, 64 + 20); tft.print (konvertiert); tft.print (""); tft.print ((char) 247); tft.println ("F");

// Kelvin // T (K) = T (° C) + 273,15 konvertiert = Temp + 273,15; #ifdef SERIAL_DEBUG Serial.print ("Kelvin ="); Serial.print (konvertiert); Seriennummer ("K"); #endif tft.setCursor (250, 128 + 20); tft.print (konvertiert); tft.print (""); tft.println ("K");

// Rankine // T (° R) = (T (° C) + 273,15) × 9/5 konvertiert = Temp + 273,15; konvertiert = (konvertiert * 1,8); #ifdef SERIAL_DEBUG Serial.print ("Rankin ="); Serial.print (konvertiert); // Gradsymbol drucken Serial.write (176); Serial.println ("R"); #endif tft.setCursor (250, 192 + 20); tft.print (konvertiert); tft.print (""); tft.print ((char) 247); tft.println ("R");

// Luftfeuchtigkeit #ifdef SERIAL_DEBUG Serial.print ("Humidity ="); Serial.println (Brummen); #endif tft.setCursor (250, 256 + 20); tft.print (Brummen); tft.print (""); tft.println ("%"); return micros () - start; }

Schritt 3: Fazit

Das Projekt wird erfolgreich mit Arduino UNO, 320x480 TFT LCD und DHT22 Modul abgeschlossen.

Die umgerechnete Temperatur und die LCD-Anzeige, Serial Port-Bildschirm sind unten angegeben.