İçindekiler:
2025 Yazar: John Day | [email protected]. Son düzenleme: 2025-01-13 06:58
Genellikle insanlar bir Arduino ile RGB LED şeritlerini kontrol etmek istediklerinde, kırmızı, yeşil ve mavi renkleri karıştırmak için üç potansiyometre kullanılır. Bu işe yarar ve ihtiyaçlarınız için gayet iyi olabilir, ancak ben daha sezgisel bir şey yapmak istedim, renk tekerleği gibi bir şey.
Bu proje, bir döner kodlayıcı için mükemmel bir uygulama gibi görünüyor. Bu, milinin hareketini dijital çıkışa çeviren bir cihazdır. Mil döndürüldüğünde, kodlayıcı bir Arduino tarafından ölçülebilen bir sinyal (darbe) gönderir. Döner kodlayıcılar hakkında daha fazla bilgi için, onu daha derinlemesine açıklayan bu videoyu izleyebilirsiniz.
Bu Eğitilebilir Kitapta size bir döner kodlayıcı kullanarak bir Arduino RGB LED şerit denetleyicisinin nasıl yapıldığını göstereceğim. Bu Eğitilebilir Tablo, devrenin bir devre tahtası üzerindeki yapısını kapsar. Ancak bir Arduino kalkanı oluşturmak için kendi PCB'nizi üretebilirsiniz!
Adım 1: Parçalar
RGB LED şerit denetleyicisi için aşağıdaki malzemelere ihtiyacınız olacak:
- 1x Arduino Nano
- 3x IRLB8721PBF, herhangi bir N-kanal mantık seviyesi MOSFET, minimum 12V olarak derecelendirildiği ve LED şeridinizin tükettiği akım olduğu sürece yapacaktır.
- 1x Döner kodlayıcı
- 1x 12V 2A güç kaynağı, güç kaynağının vermesi gereken akım, kullanılan LED şeridin uzunluğuna bağlı olabilir.
- 16x Erkekten erkeğe atlama telleri
- 1x Lehimsiz devre tahtası, yeterince büyük olduğu sürece herhangi bir devre tahtası yapacaktır.
2. Adım: Devre
Arduino'yu breadboard'un 12V ve GND rayına bağlayın. Ardından diğer parçaları aşağıdaki gibi bağlayın:
Döner kodlayıcı
Pim A - D4
Pim B - D3
GND - GND
MOSFET Kırmızı
Kapı - GND
Drenaj - LED şerit kırmızı tel
Kaynak - D11
MOSFET GreenGate - GND
Drenaj - LED şerit yeşil tel
Kaynak - D9
MOSFET BlueGate - GND
Dren - LED şerit mavi tel
Kaynak - D6
3. Adım: Kodlayın
// Arduino PWM pinleri
int redPin = 11; int yeşilPin = 6; int bluePin = 9; // Arduino kodlayıcı pinleri int kodlayıcıPinA = 3; int kodlayıcıPinB = 4; // Renk değişkenleri int colorVal; int redVal; int greenVal; int blueVal; // Kodlayıcı değişkenleri int kodlayıcıPos; int kodlayıcıPinACurrent; int kodlayıcıPinALast = YÜKSEK; // Diğer int sayacı; void setup(){ pinMode(encoderPinA, INPUT_PULLUP); pinMode(encoderPinB, INPUT_PULLUP); } geçersiz döngü(){ readEncoder(); encoder2rgb(sayaç); analogWrite(redPin, redVal); analogWrite(greenPin, greenVal); analogWrite(bluePin, blueVal); } int readEncoder(){ encoderPinACurrent = digitalRead(encoderPinA); if ((encoderPinALast == DÜŞÜK) && (encoderPinACurrent == YÜKSEK)){ if (digitalRead(encoderPinB) == DÜŞÜK){ encoderPos = encoderPos - 1; } else { encoderPos = encoderPos + 1; } } kodlayıcıPinALast = kodlayıcıPinACurrent; sayaç = kodlayıcıPos*8; if (sayaç 1535){ sayaç = 0; } dönüş sayacı; } int encoder2rgb(int counterVal){ // Kırmızıdan sarıya if (counterVal <= 255){ colorVal = counterVal; kırmızıVal = 255; greenVal = colorVal; maviVal = 0; } // Sarıdan yeşile başka if (counterVal <= 511){ colorVal = counterVal - 256; redVal = 255 - colorVal; yeşilVal = 255; maviVal = 0; } // Yeşilden camgöbeğine else if (counterVal <= 767){ colorVal = counterVal - 512; kırmızıVal = 0; yeşilVal = 255; blueVal = colorVal; } // Cyan to blue else if (counterVal <= 1023){ colorVal = counterVal - 768; kırmızıVal = 0; greenVal = 255 - colorVal; maviVal = 255; } // Maviden macenta'ya başka if (counterVal <= 1279){ colorVal = counterVal - 1024; redVal = colorVal; yeşilVal = 0; maviVal = 255; } // Macenta'dan kırmızıya başka{ colorVal = counterVal - 1280; kırmızıVal = 255; yeşilVal = 0; blueVal = 255 - colorVal; } redVal, greenVal, blueVal döndür; }