İçindekiler:

El işi Arduino ile güçlendirilmiş RGB Moodlamp: 7 Adım
El işi Arduino ile güçlendirilmiş RGB Moodlamp: 7 Adım

Video: El işi Arduino ile güçlendirilmiş RGB Moodlamp: 7 Adım

Video: El işi Arduino ile güçlendirilmiş RGB Moodlamp: 7 Adım
Video: Kendini tornaci sanan mal 2024, Aralık
Anonim
El yapımı Arduino destekli RGB Moodlamp
El yapımı Arduino destekli RGB Moodlamp
El yapımı Arduino destekli RGB Moodlamp
El yapımı Arduino destekli RGB Moodlamp

Bu talimat 5 bölüme ayrılmıştır: - Yapının planlanması (Adım 1) - El yapımı gölge (Adım 2+3) - ATmega8 denetleyicisi ile 3W LED'leri sürmek için elektronik devre (Adım 4) - Kod (Adım 5) - Nasıl elde edilir bağımsız (Arduino önyükleyicisini PonyProg ile flaşlayın ve çizimi yakın) (Adım6) çok yakında Vid: Bazı İzlenimler

de.youtube.com/watch?v=apZ9NpaUG84 Pic1: Moodlamp Pic2: Güçlü bir 3W LED

Adım 1: İnşaatın Planlanması:

İnşaatın Planlanması
İnşaatın Planlanması
İnşaatın Planlanması
İnşaatın Planlanması

Sadece bir yaprak kağıda bir konsept yapmayı seviyorum. İlk sayfada bazı erken fikirler görüyorsunuz. Sağ alt tasarımı seçtim. İkinci sayfada inşaat için bazı detaylar gösteriliyor. Ölçümler her seferinde olduğu gibi deneysel ama benim için sorun değil;-)Donanım düşüncelerim şunlardı:- Malzemeleri işleyebilir miyim?- Işık parlayacak mı? - Basit bir arayüz için kaç tane düğme ve pota ihtiyacım olacak? Yazılım düşüncelerim: Lambanın kaç farklı işlevi olmalı? - Değişken hızda otomatik RGB sönümleme - Manuel renk ayarı - Ayarlanabilir parlaklığa sahip beyaz

Adım 2: El Yapımı Gölge

El Yapımı Gölge
El Yapımı Gölge
El Yapımı Gölge
El Yapımı Gölge
El Yapımı Gölge
El Yapımı Gölge

Malzemelerin toplanması: Gölge: Mağazada 3 fit x 3 fit boyutunda 30 mill plastik levha buldum (Resim 1-3). Kesmek için keskin bir bıçak kullanın. Plastiği zımpara kağıdı ile buzladım (Resim 4-6). düzgün bir silindir elde edin Doğru delikleri açtıktan sonra hepsini vidaladım (Resim7-8). Plastik gölgelikleri dişli pirinç desteklere monte edin. Güzel görünüyor ve alması ve tutması oldukça kolay. 1/8'lik dişli çubuğa (Pic9-10) uyacak şekilde delikler açtım ve vidaladım. Bu arada, 3W LED'leri soğutmak ve sağlam bir tabana sahip olmak için bir soğutucu yaptım.. Milden çok fazla gölge almamak için kaynak çubuğundan üstüne M8 somunlu küçük bir kafes yapıyorum (Resim12). Son olarak hepsini bir araya topladım. Küçük vidalar ve somunlar biraz zordu ama 30 dakika sonra işi hallettim.

Adım 3: El Yapımı Gölge

El Yapımı Gölge
El Yapımı Gölge
El Yapımı Gölge
El Yapımı Gölge
El Yapımı Gölge
El Yapımı Gölge

Taban:Diskler torna tezgahında düzgün ve yuvarlak olması için sıkılmıştır. Sonra çamın güzel görünmesi için maun ağacı boyası ile boyadım. Sırada ne var?!?Aynısını kullanarak bir taban yapmaya karar verdim. gölgelik olarak buzlu plastik ve bir RGB microLED (Resim 5) ile arkadan aydınlatma.

Adım 4: Elektrik Devresi:

Elektrik Devresi
Elektrik Devresi
Elektrik Devresi
Elektrik Devresi
Elektrik Devresi
Elektrik Devresi

İlk resimde benim şemamı görüyorsunuz. Ve işte başka bir video:https://de.youtube.com/watch?v=xkiYzQAYf_A&NR=1

Adım 5: Kod:

Kod
Kod
Kod
Kod
Kod
Kod

Resimlerde Arduino ile sürecimi görüyorsunuz. İlk önce kendi yaptığım ProtoShield, bir pil takımı ve bazı LED'ler ile denedim. Birkaç ay önce TodEKurt'un "Spooky Projects" ve "BionicArduino" ile başladım.https://todbot.com/blog/spookyarduino/My code is "RGBMoodlight", "RGBPotMixer"ve bazı uzantıların karmaşık bir kombinasyonu. Mod anahtarı olarak üç analog giriş ve bir dijital giriş (kesme rutini için Ju'ya teşekkürler:). LED'ler bağlı PulseWithModulation'ı destekleyen D9, D10 ve D11'e. İsterseniz, taslağı yayınlayabilirim, ancak bu iki harika kodun gerçekten çıplak bir kombinasyonu. İşte lambanın orijinal kodum. Biraz dağınık görünüyor, çünkü benim programlamada çok erken aşama…Ama kopyalarsanız, harika çalışmalı. "PotColorMixer", "RGBfadingFunction" ve mod anahtarı için Interrupt-Routine gibi ince ayarlar var./* nejo Haziran2008

Clay Shirky'nin "dimmingLED'lerine" dayalı "Moodlamp" kodum

*nejo Eylül2008

  • Kesinti modu anahtarlı, RGB solma ve RGB renk değişimi için analog hızlı aramalı moodlamp için son kod.
  • Karartma işlevi yalnızca beyaz renk için çalışır

*nejo Ekim2008

  • Moodlamp için ses uzantısı:
  • Küçük bir LM368 Amper, bir doğrultucu ve bir RC-düşük geçiş filtresine sahip bir kondansatör mikrofon
  • başka bir analogInput ile mikrofon sinyalini alarak rengi değiştirmek için RGBPotMixer işlevini kullanıyorum.

* * *PWM kullanarak kırmızı, yeşil ve mavi olmak üzere 3 LED'i veya bir üç renkli LED'i çapraz sönümleme kodu

  • Program yavaş yavaş kırmızıdan yeşile, yeşilden maviye ve maviden kırmızıya geçer.
  • Hata ayıklama kodu, yeni Serial.begin() tarzı işlevleri kullandığı için Arduino 0004'ü varsayar.
  • orijinal olarak Clay Shirky tarafından "dimmingLED'ler"

*

  • RGB solma hızını değiştirmek için Pin A0'da AnalogRead etkinleştirildi
  • HueRGB rengini değiştirmek için Pin A2'de AnalogRead etkinleştirildi

* * */#include // Outputint ledPin = 13; // hata ayıklama için controlPinint redPin = 9; // Kırmızı LED, dijital pin 9int'e bağlı greenPin = 10; // Yeşil LED, dijital pime bağlı 10int bluePin = 11; // Mavi LED, dijital pine bağlı 11int dimredPin = 3; // Transistöre bağlı analog karartma değeri için pinler driverint dimgreenPin = 5;int dimbluePin = 6;// Inputint switchPin = 2; // switch pine bağlı D2int val = 0; // pin durumunu okumak için değişken statusint buttonState; // butonu tutacak değişken stateint buttonPress = 0; // gitmek için 3 basış!int potPin0 = 0; // Moodlamp'ta solma arasındaki gecikmeyi ayarlamak için pot; int potPin2 = 2; // hueRGB'yi değiştirmek için potansiyometre çıkışı colorint potVal = 0; // potansiyometreden gelen girişi depolamak için değişken int maxVal = 0; // dimPin = 4; //Parlaklığı kısmak için A4'e bağlanan kap// Program değişkenleriint redVal = 255; // Pinsint'e gönderilecek değerleri saklayacak değişkenler greenVal = 1; // Başlangıç değerleri Red full, Green ve Blue offint blueVal = 1;int i = 0; // Döngü sayacı int bekle;// = 15; // 50ms (.05 saniye) gecikme; daha hızlı soldurma için kısaltın k = 0; // yanıp sönme işlevindeki kontrol LED'i için değer DEBUG = 0; // DEBUG sayacı; 1 olarak ayarlanırsa, serialint LCD = 0 aracılığıyla değerleri geri yazacaktır; // LCD sayaç; 1 olarak ayarlanırsa, serialvoid setup(){ pinMode(ledPin, OUTPUT); aracılığıyla değerleri geri yazacaktır; pinMode(redPin, OUTPUT); // pinleri çıkış pinMode olarak ayarlar(greenPin, OUTPUT); pinMode(bluePin, ÇIKIŞ); pinMode(dimredPin, OUTPUT); pinMode(dimgreenPin, OUTPUT); // pinleri çıkış pinMode olarak ayarlar(dimbluePin, OUTPUT); pinMode(potPin2, INPUT); // pinMode(potPin0, INPUT); // pinMode(dimPin, INPUT); // pinMode(switchPin, INPUT); // Anahtar pinini ekInterrupt(0, isr0, RISING) girişi olarak ayarlayın; if (DEBUG) { // Hata ayıklama için pin değerlerini görmek istiyorsak… Serial.begin(9600); // …seri çıkışı 0004 stilinde ayarlayın }}// Ana programvoid loop(){ if (buttonPresses == 0) { Moodlamp(); // Moodlight işlevini çağırır } if (buttonPresses == 1) { RGBPotMixer(); // manuel karıştırma fonksiyonunu çağırır } if (buttonPresses == 2) { White(); // Burada her şey beyaz } if (buttonPresses == 3) { } //Moodlamp(); //RGBPotMixer(); //Beyaz(); Monitör(); dim();}void Monitor(){ // Monitöre Durum Gönder if (DEBUG) { // Çıktıyı okumak istiyorsak DEBUG += 1; // DEBUG sayacını artır if (DEBUG > 10) { // Her 10 döngüde bir yazdır DEBUG = 1; // Sayacı sıfırla Serial.print(i); // 0004 stilinde Seri komutlar Serial.print("\t"); // Bir sekme yazdır Serial.print("R:"); // Çıktının kırmızı değer olduğunu belirtin Serial.print(redVal); // Kırmızı değeri yazdır Serial.print("\t"); // Bir sekme yazdır Serial.print("G:"); // Yeşil ve mavi için tekrarlayın… Serial.print(greenVal); Seri.print("\t"); Serial.print("B:"); Serial.print(blueVal); // println, satır başı ile bitecek Serial.print("\t"); Serial.print("dimValue:"); Serial.print(maxVal); // println, satır başı ile bitecek Serial.print("\t"); Serial.print("bekleyin:"); Serial.print(bekle); // potPin0 değerini monitöre yazar Serial.print("\t"); Serial.print("hueRGBdeğeri"); Serial.print(potVal); // potPin0 değerini monitöre yazar Serial.print("\t"); Serial.print("buttonState:"); Serial.print(buttonState); // potPin0 değerini monitöre yazar Serial.print("\t"); Serial.print("buttonPress:"); Serial.println(buttonPress); // butonun değerini monitöre yazar } }} void dim() // Beyazı kısma işlevi // belki daha sonra tüm Modlar için{ maxVal = analogRead(dimPin); maxVal /= 4; // 0..1024 analog aralığı, 0..255 değerini kısmak için çok fazla analogWrite(dimredPin, maxVal); analogWrite(dimgreenPin, maxVal); analogWrite(dimbluePin, maxVal);}void Moodlamp(){ bekle = analogRead(potPin0); // potPin0'daki değeri arayın; // Pot bağlı değilse: bekle 255 i += 1; // Sayacı artır // i = i - maxVal; if (i < 255) // Fadelerin ilk aşaması { redVal -= 1; // Kırmızı aşağı yeşilVal += 1; // yeşil maviVal = 1; // Blue low } else if (i < 509) // Kararmanın ikinci aşaması { redVal = 1; // Kırmızı düşük yeşilVal -= 1; // Yeşil aşağı maviVal += 1; // Blue up } else if (i < 763) // Fazın üçüncü aşaması { redVal += 1; // yeşili kırmızıya çevirVal = 1; // Yeşil lo2 maviVal -= 1; // Mavi aşağı } başka // Sayacı yeniden ayarlayın ve soldurmayı yeniden başlatın { i = 1; } // sadece "redVal" yerine "255-redVal" yaparız çünkü // LED'ler Gnd analogWrite yerine +5V'a bağlanır(redPin, 255 - redVal); // Akım değerlerini LED pinlerine yazın analogWrite(greenPin, 255 - greenVal); analogWrite(bluePin, 255 - blueVal); /* dimredVal =min(kırmızıVal - maxVal, 255); //karartma dimredVal =max(redVal - maxVal, 0); dimgreenVal =min(greenVal - maxVal, 255); dimgreenVal =max(greenVal - maxVal, 0); dimblueVal =min(blueVal - maxVal, 255); dimblueVal =max(blueVal - maxVal, 0); analogWrite(redPin, 255 - dimredVal); // Akım değerlerini LED pinlerine yazın analogWrite(greenPin, 255 - dimgreenVal); analogWrite(bluePin, 255 - dimblueVal); */ bekle /=4; gecikme(bekle); // Döngüyü devam ettirmeden önce milisaniye 'bekle' için duraklat}void RGBPotMixer(){ potVal = analogRead(potPin2); // giriş pinindeki potansiyometre değerini okuyun potVal = potVal / 4; // 0-1023'ten 0-255'e dönüştür hue_to_rgb(potVal); // potVal'ı renk tonu olarak ele alın ve rgb değerlerine dönüştürün // "255-", ortak katot LED'lerine sahip olmamızdan dolayı ortak katot analogWrite(redPin, 255-redVal); // LED pinlerine değer yaz analogWrite(greenPin, 255-greenVal); analogWrite(bluePin, 255-blueVal); }void White(){ analogWrite(redPin, maxVal); // LED pinlerine değer yaz analogWrite(greenPin, maxVal); analogWrite(bluePin, maxVal); }/*

  • 0-252 arasında değişen bir 'h' tonu değişkeni verildiğinde,
  • RGB renk değerini uygun şekilde ayarlayın.
  • maxValimum Doygunluğu ve maksimum Değeri (parlaklık) varsayar
  • Tamamen tamsayılı matematik gerçekleştirir, kayan nokta yoktur.

*/void hue_to_rgb(byte hue) { if(hue > 252) hue = 252; // 252'ye geri dön!! nejo bayt hd = renk tonu / 42; // 36 == 252/7, 252 == H_MAX bayt yüksek = hd % 6; // 0-5 bayt verir f = renk tonu % 42; bayt fs = f * 6; switch(hi) { durum 0: redVal = 252; greenVal = fs; maviVal = 0; kırmak; durum 1: redVal = 252-fs; yeşilVal = 252; maviVal = 0; kırmak; durum 2: redVal = 0; yeşilVal = 252; blueVal = fs; kırmak; durum 3: redVal = 0; greenVal = 252-fs; maviVal = 252; kırmak; durum 4: redVal = fs; yeşilVal = 0; maviVal = 252; kırmak; durum 5: redVal = 252; yeşilVal = 0; blueVal = 252-fs; kırmak; } } void isr0(){ Serial.println("\n \n kesinti \n"); buttonState = digitalRead(switchPin); // başlangıç durumunu oku delayMicroseconds(100000); //if (val != buttonState) { // düğme durumu değişti! // if (buttonState == HIGH) { // düğmeye şimdi basılıp basılmadığını kontrol edin buttonPresses++; // } // val = düğmeDurumu; // if (buttonPresses == 3) { // zur cksetzen buttonPresses = 0; } } // }Bir sonraki aşama transistör sürücüleriydi. 3Amper'de maksimum akımla 3 PNP transistör kullandım. İleri akım ve voltaj ayarlandıktan sonra, LEDemitter tam yoğunlukta harika çalıştı.

Adım 6: PonyProg-burned Bootloader ile Bağımsız Olun

PonyProg-burned Bootloader ile Bağımsız Olun
PonyProg-burned Bootloader ile Bağımsız Olun

Arduino ortamıyla ucuz bir boş çip kullanmak için bir ATmega168 veya ATmega8'de arduino önyükleyiciyi yakmak için paralel bağlantı noktanızı nasıl kullanabilirsiniz. /www.instructables.com/id/uDuino-Very-Low-Cost-Arduino-Compatible-Developme/?ALLSTEPS

Adım 7: İşte Bu Benim Arduino Moodlamp'ım

Bu benim Arduino Moodlamp'ım
Bu benim Arduino Moodlamp'ım

Eğer beğendiyseniz, lütfen beni değerlendirin.

Önerilen: