Sadržaj:

Ručno izrađena RGB Moodlamp sa Arduino pogonom: 7 koraka
Ručno izrađena RGB Moodlamp sa Arduino pogonom: 7 koraka

Video: Ručno izrađena RGB Moodlamp sa Arduino pogonom: 7 koraka

Video: Ručno izrađena RGB Moodlamp sa Arduino pogonom: 7 koraka
Video: SAT SA AUTOMASKOM NOCNOM LED RASVJETOM 2024, Juli
Anonim
Ručno izrađena RGB Moodlamp sa Arduino pogonom
Ručno izrađena RGB Moodlamp sa Arduino pogonom
Ručno izrađena RGB Moodlamp sa Arduino pogonom
Ručno izrađena RGB Moodlamp sa Arduino pogonom

Ova instrukcija je podijeljena na 5 dijelova:- Planiranje izgradnje (Korak 1)- Ručno izrađena sjenila (Korak 2+3)- Elektroničko kolo za pogon LED 3W sa ATmega8 kontrolerom (Korak 4)- Kôd (Korak 5)- Kako do njega doći samostalno (flash Arduino bootloader s PonyProg-om i narežite skicu) (korak 6) uskoro dolazi Vid: Neki utisci

de.youtube.com/watch?v=apZ9NpaUG84 Pic1: Moodlamp Pic2: Moćna LED od 3W

Korak 1: Planiranje izgradnje:

Planiranje izgradnje
Planiranje izgradnje
Planiranje izgradnje
Planiranje izgradnje

Volim raditi koncept na samo jednom listu papira. Na prvom listu vidite neke prve ideje. Odabrao sam donji desni dizajn. Druga stranica prikazuje neke detalje o konstrukciji. Mjerenja su eksperimentalna kao i svaki put, ali za mene su u redu;-) Moje hardverske misli su bile:- Mogu li rukovati materijalima?- Hoće li svjetlo zasjati kroz zavjesu? - Koliki omjer bi trebao imati? - Koliko gumba i lonaca će mi trebati za jednostavno sučelje? Moje softverske misli su bile: Koliko različitih funkcija bi lampa trebala imati? - Automatsko blijeđenje RGB -a s promjenjivom brzinom - Ručno podešavanje boje - Bijela s podesivom svjetlinom

Korak 2: Ručno rađena sjenila

Ručno rađena sjenila
Ručno rađena sjenila
Ručno rađena sjenila
Ručno rađena sjenila
Ručno rađena sjenila
Ručno rađena sjenila

Prikupljanje materijala: Nijansa: Našao sam list od 30 stopa x 30 stopa od 30-milimetarske plastike u trgovini (slika 1-3). Upotrijebite oštar nož da ga isječete. Zaledila sam plastiku brusnim papirom (slika 4-6). nabavite glatki cilindar Sve sam zašrafio nakon bušenja odgovarajućih rupa (Slika 7-8). Montirajte plastične zavjese na mesingane nosače s navojem. Izgleda lijepo i prilično ga je lako nabaviti i rukovati. Izbušio sam i lupkao rupe kako bi odgovarao 1/8 navojnoj šipci (Pic9-10). U međuvremenu sam napravio hladnjak za hlađenje LED dioda od 3 W i za čvrstu podlogu. Da ne dobijem previše sjenila od vratila, sagradio sam mali kavez od šipke za zavarivanje s M8 maticom na vrhu (Pic12). Po završetku sam sve sastavio. Mali vijci i matice bili su malo zeznuti, ali 30 minuta kasnije sam to uspio.

Korak 3: Ručno rađena sjenila

Ručno rađena sjenila
Ručno rađena sjenila
Ručno rađena sjenila
Ručno rađena sjenila
Ručno rađena sjenila
Ručno rađena sjenila

Baza: Diskovi su ubačeni u tokarski stroj kako bi bili glatki i okrugli. Nakon toga sam ga obojao mrljom od drva mahagonija kako bi bor dobro izgledao. Što je sljedeće?!? Odlučio sam napraviti podlogu koristeći istu matirana plastika kao nijansa i pozadinsko osvetljenje sa RGB microLED (Pic5). Dugmad: Dugme sam napravio od komada mahagonija, a dugmad od izreza orahovog drveta.

Korak 4: Električni krug:

Električni krug
Električni krug
Električni krug
Električni krug
Električni krug
Električni krug

Na prvoj slici vidite moju shemu. I evo još jednog videa: https://de.youtube.com/watch? V = xkiYzQAYf_A & NR = 1

Korak 5: Kôd:

Kodeks
Kodeks
Kod
Kod
Kod
Kod

Na slikama vidite moj postupak s Arduinom. Prvo sam pokušao sa vlastitim ProtoShieldom, baterijom i nekim vrstama LED -a. Počeo sam sa "Spooky Projects" i "BionicArduino" od TodEKurta prije nekoliko mjeseci. Https://todbot.com/blog/spookyarduino/Moj kod je samo zeznuta kombinacija njegovog projektnog koda. "RGBMoodlight", "RGBPotMixer" i neke ekstenzije. Tri analogna ulaza i. jedan digitalni ulaz kao prekidač načina rada (Hvala Ju. za rutinu prekida:). LED diode su povezane na D9, D10 i D11 koji podržavaju PulseWithModulation. Ako želite, mogu objaviti skicu, ali to je zaista gola kombinacija ova dva sjajna koda. Evo mog izvornog koda lampe. Izgleda malo neuredno, jer je to bio moj vrlo rana faza programiranja … Ali ako je kopirate, trebalo bi odlično funkcionirati. Postoje fini dijelovi, poput "PotColorMixer", "RGBfadingFunction" i Interrupt-Routine za mode-switch./* nejo jun 2008

Kôd za moju "Moodlamp", zasnovan na "dimmingLEDs" Claya Shirkyja

*nejo septembar 2008

  • Konačni kod za lampu raspoloženja sa prekidačem za prekid režima rada, analognim brzim biranjem za RGB-blijeđenje i promjenu boje RGB-a.
  • Funkcija zatamnjivanja radi samo za bijelu boju

*nejo oktobar 2008

  • Proširenje zvuka za moodlamp:
  • Kondenzatorski mikrofon sa malim LM368 pojačalom, prijemnikom i RC-niskopropusnim filterom
  • s drugim analognim ulazom koristim funkciju RGBPotMixer za promjenu boje dobivanjem mikrofona.

* * * Kôd za 3 LED-a s uzastopnim blijeđenjem, crvenom, zelenom i plavom ili jednom trobojnom LED, koristeći PWM

  • Program polako blijedi iz crvene u zelenu, zelenu u plavu i plavu u crvenu
  • Kod za otklanjanje pogrešaka pretpostavlja Arduino 0004 jer koristi nove funkcije u stilu Serial.begin ()
  • izvorno "dimmingLEDs" Claya Shirkyja

*

  • AnalogRead je omogućen na Pin A0 za promjenu brzine blijeđenja RGB -a
  • AnalogRead je omogućen na Pin A2 za promjenu hueRGB boje

* * */#include // Outputint ledPin = 13; // controlPin za ispravljanje pogrešaka redPin = 9; // Crvena LED, spojena na digitalni pin 9int greenPin = 10; // Zelena LED dioda, spojena na digitalni pin 10int bluePin = 11; // Plava LED dioda, spojena na digitalni pin 11int dimredPin = 3; // Igle za analognu vrijednost zatamnjenja, spojene na upravljački dio tranzistora dimgreenPin = 5; int dimbluePin = 6; // Ulazni prekidačPin = 2; // prekidač je spojen na pin D2int val = 0; // varijabla za čitanje pina statusint buttonState; // varijabla za držanje dugmeta stateint buttonPresses = 0; // 3 pritiska za pokretanje! Int potPin0 = 0; // Pot za podešavanje kašnjenja između blijeđenja u Moodlamp -u; int potPin2 = 2; // Izlaz potenciometra za promjenu hueRGB colorint potVal = 0; // Varijabla za spremanje ulaza iz potenciometraint maxVal = 0; // vrijednost za spremanje faktora zatamnjivanja je 255, ako nije povezan Potintint dimPin = 4; // Lonac spojen na A4 da priguši svjetlinu // Promenljive programaint redVal = 255; // Varijable za spremanje vrijednosti za slanje na pinsint greenVal = 1; // Početne vrijednosti su crvena puna, zelena i plava offint blueVal = 1; int i = 0; // Brojač petlji int wait; // = 15; // 50ms (.05 sekundi) kašnjenje; skratiti za brži fadesint k = 0; // vrijednost za controlLED u blink-functionint DEBUG = 0; // DEBUG brojač; ako je postavljeno na 1, upisat će vrijednosti nazad putem serijskog LCD LCD = 0; // LCD brojač; ako je postavljeno na 1, upisat će vrijednosti nazad putem serialvoid setup () {pinMode (ledPin, OUTPUT); pinMode (redPin, OUTPUT); // postavlja pinove kao izlaz pinMode (greenPin, OUTPUT); pinMode (bluePin, OUTPUT); pinMode (dimredPin, OUTPUT); pinMode (dimgreenPin, OUTPUT); // postavlja pinove kao izlazni pinMode (dimbluePin, OUTPUT); pinMode (potPin2, INPUT); // pinMode (potPin0, INPUT); // pinMode (dimPin, INPUT); // pinMode (switchPin, INPUT); // Postavi prekidač kao ulazni attachInterrupt (0, isr0, RISING); if (DEBUG) {// Ako želimo vidjeti pin vrijednosti za otklanjanje grešaka … Serial.begin (9600); //… postavljanje serijskog izlaza u stilu 0004}} // Glavna petlja programavoid () {if (buttonPresses == 0) {Moodlamp (); // poziva funkciju Moodlight} if (buttonPresses == 1) {RGBPotMixer (); // poziva manuel mix funkciju} if (buttonPresses == 2) {White (); // Ovdje je sve bijelo} if (buttonPresses == 3) {} // Moodlamp (); // RGBPotMixer (); // Bijelo (); Monitor (); dim ();} void Monitor () {// Pošalji stanje monitoru ako (DEBUG) {// Ako želimo pročitati izlaz DEBUG += 1; // Povećava DEBUG brojač if (DEBUG> 10) {// Štampa svakih 10 petlji DEBUG = 1; // Resetiranje brojača Serial.print (i); // Serijske naredbe u stilu 0004 Serial.print ("\ t"); // Ispis kartice Serial.print ("R:"); // Pokazuje da je izlaz crvena vrijednost Serial.print (redVal); // Ispis crvene vrijednosti Serial.print ("\ t"); // Ispis kartice Serial.print ("G:"); // Ponovite za zeleno i plavo … Serial.print (greenVal); Serial.print ("\ t"); Serial.print ("B:"); Serial.print (blueVal); // println, da završi sa vraćanjem nosača Serial.print ("\ t"); Serial.print ("dimValue:"); Serial.print (maxVal); // println, da završi sa vraćanjem nosača Serial.print ("\ t"); Serial.print ("wait:"); Serial.print (čekanje); // zapisuje vrijednost potPin0 na monitor Serial.print ("\ t"); Serial.print ("hueRGBvalue"); Serial.print (potVal); // zapisuje vrijednost potPin0 na monitor Serial.print ("\ t"); Serial.print ("buttonState:"); Serial.print (buttonState); // zapisuje vrijednost potPin0 na monitor Serial.print ("\ t"); Serial.print ("buttonPresses:"); Serial.println (buttonPresses); // zapisuje vrijednost tipkePritisne na monitor}}} void dim () // Funkcija zatamnjivanja bijele // možda kasnije za sve načine {maxVal = analogRead (dimPin); maxVal /= 4; // Analogni raspon od 0..1024 previše za zatamnjenje vrijednosti 0..255 analogWrite (dimredPin, maxVal); analogWrite (dimgreenPin, maxVal); analogWrite (dimbluePin, maxVal);} void Moodlamp () {wait = analogRead (potPin0); // tražimo vrijednost iz potPin0; // ako nije povezan Pot: pričekajte 255 i += 1; // Brojač povećanja // i = i - maxVal; if (i <255) // Prva faza blijeđenja {redVal -= 1; // Crveno prema dolje greenVal += 1; // Zeleno gore blueVal = 1; // Plavo nisko} else if (i <509) // Druga faza blijeđenja {redVal = 1; // Crveno nisko greenVal -= 1; // Zeleno prema dolje blueVal += 1; // Plavo gore} else if (i <763) // Treća faza blijeđenja {redVal += 1; // Crveno gore greenVal = 1; // Zeleni lo2 blueVal -= 1; // Plavo prema dolje} else // Ponovno postavite brojač i ponovo pokrenite blijeđenje {i = 1; } // radimo "255 -redVal" umjesto samo "redVal" jer su // LED diode spojene na +5V umjesto Gnd analogWrite (redPin, 255 - redVal); // Zapis trenutnih vrijednosti na LED pinove analogWrite (greenPin, 255 - greenVal); analogWrite (bluePin, 255 - blueVal); /* dimredVal = min (redVal - maxVal, 255); // zatamnjivanje 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); // Zapis trenutnih vrijednosti na LED pinove analogWrite (greenPin, 255 - dimgreenVal); analogWrite (bluePin, 255 - dimblueVal); * / čekaj / = 4; kašnjenje (čekanje); // Pauziranje na 'čekanje' milisekundi prije nastavka petlje} void RGBPotMixer () {potVal = analogRead (potPin2); // očitavanje vrijednosti potenciometra na ulaznom pinu potVal = potVal / 4; // pretvara iz 0-1023 u 0-255 hue_to_rgb (potVal); // tretiramo potVal kao nijanse i pretvaramo u rgb vals // "255-" je zato što imamo LED sa zajedničkom anodom, a ne sa zajedničkom katodom analogWrite (redPin, 255-redVal); // Zapisivanje vrijednosti na LED pinove analogWrite (greenPin, 255-greenVal); analogWrite (bluePin, 255-blueVal); } void White () {analogWrite (redPin, maxVal); // Zapisivanje vrijednosti na LED pinove analogWrite (greenPin, maxVal); analogWrite (bluePin, maxVal); }/*

  • S obzirom na promjenjivu nijansu 'h', koja se kreće od 0-252,
  • pravilno podesite vrednost boje RGB.
  • Pretpostavlja maxValimum zasićenje i maksimalnu vrijednost (svjetlina)
  • Izvodi matematiku sa cijelim brojevima, bez pokretnog zareza.

*/void hue_to_rgb (byte hue) {if (hue> 252) hue = 252; // povratak na 252 !! nejo bajt hd = hue / 42; // 36 == 252/7, 252 == H_MAX bajt hi = hd % 6; // daje 0-5 bajta f = nijansa % 42; bajt fs = f * 6; switch (hi) {case 0: redVal = 252; greenVal = fs; blueVal = 0; break; slučaj 1: redVal = 252-fs; greenVal = 252; blueVal = 0; break; slučaj 2: redVal = 0; greenVal = 252; blueVal = fs; break; slučaj 3: redVal = 0; greenVal = 252-fs; blueVal = 252; break; slučaj 4: redVal = fs; greenVal = 0; blueVal = 252; break; slučaj 5: redVal = 252; greenVal = 0; blueVal = 252-fs; break; }} void isr0 () {Serial.println ("\ n / n inerrupt / n"); buttonState = digitalRead (switchPin); // čita početno stanje delayMicroseconds (100000); // if (val! = buttonState) {// stanje dugmeta se promijenilo! // if (buttonState == HIGH) {// provjerite je li dugme sada pritisnuto buttonPresses ++; //} // val = buttonState; // spremamo novo stanje u našu varijablu if (buttonPresses == 3) {// zur cksetzen buttonPresses = 0; }} //} Sljedeća faza su bili upravljački programi tranzistora. Koristio sam 3 PNP tranzistora s maksimalnom strujom na 3 Ampera. Nakon što su regulirani struja i napon, LEDemiter je odlično radio punim intenzitetom.

Korak 6: Nabavite ga samostalno s PonyProg-ovim pokretačkim pokretačem

Nabavite ga samostalno s PonyProg-ovim pokretačkim programom
Nabavite ga samostalno s PonyProg-ovim pokretačkim programom

Kako koristiti svoj paralell port za snimanje arduino bootloadera na ATmega168 ili ATmega8 za korištenje jeftinog praznog čipa sa arduino okruženjem. Uskoro ….. možda na zasebnom uputstvu Evo i dobrog uputstva za korištenje čipa samostalno: https:/ /www.instructables.com/id/uDuino-Very-Low-Cost-Arduino-Compatible-Developme/?ALLSTEPS

Korak 7: Dakle, to je moj Arduino Moodlamp

To je moj Arduino Moodlamp
To je moj Arduino Moodlamp

Ako vam se svidelo, ocenite me.

Preporučuje se: