Merhaba arkadaşlar bu projemizde 433 MHz RF modüller ile uzaktan RGB LED’in rengini değiştireceğiz. Arduino UNO’ya bağlı olan 3 adet potansiyometreden okunan değerleri RF modül yardımıyla Arduino MEGA’ya göndereceğiz. MEGA’da ise bu okunan değerlere göre MEGA’ya bağlı olan RGB LED’i kontrol edeceğiz. Bu yazımızı okumadan önce RF modüllerin ve RGB LED’in Arduino ile nasıl kullanıldığını öğrenmek için, 433 MHz RF ve RGB LED kontrolü yazılarımızı okumanızı tavsiye ederiz. Şimdi malzeme listesine göz atalım:
MALZEME LİSTESİ:
- 2 x Arduino (UNO veya MEGA olabilir. Yazıda 1 adet UNO 1 adet MEGA kullanıldı.)
- 1 x RGB LED (Yazıda ortak anot kullanıldı.)
- 3 x 220Ω Direnç (LED için)
- 1 x 433 MHz RF alıcı modül
- 1 x 433 MHz RF verici modül
- 3 x 10k Potansiyometre
- Jumper Kablo
- Breadboard
Devre Şemaları
Alıcı Devre Şeması
Verici Devre Şeması
Devreleri kurduktan sonra kod kısmına geçebiliriz.
ALICI VE VERİCİ KODLARI
Alıcı Kodları – Arduino MEGA
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
#include <VirtualWire.h> //VirtualWire Kütüphanesi #define LED_B 2 //RGB LED'in mavi bacağının bağlı olduğu pin tanımlanır #define LED_G 3 //RGB LED'in yeşil bacağının bağlı olduğu pin tanımlanır #define LED_R 4 //RGB LED'in kırmızı bacağının bağlı olduğu pin tanımlanır int RX_PIN = 8;// Alıcının data pininin hangi pine bağlandığı gösterilmiştir. PWM pini olması zorunludur int RX_ID = 3; // Alıcı ID bilgisi int TX_ID; typedef struct veriler //Alınan veriler için Data Structure oluşturulmuştur { int TX_ID; // ID verisi tanımlanmıştır int PWM_red; // Kırmızı LED için PWM verisi tanımlanmıştır int PWM_green; // Yeşil LED için verisi tanımlanmıştır int PWM_blue; // Mavi LED için verisi tanımlanmıştır }; void setup() { pinMode(LED_R,OUTPUT); //Kırmızı LED'in bağlı olduğu pin çıkış olarak ayarlanır pinMode(LED_G,OUTPUT); //Yeşil LED'in bağlı olduğu pin çıkış olarak ayarlanır pinMode(LED_B,OUTPUT); //Mavi LED'in bağlı olduğu pin çıkış olarak ayarlanır Serial.begin(9600); vw_setup(4000); // Haberleşme için kurulum yapılır ve haberleşme başlar. Maksimum 4000kbps olarak ayarlanabilir. vw_set_rx_pin(RX_PIN); // Alıcı pini belirlenir vw_rx_start(); // Alıcı modunda tarama başlar } void loop() { struct veriler alinan_veri; //Alınacak veriler için atama yapılır uint8_t data_boyutu = sizeof(alinan_veri);//Alınacak verinin boyutu belirlenin vw_wait_rx(); //Data okuması başlar if (vw_get_message((uint8_t *)&alinan_veri, &data_boyutu)) //Verinin mevcut olup olmaması kontrol edilir { Serial.print(alinan_veri.TX_ID); if (alinan_veri.TX_ID == RX_ID) //eğer veri mevcutsa ID eşleşmesi kontrol edilir { //Ortak anot kullanıldığı için değerler 255'ten çıkartılır. Ortak katotta gerekli değildir. analogWrite(LED_R, 255-(alinan_veri.PWM_red)); // RGB kırmızı pinine okunan değer PWM olarak verilir analogWrite(LED_G, 255-(alinan_veri.PWM_green)); // RGB yeşil pinine değer PWM olarak verilir analogWrite(LED_B, 255-(alinan_veri.PWM_blue)); // RGB mavi pinine değer PWM olarak verilir } } } |
Verici Kodları – Arduino UNO
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 |
#include <VirtualWire.h> // VirtualWire Kütüphanesi #define POT_B 2 //Mavi LED PWM değeri için kullanılan POT pini #define POT_G 3 //Yeşil LED PWM değeri için kullanılan POT pini #define POT_R 4 //Kırmızı LED PWM değeri için kullanılan POT pini int pwm_red; //Kırmızı LED için POT'tan okunan değerin PWM değerine dönüştürülmesinde kullanılan değişken int pwm_green; //Yeşil LED için POT'tan okunan değerin PWM değerine dönüştürülmesinde kullanılan değişken int pwm_blue; //Mavi LED için POT'tan okunan değerin PWM değerine dönüştürülmesinde kullanılan değişken int TX_PIN = 11;// Arduino'ya bağlanan verici data pini. !!PWM pini olmak zorundadır int TX_ID = 3; // Verici ID'si. Alıcı tarafından tanınması için typedef struct veriler// Structure tanımlanmıştır. Burada gönderilecek veriler tanımlanmıştır { int TX_ID; //TX ID int PWM_red; //Kırmızı LED için PWM değeri int PWM_green; //Yeşil LED için PWM değer int PWM_blue; //Mavi LED için PWM değer }; void setup() { pinMode(POT_R,INPUT); //Analog giriş pinleri tanımlanmıştır pinMode(POT_G,INPUT); //Analog giriş pinleri tanımlanmıştır pinMode(POT_B,INPUT); //Analog giriş pinleri tanımlanmıştır vw_setup(4000); //Haberleşme için kurulum yapılır ve haberleşme başlar. Maksimum 4000kbps olarak ayarlanabilir. vw_set_tx_pin(TX_PIN);//Data bacağının nereye bağlı olduğu tanımlanır } void loop() { pwm_red=analogRead(POT_R); // Kırmızı LED için analog okuma yapılır pwm_red=map(pwm_red,0,1023,0,255); // Bu değer PWM değerine dönüştürülür pwm_green=analogRead(POT_G); // Yeşil LED için analog okuma yapılır pwm_green=map(pwm_green,0,1023,0,255); // Bu değer PWM değerine dönüştürülür pwm_blue=analogRead(POT_B); // Mavi LED için analog okuma yapılır pwm_blue=map(pwm_blue,0,1023,0,255); // Bu değer PWM değerine dönüştürülür struct veriler payload; // Göndermek istenilen veri tanımlanmıştır payload.TX_ID = 3; // ID değeri belirlenir payload.PWM_red =pwm_red; //Kırmızı LED için PWM değeri payload yapısına yüklenir payload.PWM_green =pwm_green; //Yeşil LED için PWM değeri payload yapısına yüklenir payload.PWM_blue=pwm_blue; //Mavi LED için PWM değeri payload yapısına yüklenir vw_send((uint8_t *)&payload, sizeof(payload)); // Payload verisi gönderilir. vw_wait_tx(); // Bütün verinin gönderilmesi beklenir } |
NOT: Arduino UNO veya MEGA için değişiklik yapmak isterseniz PWM pinlerini kullanmaya dikkat edin. RF modüller için anten kullanarak mesafeyi arttırabilirsiniz. Sorunuz olursa yorumlarda belirtebilirsiniz. İyi Eğlenceler!!