Përmbajtje:

RGB Moodlamp i punuar me dorë me Arduino: 7 hapa
RGB Moodlamp i punuar me dorë me Arduino: 7 hapa

Video: RGB Moodlamp i punuar me dorë me Arduino: 7 hapa

Video: RGB Moodlamp i punuar me dorë me Arduino: 7 hapa
Video: SKR 1.4 - Adding a 3d Extruder Stepper for a Diamond PrintHead 2024, Korrik
Anonim
RGB Moodlamp i punuar me dorë me Arduino
RGB Moodlamp i punuar me dorë me Arduino
RGB Moodlamp i punuar me dorë me Arduino
RGB Moodlamp i punuar me dorë me Arduino

Ky udhëzues ndahet në 5 pjesë:- Planifikimi i ndërtimit (Hapi 1)- Hije e punuar me dorë (Hapi 2+3)- Qarku elektronik për drejtimin e LED-ve 3W me kontrolluesin ATmega8 (Hapi 4)- Kodi (Hapi 5)- Si ta merrni atë më vete (ndizni ngarkuesin Arduino me PonyProg dhe digjni skicën) (Hapi 6) së shpejti Vid: Disa përshtypje

de.youtube.com/watch?v=apZ9NpaUG84 Pic1: The Moodlamp Pic2: Një LED i fuqishëm 3W

Hapi 1: Planifikimi i ndërtimit:

Planifikimi i ndërtimit
Planifikimi i ndërtimit
Planifikimi i ndërtimit
Planifikimi i ndërtimit

Më pëlqen të bëj një koncept në vetëm një fletë letre. Në fletën e parë shihni disa ide të hershme. Zgjodha modelin poshtë-djathtas. Faqja e dytë tregon disa detaje për ndërtimin. Matjet janë eksperimentale si çdo herë, por në rregull për mua;-) Mendimet e mia hardware ishin:- A mund t'i trajtoj materialet?- A do të shkëlqejë drita përmes hijes? - Çfarë proporcioni duhet të ketë? - Sa çelësa dhe tenxhere do të më duhen për një ndërfaqe të thjeshtë? Mendimet e mia të softuerit ishin: Sa funksione të ndryshme duhet të ketë llamba? - Zbehje automatike RGB me shpejtësi të ndryshueshme - Rregullimi manual i ngjyrës - E bardhë me shkëlqim të rregullueshëm

Hapi 2: Hija e punuar me dorë

Hija e punuar me dorë
Hija e punuar me dorë
Hija e punuar me dorë
Hija e punuar me dorë
Hija e punuar me dorë
Hija e punuar me dorë

Grumbullimi i materialeve: Hije: Gjeta një fletë 3 këmbë x 3 këmbë prej plastike 30 mulli në dyqan (Figura 1-3). Përdorni një thikë të mprehtë për ta prerë atë. E mbulova plastikën duke përdorur letër zmerile (Figura 4-6). merrni një cilindër të lëmuar Unë i vidhos të gjitha së bashku pasi keni shpuar vrimat e duhura (Figura 7-8). Montoni nuancat plastike në mbështetëset prej bronzi të filetuara. Duket bukur dhe është mjaft e lehtë për tu marrë dhe trajtuar. Unë shpova dhe godita vrimat për të përputhur me shiritin e filetuar 1/8 (Pic9-10). Ndërkohë, bëra një ngrohës për të ftohur LED-të 3W dhe për të pasur një bazë të fortë. Për të marrë jo shumë hije nga boshti, unë ndërtoj një kafaz të vogël nga shufra e saldimit me një arrë M8 në krye (Pic12). Si përfundim u mblodha të gjitha së bashku. Vidhat e vogla dhe arrat ishin pak të ndërlikuara, por 30 minuta më vonë e përfundova.

Hapi 3: Hija e punuar me dorë

Hija e punuar me dorë
Hija e punuar me dorë
Hija e punuar me dorë
Hija e punuar me dorë
Hija e punuar me dorë
Hija e punuar me dorë

Baza: Disqet u copëtuan në torno për ta bërë atë të lëmuar dhe të rrumbullakët. Më pas, e njollosa me një njollë druri sofër në mënyrë që pisha të duket e mirë. Çfarë tjetër?!? Vendosa të bëj një bazë duke përdorur të njëjtën plastike e mbuluar me brymë si hije, dhe ndriçim prapa me një mikroLED RGB (Figura 5). Çelësat: Kam bërë butonin nga një copë sofër dhe çelësat nga një copëz druri arre.

Hapi 4: Qarku Elektrik:

Qarku Elektrik
Qarku Elektrik
Qarku Elektrik
Qarku Elektrik
Qarku Elektrik
Qarku Elektrik

Në foton e parë shihni skemën time. Dhe këtu është një video tjetër: https://de.youtube.com/watch? V = xkiYzQAYf_A & NR = 1

Hapi 5: Kodi:

Kodi
Kodi
Kodi
Kodi
Kodi
Kodi

Në fotografi shihni procesin tim me Arduino. Së pari provova me ProtoShield -in tim të bërë vetë, një paketë baterie dhe disa lloj LEDs. Fillova me "Projekte drithëruese" dhe "BionicArduino" nga TodEKurt disa muaj më parë. Http://todbot.com/blog/spookyarduino/Kodi im është vetëm një kombinim i ndërlikuar i kodit të projektit të tij. "RGBMoodlight", "RGBPotMixer" dhe disa shtesa. Tre analog-in dhe. një dixhital-si ndërprerës i modalitetit (Faleminderit Ju. për rutinën e ndërprerjes:). LED janë të lidhura te D9, D10 dhe D11 të cilat mbështesin PulseWithModulation. Nëse ju pëlqen, unë mund ta publikoj skicën, por është një kombinim vërtet i zhveshur i këtyre dy kodeve të shkëlqyera. Këtu është kodi im origjinal i llambës. Duket pak e çrregullt, sepse ishte imja faza shumë e hershme në programim … Por nëse e kopjoni, duhet të funksionojë shkëlqyeshëm. Ka paqe të shkëlqyera, si "PotColorMixer", "RGBfadingFunction" dhe Rutina Ndërprerëse për ndërprerësin e modalitetit./* nejo Qershor2008

Kodi për "Moodlamp" tim, bazuar në "dimmingLEDs" nga Clay Shirky

*nejo Shtator 2008

  • Kodi përfundimtar për llambën e humorit me ndërprerësin e modalitetit të ndërprerjes, thirrjen analoge të shpejtë për zbehjen e RGB dhe ndryshimin e ngjyrës RGB.
  • Funksioni i zbehjes funksionon vetëm për ngjyrën e bardhë

*nejo Tetor2008

  • Zgjatja e zërit për llambën e humorit:
  • Një mikrofon kondensator me një Amp të vogël LM368, një përçues dhe një filtër RC me kalim të ulët
  • me një hyrje tjetër analoge unë përdor funksionin RGBPotMixer për të ndryshuar ngjyrën duke marrë sinjalin e mikrofonit.

* * * Kodi për zbehjen e 3 LED-ve, të kuqe, jeshile dhe blu, ose një LED me tre ngjyra, duke përdorur PWM

  • Programi zbehet ngadalë nga e kuqe në jeshile, jeshile në blu dhe blu në të kuqe
  • Kodi i korrigjimit merr Arduino 0004, pasi përdor funksionet e reja të stilit Serial.begin ()
  • fillimisht "dimmingLEDs" nga Clay Shirky

*

  • AnalogRead është aktivizuar në Pin A0 për të ndryshuar shpejtësinë e zbehjes së RGB
  • AnalogRead është aktivizuar në Pin A2 për të ndryshuar ngjyrën e hueRGB

* * */#përfshijnë // Outputint ledPin = 13; // controlPin për debuggingint redPin = 9; // LED i kuq, i lidhur me pinin dixhital 9int greenPin = 10; // LED i gjelbër, i lidhur me pinin dixhital 10int bluePin = 11; // LED blu, i lidhur me kunjin dixhital 11int dimredPin = 3; // Kunjat për vlerën e zbehjes analoge, të lidhur me drejtuesin e transistorit dimgreenPin = 5; int dimbluePin = 6; // Ndërprerësin e hyrjesPin = 2; // kaloni është i lidhur me pin D2int val = 0; // ndryshore për leximin e butonit të gjendjes së kunjitState; // ndryshore për të mbajtur butonin gjendjen button buttonShtyp = 0; // 3 shtyp për të shkuar! Int potPin0 = 0; // Tenxhere për rregullimin e vonesës midis zbehjes në Moodlamp; int potPin2 = 2; // Dalja e potenciometrit për ndryshimin e ngjyrës potue Valuta e hueRGB = 0; // Ndryshore për të ruajtur hyrjen nga potenciometri maxVal = 0; // vlera për të ruajtur parazgjedhjen e faktorit të zbehjes është 255, nëse nuk është lidhur Pot në dimPin = 4; // Tenxhere e lidhur me A4 për të zbehur shkëlqimin // Variablat e programitint redVal = 255; // Variablat për të ruajtur vlerat për t'i dërguar në pinsint greenVal = 1; // Vlerat fillestare janë Red full, Green dhe Blue offint blueVal = 1; int i = 0; // Numëruesi i lakut int prisni; // = 15; // 50ms (.05 sekonda) vonesë; shkurtohet për zbehje më të shpejtë k = 0; // vlera për controlLED në funksionin e blinkut DEBUG = 0; // sportel DEBUG; nëse vendoset në 1, do të shkruajë vlerat përsëri përmes serialint LCD = 0; // sportel LCD; nëse vendoset në 1, do të shkruajë vlerat përsëri përmes konfigurimit serialvoid () {pinMode (ledPin, OUTPUT); pinMode (redPin, OUTPUT); // vendos kunjat si pinMode dalëse (greenPin, OUTPUT); pinMode (bluPin, OUTPUT); pinMode (dimredPin, OUTPUT); pinMode (dimgreenPin, OUTPUT); // vendos kunjat si dalje pinMode (dimbluePin, OUTPUT); pinMode (potPin2, INPUT); // pinMode (potPin0, INPUT); // pinMode (dimPin, INPUT); // pinMode (switchPin, INPUT); // Vendosni kunjin e ndërprerësit si input attachInterrupt (0, isr0, RISING); if (DEBUG) {// Nëse duam të shohim vlerat e pin për korrigjim… Serial.begin (9600); //… konfiguroni daljen serike në stilin 0004}} // laku kryesor programvoid () {if (buttonPresses == 0) {Moodlamp (); // thërret funksionin Moodlight} nëse (buttonPresses == 1) {RGBPotMixer (); // thërret funksionin e përzierjes manuel} if (buttonPresses == 2) {E bardhë (); // allshtë e bardhë këtu} nëse (buttonPresses == 3) {} // Moodlamp (); // RGBPotMixer (); // E bardhë (); Monitor (); dim ();} Monitor void () {// Dërgoni gjendjen në monitor nëse (DEBUG) {// Nëse duam të lexojmë daljen DEBUG += 1; // Shtoni numëruesin DEBUG nëse (DEBUG> 10) {// Shtypni çdo 10 sythe DEBUG = 1; // Rivendos numëruesin Serial.print (i); // Komandat serike në stilin 0004 Serial.print ("\ t"); // Shtypni një skedë Serial.print ("R:"); // Tregoni që dalja është me vlerë të kuqe Serial.print (redVal); // Shtyp vlerën e kuqe Serial.print ("\ t"); // Shtypni një skedë Serial.print ("G:"); // Përsëriteni për ngjyrën jeshile dhe blu… Serial.print (greenVal); Serial.print ("\ t"); Serial.print ("B:"); Serial.print (blueVal); // println, për të përfunduar me një Serial.print të kthimit të karrocës ("\ t"); Serial.print ("dimValue:"); Serial.print (maxVal); // println, për të përfunduar me një Serial.print të kthimit të karrocës ("\ t"); Serial.print ("prit:"); Serial.print (prit); // shkruan vlerën e potPin0 në monitor Serial.print ("\ t"); Serial.print ("hueRGBvalue"); Serial.print (potVal); // shkruan vlerën e potPin0 në monitor Serial.print ("\ t"); Serial.print ("buttonState:"); Serial.print (buttonState); // shkruan vlerën e potPin0 në monitor Serial.print ("\ t"); Serial.print ("buttonShtyp:"); Serial.println (buttonPresses); // shkruan vlerën e butonitShtyp në monitor}}} void dim () // Funksioni për zbehjen e Bardhë // ndoshta më vonë për të gjitha mënyrat {maxVal = analogRead (dimPin); maxVal /= 4; // Gama analoge nga 0..1024 shumë për zbehjen e vlerës 0..255 analogWrite (dimredPin, maxVal); analogWrite (dimgreenPin, maxVal); analogWrite (dimbluePin, maxVal);} void Moodlamp () {pris = analogRead (potPin0); // kërkoni vlerën nga potPin0; // nëse asnjë Pot nuk është i lidhur: prisni 255 i += 1; // Numëruesi i rritjes // i = i - maxVal; nëse (i <255) // Faza e parë e zbehjes {redVal -= 1; // Kuq poshtë greenVal += 1; // Gjelbër bluVal = 1; // Blu e ulët} tjetër nëse (i <509) // Faza e dytë e zbehjes {redVal = 1; // E kuqe e ulët greenVal -= 1; // E gjelbër poshtë bluVal += 1; // Blu up} tjetër nëse (i <763) // Faza e tretë e zbehjes {redVal += 1; // Kuqe deri greenVal = 1; // E gjelbër lo2 bluVal -= 1; // Blu poshtë} tjetër // Rivendos përsëri numëruesin dhe fillo zbehjet përsëri {i = 1; } // ne bëjmë "255 -redVal" në vend të vetëm "redVal" sepse // LED -të janë të lidhur deri në +5V në vend të Gnd analogWrite (redPin, 255 - redVal); // Shkruani vlerat aktuale në kunjat LED analogWrite (greenPin, 255 - greenVal); analogWrite (bluePin, 255 - blueVal); /* dimredVal = min (redVal - maxVal, 255); // zbehje dimredVal = max (redVal - maxVal, 0); dimgreenVal = min (greenVal - maxVal, 255); dimgreenVal = max (greenVal - maxVal, 0); dimblueVal = min (bluVal - maxVal, 255); dimblueVal = max (bluVal - maxVal, 0); analogWrite (redPin, 255 - dimredVal); // Shkruani vlerat aktuale në kunjat LED analogWrite (greenPin, 255 - dimgreenVal); analogWrite (bluPin, 255 - dimblueVal); * / prit / = 4; vonesë (pritje); // Ndalo për 'prit' milisekonda para se të rifillosh ciklin} void RGBPotMixer () {potVal = analogRead (potPin2); // lexoni vlerën e potenciometrit në pinin hyrës potVal = potVal / 4; // konverto nga 0-1023 në 0-255 hue_to_rgb (potVal); // trajtojeni potVal si ngjyrim dhe shndërrohuni në rgb vals // "255-" është sepse kemi LED të zakonshëm të anodës, jo analogWrite me katodë të zakonshme (redPin, 255-redVal); // Shkruani vlera në kunjat LED analogWrite (greenPin, 255-greenVal); analogWrite (bluePin, 255-blueVal); } void White () {analogWrite (redPin, maxVal); // Shkruani vlera në kunjat LED analogWrite (greenPin, maxVal); analogWrite (bluePin, maxVal); }/*

  • Duke pasur parasysh një nuancë të ndryshueshme 'h', që shkon nga 0-252,
  • caktoni vlerën e ngjyrës RGB në mënyrë të përshtatshme.
  • Supozon maksimumin e ngopjes maksimale dhe vlerën maksimale (shkëlqimi)
  • Kryen matematikë tërësisht të plotë, pa pikë lundruese.

*/void hue_to_rgb (byte hue) {if (hue> 252) hue = 252; // kthim mbrapa në 252 !! nejo byte hd = hue / 42; // 36 == 252/7, 252 == H_MAX byte hi = hd % 6; // jep 0-5 bajt f = nuancë % 42; bajt fs = f * 6; switch (hi) {case 0: redVal = 252; greenVal = fs; bluVal = 0; pushim; rasti 1: redVal = 252-fs; greenVal = 252; bluVal = 0; pushim; rasti 2: redVal = 0; greenVal = 252; blueVal = fs; pushim; rasti 3: redVal = 0; greenVal = 252-fs; bluVal = 252; pushim; rasti 4: redVal = fs; greenVal = 0; bluVal = 252; pushim; rasti 5: redVal = 252; greenVal = 0; bluVal = 252-fs; pushim; }} void isr0 () {Serial.println ("\ n / n e paprishur / n"); buttonState = digitalRead (switchPin); // lexoni vonesën e gjendjes fillestare Mikrosekonda (100000); // if (val! = buttonState) {// gjendja e butonit ka ndryshuar! // if (buttonState == LART) {// kontrolloni nëse butoni tani është shtypur butoniShtyp ++; //} // val = button Shteti; // ruani gjendjen e re në ndryshoren tonë nëse (buttonShtyp == 3) {// zur cksetzen buttonShtyp = 0; }} //} Faza tjetër ishin drejtuesit e tranzistorit. Kam përdorur 3 transistorë PNP me një rrymë maksimale në 3 Amper. Pasi u rregullua rryma përpara dhe tensioni, LEDemitter punoi shkëlqyeshëm me intensitet të plotë.

Hapi 6: Merrni atë të pavarur me bootloader të djegur PonyProg

Merrni atë të pavarur me bootloader të djegur PonyProg
Merrni atë të pavarur me bootloader të djegur PonyProg

Si të përdorni portin tuaj paralell për të djegur ngarkuesin arduino në një ATmega168 ose ATmega8 për të përdorur një çip bosh të lirë me mjedisin arduino. Së shpejti….. ndoshta në një udhëzues të veçantë Këtu është gjithashtu një udhëzues i mirë për të përdorur çipin e pavarur: https:/ /www.instructables.com/id/uDuino-Very-Low-Cost-Arduino-Compatible-Developme/?ALLSTEPS

Hapi 7: Pra, Ky është Arduino Moodlamp im

Pra, Ky është Arduino Moodlamp im
Pra, Ky është Arduino Moodlamp im

Nëse ju pëlqeu, ju lutem më vlerësoni.

Recommended: