HDC1080 ile Sıcaklık ve Nem Ölçüp Lora ile gönderme (1/2)
Merhaba arkadaşlar yine harika bir seriye başlıyoruz. Öncelikle HDC1080 ile sıcaklık ve nem değerlerini ölçüp Lora ile uzak mesafedeki merkezimize verileri yollayacağız. Diğer serimizde ise yepyeni bir konuya gireceğiz, “veriyi internete gönderme“. Gelen veriyi “ThingsSpeak” alt yapısını kullanarak internete göndereceğiz.
Fabrikaların, Seraların aklınıza gelecek bütün işletmelerde raporlama oldukça önemlidir. Özellikle işletmenin durumunu anlık ve elektronik olarak ölçümlemek daha önemlidir. Gelen verinin doğruluğu nispetinde raporlarınız doğru olur ve raporlar neticesinde alınacak kararlarda o nebze isabetli olur. Dilerseniz HDC1080, Arduino Mega ve Lora müdllerimiz ile dolu yazımıza başlayalım.
1.1 Gerekli Malzemeler:
LoRa Başlangıç Seti (SX1278 E32-433T20D)
LoRa teknolojisi ile tanışmak isteyenler için 433 MHz bandında çalışan, SX1278 çipli modül ve anten içeren bir başlangıç setidir.
Ürün Sayfasına Git40dBi SMA 433 MHz Anten
Bu anten, 433 MHz frekansında yüksek kazançlı bir veri iletimi sağlar ve LoRa cihazlar için idealdir.
Ürün Sayfasına GitHDC1080 Sıcaklık ve Nem Sensörü
Yüksek nemde mükemmel doğruluk sağlayan bu sıcaklık ve nem sensörü, hassas ölçümler için idealdir.
Ürün Sayfasına GitE32-433T20D LoRa Modülü
433 MHz frekansında çalışan, SX1278 çipli uzun mesafe veri iletişimi için ideal bir LoRa modülüdür.
Ürün Sayfasına Git1.2 Devre Şeması
Devre Şeması olarak hazır pcb kullandığım için özel bir bağlantı şeması yapmadım. Sadece HDC1080 için PCB üzerindeki I2C klemenslerine bağlantıları yaptım. Devra şeması şu şekilde oldu:
PCB nin üst kısmındaki klemenslerden SDA ve SCL pinlerini HDC1080 modelinin aynı pinlerine taktım. beslemeyi bu sefer 3.3v üzerinden yaptım.
Dikkat ederseniz HDC1080 sıcaklık ve nem sensörünü Sinter malzemenin içine taktım. 3/8 inch tam uyuyor. Bu sayede tozlu ortamlarda da rahatlıkla nem sensörü çalışacaktır.
Merkez noktasında ise bu sefer farklı bir şey denedim. Bu video serisi başta da söylediğim gibi 2 seri şeklinde olacaktı. Şimdi sıcaklık ve nemi ölçtüğümüz yerde Arduino Nano yeterli oluyordu. Ancak internete veri gönderirken yüksek SRAM değerlerine ihtiyaç duyduğumuz için merkez noktasında Arduino Mega kullandım. Devre Şeması şu şekilde oldu:
Bağlantılara daha yakından bakarsak,
Dikkat ederseniz Lora modülü ile arduino Mega arasındaki RX/TX bağlantısını Arduino mega üzerindeki A8 ve A9 pinleri ile yaptık. 5v ve GND ise standart bağlantı şekli. PCB üzerine Arduino Nano yerine Arduino MEGA yerleştirmiş olduk.
Peki neden bu şekilde bir bağlantı seçtik? Çünkü diğer videoda Mega nın ön tarafına ETHERNET SHIELD takacağız. ethernet shield de arduino üzerindeki 10,11,12 ve 13 numaralı pinleri kullanacağı için serial haberleşme için A8 ve A9 u kullandık.
1.3 Kullandığımız Kod
Merkez Noktası:
#include "LoRa_E32.h"
#include <SoftwareSerial.h>
SoftwareSerial mySerial(A8, A9);
/*
Pinler Arduino MEGA Lora E32 433T20d
A8 3
A9 4
*/
LoRa_E32 e32ttl(&mySerial);
struct Signal {
char type[15] = "Fixaj.com";
byte temp[4];
byte nem[4];
} data;
void setup() {
Serial.begin(9600);
e32ttl.begin();
delay(500);
}
void loop() {
while (e32ttl.available() > 1) {
ResponseStructContainer rsc = e32ttl.receiveMessage(sizeof(Signal));
struct Signal data = *(Signal*) rsc.data;
Serial.print("Yer: ");
Serial.println(data.type);
Serial.print("Ortam Sıcaklığı: ");
Serial.println(*(float*)(data.temp));
Serial.print("Ortam Nemi: ");
Serial.println(*(float*)(data.nem));
rsc.close();
}
}
Sıcaklık ve Nem sensörü olduğu noktamız
#include <Wire.h>
#include "ClosedCube_HDC1080.h"
ClosedCube_HDC1080 hdc1080;
#include "LoRa_E32.h"
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11); // Arduino RX <-- e32 TX, Arduino TX --> e32 RX
LoRa_E32 e32ttl(&mySerial);
struct Signal {
char type[15] = "Fixaj.com";
byte temp[4];
byte nem[4];
} data;
void setup()
{
Serial.begin(9600);
Serial.println("Fixaj.com Arduino Test");
// Default settings:
// - Heater off
// - 14 bit Temperature and Humidity Measurement Resolutions
hdc1080.begin(0x40);
Serial.print("Manufacturer ID=0x");
Serial.println(hdc1080.readManufacturerId(), HEX); // 0x5449 ID of Texas Instruments
Serial.print("Device ID=0x");
Serial.println(hdc1080.readDeviceId(), HEX); // 0x1050 ID of the device
e32ttl.begin();
delay(500);
}
void loop()
{
delay(3000);
*(float*)(data.temp) = hdc1080.readTemperature();
*(float*)(data.nem) = hdc1080.readHumidity();
ResponseStatus rs = e32ttl.sendFixedMessage(0, 63, 23, &data, sizeof(Signal));
Serial.println(rs.getResponseDescription());
Serial.println(*(float*)(data.temp));
Serial.println(*(float*)(data.nem));
}
Sonuç
Evet arkadaşlar yazımızın sonuna geldik, çok yakında 2. videomuzu çekip youtube da yayınlayacağım. 2. video daha eğlenceli olacak. Çünkü verileri internete nasıl atacağımızı farklı platformlar üzerinden raporlama yapmayı öğreneceğiz. Tabiki raporlamanın değeri içindeki verilerin doğruluğuna bağlıdır. HDC1080 ile sıcaklık ve nem değerleriniz mümkün olan en doğru şekilde ölçümlenecektir. Ben eski çalıştığım yerlerde 300 – 400 avro luk sensörler yerine HDC1080 kullandım yaklaşık 2 yıldır da sensörlerden yana bir şikayet duymadım. Müşterilerim 2 sensörün arasındaki fiyat farkının bu kadar olmasına bir türlü anlayamıyorlardı. Tamamen dışa bağlı kalırsak, işte gelin kurun gidin kafasında olursa maalesef yabancılar hiç affetmiyor. O yüzden meraklı olup işin ucundan tutup biraz kurcalamakta fayda var 🙂
Aklınıza takılan sorular için Soru&Cevap sayfamızı ziyaret etmeyi unutmayın.
ekler
Photo by ThisIsEngineering from Pexels