Kazalo:

Ročno izdelana svetilka RGB z arduino pogonom: 7 korakov
Ročno izdelana svetilka RGB z arduino pogonom: 7 korakov

Video: Ročno izdelana svetilka RGB z arduino pogonom: 7 korakov

Video: Ročno izdelana svetilka RGB z arduino pogonom: 7 korakov
Video: Lesson 98: Arduino 10 LED Push button Projects, Potentiometer LED Voltmeter and Traffic Light 2024, Julij
Anonim
Ročno izdelana svetilka RGB z arduinskim pogonom
Ročno izdelana svetilka RGB z arduinskim pogonom
Ročno izdelana svetilka RGB z arduinskim pogonom
Ročno izdelana svetilka RGB z arduinskim pogonom

Ta navodila so razdeljena na 5 delov:- Načrtovanje gradnje (1. korak)- Ročno izdelano senčilo (2. korak+3)- Elektronsko vezje za poganjanje 3-W LED s krmilnikom ATmega8 (4. korak)- Koda (5. korak)- Kako do tega samostojen (bliskovni nalagalnik Arduino utripajte s PonyProg in zažgite skico) (6. korak) kmalu Vid: Nekaj vtisov

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

1. korak: Načrtovanje gradnje:

Načrtovanje gradnje
Načrtovanje gradnje
Načrtovanje gradnje
Načrtovanje gradnje

Rad naredim koncept na enem listu papirja. Na prvem listu vidite nekaj zgodnjih idej. Izbral sem spodnji desni dizajn. Na drugi strani so prikazane nekatere podrobnosti o konstrukciji. Meritve so eksperimentalne, kot vsakič, vendar zame v redu;-) Moje misli o strojni opremi so bile:- Ali lahko ravnam z materiali?- Ali bo svetloba zasijala? skozi senco? - Kakšen delež mora imeti? - Koliko gumbov in loncev bom potreboval za preprost vmesnik? Moje programske misli so bile: Koliko različnih funkcij bi morala imeti svetilka? - Samodejno bledenje RGB s spremenljivo hitrostjo - Ročna nastavitev barve - Bela z nastavljivo svetlostjo

Korak: Ročno izdelan senčnik

Ročno izdelan senčnik
Ročno izdelan senčnik
Ročno izdelan senčnik
Ročno izdelan senčnik
Ročno izdelan senčnik
Ročno izdelan senčnik

Zbiranje materialov: Odtenek: V trgovini sem našel list velikosti 30 čevljev x 30 čevljev iz 30-milimetrske plastike (Pic1-3). Za rezanje uporabite oster nož. Plastiko sem zmrznil z brusnim papirjem (Pic4-6). dobite gladek valj Vse sem privil, potem ko sem izvrtal desne luknje (Pic7-8). Namestite plastične senčnike na navojne medeninaste nosilce. Lepo izgleda in ga je enostavno dobiti in z njim ročati. Izvrtal sem in udaril luknje, da se ujemajo z 1/8 navojno palico (Pic9-10). Medtem sem naredil hladilnik, da ohladim 3W LED in imam trdno podlago. Da ne dobim preveč odtenkov iz gredi, iz varilne palice zgradim malo kletko z matico M8 na vrhu (Pic12). Mali vijaki in matice so bili malo zapleteni, vendar sem 30 minut kasneje to naredil.

Korak: Ročno izdelan senčnik

Ročno izdelan senčnik
Ročno izdelan senčnik
Ročno izdelan senčnik
Ročno izdelan senčnik
Ročno izdelan senčnik
Ročno izdelan senčnik

Osnova: Plošče so bile v stružnici, da so bile gladke in okrogle. Nato sem jo obarval z madežem iz lesa iz mahagonija, da bo bor dobro izgledal. Kaj je potem?!? matirano plastiko kot senčilo in jo osvetlite z RGB microLED (Pic5). Ročaji: gumb sem naredil iz kosa mahagonija, gumbe pa iz odrezanega orehovega lesa.

4. korak: Električno vezje:

Električni tokokrog
Električni tokokrog
Električni tokokrog
Električni tokokrog
Električni tokokrog
Električni tokokrog

Na prvi sliki vidite mojo shemo. Tu je še video: https://de.youtube.com/watch? V = xkiYzQAYf_A & NR = 1

5. korak: Koda:

Koda
Koda
Koda
Koda
Koda
Koda

Na slikah vidite moj postopek z Arduinom. Najprej sem se preizkusil z lastnim protoShieldom, baterijo in nekaterimi LED diodami. Pred nekaj meseci sem začel s "Spooky Projects" in "BionicArduino", ki jih je ustvaril TodEKurt. Https://todbot.com/blog/spookyarduino/Moja koda je samo zapletena kombinacija njegove projektne kode. "RGBMoodlight", "RGBPotMixer" in nekaj razširitev. Tri analogna vhoda in. en digitalni vhod kot stikalo za način (Hvala Ju. za rutino prekinitev:). LED so povezane na D9, D10 in D11, ki podpirajo PulseWithModulation. Če želite, lahko skico objavim, vendar je to res gola kombinacija teh dveh odličnih kod. Tukaj je moja prvotna koda svetilke. Izgleda nekoliko neurejeno, ker je bila moja zelo zgodnja faza programiranja … Če pa jo kopiraš, bi morala delovati odlično. Obstajajo lepi parametri, kot so "PotColorMixer", "RGBfadingFunction" in rutina prekinitve za način-switch./* nejo junij 2008

Koda za mojo "Moodlamp", ki temelji na "dimmingLEDs" Claya Shirkyja

*nejo september 2008

  • Končna koda za svetilko razpoloženja s stikalom za prekinitveni način, analognim hitrim izbiranjem za izginjanje RGB in spreminjanje barve RGB.
  • Funkcija zatemnitve deluje samo za belo barvo

*nejo oktober 2008

  • Zvočna razširitev za svetilko razpoloženja:
  • Kondenzatorski mikrofon z drobnim ojačevalnikom LM368, sprejemnikom in nizkoprepustnim filtrom RC
  • z drugim analognim vhodom uporabljam funkcijo RGBPotMixer, da spremenim barvo tako, da dobim mikrofonski signal.

* * * Koda za navzkrižno bledenje 3 LED, rdeče, zelene in modre ali ene tribarvne LED z uporabo PWM

  • Program počasi zbledi iz rdeče v zeleno, zeleno v modro in modro v rdečo
  • Koda za odpravljanje napak prevzame Arduino 0004, saj uporablja nove funkcije sloga Serial.begin ()
  • prvotno "dimmingLEDs" Claya Shirkyja

*

  • AnalogRead je omogočen na Pin A0 za spreminjanje hitrosti bledenja RGB
  • AnalogRead je omogočen na Pin A2 za spreminjanje barve hueRGB

* * */#include // Outputint ledPin = 13; // controlPin za odpravljanje napakint redPin = 9; // Rdeča LED, povezana z digitalnim zatičem 9int greenPin = 10; // zelena LED, povezana z digitalnim zatičem 10int bluePin = 11; // Modra LED, povezana z digitalnim zatičem 11int dimredPin = 3; // Nožice za analogno vrednost zatemnitve, povezane z gonilnikom tranzistorja dimgreenPin = 5; int dimbluePin = 6; // Vhodno stikaloPin = 2; // stikalo je priključeno na pin D2int val = 0; // spremenljivka za branje pinint statusint buttonState; // spremenljivka za držanje gumba stateint buttonPresses = 0; // 3 pritiski, da gremo! Int potPin0 = 0; // lonec za prilagajanje zakasnitve med bledenjem v Moodlampu; int potPin2 = 2; // Izhod potenciometra za spreminjanje barvnega odtenka hueRGB potVal = 0; // spremenljivka za shranjevanje vnosa iz potenciometraint maxVal = 0; // vrednost za shranjevanje faktorja zatemnitve privzeto je 255, če ni priključen lonecint dimPin = 4; // Lonec, priključen na A4 za zmanjšanje svetlosti // Spremenljivke programaint redVal = 255; // spremenljivke za shranjevanje vrednosti za pošiljanje pinsintu greenVal = 1; // Začetne vrednosti so rdeča polna, zelena in modra offint blueVal = 1; int i = 0; // števec zank int wait; // = 15; // 50ms (0,05 sekunde) zamuda; skrajšati za hitrejši zbledelost k = 0; // vrednost za controlLED v utripajoči funkciji DEBUG = 0; // števec DEBUG; če je nastavljeno na 1, bodo vrednosti zapisane nazaj preko serijskega LCD -prikazovalnika = 0; // LCD števec; če je nastavljeno na 1, bo vrednosti zapisalo nazaj prek serialvoid setup () {pinMode (ledPin, OUTPUT); pinMode (redPin, OUTPUT); // nastavi nožice kot izhodni pinMode (greenPin, OUTPUT); pinMode (bluePin, OUTPUT); pinMode (dimredPin, OUTPUT); pinMode (dimgreenPin, OUTPUT); // nastavi nožice kot izhodni pinMode (dimbluePin, OUTPUT); pinMode (potPin2, INPUT); // pinMode (potPin0, INPUT); // pinMode (dimPin, INPUT); // pinMode (switchPin, INPUT); // Stikalo stikala nastavimo kot vhodni priključekInterrupt (0, isr0, RISING); if (DEBUG) {// Če želimo videti vrednosti pin za odpravljanje napak … Serial.begin (9600); //… nastavite serijski izhod v slogu 0004}} // Glavna zanka programavoid loop () {if (buttonPresses == 0) {Moodlamp (); // kliče funkcijo Moodlight} if (buttonPresses == 1) {RGBPotMixer (); // kliče funkcijo manuel mix} if (buttonPresses == 2) {White (); // Tukaj je vse belo} if (buttonPresses == 3) {} // Moodlamp (); // RGBPotMixer (); // Bela (); Monitor (); dim ();} void Monitor () {// Pošlji stanje monitorju, če (DEBUG) {// Če želimo prebrati izhod DEBUG += 1; // Povečaj števec DEBUG if (DEBUG> 10) {// Natisni vsakih 10 zank DEBUG = 1; // Ponastavi števec Serial.print (i); // Serijski ukazi v slogu 0004 Serial.print ("\ t"); // Natisnite zavihek Serial.print ("R:"); // Navedite, da je izhod rdeča vrednost Serial.print (redVal); // Natisni rdečo vrednost Serial.print ("\ t"); // Natisnite zavihek Serial.print ("G:"); // Ponovi za zeleno in modro … Serial.print (greenVal); Serial.print ("\ t"); Serial.print ("B:"); Serial.print (blueVal); // println, ki se konča z vrnitvijo nosilca Serial.print ("\ t"); Serial.print ("dimValue:"); Serial.print (maxVal); // println, ki se konča z vrnitvijo nosilca Serial.print ("\ t"); Serial.print ("počakaj:"); Serial.print (počakajte); // zapiše vrednost potPin0 na monitor Serial.print ("\ t"); Serial.print ("hueRGBvalue"); Serial.print (potVal); // zapiše vrednost potPin0 na monitor Serial.print ("\ t"); Serial.print ("buttonState:"); Serial.print (buttonState); // zapiše vrednost potPin0 na monitor Serial.print ("\ t"); Serial.print ("buttonPresses:"); Serial.println (buttonPresses); // zapiše vrednost gumbaPritisne na monitor}}} void dim () // Funkcija za zatemnitev bele // morda kasneje za vse načine {maxVal = analogRead (dimPin); maxVal /= 4; // Analogno območje od 0..1024 je preveč za zatemnitev vrednosti 0..255 analogWrite (dimredPin, maxVal); analogWrite (dimgreenPin, maxVal); analogWrite (dimbluePin, maxVal);} void Moodlamp () {počakaj = analogRead (potPin0); // poiščite vrednost iz potPin0; // če ni priključen noben pot: počakajte 255 i += 1; // Števec povečanja // i = i - maxVal; if (i <255) // Prva faza zbledi {redVal -= 1; // rdeče navzdol greenVal += 1; // zeleno gor blueVal = 1; // Modra nizka} else if (i <509) // Druga faza zbledi {redVal = 1; // Rdeča nizka greenVal -= 1; // zelena navzdol blueVal += 1; // Modro gor} else if (i <763) // Tretja faza zbledi {redVal += 1; // rdeče gor greenVal = 1; // zelena lo2 blueVal -= 1; // Modro navzdol} else // Ponovno nastavite števec in znova zaženite ugašanje {i = 1; } // namesto "redVal" naredimo "255 -redVal", ker so LED diode // priklopljene na +5V namesto Gnd analogWrite (redPin, 255 - redVal); // Zapis trenutnih vrednosti na LED zatiče analogWrite (greenPin, 255 - greenVal); analogWrite (bluePin, 255 - blueVal); /* dimredVal = min (redVal - maxVal, 255); // zatemnitev 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 vrednosti na LED zatiče analogWrite (greenPin, 255 - dimgreenVal); analogWrite (bluePin, 255 - dimblueVal); * / počakaj / = 4; zamuda (čakanje); // Pred nadaljevanjem zanke mirovanje za "čakanje"} void RGBPotMixer () {potVal = analogRead (potPin2); // odčitamo vrednost potenciometra na vhodnem zatiču potVal = potVal / 4; // pretvorimo iz 0-1023 v 0-255 hue_to_rgb (potVal); // obravnavamo potVal kot odtenek in ga pretvorimo v rgb vals // "255-" je zato, ker imamo LED s skupno anodo, ne pa skupne katode analogWrite (redPin, 255-redVal); // Zapišite vrednosti na LED zatiče analogWrite (greenPin, 255-greenVal); analogWrite (bluePin, 255-blueVal); } void White () {analogWrite (redPin, maxVal); // Zapišite vrednosti na LED zatiče analogWrite (greenPin, maxVal); analogWrite (bluePin, maxVal); }/*

  • Glede na spremenljiv odtenek 'h', ki se giblje od 0-252,
  • ustrezno nastavite barvno vrednost RGB.
  • Predpostavlja maxValimum Saturation & maximum Value (svetlost)
  • Opravlja izključno celoštevilčno matematiko, brez plavajoče vejice.

*/void hue_to_rgb (byte hue) {if (hue> 252) hue = 252; // korak nazaj na 252 !! nejo byte hd = hue / 42; // 36 == 252/7, 252 == H_MAX bajt hi = hd % 6; // daje 0-5 bajtov f = odtenek % 42; bajt fs = f * 6; stikalo (hi) {primer 0: redVal = 252; greenVal = fs; blueVal = 0; prekiniti; primer 1: redVal = 252-fs; greenVal = 252; blueVal = 0; prekiniti; primer 2: redVal = 0; greenVal = 252; blueVal = fs; prekiniti; primer 3: redVal = 0; greenVal = 252-fs; blueVal = 252; prekiniti; primer 4: redVal = fs; greenVal = 0; blueVal = 252; prekiniti; primer 5: redVal = 252; greenVal = 0; blueVal = 252-fs; prekiniti; }} void isr0 () {Serial.println ("\ n / n inerrupt / n"); buttonState = digitalRead (switchPin); // preberemo zakasnitev začetnega stanjaMicroseconds (100000); // if (val! = buttonState) {// stanje gumba se je spremenilo! // if (buttonState == HIGH) {// preverite, ali je gumb zdaj pritisnjen buttonPresses ++; //} // val = buttonState; // shranimo novo stanje v našo spremenljivko if (buttonPresses == 3) {// zur cksetzen buttonPresses = 0; }} //} Naslednja faza so bili gonilniki tranzistorjev. Uporabil sem 3 tranzistorja PNP z največjim tokom na 3Ampere. Po regulaciji pretočnega toka in napetosti je LEDemiter odlično deloval s polno intenzivnostjo.

Korak 6: Pridobite ga samostojno z zagonskim nalagalnikom, ki ga je zapisal PonyProg

Pridobite ga samostojno z zagonskim nalagalnikom, ki ga je zapisal PonyProg
Pridobite ga samostojno z zagonskim nalagalnikom, ki ga je zapisal PonyProg

Kako uporabiti vrata za paralell za zapisovanje zagonskega nalagalnika arduino na ATmega168 ali ATmega8 za uporabo poceni praznega čipa z okoljem arduino. Kmalu ….. morda na ločenem navodilu Tu je tudi dobro navodilo za uporabo samostojnega čipa: https:/ /www.instructables.com/id/uDuino-Very-Low-Cost-Arduino-Compatible-Developme/?ALLSTEPS

Korak 7: To je torej moja Arduino Moodlamp

To je torej moj Arduino Moodlamp
To je torej moj Arduino Moodlamp

Če vam je bilo všeč, me ocenite.

Priporočena: