Taula de continguts:
- Pas 1: planificació de la construcció:
- Pas 2: l'ombra feta a mà
- Pas 3: l'ombra feta a mà
- Pas 4: el circuit elèctric:
- Pas 5: el codi:
- Pas 6: Obteniu-lo independent amb el carregador d'arrencada cremat per PonyProg
- Pas 7: Així és el meu Arduino Moodlamp
Vídeo: Moodlamp RGB artesanalment alimentat per Arduino: 7 passos
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:17
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ó:
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à
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à
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:
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:
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
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
Si t’ha agradat, valora’m.
Recomanat:
Font d'alimentació per banc alimentat per USB-C: 10 passos (amb imatges)
Font d'alimentació de banc alimentat per USB-C: una font d'alimentació de banc és una eina essencial que es pot tenir quan es treballa amb productes electrònics, ja que és capaç de configurar el voltatge exacte que necessita el seu projecte i també pot limitar el corrent quan les coses es planifiquin realment útils. Aquesta és la meva alimentació USB-C portàtil
Botó intel·ligent Wi-Fi alimentat per bateria per controlar els llums HUE: 5 passos (amb imatges)
Botó intel·ligent Wi-Fi alimentat per bateria per controlar els llums HUE: aquest projecte demostra com construir un botó Wi-Fi IoT amb bateria en menys de 10 minuts. El botó controla els llums HUE sobre IFTTT. Avui podeu construir dispositius electrònics i connectar-los a altres dispositius domèstics intel·ligents literalment en qüestió de minuts. Què és
Màquina de boira de gel sec més recent: controlat per Bluetooth, alimentat per bateria i imprès en 3D: 22 passos (amb imatges)
Màquina de boira de gel sec sec final: controlat per Bluetooth, alimentat per bateria i imprès en 3D: recentment necessitava una màquina de gel sec per a alguns efectes teatrals per a un espectacle local. El nostre pressupost no s’estendria a la contractació d’un professional, de manera que això és el que vaig construir. La majoria s’imprimeix en 3D, es controla remotament mitjançant bluetooth, potència de bateria
Dispensador d'aliments per a gossos alimentat per Arduino: 10 passos (amb imatges)
Distribuïdor d'aliments per a gossos alimentat per Arduino: si la vostra casa és com la meva, és possible que oblideu algunes tasques quan tingueu pressa. No deixeu que la vostra mascota s’oblidi. Aquest dispensador automatitzat d’aliments per a gossos utilitza un Arduino per lliurar la quantitat adequada de pinzellades al moment adequat. Tot pa
ESP8266 / ESP12 Witty Cloud: controlador RGB SmartThings alimentat per Arduino: 4 passos
ESP8266 / ESP12 Witty Cloud: controlador RGB SmartThings alimentat per Arduino: el RGB del RGB és a tot arreu. A qui no li agrada tenir una il·luminació fresca i colorida a casa seva avui en dia? Aquest petit projecte mostra l’ESP8266 barrejat amb el control de SmartThings i s’acaba com un autèntic controlador RGB per a LED str