Daha önce yaptığımız sıcaklık sensor DHT11 ve MAX7219 7 segmentli display modül uygulamalarımızdan edindiğimiz bilgileri ile bu sefer sıcaklık sensor alarm uygulaması yapcağız. Eğer sıcaklık sensörü ve 7 segmentli modül hakkında bilginiz yoksa önceki yazılarımızı okumanızı tavsiye derim.

Bu uygulamamızda Arduino Nano kullanacağız, bağlantı pinlerini istediğiniz gibi ayarlayabilirsiniz. Önemli olan programda bunları tanımladığımız şekilde devrey iinşa etmek yada tam tersi devreyi nasıl inşa ettiysek programı ona göre yazmak.

Arduino DHT11 MAX7219 ile sıcaklık sensor uygulaması

Arduino DHT11 MAX7219 ile sıcaklık sensor uygulaması

DHT11 sensörü hem sıcaklık hem de nem bilgisini seri iletişim olarak tek pinden arduino’ ya göndermektedir. Sıcaklık bilgisi celcius olarak, nem bilgisi %lik olarak gelmektedir. Aşağıdaki kodu incelediğimizde dipslay_set(); diye bir fonksiyon görmekteyiz. Bu fonksiyon sensorden okunan bilginin max7219 modulune doğru bir şekilde yazdırmak için oluşturulmuştur.

Programı derleyebilmeniz için DHT11 sensor ve MAX7219 modul kütüphanelerinizin Arduino IDE’ nize yüklü olması gerekmektedir. Aşağıdaki linklerden indirebilirsiniz.

DHT11 Arduino Library on GitHub 

MAX7219 Arduino Library on GitHub

/*
tarih: 7.09.2018
yazan: Remzi Şahinoğlu
board: Nano

arduino     485modül
-------     --------
0(RX)       1(RO)
1(TX)       4(DI)
2           2(RE)
3           3(DE)
GND         5(GND)
+5V         8(VCC)
            7(B)-rx     diğer modülün 7(B) hattına
            8(A)-tx     diğer modülün 8(A) hattına

*/

#include "DHT.h"
#define DHTPIN 2
#define DHTTYPE DHT22         // DHT 22  (AM2302)
DHT dht(DHTPIN, DHTTYPE);     // Initialize DHT sensor for normal 16mhz Arduino

#include "LedControl.h"
LedControl lc = LedControl(10,12,11,1);  // Arduino Pins: (DIN:10, CLK:12, LOAD/CS:11, no.of devices is 1)

unsigned long sayi;           // sayac bilgisi
int chk;
float hum;                    // nem bilgisi
float temp;                   // sıcaklık bilgisi

const int LED = 5;    

//--------------------------- EKRANDA GÖSTER -----------------------------//
void display_set()
{
  char ekran[8] = {};       // max7219 modulunde 8 adet dipslay olduğu için 
  int index = 0;            // max7219u ayarlamak için kullanıldı

  for (int i = 0; i < String(temp).length(); i++)
  {
    char inChar = String(temp)[i];        // tek bir byte oku
    switch(index)
    {
      case 0:                 // 1.karakter okunduğunda
        ekran[7] = ' ';       // değer yoksa display boş gözüksün
        ekran[6] = ' ';       // değer yoksa display boş gözüksün
        ekran[5] = ' ';       // değer yoksa display boş gözüksün
        ekran[4] = ' ';       // değer yoksa display boş gözüksün
        ekran[3] = ' ';       // değer yoksa display boş gözüksün
        ekran[2] = ' ';       // değer yoksa display boş gözüksün
        ekran[1] = ' ';       // değer yoksa display boş gözüksün
        ekran[0] = inChar;
        break;
        
      case 1:                 // 2.karakter okunduğunda
        ekran[7] = ' ';       // değer yoksa display boş gözüksün
        ekran[6] = ' ';       // değer yoksa display boş gözüksün
        ekran[5] = ' ';       // değer yoksa display boş gözüksün
        ekran[4] = ' ';       // değer yoksa display boş gözüksün
        ekran[3] = ' ';       // değer yoksa display boş gözüksün
        ekran[2] = ' ';       // değer yoksa display boş gözüksün
        ekran[1] = ekran[0];  // 1.okunan katakteri 2.displaye kaydır
        ekran[0] = inChar;
        break;
        
      case 2:                 // 3.karakter okunduğunda
        ekran[7] = ' ';       // değer yoksa display boş gözüksün
        ekran[6] = ' ';       // değer yoksa display boş gözüksün
        ekran[5] = ' ';       // değer yoksa display boş gözüksün
        ekran[4] = ' ';       // değer yoksa display boş gözüksün
        ekran[3] = ' ';       // değer yoksa display boş gözüksün
        ekran[2] = ekran[1];  // 1.okunan katakteri 3.displaye kaydır
        ekran[1] = ekran[0];  // 2.okunan katakteri 2.displaye kaydır
        ekran[0] = inChar;
        break;
        
      case 3:                 // 4.karakter okunduğunda
        ekran[7] = ' ';       // değer yoksa display boş gözüksün
        ekran[6] = ' ';       // değer yoksa display boş gözüksün
        ekran[5] = ' ';       // değer yoksa display boş gözüksün
        ekran[4] = ' ';       // değer yoksa display boş gözüksün
        ekran[3] = ekran[2];  // 1.okunan katakteri 4.displaye kaydır
        ekran[2] = ekran[1];  // 2.okunan katakteri 3.displaye kaydır
        ekran[1] = ekran[0];  // 3.okunan katakteri 2.displaye kaydır
        ekran[0] = inChar;
        break;
        
      case 4:                 // 5.karakter okunduğunda
        ekran[7] = ' ';       // değer yoksa display boş gözüksün
        ekran[6] = ' ';       // değer yoksa display boş gözüksün
        ekran[5] = ' ';       // değer yoksa display boş gözüksün
        ekran[4] = ekran[3];  // 1.okunan katakteri 4.displaye kaydır
        ekran[3] = ekran[2];  // 2.okunan katakteri 3.displaye kaydır
        ekran[2] = ekran[1];  // 3.okunan katakteri 2.displaye kaydır
        ekran[1] = ekran[0];  // 4.okunan katakteri 1.displaye kaydır
        ekran[0] = inChar;
        break;
        
      case 5:                 // 6.karakter okunduğunda
        ekran[7] = ' ';       // değer yoksa display boş gözüksün
        ekran[6] = ' ';       // değer yoksa display boş gözüksün
        ekran[5] = ekran[4];  // 1.okunan katakteri 5.displaye kaydır
        ekran[4] = ekran[3];  // 2.okunan katakteri 4.displaye kaydır
        ekran[3] = ekran[2];  // 3.okunan katakteri 3.displaye kaydır
        ekran[2] = ekran[1];  // 4.okunan katakteri 2.displaye kaydır
        ekran[1] = ekran[0];  // 5.okunan katakteri 1.displaye kaydır
        ekran[0] = inChar;
        break;
        
      case 6:                 // 7.karakter okunduğunda
        ekran[7] = ' ';       // değer yoksa display boş gözüksün
        ekran[6] = ekran[5];  // 1.okunan katakteri 6.displaye kaydır
        ekran[5] = ekran[4];  // 2.okunan katakteri 5.displaye kaydır
        ekran[4] = ekran[3];  // 3.okunan katakteri 4.displaye kaydır
        ekran[3] = ekran[2];  // 4.okunan katakteri 3.displaye kaydır
        ekran[2] = ekran[1];  // 5.okunan katakteri 2.displaye kaydır
        ekran[1] = ekran[0];  // 6.okunan katakteri 1.displaye kaydır
        ekran[0] = inChar;
        break;
        
      case 7:                 // 8.karakter okunduğunda
        ekran[7] = ekran[6];  // 1.okunan katakteri 7.displaye kaydır
        ekran[6] = ekran[5];  // 2.okunan katakteri 6.displaye kaydır
        ekran[5] = ekran[4];  // 3.okunan katakteri 5.displaye kaydır
        ekran[4] = ekran[3];  // 4.okunan katakteri 4.displaye kaydır
        ekran[3] = ekran[2];  // 5.okunan katakteri 3.displaye kaydır
        ekran[2] = ekran[1];  // 6.okunan katakteri 2.displaye kaydır
        ekran[1] = ekran[0];  // 7.okunan katakteri 1.displaye kaydır
        ekran[0] = inChar;
        break;
    }
    index++;
  }

  lc.setDigit(0,0,(String(ekran[1])).toInt(),false);
  lc.setDigit(0,1,(String(ekran[3])).toInt(),true); 
  lc.setDigit(0,2,(String(ekran[4])).toInt(),false);
}

//------------------------- BAŞLANGIÇ AYARLARI ---------------------------//
void setup()
{
  lc.shutdown(0,false);                  // Enable display
  lc.setIntensity(0,3);                  // Set brightness level (0 is min, 15 is max)
  lc.clearDisplay(0);                    // Clear display register

  dht.begin();                           // DHT11 sıcaklık sensorunu başlat
}

//----------------------------- ANA PROGRAM ------------------------------//
void loop()
{
  temp = dht.readTemperature();  // sıcaklık bilgisini oku 
  display_set();

  int val = analogRead(0);
  val = map(val, 0, 1023, 0, 100);    // 0 ile 100 derece arasında ayar yap
  
  if (temp >= val)
  {
    digitalWrite(LED, HIGH);
  }
  else
  {
    digitalWrite(LED, LOW);
  }
  
  delay(1000);
}

Programın çalışması şu şekildedir; ilk önce DHT11 sensorundeki sıcaklık değeri okunur. Daha sonra bu değer MAX7219 modülene gönderilir. Trimpot değeri map() fonksiyonu ile interpolasyon yapılarak üst sıcaklık limiti belirlenir. Eğer sıcaklık değeri üst limiti aşarsa LED yanar. Altına düştüğünde ise LED söner. Basit bir sıcaklık alarm uygulaması görevi görmektedir.


0 yorum

Bir cevap yazın

Avatar placeholder

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

This site uses Akismet to reduce spam. Learn how your comment data is processed.