⇧
vadnica-logo
Editor Moj Blog Geselnik Finance Moje storitve O projektu Telegram O meni O meni

Projekt: Digitalni termometer z alarmom

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.

Tehnični opomnik

Navodila za vezavo

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

Celotna koda projekta

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);
}

Potreben material