Seviye:
Bu uygulamada DHT 11 sensöründen aldığımız sıcaklık ve nem değerlerini Arduino sensor kartı üzerinde bulunan OLED ekrana yazdıracağız. Böylelikle ortama ait sıcaklık ve nem verilerinin ekran üzerinden izlenebildiği küçük bir meteoroloji istasyonu oluşturacağız.
Gerekli malzemeler
-
Arduino sensor kartı
-
DHT-11 ısı ve nem sensoru
SSD1306 128x32 Display
Arduino sensor kartı üzerinde bulunan display ekran 128x32 çözünürlüğe sahiptir. I2C haberleşme protokolü ile Arduino ile haberleşir.
I2C haberleşme protokolü nedir?
Arduino, diğer Arduino veya sensörlerle haberleşmek için bazı haberleşme protokolleri kullanır. Bu protokollerden birisi de I2C’dir. I2C (Inter-Integrated Circuit) protokolü bir ana (master) ve çoklu bağımlı (slave) cihazlardan oluşmaktadır. Böylelikle bir cihaz 1024 cihaz ile haberleşebilir. Bu nedenle Arduino dâhil bir çok mikrodenetleyici tarafından kullanılmaktadır. Bir diğer avantajı ise haberleşme sırasında sadece 2 pin (SDA ve SCL) kullanmasıdır.
I2C iletişiminde her cihazın önceden ayarlanmış bir kimliği veya benzersiz bir cihaz adresi vardır, böylece master hangi cihazlarla iletişim kuracağını seçebilir. Bunun için SDA ve SCL pinlerini kullanır. SCL (Seri saat) hattı, I2C veri yolundaki cihazlar ile ana cihaz tarafından üretilen veri aktarımı arasında senkronize olan saat sinyalidir. Verileri taşıyan hat ise SDA hattıdır. Master ve slave cihazların aynı besleme hattına bağlanmasına gerek yoktur. Fakat iletişimin sağlanması için toprak hatlarının aynı olması gerekir.
Devre kurulumu
Uygulama için aşağıda verilen şekilde devreyi kuruyoruz.
Programlama
Program satırında #include komutu ile başlayan kütüphaneleri ekleyin. Bu kütüphaneleri aşağıdaki linklerden edinebilirsiniz.
-
DHT Sensor Library: https://github.com/adafruit/DHT-sensor-library
-
Adafruit Unified Sensor Lib: https://github.com/adafruit/Adafruit_Sensor
-
Adafruit_BusIO Lib: https://github.com/adafruit/Adafruit_BusIO
-
Adafruit-GFX-Library Lib: https://github.com/adafruit/Adafruit-GFX-Library
-
Adafruit_SSD1306 Lib: https://github.com/adafruit/Adafruit_SSD1306
Ardından program kodunu Arduino sensor kartına yükleyin. Nem ve sıcaklık değerlerini OLED ekranda göreceksiniz.
/* Meteoroloji istasyonu.
Kaynak: Adafruit industries
Gerekli kütüphaneleri aşağıdaki linklerden indirebilirsiniz:
DHT Sensor Library: https://github.com/adafruit/DHT-sensor-library
Adafruit Unified Sensor Lib: https://github.com/adafruit/Adafruit_Sensor
Adafruit_BusIO Lib: https://github.com/adafruit/Adafruit_BusIO
Adafruit-GFX-Library Lib: https://github.com/adafruit/Adafruit-GFX-Library
Adafruit_SSD1306 Lib: https://github.com/adafruit/Adafruit_SSD1306
*/
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <DHT_U.h>
#define DHTPIN 2 // DHT sensörün bağlandığı dijital pin
#define DHTTYPE DHT11 // DHT sensör tipi
DHT_Unified dht(DHTPIN, DHTTYPE);
Adafruit_SSD1306 display = Adafruit_SSD1306(128, 32, &Wire);
void setup() {
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); //I2C display adresi burada belirtilir.
dht.begin(); // sensörü başlatma komutu
display.clearDisplay(); // Ekranı temizler
display.setTextSize(1,2); // karakter büyüklüğü bu komut ile belirlenir.
display.setTextColor(SSD1306_WHITE); // Karakter rengi bu komut ile belirlenir.
}
void loop() {
delay(2000); //Ölçüm aralığındaki gecikme süresi
display.clearDisplay();
display.display();
display.setCursor(0,0);
// Sıcaklık ölçümü ve ekrana yazdırma
sensors_event_t event;
dht.temperature().getEvent(&event);
if (isnan(event.temperature)) {
display.println(F("Sicaklik olcumunde hata!"));
} else {
display.print(F("Sicaklik: "));
display.print(event.temperature);
display.println(F("C"));
}
// Nem ölçümü ve ekrana yazdırma
dht.humidity().getEvent(&event);
if (isnan(event.relative_humidity)) {
display.println(F("Nem olcumunde hata!"));
} else {
display.print(F("Nem: "));
display.print(event.relative_humidity);
display.println(F("%"));
}
display.display();
}