Sommario:

Lampada d'atmosfera RGB realizzata a mano con Arduino: 7 passaggi
Lampada d'atmosfera RGB realizzata a mano con Arduino: 7 passaggi

Video: Lampada d'atmosfera RGB realizzata a mano con Arduino: 7 passaggi

Video: Lampada d'atmosfera RGB realizzata a mano con Arduino: 7 passaggi
Video: Arduino e Processing: LFS - Light Follower Sensor. Sensore ad Inseguimento di Luce autocostruito. 2024, Luglio
Anonim
Lampada d'atmosfera RGB realizzata a mano con Arduino
Lampada d'atmosfera RGB realizzata a mano con Arduino
Lampada d'atmosfera RGB realizzata a mano con Arduino
Lampada d'atmosfera RGB realizzata a mano con Arduino

Questa istruzione è suddivisa in 5 parti:- Pianificazione della costruzione (Step1)- Il paralume fatto a mano (Step2+3)- Il circuito elettronico per pilotare LED da 3W con il controller ATmega8 (Step4)- Il codice (Step5)- Come ottenerlo stand-alone (flash del bootloader Arduino con PonyProg e masterizzare lo sketch) (Step6) in arrivo Vid: Some Impressions

de.youtube.com/watch?v=apZ9NpaUG84 Pic1: La lampada d'atmosfera Pic2: Un potente LED da 3W

Fase 1: Pianificazione della costruzione:

Pianificazione della costruzione
Pianificazione della costruzione
Pianificazione della costruzione
Pianificazione della costruzione

Amo fare un concetto su un solo foglio di carta. Sul primo foglio vedi alcune prime idee. Ho scelto il design in basso a destra. La seconda pagina mostra alcuni dettagli per la costruzione. Le misure sono sperimentali come ogni volta, ma per me va bene;-) I miei pensieri sull'hardware erano:- Posso gestire i materiali?- La luce brillerà attraverso il paralume?- Che proporzione dovrebbe avere?- Di quante manopole e pentole avrò bisogno per un'interfaccia semplice?I miei pensieri sul software erano: Quante diverse funzioni dovrebbe avere la lampada? - Dissolvenza RGB automatica con velocità variabile - Regolazione manuale del colore - Bianco con luminosità regolabile

Passaggio 2: l'ombra fatta a mano

L'ombra fatta a mano
L'ombra fatta a mano
L'ombra fatta a mano
L'ombra fatta a mano
L'ombra fatta a mano
L'ombra fatta a mano

Raccolta dei materiali: L'ombra: ho trovato un foglio di 3 piedi x 3 piedi di plastica da 30 millimetri al negozio (foto 1-3). Usa un coltello affilato per tagliarlo. Ho smerigliato la plastica usando carta vetrata (foto 4-6). ottenere un cilindro liscio ho avvitato il tutto dopo aver praticato i fori giusti (Pic7-8). Montare le sfumature di plastica sui supporti filettati in ottone. Ha un bell'aspetto ed è piuttosto facile da ottenere e maneggiare. Ho praticato e filettato i fori per far combaciare la barra filettata 1/8 (Pic9-10). Nel frattempo, ho realizzato un dissipatore di calore per raffreddare i LED da 3 W e per avere una base solida. Per non ottenere troppe sfumature dall'albero, ho costruito una piccola gabbia in tondino di saldatura con un dado M8 sulla parte superiore (Pic12). Come finitura ho assemblato il tutto. Le piccole viti e i dadi erano un po' complicati, ma 30 minuti dopo ce l'ho fatta.

Passaggio 3: l'ombra fatta a mano

L'ombra fatta a mano
L'ombra fatta a mano
L'ombra fatta a mano
L'ombra fatta a mano
L'ombra fatta a mano
L'ombra fatta a mano

La base: I dischi sono stati inseriti nel tornio per renderlo liscio e rotondo. Successivamente, l'ho colorato con una tinta per legno di mogano in modo da rendere il pino un bell'aspetto. E poi?!? Ho deciso di fare una base usando lo stesso plastica smerigliata come paralume e retroilluminarlo con un microLED RGB (Pic5). Le manopole: ho realizzato il pulsante da un pezzo di mogano e le manopole da un ritaglio di legno di noce.

Fase 4: Il circuito elettrico:

Il circuito elettrico
Il circuito elettrico
Il circuito elettrico
Il circuito elettrico
Il circuito elettrico
Il circuito elettrico

Nella prima foto vedi il mio schema. Ed ecco un altro video:

Passaggio 5: il codice:

Il codice
Il codice
Il codice
Il codice
Il codice
Il codice

Nelle foto vedete il mio processo con Arduino. Per prima cosa ho provato con il mio ProtoShield fatto da me, un pacco batteria e alcuni tipi di LED. Ho iniziato con "Spooky Projects" e "BionicArduino" di TodEKurt alcuni mesi fa.https://todbot.com/blog/spookyarduino/Il mio codice è solo una combinazione complicata del suo codice di progetto."RGBMoodlight", "RGBPotMixer"e alcune estensioni. Tre ingressi analogici e uno digitale come interruttore di modalità (grazie a Ju. per la routine di interrupt:). I LED sono collegati a D9, D10 e D11 che supportano PulseWithModulation. Se vuoi, posso pubblicare lo schizzo, ma è una combinazione davvero spoglia di questi due fantastici codici. Ecco il mio codice originale della lampada. Sembra un po' disordinato, perché era il mio molto presto nella programmazione…Ma se lo copi, dovrebbe funzionare alla grande. Ci sono ottimi pezzi, come "PotColorMixer", "RGBfadingFunction" e Interrupt-Routine per il cambio di modalità./* nejo June2008

Codice per la mia "Moodlamp", basata su "dimmingLEDs" di Clay Shirky

*nejo settembre2008

  • Codice finale per la lampada mood con interruttore di modalità di interruzione, selezione rapida analogica per dissolvenza RGB e cambio colore RGB.
  • La funzione di attenuazione funziona solo per il colore bianco

*nejo ottobre2008

  • Estensione sonora per la moodlamp:
  • Un microfono a condensatore con un minuscolo amplificatore LM368, un raddrizzatore e un filtro passa-basso RC
  • con un altro ingresso analogico uso la funzione RGBPotMixer per cambiare il colore ottenendo il segnale del microfono.

* * *Codice per la dissolvenza incrociata di 3 LED, rosso, verde e blu, o un LED a tre colori, utilizzando PWM

  • Il programma passa lentamente dal rosso al verde, dal verde al blu e dal blu al rosso
  • Il codice di debug assume Arduino 0004, poiché utilizza le nuove funzioni in stile Serial.begin()
  • originariamente "dimmingLEDs" di Clay Shirky

*

  • AnalogRead è abilitato sul Pin A0 per variare la velocità di dissolvenza RGB
  • AnalogRead è abilitato sul Pin A2 per variare il colore hueRGB

* * */#include // Outputint ledPin = 13; // controlPin per debuggingint redPin = 9; // LED rosso, connesso al pin digitale 9int greenPin = 10; // LED verde, connesso al pin digitale 10int bluePin = 11; // LED blu, connesso al pin digitale 11int dimredPin = 3; // Pin per il valore di dimmeraggio analogico, collegati al driver del transistorint dimgreenPin = 5;int dimbluePin = 6;// Inputint switchPin = 2; // l'interruttore è collegato al pin D2int val = 0; // variabile per la lettura del pin statusint buttonState; // variabile per tenere premuto il pulsante stateint buttonPresses = 0; // 3 pressioni per andare!int potPin0 = 0; // Pot per regolare il ritardo tra la dissolvenza in Moodlamp; int potPin2 = 2; // Uscita potenziometro per cambiare il colorante hueRGB potVal = 0; // Variabile per memorizzare l'input dal potenziometroint maxVal = 0; // il valore per salvare il fattore di regolazione predefinito è 255, se non è collegato alcun Potint dimPin = 4; //Pot collegato ad A4 per attenuare la luminosità// Variabili di programmaint redVal = 255; // Variabili per memorizzare i valori da inviare al pinsint greenVal = 1; // I valori iniziali sono Rosso pieno, Verde e Blu offint blueVal = 1;int i = 0; // Contatore di loop int wait;// = 15; // Ritardo di 50 ms (0,05 secondi); accorciare per dissolvenze più veloci k = 0; // valore per il controlLED nella funzione blinkint DEBUG = 0; // contatore di DEBUG; se impostato a 1, riscriverà i valori tramite serialint LCD = 0; // Contatore LCD; se impostato a 1, riscriverà i valori tramite serialvoid setup(){ pinMode(ledPin, OUTPUT); pinMode(redPin, OUTPUT); // imposta i pin come output pinMode(greenPin, OUTPUT); pinMode(bluePin, OUTPUT); pinMode(dimredPin, OUTPUT); pinMode(dimgreenPin, OUTPUT); // imposta i pin come output pinMode(dimbluePin, OUTPUT); pinMode(potPin2, INPUT); // pinMode(potPin0, INPUT); // pinMode(dimPin, INPUT); // pinMode(switchPin, INPUT); // Imposta il pin dello switch come input attachInterrupt(0, isr0, RISING); if (DEBUG) { // Se vogliamo vedere i valori dei pin per il debug… Serial.begin(9600); // …imposta l'uscita seriale sullo stile 0004 }}// Main programvoid loop(){ if (buttonPresses == 0) { Moodlamp(); // chiama la funzione Moodlight } if (buttonPresses == 1) { RGBPotMixer(); // chiama la funzione manuel mix } if (buttonPresses == 2) { White(); // Qui è tutto bianco } if (buttonPresses == 3) { } //Moodlamp(); //RGBPotMixer(); //Bianco(); Tenere sotto controllo(); dim();}void Monitor(){ // Invia lo stato al monitor if (DEBUG) { // Se vogliamo leggere l'output DEBUG += 1; // Incrementa il contatore DEBUG if (DEBUG > 10) { // Stampa ogni 10 cicli DEBUG = 1; // Reimposta il contatore Serial.print(i); // Comandi seriali in stile 0004 Serial.print("\t"); // Stampa una scheda Serial.print("R:"); // Indica che l'output è il valore rosso Serial.print(redVal); // Stampa il valore in rosso Serial.print("\t"); // Stampa una scheda Serial.print("G:"); // Ripeti per verde e blu… Serial.print(greenVal); Serial.print("\t"); Serial.print("B:"); Serial.print(blueVal); // println, per terminare con un ritorno a capo Serial.print("\t"); Serial.print("dimValue:"); Serial.print(maxVal); // println, per terminare con un ritorno a capo Serial.print("\t"); Serial.print("aspetta:"); Serial.print(attesa); // scrive il valore del potPin0 sul monitor Serial.print("\t"); Serial.print("hueRGBvalue"); Serial.print(potVal); // scrive il valore del potPin0 sul monitor Serial.print("\t"); Serial.print("Statopulsante:"); Serial.print(buttonState); // scrive il valore del potPin0 sul monitor Serial.print("\t"); Serial.print("pulsantePreme:"); Serial.println(buttonPresses); // scrive il valore del buttonPresses sul monitor } }} void dim() // Funzione per attenuare il bianco // forse più tardi per tutti i Modes{ maxVal = analogRead(dimPin); maxVal /= 4; // L'intervallo analogico da 0..1024 è eccessivo per la regolazione del valore 0..255 analogWrite(dimredPin, maxVal); analogWrite(dimgreenPin, maxVal); analogWrite(dimbluePin, maxVal);}void Moodlamp(){ wait = analogRead(potPin0); // cerca il valore dal potPin0; // se nessun Pot è connesso: wait 255 i += 1; // Incrementa il contatore // i = i - maxVal; if (i < 255) // Prima fase delle dissolvenze { redVal -= 1; // Rosso giù greenVal += 1; // Verde su blueVal = 1; // Blu basso } else if (i < 509) // Seconda fase di dissolvenze { redVal = 1; // Rosso basso greenVal -= 1; // Verde giù blueVal += 1; // Blue up } else if (i < 763) // Terza fase di dissolvenze { redVal += 1; // Red up greenVal = 1; // Verde lo2 blueVal -= 1; // Blu giù } else // Reimposta il contatore e riavvia le dissolvenze { i = 1; } // facciamo "255-redVal" invece di solo "redVal" perché i // LED sono collegati a +5V invece di Gnd analogWrite(redPin, 255 - redVal); // Scrive i valori correnti sui pin LED analogWrite(greenPin, 255 - greenVal); analogWrite(bluePin, 255 - blueVal); /* dimredVal =min(redVal - maxVal, 255); //diminuendo 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); // Scrive i valori correnti sui pin LED analogWrite(greenPin, 255 - dimgreenVal); analogWrite(bluePin, 255 - dimblueVal); */ aspetta /=4; ritardo (attesa); // Pausa per 'aspetta' millisecondi prima di riprendere il ciclo}void RGBPotMixer(){ potVal = analogRead(potPin2); // legge il valore del potenziometro al pin di ingresso potVal = potVal / 4; // converte da 0-1023 a 0-255 hue_to_rgb(potVal); // tratta potVal come tonalità e converti in rgb vals // "255-" è perché abbiamo LED ad anodo comune, non a catodo comune analogWrite(redPin, 255-redVal); // Scrive valori sui pin LED analogWrite(greenPin, 255-greenVal); analogWrite(bluePin, 255-blueVal); }void White(){ analogWrite(redPin, maxVal); // Scrive valori sui pin LED analogWrite(greenPin, maxVal); analogWrite(bluePin, maxVal); }/*

  • Data una tonalità variabile 'h', che varia da 0-252,
  • impostare il valore del colore RGB in modo appropriato.
  • Presuppone la saturazione del valore massimo e il valore massimo (luminosità)
  • Esegue matematica puramente intera, senza virgola mobile.

*/void hue_to_rgb(byte hue) { if(hue > 252) hue = 252; // ritorno al 252!! nejo byte hd = tonalità / 42; // 36 == 252/7, 252 == H_MAX byte hi = hd % 6; // restituisce 0-5 byte f = tonalità % 42; byte fs = f * 6; switch(hi) { case 0: redVal = 252; greenVal = fs; bluVal = 0; rottura; caso 1: redVal = 252-fs; greenVal = 252; bluVal = 0; rottura; caso 2: redVal = 0; greenVal = 252; blueVal = fs; rottura; caso 3: redVal = 0; greenVal = 252-fs; bluVal = 252; rottura; caso 4: redVal = fs; greenVal = 0; bluVal = 252; rottura; caso 5: redVal = 252; greenVal = 0; blueVal = 252-fs; rottura; } } void isr0(){ Serial.println("\n \n interrompe \n"); buttonState = digitalRead(switchPin); // legge lo stato iniziale delayMicroseconds(100000); //if (val != buttonState) { // lo stato del pulsante è cambiato! // if (buttonState == HIGH) { // controlla se il pulsante è ora premuto buttonPresses++; // } // val = statopulsante; // salva il nuovo stato nella nostra variabile if (buttonPresses == 3) { // zur cksetzen buttonPresses = 0; } } // }La fase successiva sono stati i driver a transistor. Ho usato 3 transistor PNP con una corrente massima su 3Ampere. Dopo aver regolato la corrente diretta e la tensione, l'emettitore LED ha funzionato alla grande con la massima intensità.

Passaggio 6: scaricalo da solo con il bootloader masterizzato con PonyProg

Ottienilo standalone con il bootloader masterizzato con PonyProg
Ottienilo standalone con il bootloader masterizzato con PonyProg

Come utilizzare la porta parallela per masterizzare il bootloader arduino su un ATmega168 o ATmega8 per utilizzare un chip vuoto economico con l'ambiente arduino. Presto disponibile … forse su un istruibile separato Ecco anche un buon istruttore per usare il chip autonomo: https:/ /www.instructables.com/id/uDuino-Very-Low-Cost-Arduino-Compatible-Developme/?ALLSTEPS

Passaggio 7: questa è la mia lampada d'atmosfera Arduino

Quindi questo è il mio Arduino Moodlamp
Quindi questo è il mio Arduino Moodlamp

Se ti è piaciuto, per favore votami.

Consigliato: