V tem projektu bomo uporabili natančen digitalni temperaturni senzor DS18B20 za merjenje temperature okolice in jo prikazali na 2,0-palčnem TFT zaslonu. Sistem vključuje tudi varnostno funkcijo: če temperatura preseže 30°C, se izpis obarva rdeče in prikaže se opozorilo.
Za pravilno delovanje zaslona in senzorja povežite pine po naslednji tabeli:
| Komponenta / Pin | Arduino Nano Pin | Opis |
|---|---|---|
| DS18B20 (VCC) | 5V | Napajanje senzorja |
| DS18B20 (Data) | D2 | Podatkovna linija (z 4.7k upora na VCC) |
| TFT SCL (SCK) | D13 | SPI Clock |
| TFT SDA (MOSI) | D11 | SPI Data |
| TFT RES (RST) | D9 | Reset zaslona |
| TFT DC | D8 | Data/Command |
| TFT CS | D10 | Chip Select |
| TFT BLK | 3.3V / 5V | Osvetlitev ozadja |
Spodnja koda prebere temperaturo, jo osveži vsaki dve sekundi in preveri pogoje za alarm.
#include <Adafruit_GFX.h>
#include <Adafruit_ST7789.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <SPI.h>
#define TFT_CS 10
#define TFT_RST 9
#define TFT_DC 8
#define ONE_WIRE_BUS 2
Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST);
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
float tempC = 0;
const float ALARM_TEMP = 30.0;
void setup() {
sensors.begin();
tft.init(240, 320);
tft.setRotation(1);
tft.fillScreen(ST77XX_BLACK);
tft.setCursor(20, 20);
tft.setTextColor(ST77XX_WHITE);
tft.setTextSize(2);
tft.println("Termometer Postaja");
}
void loop() {
sensors.requestTemperatures();
tempC = sensors.getTempCByIndex(0);
tft.fillRect(60, 100, 200, 80, ST77XX_BLACK);
if (tempC > ALARM_TEMP) {
tft.setTextColor(ST77XX_RED);
tft.setCursor(20, 200);
tft.setTextSize(2);
tft.println("ALARM: PREVROCE!");
} else {
tft.fillRect(20, 200, 240, 30, ST77XX_BLACK);
tft.setTextColor(ST77XX_GREEN);
}
tft.setCursor(60, 100);
tft.setTextSize(5);
tft.print(tempC, 1);
tft.setTextSize(2);
tft.print(" C");
delay(2000);
}