Arduino Kullanarak 433 MHz RF Bağlantısını Kullanan Kablosuz Termometre

Sorunları Ortadan Kaldırmak Için Enstrümanımızı Deneyin





Bu yazıda, oda sıcaklığını ve dış ortam sıcaklığını izleyebilen Arduino tabanlı bir kablosuz termometre inşa edeceğiz. Veriler 433 MHz RF bağlantısı üzerinden iletilir ve alınır.

433MHz RF Modülü ve DHT11 Sensörünü Kullanma

Önerilen proje, Arduino'yu beyin olarak ve kalbi de 433 MHz verici / alıcı modülü .



Proje, 433 MHz alıcı, LCD ekran ve oda içerisine yerleştirilecek DHT11 sensörlü olmak üzere iki ayrı devreye ayrılmıştır. oda sıcaklığını ölçer .

Başka bir devre 433MHz vericiye sahiptir, DHT11 sensörü dış ortam sıcaklığını ölçmek için. Her iki devrede de birer arduino bulunur.



Odanın içine yerleştirilen devre, iç ve dış sıcaklık okumalarını LCD ekranda gösterecektir.

Şimdi 433 MHz verici / alıcı modülüne bir göz atalım.

433 MHz verici / alıcı modülü.

Verici ve alıcı modülleri yukarıda gösterilmiştir, tek yönlü iletişim yeteneğine sahiptir (tek yönlü). Alıcının 4 pinli Vcc, GND ve DATA pinleri vardır. İki DATA pini vardır, bunlar aynıdır ve verileri iki pinden birinden çıkarabiliriz.

Verici çok daha basittir, sadece Vcc, GND ve DATA giriş pinine sahiptir. Makalenin sonunda açıklanan her iki modüle de bir anten bağlamalıyız, aralarında anten iletişimi birkaç inçten fazla kurulmayacaktır.

Şimdi bu modüllerin nasıl iletişim kurduğunu görelim.

Şimdi vericinin veri giriş pinine 100Hz'lik saat darbesi uyguladığımızı varsayalım. Alıcı, alıcının veri pininde sinyalin tam bir kopyasını alacaktır.

Bu basit değil mi? Evet… ama bu modül AM'de çalışıyor ve gürültüye duyarlı. Yazarın gözlemine göre, eğer vericinin veri pini 250 milisaniyeden fazla bir süre boyunca herhangi bir sinyal olmadan bırakılırsa, alıcı veri çıkış pini rastgele sinyaller üretir.

Bu nedenle, yalnızca kritik olmayan veri aktarımları için uygundur. Ancak bu proje bu modülle çok iyi çalışıyor.

Şimdi şemalara geçelim.

ALICI:


arduino - LCD ekran bağlantısı. 10K potansiyometre

Yukarıdaki devre arduino-LCD ekran bağlantısıdır. LCD ekranın kontrastını ayarlamak için 10K potansiyometre sağlanmıştır.

433 MHz RF Bağlantısı ve Arduino Kullanan Kablosuz Termometre

Yukarıdaki alıcı devresidir. LCD ekran bu arduinoya bağlanmalıdır.

Lütfen kodu derlemeden önce aşağıdaki kitaplık dosyalarını indirin

Radyo Başkanı: github.com/PaulStoffregen/RadioHead

DHT sensör kitaplığı: https://arduino-info.wikispaces.com/file/detail/DHT-lib.zip

Alıcı Programı:

//--------Program Developed by R.Girish-----//
#include
#include
#include
#include
#define DHTxxPIN A0
LiquidCrystal lcd(12,11,5,4,3,2)
RH_ASK driver(2000, 7, 9, 10)
int ack = 0
dht DHT
void setup()
{
Serial.begin(9600)
lcd.begin(16,2)
if (!driver.init())
Serial.println('init failed')
}
void loop()
{
ack = 0
int chk = DHT.read11(DHTxxPIN)
switch (chk)
{
case DHTLIB_ERROR_CONNECT:
ack = 1
lcd.setCursor(0,0)
lcd.print('INSIDE:')
lcd.print('NO DATA')
delay(1000)
break
}
if(ack == 0)
{
lcd.setCursor(0,0)
lcd.print('INSIDE:')
lcd.print(DHT.temperature)
lcd.print(' C')
delay(2000)
}
uint8_t buf[RH_ASK_MAX_MESSAGE_LEN]
uint8_t buflen = sizeof(buf)
if (driver.recv(buf, &buflen))
{
int i
String str = ''
for(i = 0 i {
str += (char)buf[i]
}
lcd.setCursor(0,1)
lcd.print('OUTSIDE:')
lcd.print(str)
Serial.println(str)
delay(2000)
}
}
//--------Program Developed by R.Girish-----//

Verici:

Kablosuz Termometre Verici

Yukarıdakiler, alıcı kadar basit olan Verici için şematiktir. Burada başka bir arduino kartı kullanıyoruz. DHT11 sensörü, dış ortam sıcaklığını algılayacak ve alıcı modüle geri gönderecektir.

Verici ile alıcı arasındaki mesafe 10 metreden fazla olmamalıdır. Aralarında herhangi bir engel varsa, iletim mesafesi azalabilir.

Verici Programı:

//------Program Developed by R.Girish----//
#include
#include
#define DHTxxPIN A0
#include
int ack = 0
RH_ASK driver(2000, 9, 2, 10)
dht DHT
void setup()
{
Serial.begin(9600)
if (!driver.init())
Serial.println('init failed')
}
void loop()
{
ack = 0
int chk = DHT.read11(DHTxxPIN)
switch (chk)
{
case DHTLIB_ERROR_CONNECT:
ack = 1
const char *temp = 'NO DATA'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
break
}
if(ack == 0)
{
if(DHT.temperature == 15)
{
const char *temp = '15.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 16)
{
const char *temp = '16.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 17)
{
const char *temp = '17.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 18)
{
const char *temp = '18.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 19)
{
const char *temp = '19.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 20)
{
const char *temp = '20.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 21)
{
const char *temp = '21.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 22)
{
const char *temp = '22.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 23)
{
const char *temp = '23.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 24)
{
const char *temp = '24.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 25)
{
const char *temp = '25.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 26)
{
const char *temp = '26.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 27)
{
const char *temp = '27.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 28)
{
const char *temp = '28.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 29)
{
const char *temp = '29.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 30)
{
const char *temp = '30.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 31)
{
const char *temp = '31.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 32)
{
const char *temp = '32.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 33)
{
const char *temp = '33.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 34)
{
const char *temp = '34.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 35)
{
const char *temp = '35.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 36)
{
const char *temp = '36.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 37)
{
const char *temp = '37.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 38)
{
const char *temp = '38.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 39)
{
const char *temp = '39.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 40)
{
const char *temp = '40.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 41)
{
const char *temp = '41.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 42)
{
const char *temp = '42.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 43)
{
const char *temp = '43.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 44)
{
const char *temp = '44.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
delay(500)
if(DHT.temperature == 45)
{
const char *temp = '45.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 46)
{
const char *temp = '46.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 47)
{
const char *temp = '47.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 48)
{
const char *temp = '48.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 49)
{
const char *temp = '49.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
if(DHT.temperature == 50)
{
const char *temp = '50.00 C'
driver.send((uint8_t *)temp, strlen(temp))
driver.waitPacketSent()
}
delay(500)
}
}
//------Program Developed by R.Girish----//

Anten Yapısı:

Bunu kullanarak projeler inşa ediyorsanız 433 MHz modülleri İyi bir aralık için aşağıdaki yapısal ayrıntıları kesinlikle takip edin.

433 MHz RF anteni

Bu yapıyı destekleyecek kadar sağlam olması gereken tek damarlı bir tel kullanın. Lehim bağlantısı için alttan izolasyonu çıkarılmış yalıtımlı bakır tel de kullanabilirsiniz. Bunlardan iki tane yapın, biri verici, diğeri alıcı için.

Yazarın Arduino ve 433 MHz RF Bağlantısı kullanan Kablosuz Termometre Prototipi:

433 MHz RF Bağlantısı ve Arduino Kullanan Kablosuz Termometre prototipi


Önceki: Su Seviyesi Kontrol Cihazı için Korozyon Önleyici Problar Sonraki: L293 Quad Half-H Sürücü IC Pinout, Veri Sayfası, Uygulama Devresi