Cuprins:

Moodlamp RGB fabricat manual Arduino: 7 pași
Moodlamp RGB fabricat manual Arduino: 7 pași

Video: Moodlamp RGB fabricat manual Arduino: 7 pași

Video: Moodlamp RGB fabricat manual Arduino: 7 pași
Video: Easy DIY Mood Lamp using Arduino Nano, LED Pin and Button 2024, Iulie
Anonim
Moodlamp RGB alimentat manual cu Arduino
Moodlamp RGB alimentat manual cu Arduino
Moodlamp RGB alimentat manual cu Arduino
Moodlamp RGB alimentat manual cu Arduino

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:

Planificarea construcției
Planificarea construcției
Planificarea construcției
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ă

Umbra Handmade
Umbra Handmade
Umbra Handmade
Umbra Handmade
Umbra Handmade
Umbra Handmade

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ă

Umbra Handmade
Umbra Handmade
Umbra Handmade
Umbra Handmade
Umbra Handmade
Umbra Handmade

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:

Circuitul electric
Circuitul electric
Circuitul electric
Circuitul electric
Circuitul electric
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:

Codul
Codul
Codul
Codul
Codul
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

Obțineți-l independent cu Bootloader-ul ars de PonyProg
Obțineți-l independent 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

Deci, acesta este My Arduino Moodlamp
Deci, acesta este My Arduino Moodlamp

Dacă ți-a plăcut, te rog evaluează-mă.

Recomandat: