Friday, October 4, 2024

Arduino, TM1637 display ve DHT22 sensörüyle nem ölçerli termometre yapımı.

Devre bağlantı şeması:

Arduino kodu:
#include <TM1637Display.h>
#include <DHT.h>

// DHT22 tanımlamaları
#define DHTPIN 2      // DHT22 data pini Arduino'nun 2. pinine bağlı
#define DHTTYPE DHT22 // DHT22 sensör tipi

DHT dht(DHTPIN, DHTTYPE);

// TM1637 tanımlamaları
#define CLK 3  // TM1637 saat pini
#define DIO 4  // TM1637 veri pini
TM1637Display display(CLK, DIO);

// "C" karakterinin segment tanımı
const uint8_t c_char = 0b00111001; // Üst, sol üst, sol alt ve alt segmentler yanıyor -> "C" harfi
const uint8_t h_char = 0b01110110;  // "H" harfi için segment dizilimi

void setup() {
  dht.begin();
  display.setBrightness(0x00); // Ekran parlaklığı (maksimum 0x0f min 0x00)
  Serial.begin(9600);  // Seri monitör için başlatma
}

void loop() {
  // Sıcaklık ve nem verilerini al
  float temperature = dht.readTemperature();
  float humidity = dht.readHumidity();

  // Verileri kontrol et
  if (isnan(temperature) || isnan(humidity)) {
    display.showNumberDec(8888); // Hata durumunda ekran 8888 gösterecek
    delay(2000);
    return;
  }

  // Seri monitöre veri yazdırma
  Serial.print("Temperature: ");
  Serial.println(temperature);
  Serial.print("Humidity: ");
  Serial.println(humidity);

  // Sıcaklık gösterimi (örneğin 27°C)
  int displayTemp = (int)temperature; // Ondalıkları at
  
  // Segment dizisi oluşturuyoruz
  uint8_t segments[4]; 
  segments[0] = display.encodeDigit((displayTemp / 10) % 10); // Onlar basamağı
  segments[1] = display.encodeDigit(displayTemp % 10);        // Birler basamağı
  segments[2] = 0b00000000;                                   // Boş segment (isteğe bağlı)
  segments[3] = c_char;                                       // C harfini gösteren segment
  
  // Ekrana segmentleri yerleştir
  display.setSegments(segments);

  delay(2000); // 2 saniye bekle

 // Nemi iki haneli göster (örneğin %83 yerine H 83 gibi)
int displayHum = (int)humidity; // Ondalıkları at
uint8_t humSegments[4]; 
humSegments[0] = display.encodeDigit((displayHum / 10) % 10); // Onlar basamağı
humSegments[1] = display.encodeDigit(displayHum % 10);        // Birler basamağı
humSegments[2] = 0b00000000;                                  // Boş segment (isteğe bağlı)
humSegments[3] = 0b01110110;                                  // "H" harfini gösteren segment

// Ekrana segmentleri yerleştir
display.setSegments(humSegments);

delay(2000); // 2 saniye bekle
}


C: Celsius cinsinden ortam ısısı, H: Yüzde cinsinden Humidity (Nem) oranı.