İçindekiler:

Arduino UNO Kullanan Hava İstasyonu: 7 Adım
Arduino UNO Kullanan Hava İstasyonu: 7 Adım

Video: Arduino UNO Kullanan Hava İstasyonu: 7 Adım

Video: Arduino UNO Kullanan Hava İstasyonu: 7 Adım
Video: DIY Radar With Ultrasonic Sensor And Chat-GPT Generated Arduino Code | Coders Cafe 2024, Temmuz
Anonim
Arduino UNO Kullanan Hava Durumu İstasyonu
Arduino UNO Kullanan Hava Durumu İstasyonu

Oluşturan: Hazel Yang

Bu proje, veri akışını kontrol etmek için bir Arduino UNO kartı, verileri toplamak için bir DHT22 sensörü ve verileri göstermek için bir OLED ekranı kullanan bir hava istasyonudur.

Adım 1: Öğe Listesi

Eşya listesi
Eşya listesi

1. Ekran: OLED, 1.3 Ekran SH1106, I2C beyaz renk ---- PID: 18283

2. Sensör: Dijital Nem ve Sıcaklık Sensörü DHT22 ---- PID: 7375

3. Bağlantılar: Atlama Kabloları ---- PID: 10316 veya 10318 veya 10312 (uzunluğa bağlıdır) veya katı kablo kullanabilirsiniz 22 AWG ---- PID: 22490

Breadboard ---- PID: 10686 veya 10698 veya 103142 (boyuta göre değişir)

4. Güç: Bu kablo sadece bir bilgisayarın USB portuna bağlanabilir ve kablo aynı zamanda IDE ile Arduino kartı arasında veri aktarımı için de kullanılır. USB KABLOSU, A'DAN B'YE, M/M, 0,5M (1,5FT) ---- PID: 29862

Veya bunu karta güç sağlamak için kullanabilirsiniz: 5V 2A AC/DC Adaptör ---- PID: 10817.

2. Adım: Göreli Giriş

Göreceli Giriş
Göreceli Giriş
Göreceli Giriş
Göreceli Giriş

Ekranın Tanıtımı: 1.3 OLED Ekran Beyaz

1. Temel kurulum ve açıklamaları gösteren belgeyi bulabilirsiniz:

Sensör Tanıtımı: Nem ve Sıcaklık Sensörü DHT22 1. Açıklamaları gösteren dokümana buradan ulaşabilirsiniz:

Adım 3: Devreyi Bağlayın

Devreyi Bağlayın
Devreyi Bağlayın

DHT22 sensörü pin 2'ye seri veri gönderir. Yani soldan ikinci pini bağlayın, "SDA" pini pin 2'ye bağlanmalıdır.

SSH1106 ekranı için, iletmek için analog pini kullanır. Ekranın devresi Arduino'nun "A5"ine "SCL" pini ve Arduino'nun "A4"üne "SDA" pini olacaktır. Piksel konum verileri sürekli olarak iletilirken, programdaki görüntüleme işlevi, sensörden gelen verileri her okuduğunda komutu yalnızca bir kez tetikler.

Hem sensör hem de ekran, Arduino'yu DC güç girişi olarak çalıştırmak için 3.3V'u kullanabilir. Güç vermek için, her iki "VCC" pinini Arduino'nun "3.3V" sine bağlamamız gerekiyor. Ve "GND" pinleri Arduino kartındaki "GND" pinine basitçe bağlanabilir.

USB A - B kablosunu kullanın, Arudino'yu bilgisayara bağlayın.

Adım 4: Derlemeye Hazırlanın

Olikraus'tan SSH1106 ekranı için "u8glib".

Adafruit'ten DHT22 sensörü için "DHT sensör kütüphanesi". İki kütüphaneyi indirmelisiniz: DHT22 sensör kütüphanesi:

U8glib:

Ve onları sıkıştırılmış hale getirmek için IDE'deki “kütüphaneyi yönet”i kullanın. Kütüphaneleri yönetmek için çevrimiçi talimat:

Adım 5: DHT22 Sensör Seri Bağlantı Noktası için Test Kodu

DHT22 sensör seri bağlantı noktası için test coe (DHT22 kitaplığının içindedir>>örnekler):

(Bu kısmı atlayabilirsiniz.)

Sadece DHT22 sensörünü test etmek için verileri normal şekilde okur

#Dahil etmek

#Dahil etmek

#Dahil etmek

#Dahil etmek

#Dahil etmek

#define DHTPIN 2

#define DHTTYPE DHT22

DHT dht(DHTPIN, DHTTYPE);

geçersiz kurulum() {

Seri.başla(9600);

Serial.println(F("DHT22 testi!"));

dht.begin();

}

boşluk döngüsü () {

// Ölçümler arasında birkaç saniye bekleyin.

gecikme(2000);

// Sıcaklık veya nemin okunması yaklaşık 250 milisaniye sürer!

// Sensör okumaları ayrıca 2 saniyeye kadar 'eski' olabilir (çok yavaş bir sensör)

float h = dht.readHumidity();

// Sıcaklığı Celsius olarak oku (varsayılan)

float t = dht.readTemperature();

// Sıcaklığı Fahrenheit olarak oku (isFahrenheit = true)

float f = dht.readTemperature(true);

// Herhangi bir okumanın başarısız olup olmadığını kontrol edin ve erken çıkın (tekrar denemek için).

if (isnan(h) || isnan(t) || isnan(f)) {

Serial.println(F("DHT sensöründen okunamadı!"));

dönüş;

}

// Isı endeksini Fahrenhayt cinsinden hesapla (varsayılan)

float hif = dht.computeHeatIndex(f, h);

// Isı indeksini Celsius cinsinden hesapla (isFahreheit = false)

float hic = dht.computeHeatIndex(t, h, false);

Serial.print(F("Nem: "));

Seri.baskı(h);

Serial.print(F("% Sıcaklık: "));

Seri.baskı(t);

Serial.print(F("°C "));

Seri.baskı(f);

Serial.print(F("°F Isı indeksi: "));

Seri.print(hic);

Serial.print(F("°C "));

Seri.print(hif);

Serial.println(F("°F"));

}

// Programı derledikten sonra verileri kontrol etmek için TOOLS >> SERIAL MONITOR'a tıklayın.

// Test programının sonu.

Adım 6: Proje Kodu

#Dahil etmek

#Dahil etmek

#Dahil etmek

#Dahil etmek

#Dahil etmek

#define DHTPIN 2

#define DHTTYPE DHT22

#include "U8glib.h"

U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NONE);

DHT sensörü (DHTPIN, DHTTYPE);

void beraberlik(void) {

u8g.setFont(u8g_font_unifont);

kayan nokta h = sensor.readHumidity();

// Sıcaklığı Celsius olarak oku (varsayılan)

float t = sensor.readTemperature();

// Herhangi bir okumanın başarısız olup olmadığını kontrol edin ve erken çıkın (tekrar denemek için).

if (isnan(h) || isnan(t)) {

u8g.print("Hata.");

için(;;);

dönüş;

}

u8g.setPrintPos(4, 10);

u8g.print("Sıcaklık(C):");

u8g.setPrintPos(4, 25);

u8g.print(t);

u8g.setPrintPos(4, 40);

u8g.print("Nem(%):");

u8g.setPrintPos(4, 55);

u8g.print(h);

}

geçersiz kurulum(void) {

u8g.setRot180();

Seri.başla(9600);

sensör.begin();

}

void loop(void) {

// resim döngüsü

u8g.firstPage();

yapmak {

Berabere();

} while(u8g.nextPage());

// resmi biraz gecikmeden sonra yeniden oluştur(2000);

}

// Ana programın sonu.

7. Adım: Açıklama

Açıklama
Açıklama

Ardından, Arduino kartı için pin devresini başlatın. Çünkü sensör kitaplığı, nesneyi bildirmek için verilere ihtiyaç duyar.

Ve "Serial.print()" adlı fonksiyonu kullanarak dijital pin 2 üzerinden çıkış verilerini izleyerek sensörün verilerini test edebilirsiniz. Arduino IDE'de programlandığında, veri aktarım frekansı yaklaşık olarak her 2 saniyede 1 okuma (ki bu 0,5 Hz) olduğundan, döngü fonksiyonu içindeki gecikmeyi 2 saniyeden fazla olacak şekilde ayarlamamız gerekir. Yani döngü fonksiyonunun içinde bir "delay(2000)" var. Bu, verilerin sık sık yenilenmesini sağlar. "draw" işlevinde, verileri seri veri portundan alın ve "readHumidity" ve "readTemperature" işlevlerini kullanarak bunları kayan sayılara koyun.

"u8glib" dosyasındaki yazdırma işlevini kullanarak nem ve sıcaklığı yazdırın. "setPrintPos" fonksiyonunda sayıyı değiştirerek pozisyonu ayarlayabilirsiniz. Yazdırma işlevi, metni ve sayıları doğrudan gösterebilir.

Donanımı kurmak için seri bağlantı noktasına 10 saniyelik bir gecikme verin. Ardından sensör için başlatma işlevini çağırın. Devreme göre ekranım baş aşağıydı. Bu yüzden ekranı döndürmek için bir "setRot180" işlevi de ekledim.

Arduino kartının döngü işlevi ana işlevdir. Sensör her yenilendiğinde metni ve verileri görüntülemek için çizim işlevini çağırmaya devam eder.

Ekran şöyle görünür:

Arduino UNO'yu bilgisayarınızdan ayırabilir ve 2.1mm güç jakına bağlanan 5V DC güç adaptörü kullanarak çalıştırabilirsiniz. Programı sürücüsünde saklar ve güç verildikten sonra programı sürekli olarak tekrar çalıştırabilir.

Önerilen: