433MHz RF modülünü ATMega328P-PU ile nasıl kullanacağınızı öğrenin. Bu yazımızda bir DHT11 sensörü ve bir RF vericisinden bir devre kuracağız. Ayrıca 433 MHz radyo alıcılı ve LCD ekranlı bir alıcı cihaz kuracağız.
Neye ihtiyacımız var
- Arduino IDE'nin kurulu olduğu bir bilgisayar (1.6.5 sürümünü kullanıyorum);
- VirtualWire kitaplığı (aşağıdaki bağlantı);
- ATMega328P;
- programcı AVR MKII ISP;
- sıcaklık ve bağıl nem sensörü DHT11 ;
- aşağıdaki öğeler listesinden bileşenler.
giriiş
Bu yazımda sizlere standart bir 433 MHz RF modülü kullanarak sıcaklık ve bağıl nemi ölçen ve ölçülen değerleri gönderen bir cihazın nasıl monte edileceğini göstereceğim. Cihazda kullanılan sıcaklık ve nem sensörü DHT11'dir.
Arduino veya ATMega denetleyicilerini kullanarak küçük miktarda veri aktarmanın birçok yolu vardır. Bunlardan biri RCSwitch, Radiohead veya VirtualWire gibi hazır bir kütüphane kullanıyor. Mikrodenetleyicinin yerleşik UART modülünü kullanarak ham veri göndermek de mümkündür. Ancak, alıcı tüm parazitleri toplayacağından ve mikrodenetleyici beklendiği gibi çalışmadığından, yerleşik UART modülünün kullanılması önerilmez. Bu yazıda, veri göndermek ve almak için VirtualWire kütüphanesini kullanıyorum. Bu kütüphane Arduino IDE 1.6.2 ve 1.6.5 ile çalışır.
433 MHz verici modülü, veri iletmediğinde hala RF titreşimleri yayar ve gürültü iletir. Ayrıca diğer RF cihazlarıyla etkileşime girebilir. Bunu önlemek için veri aktarmam gerektiğinde açıp aktarım bittiğinde kapatıyorum.
Donanım
İki yapısal diyagrama ihtiyacımız var. Biri verici için, diğeri alıcı için.
verici
İhtiyacımız var:
- mikrodenetleyici bellenim yöntemi → ISS;
- sıcaklık ve nem sensörü → DHT11;
- veri işleme için mikro denetleyici → ATMega32p;
- kablosuz iletim yöntemi → 433MHz RF modülü.
Alıcı
İhtiyacımız var:
- radyo alım yöntemi → 433MHz RF modülü;
- alınan verileri işleme yöntemi → Arduino Mega;
- sıcaklık ve nem görüntüleme yöntemi → 16x2 LCD.
Şematik diyagramlar
verici
ATMega328p'de kablosuz termometrenin verici kısmı
()
Bu örnekte, kullanılmayan mikrodenetleyici pinlerini harici termometre kontaklarına çıkarmayacağım, bundan sonra cihazı daha da geliştirmek için kullanılabilecekler. Burada sadece cihaz fikrini ele alıyoruz ve onu sadece bir devre tahtasında birleştireceğiz.
Alıcı
(yakınlaştırmak için resme sağ tıklayıp "Bağlantıyı / resmi yeni sekmede / yeni pencerede aç" seçeneğini seçebilirsiniz.)
Lütfen alıcının, şemada gösterilmeyen Arduino Mega kartına dayandığını unutmayın. Arduino Mega kartını bağlamak için RF modülünü ve LCD ekranı şemadaki etikete göre ona bağlayın.
Eşya listesi
verici
ATMega328p'deki kablosuz termometrenin verici kısmının elemanlarının listesi
(yakınlaştırmak için resme sağ tıklayıp "Bağlantıyı / resmi yeni sekmede / yeni pencerede aç" seçeneğini seçebilirsiniz.)
Alıcı
(yakınlaştırmak için resme sağ tıklayıp "Bağlantıyı / resmi yeni sekmede / yeni pencerede aç" seçeneğini seçebilirsiniz.)
programı
verici programı
İlk olarak, ileten kısmın programını düşünün:
Nemi ve sıcaklığı tek bir mesajda iletmek için bunları bir araya getiriyorum. İlk olarak, veriler değişkene tamsayılar olarak okunur, ardından tamsayılar bir karakter dizisine dönüştürülür ve ardından birbirleriyle birleştirilir. Alıcı tarafta, veriler bireysel karakterlere bölünecektir. Bunu yaparak, kendimi iki basamaklı derece ile sınırlandırıyorum. Sensör sıcaklığı 10°C'nin altında olan bir ortamdaysa, ekranda çöp sembolleri alıyorum. Örneğin, sıcaklık 20°C ve nem %45 ise, 2045 mesajı iletilecektir ve her şey yolundadır. Sıcaklık 9°C ve nem %78 ise, "x" rastgele bir karakter olmak üzere 978x mesajı gönderilir. Bu nedenle, bu kablosuz termometreyi toplayacaksanız, sıcaklık 10°C'nin altına düştüğünde programı doğru verileri iletecek şekilde değiştirmenizi tavsiye ederim.
Alıcı Programı
// Gerekli kütüphaneleri dahil et #includeLiquidCrystal kitaplığını kullanmanın ilginç bir yolu, özel semboller oluşturmaktır. createChar ile derece karakterini oluşturdum. Aynı şekilde kendi sembollerinizi de oluşturabilirsiniz. Özel bir sembol veya simge oluşturmak için, onu sekiz baytlık bir dizi olarak bildirmeniz ve hangi piksellerin etkinleştirileceğini "çizmeniz" gerekir (1 - açık, 0 - kapalı).