Taula de continguts:

Moodlamp RGB artesanalment alimentat per Arduino: 7 passos
Moodlamp RGB artesanalment alimentat per Arduino: 7 passos

Vídeo: Moodlamp RGB artesanalment alimentat per Arduino: 7 passos

Vídeo: Moodlamp RGB artesanalment alimentat per Arduino: 7 passos
Vídeo: How to Make a Modern LED Infinity Illusion Mirror 2024, De novembre
Anonim
Moodlamp RGB artesanalment alimentat per Arduino
Moodlamp RGB artesanalment alimentat per Arduino
Moodlamp RGB artesanalment alimentat per Arduino
Moodlamp RGB artesanalment alimentat per Arduino

Aquest instructiu es subdivideix en 5 parts: - Planificació de la construcció (Pas 1) - Pantalla feta a mà (Pas 2 + 3) - Circuit electrònic per conduir LEDs de 3 W amb el controlador ATmega8 (Pas 4) - El codi (Pas 5) - Com aconseguir-ho autònom (llança el carregador d'Arduino amb PonyProg i crema l'esbós) (Step6) properament Vid: Algunes impressions

de.youtube.com/watch?v=apZ9NpaUG84 Pic1: The Moodlamp Pic2: Un poderós LED de 3W

Pas 1: planificació de la construcció:

Planificació de la construcció
Planificació de la construcció
Planificació de la construcció
Planificació de la construcció

M’encanta fer un concepte en un sol full de paper. Al primer full veieu algunes idees inicials. He escollit el disseny inferior dret. La segona pàgina mostra alguns detalls de la construcció. Les mesures són experimentals com cada cop, però bé per a mi;-) Els meus pensaments de maquinari eren: - Puc manejar els materials? - La llum brillarà? a través de l'ombra? - Quina proporció hauria de tenir? - Quants botons i testos necessitaré per a una interfície senzilla? Les meves idees de programari eren: Quantes funcions diferents hauria de tenir la làmpada? - Esvaït RGB automàtic amb velocitat variable - Ajust manual del color Blanc amb brillantor ajustable

Pas 2: l'ombra feta a mà

L’ombra feta a mà
L’ombra feta a mà
L’ombra feta a mà
L’ombra feta a mà
L’ombra feta a mà
L’ombra feta a mà

Recollida dels materials: l’ombra: he trobat a la botiga un full de 3 peus x 3 peus de plàstic de 30 molins (Pic1-3). Utilitzeu un ganivet afilat per tallar-lo. Vaig matar el plàstic amb paper de vidre (Pic4-6). Aconsegueix un cilindre llis, ho he cargolat tot junt després de foradar els forats adequats (Pic7-8). Munteu els tons plàstics als suports de llautó roscats. Té un aspecte agradable i és bastant fàcil d’aconseguir i de manipular. He forat i he tapat els forats perquè coincideixin amb la barra roscada 1/8 (Pic9-10). Mentrestant, he fet un dissipador de calor per refredar els LED de 3W i tenir una base sòlida. Per obtenir no massa tonalitats de l’eix, construeixo una petita gàbia a partir de la vareta de soldadura amb una femella M8 a la part superior (Pic12). Al finalitzar, he muntat totes juntes. Els petits cargols i femelles eren una mica complicats, però 30 minuts després ho vaig fer.

Pas 3: l'ombra feta a mà

L’ombra feta a mà
L’ombra feta a mà
L’ombra feta a mà
L’ombra feta a mà
L’ombra feta a mà
L’ombra feta a mà

La base: es van llançar els discs al torn perquè quedessin llisos i rodons. Després, el vaig tacar amb una taca de fusta de caoba per tal de fer que el pi quedés bé. Què passa?!? Vaig decidir fer una base amb plàstic esmerilat com a ombra i il·lumineu-lo amb un microLED RGB (Pic5).

Pas 4: el circuit elèctric:

El circuit elèctric
El circuit elèctric
El circuit elèctric
El circuit elèctric
El circuit elèctric
El circuit elèctric

A la primera imatge es veu el meu esquema. I aquí hi ha un altre vídeo: https://de.youtube.com/watch? V = xkiYzQAYf_A & NR = 1

Pas 5: el codi:

El codi
El codi
El codi
El codi
El codi
El codi

A les imatges veieu el meu procés amb Arduino. En primer lloc, vaig provar-ho amb el meu ProtoShield, un paquet de bateries i alguns tipus de LEDs. Vaig començar amb "Spooky Projects" i "BionicArduino" de TodEKurt fa uns mesos. Http://todbot.com/blog/spookyarduino/El meu codi és només una combinació complicada del seu codi de projecte. "RGBMoodlight", "RGBPotMixer" i algunes extensions. Tres entrades analògiques i una entrada digital com a commutador de mode (gràcies a Ju. per la rutina d'interrupcions:). a D9, D10 i D11 que admeten PulseWithModulation. Si voleu, puc publicar l’esbós, però és una combinació realment nua d’aquests dos grans codis. Aquí teniu el meu codi original de la làmpada. Sembla una mica desordenat, perquè era el meu molt primerenca etapa de la programació … Però si la copieu, hauria de funcionar molt bé. Hi ha pacífics fins, com el "PotColorMixer", la "RGBfadingFunction" i la Interrupt-Routine per al mode-switch. / * nejo June2008

Codi del meu "Moodlamp", basat en "dimmingLEDs" de Clay Shirky

* nejo Sep2008

  • Codi final del moodlamp amb interruptor de mode d’interrupció, marcatge ràpid analògic per a la decoloració RGB i canvi de color RGB.
  • La funció d’atenuació funciona només per al color blanc

* nejo octubre de 2008

  • Extensió de so per al moodlamp:
  • Un micròfon de condensador amb un diminut amplificador LM368, un recificador i un filtre de pas baix RC
  • amb una altra entrada analògica faig servir la funció RGBPotMixer per canviar el color obtenint el senyal del micròfon.

* * * Codi per a la decoloració creuada de 3 LEDs, vermell, verd i blau, o un LED tricolor, mitjançant PWM

  • El programa s’esvaeix lentament de vermell a verd, verd a blau i blau a vermell
  • El codi de depuració assumeix Arduino 0004, ja que utilitza les noves funcions d’estil Serial.begin ()
  • originalment "dimmingLEDs" de Clay Shirky

*

  • AnalogRead està habilitat al pin A0 per variar la velocitat de decoloració RGB
  • AnalogRead està habilitat al pin A2 per variar el color hueRGB

* * * / # include // Outputint ledPin = 13; // controlPin per a la depuracióint redPin = 9; // LED vermell, connectat al pin digital 9int greenPin = 10; // LED verd, connectat al pin digital 10int bluePin = 11; // LED blau, connectat al pin digital 11int dimredPin = 3; // Pins per al valor de regulació analògica, connectats al controlador del transistorint dimgreenPin = 5; int dimbluePin = 6; // Inputint switchPin = 2; // el commutador està connectat al pin D2int val = 0; // variable per llegir el pin statusint buttonState; // variable per mantenir premut el botó stateint buttonPresses = 0; // 3 pulsacions per anar! Int potPin0 = 0; // Pot per ajustar el retard entre la decoloració a Moodlamp; int potPin2 = 2; // Sortida de potenciòmetre per canviar el color HueRGB potVal = 0; // Variable per emmagatzemar l'entrada del potenciòmetre maxVal = 0; // el valor per desar el factor de regulació per defecte és 255, si no hi ha cap Pot connectat en dimPin = 4; // Pot connectat a A4 per disminuir la brillantor // Variables del programaint vermell = 255; // Variables per emmagatzemar els valors que cal enviar al pinsint greenVal = 1; // Els valors inicials són Vermell complet, Verd i Blau offint blueVal = 1; int i = 0; // Comptador de bucles int wait; // = 15; // 50 ms (0,05 segons) de retard; escurça per obtenir una fadesint més ràpida k = 0; // valor per al controlLED a la funció de parpelleig DEBUG = 0; // comptador DEBUG; si s'estableix a 1, tornarà a escriure els valors mitjançant serialint LCD = 0; // comptador LCD; si s'estableix a 1, tornarà a escriure els valors mitjançant la configuració serialvoid () {pinMode (ledPin, OUTPUT); pinMode (redPin, OUTPUT); // estableix els pins com a pinMode de sortida (greenPin, OUTPUT); pinMode (bluePin, OUTPUT); pinMode (dimredPin, OUTPUT); pinMode (dimgreenPin, OUTPUT); // estableix els pins com a sortida pinMode (dimbluePin, OUTPUT); pinMode (potPin2, INPUT); // pinMode (potPin0, INPUT); // pinMode (dimPin, INPUT); // pinMode (switchPin, INPUT); // Estableix el pin del commutador com a input attachInterrupt (0, isr0, RISING); if (DEBUG) {// Si volem veure els valors dels pins per a la depuració … Serial.begin (9600); // … configureu la sortida de sèrie a l'estil 0004}} // bucle principal de programvoid () {if (buttonPresses == 0) {Moodlamp (); // crida a la funció Moodlight} if (buttonPresses == 1) {RGBPotMixer (); // crida a la funció manuel mix} if (buttonPresses == 2) {White (); // Aquí tot és blanc} if (buttonPresses == 3) {} // Moodlamp (); // RGBPotMixer (); // Blanc (); Monitor (); dim ();} void Monitor () {// Enviar Estat al monitor si (DEBUG) {// Si volem llegir la sortida DEBUG + = 1; // Incrementeu el comptador DEBUG si (DEBUG> 10) {// Imprimiu cada 10 bucles DEBUG = 1; // Restableix el comptador Serial.print (i); // Ordres de sèrie a l'estil 0004 Serial.print ("\ t"); // Imprimiu una pestanya Serial.print ("R:"); // Indiqueu que la sortida és de valor vermell Serial.print (redVal); // Imprimeix el valor en vermell Serial.print ("\ t"); // Imprimiu una pestanya Serial.print ("G:"); // Repetiu per verd i blau … Serial.print (greenVal); Serial.print ("\ t"); Serial.print ("B:"); Serial.print (blueVal); // println, per acabar amb un retorn de carro Serial.print ("\ t"); Serial.print ("dimValue:"); Serial.print (maxVal); // println, per acabar amb un retorn de carro Serial.print ("\ t"); Serial.print ("espera:"); Serial.print (espera); // escriu el valor del potPin0 al monitor Serial.print ("\ t"); Serial.print ("hueRGBvalue"); Serial.print (potVal); // escriu el valor del potPin0 al monitor Serial.print ("\ t"); Serial.print ("buttonState:"); Serial.print (buttonState); // escriu el valor del potPin0 al monitor Serial.print ("\ t"); Serial.print ("buttonPresses:"); Serial.println (buttonPresses); // escriu el valor del botó Premeu al monitor}}} void dim () // Funció per atenuar el blanc // potser després per a tots els modes {maxVal = analogRead (dimPin); maxVal / = 4; // Abast analògic de 0..1024 massa per a atenuar el valor 0..255 analogWrite (dimredPin, maxVal); analogWrite (dimgreenPin, maxVal); analogWrite (dimbluePin, maxVal);} void Moodlamp () {espera = analogRead (potPin0); // cerqueu el valor del potPin0; // si no hi ha cap Pot connectat: espereu 255 i + = 1; // Comptador d’increments // i = i - maxVal; if (i <255) // Primera fase de fades {redVal - = 1; // Vermell cap avall verd + = 1; // Verd blauVal = 1; // Blau baix} else if (i <509) // Segona fase de fades {redVal = 1; // Vermell baix verdVal - = 1; // Verd cap avall blau + = 1; // Blau} else if (i <763) // Tercera fase de fades {redVal + = 1; // Vermell verd = 1; // Verd lo2 blauVal - = 1; // Blau avall} else // Torneu a configurar el comptador i torneu a iniciar els esvaits {i = 1; } // fem "255-redVal" en lloc de només "redVal" perquè els // LED estan connectats a + 5V en lloc de Gnd analogWrite (redPin, 255 - redVal); // Escriviu els valors actuals als pins LED analogWrite (greenPin, 255 - greenVal); analogWrite (bluePin, 255 - blueVal); / * dimredVal = min (redVal - maxVal, 255); // atenuació dimredVal = màx (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); // Escriviu els valors actuals als pins LED analogWrite (greenPin, 255 - dimgreenVal); analogWrite (BluePin, 255 - dimblueVal); * / espera / = 4; retard (esperar); // Pausa per a "esperar" mil·lisegons abans de reprendre el bucle} void RGBPotMixer () {potVal = analogRead (potPin2); // llegiu el valor del potenciòmetre al pin d'entrada potVal = potVal / 4; // convertir de 0-1023 a 0-255 hue_to_rgb (potVal); // tractar potVal com a tonalitat i convertir-lo en vals rgb // "255-" és perquè tenim LEDs d'ànode comú, no pas analogWrite de càtode comú (redPin, 255-redVal); // Escriviu valors als pins LED analogWrite (greenPin, 255-greenVal); analogWrite (bluePin, 255-blueVal); } void White () {analogWrite (redPin, maxVal); // Escriu valors als pins LED analogWrite (greenPin, maxVal); analogWrite (bluePin, maxVal); } / *

  • Donat un to variable 'h', que oscil·la entre 0-252,
  • definiu el valor de color RGB adequadament.
  • Assumeix saturació màxima i valor màxim (brillantor)
  • Realitza matemàtiques purament senceres, sense punt flotant.

* / void hue_to_rgb (tonalitat de bytes) {if (tonalitat> 252) tonalitat = 252; // tornar a 252 !! nejo byte hd = tonalitat / 42; // 36 == 252/7, 252 == H_MAX byte hi = hd% 6; // dóna 0-5 bytes f = tonalitat% 42; byte fs = f * 6; switch (hi) {cas 0: redVal = 252; greenVal = fs; blauVal = 0; trencar; cas 1: redVal = 252-fs; greenVal = 252; blauVal = 0; trencar; cas 2: redVal = 0; greenVal = 252; blauVal = fs; trencar; cas 3: redVal = 0; greenVal = 252-fs; blauVal = 252; trencar; cas 4: redVal = fs; greenVal = 0; blauVal = 252; trencar; cas 5: redVal = 252; greenVal = 0; blueVal = 252-fs; trencar; }} void isr0 () {Serial.println ("\ n / n inerrupt / n"); buttonState = digitalRead (switchPin); // llegir l'estat inicial delayMicroseconds (100000); // if (val! = buttonState) {// l'estat del botó ha canviat! // if (buttonState == HIGH) {// comproveu si ara es prem el botó buttonPresses ++; //} // val = buttonState; // deseu el nou estat a la nostra variable if (buttonPresses == 3) {// zur cksetzen buttonPresses = 0; }} //} La següent etapa van ser els controladors de transistors. He utilitzat 3 transistors PNP amb un corrent màxim a 3Ampere. Després de regular el corrent continu i el voltatge, el LEDemitter va funcionar molt bé amb plena intensitat.

Pas 6: Obteniu-lo independent amb el carregador d'arrencada cremat per PonyProg

Obteniu-lo de manera autònoma amb el carregador d'arrencada cremat per PonyProg
Obteniu-lo de manera autònoma amb el carregador d'arrencada cremat per PonyProg

Com s'utilitza el port paral·lel per gravar el carregador d'arrencada arduino en un ATmega168 o ATmega8 per utilitzar un xip en blanc econòmic amb l'entorn arduino. Aviat arribarà ….. potser en una instrucció independent. També hi ha una bona instrucció per utilitzar el xip autònom: https: / /www.instructables.com/id/uDuino-Very-Low-Cost-Arduino-Compatible-Developme/?ALLSTEPS

Pas 7: Així és el meu Arduino Moodlamp

Doncs aquest és el meu Arduino Moodlamp
Doncs aquest és el meu Arduino Moodlamp

Si t’ha agradat, valora’m.

Recomanat: