Merhaba arkadaşlar. Arduino serimizin bu yazısında sizlerle RGB LED renk değiştirme uygulaması yapacağız. Potansiyometre ile RGB LED kontrolünün nasıl yapıldığını inceleyeceğiz.
Daha önceki yazımızda LDR Devresinden bahsetmiştik >> Karanlıkta LED Yakan LDR Devresi yapalım !
Arduino ve Potansiyometre Kullanarak RGB LED Rengini Değiştirelim
RGB LED’lerin yapısında üç ayrı renk LED bulunur. Bunlar kırmızı (Red), yeşil (Green) ve mavidir (Blue). RGB LED ismi de bu renklerin baş harflerinden türemiştir. Normal LED’lerde bir anot ve bir katot pin vardır fakat RGB LED’lerde bir adet ortak anot veya ortak katot pini, bunun yanında da 3 rengi temsil eden pinler yer almaktadır.
RGB LED ile ilgili daha detaylı bilgiye yazımızdan ulaşabilirsiniz >> RGB LED Nedir?
Biz bu uygulamızda 3 adet potansiyometre kullanarak RGB LED’in renk değişimini kontrol edeceğiz.
Gerekli malzemeler: ( Not: Arduino RGB LED Uygulaması ve 10. Derse Kadar Olan Dersleri “Arduino Başlangıç Seti” İle Yapabilirsiniz. Malzemeler Bu Sette ! >)
- Arduino Uno
- Breadboard
- 3 adet 10K Potansiyometre
- 3 adet 220Ω Direnç
- 1 adet ortak anot veya ortak katot RGB LED
Arduino RGB LED devremiz için devremizi aşağıdaki gibi kuralım:
Arduino RGB LED Kodu
RGB LED Code (RGB LED Kodu) için aşağıdaki gibi algoritma yazdık. Arduino kodumuzdaki her satırın ne anlama geldiğini hem kanalımızda hem de blogumuzda detaylı olarak açıkladık. Hadi kodumuzu yazalım !
#define red 11 //LED'imizin kırmızıyı temsil eden pini Arduino'nun 11.pinine tanımlanır #define green 10 //Yeşili temsil eden pin 10 #define blue 9 //Maviyi temsil eden pin 9 #define pot_r A0 //Kırmızı ledi temsil eden pot tanımlanır #define pot_g A1 //Yeşil ledi temsil eden pot tanımlanır #define pot_b A2 //Mavi ledi temsil eden pot tanımlanır int red_value; //Kırmızı led değeri için bir değişken tanımlanır int green_value; //Yeşil led değeri için bir değişken tanımlanır int blue_value; //Mavi led değeri için bir değişken tanımlanır void deger_oku() { //Potlardan gelen değerlerin okunması için bir döngü tanımlanır red_value = analogRead(pot_r); //Kırmızı ledi kontrol eden potun değeri okunur green_value = analogRead(pot_g); //Yeşil ledi kontrol eden potun değeri okunur blue_value = analogRead(pot_b); //Mavi ledi kontrol eden potun değeri okunur red_value = map(red_value, 0, 1023, 0, 255); green_value = map(green_value, 0, 1023, 0, 255); blue_value = map(blue_value, 0, 1023, 0, 255); ////0-1023 arası okunan değerler map komutu ile 0-255 arası değerlere dönüştürülür } void deger_yaz() { //Potlardan okunan değerler RGB LED'e aktarılır analogWrite(red, red_value); //Kırmızı pottan gelen renk değeri RGB LED'e aktarılır analogWrite(green, green_value); //Yeşil pottan gelen renk değeri RGB LED'e aktarılır analogWrite(blue, blue_value); //Mavi pottan gelen renk değeri RGB LED'e aktarılır } void setup() { pinMode(red, OUTPUT); pinMode(green, OUTPUT); pinMode(blue, OUTPUT); //RGB LED'in Kırmızı, Yeşil ve Mavi renkleri çıkış pini olarak tanımlanır } void loop() { //Ana döngüde değer okuma ve değer yazma işlemleri uygulanır deger_oku(); deger_yaz(); }
1 potansımetre ıle yapsana
abi emeğine sağlık her videon çok güzel ama videoda hem orjinal arduıno kodlarını hem de mblock kodlarını versen daha iyi olur hem öğrenciler için daha kolay ben bilişim hocasıyım anlıyorum beşe altıya giden çocuk nasıl anlasın ama yinede eline sağlık
Neden 3 potansiyometre
m block kodlamasını atarmısınız…
Evet, bendeki kitapta 1 pot ile yapılmış, yapıyorum olmuyor, ne yani bizi kandırıyormusunuz, acil cvp istiyorum, neden
1 pot la olmayabilir olabilir, de kodları kendin yazıp hardwareda kendin yaparsan olabilir ama 3 pot daha rahat (1 pot ile sonsuz döndüremediğin için kısıtlıda olur) 🙂
Kitaptaki kodda hata var. Çözümünü paylaşırmısınız.
RGB ledimin ortak anot mu ortak katot mu olduğunu nereden anlarım? cevaplayana şimdiden teşekkürler.
RGB+ ise ortak anot
RGB- ise ortak katot
Anot artı 5 volta bağlanır
Katot ise ortak GND hattına bağlanır.
Diğer RGB pinlerini sizin atadiginiz pinleri IDE de Kod olarak yazdırmak gerekir.
arkadaşlar rgb led yerine buzzer takın dirençleri değiştirerek buzzerın sesini arttırın ve potansiyometreleri hareket ettirin nota değişikliği oluyor
Bir potansiyemetre ile yapılır mı? Çünkü benimkinde bir potansiyemetre çıktı
3 değer olduğu için maalesef olmayacaktır fakat tek potansiyometre ile de kendi kodunuzu yazıp farklı bir proje yapabilirsiniz.
Tek pot ile yapımı için gerekli kod (değişen değerleri konsol ekranında takip edebilirsiniz)
#define potpin A0 //Potansiyometreyi A0 pinine tanımlıyoruz
int deger=0; //”Değer” adlı 0 başlangıçlı bir değişken tanımlıyoruz
void setup()
{
Serial.begin(9600); //9600 Baund bir seri haberleşme başlatıyoruz
Serial.println(“Pot Deger Okuma”); //Seri monitörde bir kez gönderilen bir mesaj tanımlıyoruz
pinMode(3, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
}
void loop()
{
deger = analogRead(potpin); //”Değer” değişkeni potansiyometrenin değerini okuyup buna göre değişir
Serial.println(deger); //Okunan değer seri monitörde mesaj olarak gönderilir
if (deger==0){
digitalWrite(3, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
delay(100); //Bu işlem 100 milisaniye aralıklarla yapılır
}else if(deger>1 and deger351 and deger<700){
digitalWrite(5, HIGH);
digitalWrite(6, LOW);
digitalWrite(3, LOW);
delay(100); //Bu işlem 100 milisaniye aralıklarla yapılır
}else{
digitalWrite(6, HIGH);
digitalWrite(5, LOW);
digitalWrite(3, LOW);
delay(100); //Bu işlem 100 milisaniye aralıklarla yapılır
}
}
Arduino:1.8.15 (Windows 10), Kart:”Arduino Uno”
sketch_jul25b:6:16: error: stray ‘\342’ in program
Serial.println(“Pot Deger Okuma”); //Seri monitörde bir kez gönderilen bir mesaj tanımlıyoruz
^
sketch_jul25b:6:17: error: stray ‘\200’ in program
Serial.println(“Pot Deger Okuma”); //Seri monitörde bir kez gönderilen bir mesaj tanımlıyoruz
^
sketch_jul25b:6:18: error: stray ‘\234’ in program
Serial.println(“Pot Deger Okuma”); //Seri monitörde bir kez gönderilen bir mesaj tanımlıyoruz
^
sketch_jul25b:6:34: error: stray ‘\342’ in program
Serial.println(“Pot Deger Okuma”); //Seri monitörde bir kez gönderilen bir mesaj tanımlıyoruz
^
sketch_jul25b:6:35: error: stray ‘\200’ in program
Serial.println(“Pot Deger Okuma”); //Seri monitörde bir kez gönderilen bir mesaj tanımlıyoruz
^
sketch_jul25b:6:36: error: stray ‘\235’ in program
Serial.println(“Pot Deger Okuma”); //Seri monitörde bir kez gönderilen bir mesaj tanımlıyoruz
^
C:\Users\90553\AppData\Local\Temp\arduino_modified_sketch_945682\sketch_jul25b.ino: In function ‘void setup()’:
sketch_jul25b:6:19: error: ‘Pot’ was not declared in this scope
Serial.println(“Pot Deger Okuma”); //Seri monitörde bir kez gönderilen bir mesaj tanımlıyoruz
^~~
C:\Users\90553\AppData\Local\Temp\arduino_modified_sketch_945682\sketch_jul25b.ino: In function ‘void loop()’:
sketch_jul25b:22:22: error: ‘deger351’ was not declared in this scope
}else if(deger>1 and deger351 and deger1 and deger351 and deger Preferences.
Bu hatayı verdi, ne yapmalıyım?
ÖNCELİKLE TEŞEKKÜR EDERİM
BEN LM 35 VE VOLTAJ ÖLÇÜM İÇİN AYRI AYRI LED BAĞLAYIP İKİSİNİ DE AYRI DEĞERLERDE YAKMAYA ÇALIŞACAGIM POTLARA DEDİĞİNİZ GİBİ DEĞİLDE FARKLI ŞEKİLDE BAĞLADIM KODUNU YAZARKEN LM35 İÇİN AYRI VOLTAJ İÇİN AYRI YAZMAM MI GEREKİYOR YA DA DEDİĞİM OLAY MÜMKÜN MÜ YAKABİLİR MİYİM AYRI DEĞERLERDE.
TEŞEKKÜR EDERİM
LM35’den gelen değere göre gerilim ayarı yapacaksanız birlikte yazmalı ve gerekli mantaliteyi kurmanız gerekiyor. Bunun için de algoritma bilgisi şart tabii 🙂
Aciklamalarinizi yeterli bulmuyorum mesala map komutu hakkinda daha onceki derslerde bilgi vermdgnz haldee kullaniyorsunuz oda yetmezmis gibi okunan 10 bitlik degeri tekrar 8 bitlik bir degere donustryorsunuz bunu neden yaptgnzi aciklamyorsnzz burdaki dersler ezbercilik uzerine olmus oluyor
Anladığım kadarıyla, 10 bit Arduinodan kaynaklanan bir kısıtlama, analog girişlerden bu yüzden 1024 genişliğinde bir aralıkta yani 0-1023 aralığında değer okunuyor. 8 bitlik değere dönüştürme nedeni ise RGB ledin her renginin derecesi 256 aralığında değer kabul eder, yani 0-255 aralığında; bu yüzden de 8 bite dönüştürme işlemi yapılmış.
Kod kısmında bir eksiklik olduğunu düşünüyorum. setup() fonksiyonu içerisine aşağıdaki gibi potansiyometre pinlerinin giriş olarak tanımlanması gerekiyor gibi geldi:
…
pinMode(pot_r, INPUT);
pinMode(pot_g, INPUT);
pinMode(pot_b, INPUT);
//Potansiyometre orta ayakları giriş pini olarak tanımlanır
…
Ben kendi uygulamamda sorun yaşadım, bu şekilde bir ilave ile düzeldi.
Ayrıca, RGB ledlerin aldığı değerlere göre renk ayarı ters ilişki ile oluyor sanırım. Yani 0-255 arası potansiyometrede okunan değer üzerinden dönüştürülen değer red_value olsun, RGB lede 255-red_value olarak girmek Serial monitorden okumayı kolaylaştırıyor. Tabi bunun için map fonksiyonunun da;
red_value = map(red_value, 0, 1023, 255, 0);
olarak değer sınırları ters olacak şekilde düzenlenmesi gerekiyor. Benim uygulamamda bu kısmi düzenlemelerle yapıp çalıştırdığım son halini aşağıda paylaşıyorum:
#define red 9 //LED’imizin kırmızıyı temsil eden pini Arduino’nun 9.pinine tanımlanır
#define green 10 //Yeşili temsil eden pin 10
#define blue 11 //Maviyi temsil eden pin 11
#define pot_r A0 //Kırmızı ledi temsil eden pot tanımlanır
#define pot_g A1 //Yeşil ledi temsil eden pot tanımlanır
#define pot_b A2 //Mavi ledi temsil eden pot tanımlanır
int red_value; //Kırmızı led değeri için bir değişken tanımlanır
int green_value; //Yeşil led değeri için bir değişken tanımlanır
int blue_value; //Mavi led değeri için bir değişken tanımlanır
void deger_oku() { //Potlardan gelen değerlerin okunması için bir döngü tanımlanır
red_value = analogRead(pot_r); //Kırmızı ledi kontrol eden potun değeri okunur
green_value = analogRead(pot_g); //Yeşil ledi kontrol eden potun değeri okunur
blue_value = analogRead(pot_b); //Mavi ledi kontrol eden potun değeri okunur
red_value = map(red_value, 0, 1023, 255, 0);
green_value = map(green_value, 0, 1023, 255, 0);
blue_value = map(blue_value, 0, 1023, 255, 0);
////0-1023 arası okunan değerler map komutu ile 0-255 arası değerlere dönüştürülür
}
void deger_yaz() { //Potlardan okunan değerler RGB LED’e aktarılır
analogWrite(red, 255-red_value); //Kırmızı pottan gelen renk değeri RGB LED’e aktarılır
analogWrite(green, 255-green_value); //Yeşil pottan gelen renk değeri RGB LED’e aktarılır
analogWrite(blue, 255-blue_value); //Mavi pottan gelen renk değeri RGB LED’e aktarılır
}
void setup() {
pinMode(red, OUTPUT);
pinMode(green, OUTPUT);
pinMode(blue, OUTPUT);
//RGB LED’in Kırmızı, Yeşil ve Mavi renkleri çıkış pini olarak tanımlanır
pinMode(pot_r, INPUT);
pinMode(pot_g, INPUT);
pinMode(pot_b, INPUT);
//Potansiyometre orta ayakları giriş pini olarak tanımlanır
Serial.begin(9600);
}
void loop() { //Ana döngüde değer okuma ve değer yazma işlemleri uygulanır
deger_oku();
Serial.print(red_value);
Serial.print(“,”);
Serial.print(green_value);
Serial.print(“,”);
Serial.println(blue_value);
deger_yaz();
}
Açıklamada 220 ohm direnç demişsiniz ama videoda 330 ohm direnç kullanmişsınızve açıklamada gerekli malzemelere jumper kablo yazmamışsınız