Turinys:

Rankų darbo „Arduino“varomas „RGB Moodlamp“: 7 žingsniai
Rankų darbo „Arduino“varomas „RGB Moodlamp“: 7 žingsniai

Video: Rankų darbo „Arduino“varomas „RGB Moodlamp“: 7 žingsniai

Video: Rankų darbo „Arduino“varomas „RGB Moodlamp“: 7 žingsniai
Video: Using 28BYJ-48 Stepper Motor Push button Speed with 8 projects: Ultimate Video Tutorial Lesson 107 2024, Liepa
Anonim
Rankų darbo „Arduino“varomas „RGB Moodlamp“
Rankų darbo „Arduino“varomas „RGB Moodlamp“
Rankų darbo „Arduino“varomas „RGB Moodlamp“
Rankų darbo „Arduino“varomas „RGB Moodlamp“

Ši instrukcija yra padalinta į 5 dalis:- konstrukcijos planavimas (1 žingsnis)- rankų darbo atspalvis (2+3 žingsnis)- elektroninė grandinė, skirta 3W šviesos diodams valdyti su ATmega8 valdikliu (4 žingsnis)- kodas (5 žingsnis)- kaip jį gauti atskiras (paleiskite „Arduino“įkrovos tvarkyklę naudodami „PonyProg“ir įrašykite eskizą) (6 veiksmas) netrukus pasirodys Vid: Kai kurie įspūdžiai

de.youtube.com/watch?v=apZ9NpaUG84 1 pav. „The Moodlamp Pic2“: galingas 3 W šviesos diodas

1 žingsnis: Statybos planavimas:

Statybos planavimas
Statybos planavimas
Statybos planavimas
Statybos planavimas

Man patinka kurti koncepciją tik ant vieno popieriaus lapo. Pirmame lape matote keletą ankstyvųjų idėjų. Aš pasirinkau apatinį dešinįjį dizainą. Antrame puslapyje pateikiama tam tikra konstrukcijos informacija. Matavimai yra eksperimentiniai, kaip ir kiekvieną kartą, bet man tinka;-) Mano techninės mintys buvo:- Ar galiu tvarkyti medžiagas?- Ar šviesa spindės per šešėlį? - Kokią proporciją ji turėtų turėti? - Kiek rankenėlių ir puodų man reikės, kad būtų paprasta sąsaja? Mano mintys apie programinę įrangą buvo tokios: kiek skirtingų funkcijų turėtų turėti lempa? - Automatinis RGB išblukimas keičiamu greičiu - Rankinis spalvų reguliavimas - Balta su reguliuojamu ryškumu

2 žingsnis: rankų darbo šešėlis

Rankų darbo šešėlis
Rankų darbo šešėlis
Rankų darbo šešėlis
Rankų darbo šešėlis
Rankų darbo šešėlis
Rankų darbo šešėlis

Medžiagų surinkimas: Atspalvis: parduotuvėje radau 3 pėdų x 3 pėdų 30 milimetrų plastiko lakštą (1–3 pav.). Pjaukite jį aštriu peiliu. Plastiką apledinau švitriniu popieriumi (4–6 pav.). gaukite lygų cilindrą, aš viską susukau išgręžęs tinkamas skyles (7-7 pav.). Sumontuokite plastikinius atspalvius ant srieginių žalvarinių atramų. Jis atrodo gražiai ir yra gana lengvai pasiekiamas bei tvarkomas. Aš išgręžiau ir paliečiau skylutes, kad atitiktų 1/8 sriegio juostą (9-10 paveikslas). Tuo tarpu padariau radiatorių, kad atvėsčiau 3W šviesos diodus ir būtų tvirtas pagrindas. Norėdami gauti ne per daug atspalvių iš veleno, aš iš suvirinimo strypo suveržiu nedidelį narvelį su M8 veržle viršuje (12 pav.). Baigdamas surinkau viską kartu. Maži varžtai ir veržlės buvo šiek tiek sudėtingi, tačiau po 30 minučių aš tai padariau.

3 žingsnis: rankų darbo šešėlis

Rankų darbo šešėlis
Rankų darbo šešėlis
Rankų darbo šešėlis
Rankų darbo šešėlis
Rankų darbo šešėlis
Rankų darbo šešėlis

Pagrindas: diskai buvo įkišti į tekinimo stakles, kad jie būtų lygūs ir apvalūs. Vėliau aš nudažiau jį raudonmedžio medžio dėme, kad pušis atrodytų gerai. Kas toliau?!? Aš nusprendžiau padaryti pagrindą naudodami tą patį matinį plastiką kaip atspalvį ir apšvieskite jį RGB microLED (5 pav.). Rankenėlės: mygtuką padariau iš raudonmedžio gabalo, o rankenėles - iš riešutmedžio išpjovos.

4 žingsnis: elektros grandinė:

Elektros grandinė
Elektros grandinė
Elektros grandinė
Elektros grandinė
Elektros grandinė
Elektros grandinė

Pirmoje nuotraukoje matote mano schemą. O čia dar vienas vaizdo įrašas: https://de.youtube.com/watch? V = xkiYzQAYf_A & NR = 1

5 žingsnis: kodas:

Kodas
Kodas
Kodas
Kodas
Kodas
Kodas

Nuotraukose matote mano procesą su Arduino. Pirmiausia išbandžiau savo paties sukurtą „ProtoShield“, akumuliatorių ir kai kuriuos šviesos diodus. Prieš kelis mėnesius pradėjau nuo „Spooky Projects“ir „BionicArduino“, kuriuos sukūrė TodEKurt. Http://todbot.com/blog/spookyarduino/Mano kodas yra tiesiog sudėtingas jo projekto kodo derinys. „RGBMoodlight“, „RGBPotMixer“ir kai kurie plėtiniai. Trys analoginio įvesties ir vienas skaitmeninis įvestis kaip režimo jungiklis (ačiū Ju. už pertraukos rutiną:). Šviesos diodai yra prijungti. į D9, D10 ir D11, kurie palaiko „PulseWithModulation“. Jei jums patinka, galiu paskelbti eskizą, bet tai tikrai plikas šių dviejų puikių kodų derinys. Štai mano originalus lempos kodas. Tai atrodo šiek tiek netvarkinga, nes tai buvo mano labai ankstyvas programavimo etapas … Bet jei jį nukopijuosite, jis turėtų puikiai veikti. Yra puikių taikų, tokių kaip „PotColorMixer“, „RGBfadingFunction“ir „Interrupt-Routine“režimo perjungimui./* nejo June2008

Mano „Moodlamp“kodas, pagrįstas Clay Shirky „dimmingLED“

*nejo 2008 m. rugsėjo mėn

  • Galutinis nuotaikos lempos kodas su pertraukimo režimo jungikliu, analoginis greitasis rinkimas, skirtas RGB išblukimui ir RGB spalvos keitimas.
  • Šviesinimo funkcija veikia tik baltos spalvos atveju

*nejo 2008 spalis

  • Garso išplėtimas nuotaikos lemputei:
  • Kondensatorinis mikrofonas su mažu LM368 stiprintuvu, recifieriumi ir RC žemo dažnio filtru
  • su kitu analoginiu įėjimu naudoju RGBPotMixer funkciją, kad pakeisčiau spalvą gaudamas mikrofono signalą.

* * * Kryžminio 3 šviesos diodų, raudonų, žalių ir mėlynų, arba vieno trispalvio šviesos diodo, naudojant PWM, kodas

  • Programa lėtai blunka nuo raudonos iki žalios, nuo žalios iki mėlynos ir mėlynos į raudoną
  • Derinimo kodas prisiima „Arduino 0004“, nes jis naudoja naujas Serial.begin () stiliaus funkcijas
  • iš pradžių „dimmingLED“pateikė Clay Shirky

*

  • „AnalogRead“įjungtas „A0“kaištyje, kad būtų keičiamas RGB išblukimo greitis
  • „AnalogRead“įjungtas „A2“kaištyje, kad būtų pakeista „hueRGB“spalva

* * */#include // Outputint ledPin = 13; // „ControlPin“derinimuiint redPin = 9; // Raudonas šviesos diodas, prijungtas prie skaitmeninio kaiščio 9int žaliaPin = 10; // Žalia šviesos diodas, prijungtas prie skaitmeninio kaiščio 10int bluePin = 11; // Mėlynas šviesos diodas, prijungtas prie skaitmeninio kaiščio 11int dimredPin = 3; // Analoginės pritemdymo vertės smeigtukai, prijungti prie tranzistoriaus tvarkyklės dimgreenPin = 5; int dimbluePin = 6; // Įvesties jungiklisPin = 2; // jungiklis prijungtas prie kaiščio D2int val = 0; // kintamasis, skirtas pin statusint buttonState; // kintamasis, kad būtų laikomas mygtukas stateint buttonPresses = 0; // 3 paspaudimai eiti! Int potPin0 = 0; // Puodas, skirtas reguliuoti delsą tarp išblukimo „Moodlamp“; int potPin2 = 2; // Potenciometro išvestis, skirta pakeisti atspalvįRGB colorint potVal = 0; // Kintamasis, kad būtų galima išsaugoti įvestį iš potenciometrointint maxVal = 0; // reikšmė, skirta išsaugoti pritemdymo koeficientą, yra 255, jei nėra prijungtas puodelis. dimPin = 4; // Puodas prijungtas prie A4, kad sumažėtų ryškumas // Programos kintamiejiint redVal = 255; // Kintamieji, skirti išsaugoti reikšmes, kurias reikia siųsti į piniginę greenVal = 1; // Pradinės vertės yra raudona pilna, žalia ir mėlyna offint blueVal = 1; int i = 0; // Loop counter int wait; // = 15; // 50 ms (.05 sek.) Delsos; sutrumpinti, kad greičiau išnyktų k = 0; // „controlLED“reikšmė mirksėjimo funkcijoje „DEBUG“= 0; // DEBUG skaitiklis; jei nustatyta 1, įrašys reikšmes atgal per serialint LCD = 0; // LCD skaitiklis; jei nustatyta į 1, įrašys reikšmes atgal per serialvoid setup () {pinMode (ledPin, OUTPUT); pinMode (redPin, OUTPUT); // nustato kaiščius kaip išvesties pinMode (greenPin, OUTPUT); pinMode („bluePin“, OUTPUT); pinMode (dimredPin, OUTPUT); pinMode (dimgreenPin, OUTPUT); // nustato kaiščius kaip išvesties pinMode (dimbluePin, OUTPUT); pinMode (potPin2, INPUT); // pinMode (potPin0, INPUT); // pinMode (dimPin, INPUT); // pinMode (switchPin, INPUT); // Nustatykite jungiklio kaištį kaip įvesties priedąInterrupt (0, isr0, RISING); if (DEBUG) {// Jei norime matyti derinimo PIN reikšmes … Serial.begin (9600); //… nustatyti serijos išvestį 0004 stiliaus}}} // Pagrindinė programvoid kilpa () {if (buttonPresses == 0) {Moodlamp (); // iškviečia „Moodlight“funkciją} if (buttonPresses == 1) {RGBPotMixer (); // iškviečia manuelio mišinio funkciją} if (buttonPresses == 2) {White (); // čia viskas balta} if (buttonPresses == 3) {} // Moodlamp (); // RGBPotMixer (); // Balta (); Monitorius (); dim ();} void Monitor () {// Siųsti būseną į monitorių, jei (DEBUG) {// Jei norime perskaityti išvestį DEBUG += 1; // Padidinkite DEBUG skaitiklį, jei (DEBUG> 10) {// Spausdinkite kas 10 kilpų DEBUG = 1; // Iš naujo nustatyti skaitiklį Serial.print (i); // Serijinės komandos 0004 stiliaus Serial.print ("\ t"); // Spausdinti skirtuką Serial.print ("R:"); // Nurodykite, kad išvestis yra raudona reikšmė Serial.print (redVal); // Spausdinti raudoną reikšmę Serial.print ("\ t"); // Spausdinti skirtuką Serial.print ("G:"); // Pakartokite žaliai ir mėlynai… Serial.print (greenVal); Serial.print ("\ t"); Serial.print („B:“); Serial.print („blueVal“); // println, baigti vežimo grąžinimu Serial.print ("\ t"); Serial.print ("dimValue:"); Serial.print (maxVal); // println, baigti vežimo grąžinimu Serial.print ("\ t"); Serial.print ("palaukti:"); Serial.print (palaukti); // įrašo „potPin0“reikšmę monitoriui Serial.print ("\ t"); Serial.print ("hueRGBvalue"); Serial.print (potVal); // įrašo „potPin0“reikšmę monitoriui Serial.print ("\ t"); Serial.print ("buttonState:"); Serial.print (buttonState); // įrašo „potPin0“reikšmę monitoriui Serial.print ("\ t"); Serial.print ("buttonPresses:"); Serial.println (buttonPress); // rašo mygtuko reikšmęPress į monitorių}}} void dim () // Funkcija, skirta pritemdyti baltą // galbūt vėliau visiems režimams {maxVal = analogRead (dimPin); maxVal /= 4; // Analoginis diapazonas nuo 0..1024 per daug, norint pritemdyti 0..255 vertės analogWrite (dimredPin, maxVal); analogWrite (dimgreenPin, maxVal); analogWrite (dimbluePin, maxVal);} void Moodlamp () {wait = analogRead (potPin0); // ieškokite vertės iš potPin0; // jei nėra prijungtas puodas: palaukite 255 i += 1; // Padidinimo skaitiklis // i = i - maxVal; if (i <255) // Pirmoji blukimo fazė {redVal -= 1; // Raudona žemyn žaliaVal += 1; // Žalia iki mėlynaVal = 1; // Mėlyna žemas} else if (i <509) // Antroji išblukimo fazė {redVal = 1; // Raudona mažai žaliaVal -= 1; // Žalia žemyn mėlynaVal += 1; // Mėlyna iki} else if (i <763) // Trečioji išblukimo fazė {redVal += 1; // Raudona iki žaliaVal = 1; // Žalia lo2 blueVal -= 1; // Mėlyna žemyn} else // Iš naujo nustatykite skaitiklį ir vėl pradėkite blukimą {i = 1; } // mes darome „255 -redVal“, o ne tik „redVal“, nes // šviesos diodai prijungti iki +5 V vietoj „Gnd analogWrite“(redPin, 255 - redVal); // Įrašykite esamas reikšmes į LED kaiščius analogWrite (greenPin, 255 - greenVal); analogWrite („bluePin“, 255 - „blueVal“); /* dimredVal = min (redVal - maxVal, 255); // pritemdyti dimredVal = max (redVal - maxVal, 0); dimgreenVal = min (žaliaVal - maxVal, 255); dimgreenVal = max (žaliasVal - maxVal, 0); dimblueVal = min (mėlynaVal - maxVal, 255); dimblueVal = max (mėlynasVal - maxVal, 0); analogWrite (redPin, 255 - dimredVal); // Įrašykite esamas reikšmes į LED kaiščius analogWrite (greenPin, 255 - dimgreenVal); analogWrite („bluePin“, 255 - „dimblueVal“); * / palaukti / = 4; atidėti (laukti); // Pristabdykite „palaukite“milisekundes prieš atnaujindami kilpą} void RGBPotMixer () {potVal = analogRead (potPin2); // skaityti potenciometro reikšmę prie įvesties kaiščio potVal = potVal / 4; // konvertuoti iš 0-1023 į 0-255 hue_to_rgb (potVal); // „potVal“laikykite atspalviu ir konvertuokite į rgb vals // // „255-“yra todėl, kad turime bendrojo anodo šviesos diodus, o ne bendrojo katodo analogWrite (redPin, 255-redVal); // Įrašykite reikšmes į LED kaiščius analogWrite (greenPin, 255-greenVal); analogWrite („bluePin“, 255-blueVal); } void White () {analogWrite (redPin, maxVal); // Įrašykite reikšmes į LED kaiščius analogWrite (greenPin, maxVal); analogWrite („bluePin“, „maxVal“); }/*

  • Atsižvelgiant į kintamą atspalvį „h“, kuris svyruoja nuo 0 iki 252,
  • tinkamai nustatykite RGB spalvų vertę.
  • Prisiima maksimalų maksimalų sodrumą ir didžiausią vertę (ryškumą)
  • Atlieka grynųjų skaičių matematiką, be slankiojo kablelio.

*/void hue_to_rgb (baitų atspalvis) {if (atspalvis> 252) atspalvis = 252; // atgal į 252 !! nejo baitas hd = atspalvis / 42; // 36 == 252/7, 252 == H_MAX baitas hi = hd % 6; // suteikia 0-5 baitą f = atspalvį % 42; baitas fs = f * 6; jungiklis (labas) {atvejis 0: redVal = 252; žaliaVal = fs; blueVal = 0; pertrauka; 1 atvejis: redVal = 252-fs; žaliaVal = 252; blueVal = 0; pertrauka; 2 atvejis: redVal = 0; žaliaVal = 252; blueVal = fs; pertrauka; 3 atvejis: redVal = 0; žaliaVal = 252-fs; blueVal = 252; pertrauka; 4 atvejis: redVal = fs; žaliaVal = 0; blueVal = 252; pertrauka; 5 atvejis: redVal = 252; žaliaVal = 0; blueVal = 252-fs; pertrauka; }} void isr0 () {Serial.println ("\ n / n nepertraukiamas / n"); buttonState = digitalRead (switchPin); // skaityti pradinės būsenos uždelsimąMikrosekundės (100000); // jei (val! = buttonState) {// mygtuko būsena pasikeitė! // if (buttonState == HIGH) {// patikrinkite, ar mygtukas dabar paspaustas mygtukasPress ++; //} // val = buttonState; // išsaugokite naują būseną mūsų kintamajame if (buttonPresses == 3) {// zur cksetzen buttonPresses = 0; }} //} Kitas etapas buvo tranzistorių tvarkyklės. Naudojau 3 PNP tranzistorius, kurių maksimali srovė buvo 3 amperų. Po to, kai buvo reguliuojama srovė ir įtampa, LED spinduolis puikiai veikė visu intensyvumu.

6 veiksmas: įsigykite jį savarankiškai naudodami „PonyProg“įrašytą įkrovos įkroviklį

Gaukite tai savarankiškai naudodami „PonyProg“įrašytą „Bootloader“
Gaukite tai savarankiškai naudodami „PonyProg“įrašytą „Bootloader“

Kaip naudoti savo lygiagretųjį prievadą, kad įrašytumėte „arduino“įkrovos įkroviklį į „ATmega168“ar „ATmega8“, kad galėtumėte naudoti pigų tuščią lustą su „arduino“aplinka. Netrukus….. galbūt atskiroje instrukcijoje. Čia taip pat yra gera instrukcija naudoti lustą atskirai: /www.instructables.com/id/uDuino-Very-Low-Cost-Arduino-Compatible-Developme/?ALLSTEPS

7 žingsnis: Taigi tai yra mano „Arduino Moodlamp“

Taigi tai mano „Arduino Moodlamp“
Taigi tai mano „Arduino Moodlamp“

Jei patiko, įvertinkite mane.

Rekomenduojamas: