Cuprins:
2025 Autor: John Day | [email protected]. Modificat ultima dată: 2025-01-13 06:58
Acest instructiv este împărțit în 5 părți: - Planificarea construcției (Pasul 1) - Umbră manuală (Pasul 2 + 3) - Circuitul electronic pentru conducerea LED-urilor de 3 W cu controlerul ATmega8 (Pasul 4) - Codul (Pasul 5) - Cum să îl obțineți de sine stătător (flash bootloader-ul Arduino cu PonyProg și ardeți schița) (Pasul 6) în curând Vid: Some Impressions
de.youtube.com/watch?v=apZ9NpaUG84 Pic1: Moodlamp Pic2: Un LED puternic de 3W
Pasul 1: Planificarea construcției:
Îmi place să fac un concept pe o singură foaie de hârtie. Pe prima foaie vedeți câteva idei timpurii. Am ales designul din dreapta jos. A doua pagină prezintă câteva detalii pentru construcție. Măsurările sunt experimentale ca de fiecare dată, dar ok pentru mine;-) Gândurile mele hardware au fost: - Pot să mă descurc cu materialele? - Va străluci lumina? prin umbră? - Ce proporție ar trebui să aibă? - Câte butoane și vase voi avea nevoie pentru o interfață simplă? Gândurile mele despre software au fost: Câte funcții diferite ar trebui să aibă lampa? - Decolorare RGB automată cu viteză modificabilă - Reglare manuală a culorii - Alb cu luminozitate reglabilă
Pasul 2: Umbra manuală
Adunarea materialelor: Umbra: am găsit o foaie de 3 picioare x 3 picioare de plastic de 30 de mori la magazin (Pic1-3). Folosiți un cuțit ascuțit pentru a-l tăia. Am înghețat plasticul folosind șmirghel (Pic4-6). obțineți un cilindru neted, l-am înșurubat după ce ați găurit găurile potrivite (Pic7-8). Montați nuanțele din plastic pe suporturile filetate din alamă. Arată frumos și este destul de ușor de obținut și de manipulat. Am forat și am bătut găurile pentru a se potrivi cu bara filetată 1/8 (Pic9-10). Între timp, am făcut un radiator pentru a răci LED-urile de 3W și pentru a avea o bază solidă. Pentru a obține nu prea multe nuanțe din arbore, construiesc o mică cușcă din tija de sudură cu o piuliță M8 deasupra (Pic12). Șuruburile și piulițele erau puțin complicate, dar 30 de minute mai târziu am reușit.
Pasul 3: Umbra manuală
Baza: Discurile au fost aruncate în strung pentru a fi netedă și rotundă. Ulterior, l-am pătat cu o pată de lemn de mahon, astfel încât să fac pinul să arate bine. Ce urmează?!? Am decis să fac o bază folosind aceeași plastic mat ca umbră și luminează-l cu un RGB microLED (Pic5). Butoanele: Am făcut butonul dintr-o bucată de mahon și butoanele dintr-o bucată de lemn de nuc.
Pasul 4: Circuitul electric:
Pe prima poză vedeți schema mea. Iată un alt videoclip: https://de.youtube.com/watch? V = xkiYzQAYf_A & NR = 1
Pasul 5: Codul:
Pe fotografii vedeți procesul meu cu Arduino. În primul rând, am încercat cu ProtoShield, un pachet de baterii și câteva feluri de LED-uri. Am început cu „Spooky Projects” și „BionicArduino” de TodEKurt acum câteva luni. Http://todbot.com/blog/spookyarduino/ Codul meu este doar o combinație complicată a codului său de proiect. "RGBMoodlight", "RGBPotMixer" și câteva extensii. Trei analog-in și.un digital-in ca comutator de mod (Mulțumesc lui Ju. pentru întreruperea rutinei:). LED-urile sunt conectate la D9, D10 și D11 care acceptă PulseWithModulation. Dacă doriți, pot publica schița, dar este o combinație foarte simplă a acestor două coduri grozave. Iată codul meu original al lămpii. Arată puțin dezordonat, deoarece a fost etapă foarte timpurie în programare … Dar dacă o copiați, ar trebui să funcționeze excelent. Există pași buni, cum ar fi "PotColorMixer", "RGBfadingFunction" și Interrupt-Routine pentru mode-switch./* nejo June2008
Cod pentru „Moodlamp” meu, bazat pe „dimmingLED-uri” de Clay Shirky
* nejo Sep2008
- Cod final pentru moodlamp cu comutator de întrerupere, apelare rapidă analogică pentru decolorare RGB și schimbare de culoare RGB.
- Funcția de estompare funcționează doar pentru culoarea albă
* nejo octombrie 2008
- Extensie de sunet pentru lampa de dispoziție:
- Un microfon cu condensator cu un mic LM368 Amp, un recifier și un filtru de trecere redusă RC
- cu o altă intrare analogică, folosesc funcția RGBPotMixer pentru a schimba culoarea obținând semnalul microfon.
* * * Cod pentru decolorarea încrucișată a 3 LED-uri, roșu, verde și albastru sau un LED tricolor, utilizând PWM
- Programul se estompează încet de la roșu la verde, verde la albastru și albastru la roșu
- Codul de depanare presupune Arduino 0004, deoarece folosește noile funcții de stil Serial.begin ()
- inițial „dimmingLED-uri” de Clay Shirky
*
- AnalogRead este activat pe pinul A0 pentru a varia viteza de estompare RGB
- AnalogRead este activat pe Pin A2 pentru a varia culoarea hueRGB
* * * / # include // Outputint ledPin = 13; // controlPin pentru depanareint redPin = 9; // LED roșu, conectat la pinul digital 9int verdePin = 10; // LED verde, conectat la pinul digital 10int albastru = 11; // LED albastru, conectat la pinul digital 11int dimredPin = 3; // Pinii pentru valoarea de diminuare analogică, conectați la driverul tranzistorului în dimgreenPin = 5; int dimbluePin = 6; // Inputint switchPin = 2; // comutatorul este conectat la pinul D2int val = 0; // variabilă pentru citirea stării pinului butonStat; // variabilă pentru a ține butonul starea butonului Apăsați = 0; // 3 apăsări pentru a merge! Int potPin0 = 0; // Pot pentru ajustarea întârzierii între decolorare în Moodlamp; int potPin2 = 2; // Ieșire potențiometru pentru schimbarea hueRGB colorint potVal = 0; // Variabilă pentru stocarea intrării din potențiometru maxVal = 0; // valoarea pentru salvarea implicită a factorului de estompare este 255, dacă nu este conectat niciun Pot, dimPin = 4; // Pot conectat la A4 pentru a reduce luminozitatea // Variabilele programului sunt roșu Val = 255; // Variabile pentru a stoca valorile de trimis către pinul verdeVal = 1; // Valorile inițiale sunt Roșu complet, Verde și Albastru offint blueVal = 1; int i = 0; // Contor buclă int wait; // = 15; // 50ms (.05 secunde) întârziere; scurtează pentru fadesint mai rapid k = 0; // valoare pentru controlLED în funcția de clipire DEBUG = 0; // contor DEBUG; dacă este setat la 1, va scrie valori înapoi prin serialint LCD = 0; // contor LCD; dacă este setat la 1, va scrie valorile înapoi prin serialvoid setup () {pinMode (ledPin, OUTPUT); pinMode (redPin, OUTPUT); // setează pinii ca pinMode de ieșire (greenPin, OUTPUT); pinMode (bluePin, OUTPUT); pinMode (dimredPin, OUTPUT); pinMode (dimgreenPin, OUTPUT); // setează pinii ca pinMode de ieșire (dimbluePin, OUTPUT); pinMode (potPin2, INPUT); // pinMode (potPin0, INPUT); // pinMode (dimPin, INPUT); // pinMode (switchPin, INPUT); // Setați pinul de comutare ca intrare attachInterrupt (0, isr0, RISING); if (DEBUG) {// Dacă vrem să vedem valorile pin pentru depanare … Serial.begin (9600); // … configurați ieșirea serială pe stil 0004}} // Bucla principală programvoid () {if (buttonPresses == 0) {Moodlamp (); // apelează funcția Moodlight} if (buttonPresses == 1) {RGBPotMixer (); // apelează funcția de mixare manuel} if (buttonPresses == 2) {White (); // Este complet alb aici} dacă (buttonPresses == 3) {} // Moodlamp (); // RGBPotMixer (); //Alb(); Monitor (); dim ();} void Monitor () {// Trimite stat la monitor dacă (DEBUG) {// Dacă vrem să citim ieșirea DEBUG + = 1; // Măriți contorul DEBUG dacă (DEBUG> 10) {// Imprimați fiecare 10 bucle DEBUG = 1; // Resetați contorul Serial.print (i); // Comenzi seriale în stil 0004 Serial.print ("\ t"); // Imprimați o filă Serial.print ("R:"); // Indicați că ieșirea este valoarea roșie Serial.print (redVal); // Imprimați valoarea roșie Serial.print ("\ t"); // Imprimați o filă Serial.print ("G:"); // Repetați pentru verde și albastru … Serial.print (greenVal); Serial.print ("\ t"); Serial.print ("B:"); Serial.print (blueVal); // println, pentru a se termina cu un transport retur Serial.print ("\ t"); Serial.print ("dimValue:"); Serial.print (maxVal); // println, pentru a se termina cu o cărucior returnează Serial.print ("\ t"); Serial.print ("așteptați:"); Serial.print (așteptați); // scrie valoarea potPin0 pe monitor Serial.print ("\ t"); Serial.print ("hueRGBvalue"); Serial.print (potVal); // scrie valoarea potPin0 pe monitor Serial.print ("\ t"); Serial.print ("buttonState:"); Serial.print (buttonState); // scrie valoarea potPin0 pe monitor Serial.print ("\ t"); Serial.print ("buttonPresses:"); Serial.println (buttonPresses); // scrie valoarea butonului Apăsați pe monitor}}} void dim () // Funcție pentru estomparea albului // poate mai târziu pentru toate modurile {maxVal = analogRead (dimPin); maxVal / = 4; // Interval analogic de la 0..1024 prea mult pentru diminuarea valorii 0..255 analogWrite (dimredPin, maxVal); analogWrite (dimgreenPin, maxVal); analogWrite (dimbluePin, maxVal);} void Moodlamp () {wait = analogRead (potPin0); // căutați valoarea din potPin0; // dacă nu este conectat niciun Pot: așteptați 255 i + = 1; // Contor de incrementare // i = i - maxVal; if (i <255) // Prima fază de estompare {redVal - = 1; // Roșu în jos verdeVal + = 1; // Green up blueVal = 1; // Albastru scăzut} else if (i <509) // A doua fază de estompare {redVal = 1; // Red low greenVal - = 1; // Verde jos albastruVal + = 1; // Albastru} else if (i <763) // A treia fază de estompare {redVal + = 1; // Red up greenVal = 1; // Verde lo2 blueVal - = 1; // Blue down} else // Re-setează contorul și începe din nou fades {i = 1; } // facem „255-redVal” în loc de „redVal”, deoarece // LED-urile sunt conectate la + 5V în loc de Gnd analogWrite (redPin, 255 - redVal); // Scrieți valorile curente pe pinii LED analogWrite (greenPin, 255 - greenVal); analogWrite (bluePin, 255 - blueVal); / * dimredVal = min (redVal - maxVal, 255); // dimming 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); // Scrieți valorile curente pe pinii LED analogWrite (greenPin, 255 - dimgreenVal); analogWrite (bluePin, 255 - dimblueVal); * / wait / = 4; întârziere (așteptați); // Pauză pentru „așteptați” milisecunde înainte de a relua bucla} void RGBPotMixer () {potVal = analogRead (potPin2); // citiți valoarea potențiometrului la pinul de intrare potVal = potVal / 4; // converti de la 0-1023 la 0-255 hue_to_rgb (potVal); // tratați potVal ca nuanță și convertiți în valuri rgb // „255-” se datorează faptului că avem LED-uri cu anod comun, nu cu catod comun analogWrite (redPin, 255-redVal); // Scrieți valori pe pinii LED analogWrite (greenPin, 255-greenVal); analogWrite (bluePin, 255-blueVal); } void White () {analogWrite (redPin, maxVal); // Scrie valori pe pinii LED analogWrite (greenPin, maxVal); analogWrite (bluePin, maxVal); } / *
- Având o nuanță variabilă „h”, care variază între 0-252,
- setați valoarea culorii RGB în mod corespunzător.
- Presupune saturație maximă și valoare maximă (luminozitate)
- Efectuează matematică pură întreagă, fără virgulă mobilă.
* / void hue_to_rgb (nuanță de octet) {if (nuanță> 252) nuanță = 252; // stetback la 252 !! nejo byte hd = nuanță / 42; // 36 == 252/7, 252 == H_MAX byte hi = hd% 6; // dă 0-5 octeți f = nuanță% 42; octet fs = f * 6; switch (hi) {caz 0: redVal = 252; greenVal = fs; albastruVal = 0; pauză; cazul 1: redVal = 252-fs; greenVal = 252; albastruVal = 0; pauză; cazul 2: redVal = 0; greenVal = 252; blueVal = fs; pauză; caz 3: redVal = 0; greenVal = 252-fs; albastruVal = 252; pauză; caz 4: redVal = fs; greenVal = 0; albastruVal = 252; pauză; cazul 5: redVal = 252; greenVal = 0; blueVal = 252-fs; pauză; }} void isr0 () {Serial.println ("\ n / n inerrupt / n"); buttonState = digitalRead (switchPin); // citiți starea inițială delayMicroseconds (100000); // if (val! = buttonState) {// starea butonului s-a schimbat! // if (buttonState == HIGH) {// verificați dacă butonul este acum apăsat buton Apăsați ++; //} // val = buttonState; // salvați starea nouă în variabila noastră if (buttonPresses == 3) {// zurcksetzen buttonPresses = 0; }} //} Etapa următoare au fost driverele tranzistorului. Am folosit 3 tranzistori PNP cu un curent maxim pe 3Ampere. După ce curentul direct și tensiunea au fost reglate, LEDemitter a funcționat excelent cu intensitate maximă.
Pasul 6: Obțineți-l autonom cu Bootloader-ul ars de PonyProg
Cum să utilizați portul paralel pentru a arde bootloader-ul arduino pe un ATmega168 sau ATmega8 pentru a utiliza un cip gol ieftin cu mediul arduino. În curând ….. poate pe un instructable separat Iată, de asemenea, un bun instructiv pentru a utiliza cipul independent: https: / /www.instructables.com/id/uDuino-Very-Low-Cost-Arduino-Compatible-Developme/?ALLSTEPS
Pasul 7: Deci, acesta este My Arduino Moodlamp
Dacă ți-a plăcut, te rog evaluează-mă.