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, Studeni
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čki krug za pokretanje LED dioda od 3 W s kontrolerom ATmega8 (Korak 4)- Kôd (Korak 5)- Kako do njega doći samostalno (flash Arduino bootloader s PonyProg-om i snimite skicu) (6. korak) uskoro Vid: Neki dojmovi

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

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 rane ideje. Odabrao sam donji desni dizajn. Druga stranica prikazuje neke pojedinosti o konstrukciji. Mjerenja su eksperimentalna kao i svaki put, ali meni je u redu;-) Moje hardverske misli su bile:- Mogu li rukovati materijalima?- Hoće li svjetlo zasjati kroz sjenu? - Koliki udio bi trebao imati? - Koliko gumba i lonaca će mi trebati za jednostavno sučelje? Mislio sam na softver: Koliko različitih funkcija žarulja treba imati? - Automatsko blijeđenje RGB -a s promjenjivom brzinom - Ručno podešavanje boje - Bijela s podesivom svjetlinom

Korak 2: Ručno izrađena sjenila

Ručno izrađena sjenila
Ručno izrađena sjenila
Ručno izrađena sjenila
Ručno izrađena sjenila
Ručno izrađena sjenila
Ručno izrađena sjenila

Prikupljanje materijala: Sjenilo: U trgovini sam pronašao list veličine 30 stopa x 30 stopa od 30 ml plastike (slika 1-3). Upotrijebite oštar nož za rezanje. Zamazao sam plastiku brusnim papirom (slika 4-6). nabavite glatki cilindar Sve sam zavrnuo nakon bušenja desnih rupa (Slika 7-8). Montirajte plastične zavjese na mjedene nosače s navojem. Lijepo izgleda i prilično ga je lako nabaviti i rukovati. Izbušio sam i lupkao rupe kako bi odgovarao 1/8 navojnoj šipki (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 uspio sam.

Korak 3: Ručno izrađena sjenila

Ručno izrađena sjenila
Ručno izrađena sjenila
Ručno izrađena sjenila
Ručno izrađena sjenila
Ručno izrađena sjenila
Ručno izrađ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 osvjetljenje s RGB microLED (Pic5). Gumbi: Gumb sam napravio od komada mahagonija, a gumbi od odrezanog oraha.

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:

Kod
Kod
Kod
Kod
Kod
Kod

Na slikama vidite moj postupak s Arduinom. Prvo sam se okuš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 škakljiva kombinacija njegovog projektnog koda. "RGBMoodlight", "RGBPotMixer" i neka proširenja. Tri analogna ulaza i. jedan digitalni ulaz kao prekidač načina rada (Hvala Ju. za rutinu prekida:). LED diode su spojene na D9, D10 i D11 koji podržavaju PulseWithModulation. Ako želite, mogu objaviti skicu, ali to je stvarno gola kombinacija ova dva sjajna koda. Evo mog izvornog koda svjetiljke. Izgleda pomalo neuredno, jer je bila moja vrlo rana faza u programiranju … Ali ako je kopirate, trebala bi odlično funkcionirati. Postoje fini dijelovi, poput "PotColorMixer", "RGBfadingFunction" i Interrupt-Routine za mode-switch./* nejo lipanj 2008

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

*nejo rujan 2008

  • Konačni kod za lampicu raspoloženja s prekidačem za način rada, analognim brzim biranjem za RGB-blijeđenje i promjenu boje RGB-a.
  • Funkcija zatamnjivanja radi samo za bijelu boju

*nejo listopada 2008

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

* * * Kôd za 3 LED svjetla s unakrsnim blijeđenjem, crvenu, zelenu i plavu ili jednu trobojnu LED, koristeći PWM

  • Program polako blijedi iz crvene u zelenu, zelenu u plavu i plavu u crvenu
  • Kod za ispravljanje 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 boje hueRGB

* * */#include // Outputint ledPin = 13; // controlPin za otklanjanje pogrešakaint 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 pin statusint buttonState; // varijabla za držanje tipke stateint buttonPresses = 0; // 3 pritiska za odlazak! Int potPin0 = 0; // Posuda za podešavanje kašnjenja između blijeđenja u Moodlampu; int potPin2 = 2; // Izlaz potenciometra za promjenu hueRGB colorint potVal = 0; // Varijabla za spremanje ulaza iz potenciometraint maxVal = 0; // vrijednost za spremanje faktora prigušivanja zadana je 255, ako nije povezan Potintint dimPin = 4; // Lonac spojen na A4 za prigušivanje svjetline // Varijable programaint redVal = 255; // Varijable za spremanje vrijednosti za slanje na pinstinu greenVal = 1; // Početne vrijednosti su crvena puna, zelena i plava offint blueVal = 1; int i = 0; // Brojač petlji int wait; // = 15; // kašnjenje 50 ms (0,05 sekundi); skratiti za brže blijeđenje k = 0; // vrijednost za controlLED u blink-functionint DEBUG = 0; // DEBUG brojač; ako je postavljeno na 1, zapisat će vrijednosti natrag putem serijskog LCD LCD = 0; // LCD brojač; ako je postavljeno na 1, vratit će vrijednosti natrag putem serialvoid setup () {pinMode (ledPin, OUTPUT); pinMode (redPin, OUTPUT); // postavlja pinove kao izlazni 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 priključakInterrupt (0, isr0, RISING); if (DEBUG) {// Ako želimo vidjeti pin vrijednosti za ispravljanje pogreš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) {Bijela (); // 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ćanje brojača DEBUG if (DEBUG> 10) {// Ispis svakih 10 petlji DEBUG = 1; // Poništite brojač 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:"); Serijski.ispis (blueVal); // println, završava s vratom nosača Serial.print ("\ t"); Serial.print ("dimValue:"); Serijski.ispis (maxVal); // println, završava s vratom nosača Serial.print ("\ t"); Serial.print ("čekaj:"); Serial.print (čekaj); // zapisuje vrijednost potPin0 na monitor Serial.print ("\ t"); Serial.print ("hueRGBvalue"); Serijski.ispis (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 gumbaPritisne 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; // Crvena niska 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 dolje} else // Ponovno postavite brojač i ponovno 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; odgoda (čekanje); // Pauza za 'čekanje' milisekundi prije nastavka petlje} void RGBPotMixer () {potVal = analogRead (potPin2); // očitavanje vrijednosti potenciometra na ulaznom pinu potVal = potVal / 4; // pretvoriti iz 0-1023 u 0-255 hue_to_rgb (potVal); // tretiramo potVal kao nijanse i pretvaramo u rgb vrijednosti // "255-" je zato što imamo LED sa zajedničkom anodom, a ne sa zajedničkom katodom analogWrite (redPin, 255-redVal); // Zapis 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,
  • odgovarajuće podesite vrijednost boje RGB.
  • Pretpostavlja maxValimum zasićenje i maksimalnu vrijednost (svjetlina)
  • Izvodi isključivo cjelobrojnu matematiku, bez pokretnog zareza.

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

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

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

Kako koristiti svoj paralell port za snimanje arduino bootloadera na ATmega168 ili ATmega8 za korištenje jeftinog praznog čipa s arduino okruženjem uskoro ….. možda i na zasebnom uputstvu Evo i dobrih uputa 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 dakle moj Arduino Moodlamp
To je dakle moj Arduino Moodlamp

Ako vam se svidjelo, ocijenite me.

Preporučeni: