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.
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