Índice:

Moodlamp RGB feito à mão com Arduino: 7 etapas
Moodlamp RGB feito à mão com Arduino: 7 etapas

Vídeo: Moodlamp RGB feito à mão com Arduino: 7 etapas

Vídeo: Moodlamp RGB feito à mão com Arduino: 7 etapas
Vídeo: AULA 06: Luzes Coloridas (LED RGB) - Aprenda Eletrônica e Programação Arduino 2024, Novembro
Anonim
Moodlamp RGB feito à mão com Arduino
Moodlamp RGB feito à mão com Arduino
Moodlamp RGB feito à mão com Arduino
Moodlamp RGB feito à mão com Arduino

Este instrutivo está subdividido em 5 partes: - Planejamento da construção (Passo 1) - A cortina artesanal (Passo 2 + 3) - O circuito eletrônico para acionamento de LEDs de 3W com o controlador ATmega8 (Passo 4) - O Código (Passo 5) - Como obtê-lo autônomo (atualizar o carregador de inicialização Arduino com PonyProg e gravar o esboço) (Etapa 6) em breve Vid: Algumas impressões

de.youtube.com/watch?v=apZ9NpaUG84 Pic1: O Moodlamp Pic2: Um poderoso LED de 3 W

Etapa 1: Planejando a construção:

Planejando a construção
Planejando a construção
Planejando a construção
Planejando a construção

Gosto de fazer um conceito em apenas uma folha de papel. Na primeira folha, você vê algumas das primeiras idéias. Escolhi o desenho inferior direito. A segunda página mostra alguns detalhes para a construção. As medidas são experimentais como todas as vezes, mas ok para mim;-) Meus pensamentos sobre o hardware foram: - Posso manusear os materiais? - A luz brilhará através da sombra? - Qual a proporção que deve ter? - Quantos botões e potes eu preciso para uma interface simples? Meus pensamentos sobre o software foram: Quantas funções diferentes a lâmpada deve ter? - Desbotamento RGB automático com velocidade variável - Ajuste manual de cor - Branco com brilho ajustável

Etapa 2: a sombra artesanal

A sombra artesanal
A sombra artesanal
A sombra artesanal
A sombra artesanal
A sombra artesanal
A sombra artesanal

Juntando os materiais: A sombra: Eu encontrei uma folha de 3 pés x 3 pés de plástico de 30 mill na loja (Pic1-3). Use uma faca afiada para cortá-la. Eu glatei o plástico usando uma lixa (Pic4-6). pegue um cilindro liso aparafusei tudo junto depois de fazer os furos corretos (Fig7-8). Monte as cortinas de plástico nos suportes de latão roscados. Parece bem e é bastante fácil de obter e manusear. Furei e bati nos orifícios para combinar com a barra roscada 1/8 (Pic9-10). Entretanto, fiz um dissipador de calor para resfriar os LEDs de 3W e ter uma base sólida. Para não tirar muitos tons do eixo, construí uma pequena gaiola de haste de solda com uma porca M8 no topo (Fig. 12). Como acabamento montei todos juntos. Os pequenos parafusos e porcas eram um pouco complicados, mas 30 minutos depois eu consegui fazer.

Etapa 3: a sombra artesanal

A sombra artesanal
A sombra artesanal
A sombra artesanal
A sombra artesanal
A sombra artesanal
A sombra artesanal

A base: Os discos foram enfiados no torno para deixá-lo liso e redondo. Em seguida, pintei com uma tinta de madeira de mogno para que o pinho ficasse bem. O que vem a seguir?!? Decidi fazer uma base usando a mesma plástico fosco como a sombra, e retroiluminá-lo com um microLED RGB (Pic5). Os botões: Eu fiz o botão de um pedaço de mogno e os botões de um corte de nogueira.

Etapa 4: O circuito elétrico:

O circuito elétrico
O circuito elétrico
O circuito elétrico
O circuito elétrico
O circuito elétrico
O circuito elétrico

Na primeira foto você vê meu esquema. E aqui está outro vídeo: https://de.youtube.com/watch? V = xkiYzQAYf_A & NR = 1

Etapa 5: O Código:

O código
O código
O código
O código
O código
O código

Nas fotos você vê meu processo com o Arduino. Em primeiro lugar, experimentei com meu próprio ProtoShield, uma bateria e alguns tipos de LEDs. Comecei com "Spooky Projects" e "BionicArduino" de TodEKurt alguns meses atrás.https://todbot.com/blog/spookyarduino/Meu código é apenas uma combinação complicada de seu código de projeto. "RGBMoodlight", "RGBPotMixer" e algumas extensões. Três entradas analógicas e uma entrada digital como interruptor de modo (Graças a Ju. pela rotina de interrupção:). Os LEDs estão conectados para D9, D10 e D11 que suportam PulseWithModulation. Se quiser, posso publicar o esboço, mas é uma combinação realmente simples desses dois códigos excelentes. Aqui está meu código original da lâmpada. Parece um pouco confuso, porque era meu estágio muito inicial na programação … Mas se você copiá-lo, ele deve funcionar muito bem. Existem peças finas, como o "PotColorMixer", o "RGBfadingFunction" e a Interrupt-Routine para o mode-switch./* nejo June2008

Código para meu "Moodlamp", baseado em "dimmingLEDs" de Clay Shirky

* nejo set2008

  • Código final para a lâmpada de humor com interruptor de modo de interrupção, discagem rápida analógica para desvanecimento RGB e mudança de cor RGB.
  • A função de escurecimento funciona apenas para a cor branca

* nejo outubro de 2008

  • Extensão de som para a lâmpada de humor:
  • Um microfone condensador com um minúsculo LM368 Amp, um recificador e um filtro passa-baixo RC
  • com outra entrada analógica, uso a função RGBPotMixer para alterar a cor obtendo o sinal do microfone.

* * * Código para cross-fading 3 LEDs, vermelho, verde e azul, ou um LED tricolor, usando PWM

  • O programa passa lentamente de vermelho para verde, verde para azul e azul para vermelho
  • O código de depuração assume Arduino 0004, pois usa as novas funções do estilo Serial.begin ()
  • originalmente "dimmingLEDs" por Clay Shirky

*

  • AnalogRead é habilitado no Pino A0 para variar a velocidade de desvanecimento RGB
  • AnalogRead está habilitado no pino A2 para variar a cor hueRGB

* * * / # include // Outputint ledPin = 13; // controlPin para debuggingint redPin = 9; // LED vermelho, conectado ao pino digital 9int greenPin = 10; // LED verde, conectado ao pino digital 10int bluePin = 11; // LED azul, conectado ao pino digital 11int dimredPin = 3; // Pinos para o valor de escurecimento analógico, conectado ao driver do transistorint dimgreenPin = 5; int dimbluePin = 6; // Inputint switchPin = 2; // interruptor está conectado ao pino D2int val = 0; // variável para ler o pin statusint buttonState; // variável para manter o botão stateint buttonPresses = 0; // 3 pressionamentos para ir! Int potPin0 = 0; // Pot para ajustar o atraso entre o desvanecimento no Moodlamp; int potPin2 = 2; // Saída do potenciômetro para alterar o hueRGB colorint potVal = 0; // Variável para armazenar a entrada do potenciômetroint maxVal = 0; // valor para salvar o fator de escurecimento padrão é 255, se nenhum Pot estiver conectadoint dimPin = 4; // Pote conectado a A4 para diminuir o brilho // Variáveis do programaint redVal = 255; // Variáveis para armazenar os valores a enviar para o pinsint greenVal = 1; // Os valores iniciais são Red full, Green e Blue offint blueVal = 1; int i = 0; // Contador de loop int wait; // = 15; // atraso de 50ms (0,05 segundo); encurte para fadesint mais rápido k = 0; // valor para o controlLED no blink-functionint DEBUG = 0; // contador DEBUG; se definido como 1, escreverá os valores de volta via serialint LCD = 0; // contador LCD; se definido como 1, gravará os valores de volta via serialvoid setup () {pinMode (ledPin, OUTPUT); pinMode (redPin, OUTPUT); // define os pinos como saída pinMode (greenPin, OUTPUT); pinMode (bluePin, OUTPUT); pinMode (dimredPin, OUTPUT); pinMode (dimgreenPin, OUTPUT); // define os pinos como saída pinMode (dimbluePin, OUTPUT); pinMode (potPin2, INPUT); // pinMode (potPin0, INPUT); // pinMode (dimPin, INPUT); // pinMode (switchPin, INPUT); // Defina o pino da chave como entrada attachInterrupt (0, isr0, RISING); if (DEBUG) {// Se quisermos ver os valores dos pinos para depuração… Serial.begin (9600); //… configurar a saída serial no estilo 0004}} // loop principal do programavoid () {if (buttonPresses == 0) {Moodlamp (); // chama a função Moodlight} if (buttonPresses == 1) {RGBPotMixer (); // chama a função de mixagem manual} if (buttonPresses == 2) {White (); // É tudo branco aqui} if (buttonPresses == 3) {} // Moodlamp (); // RGBPotMixer (); //Branco(); Monitor(); dim ();} void Monitor () {// Enviar estado para o monitor if (DEBUG) {// Se quisermos ler a saída DEBUG + = 1; // Incrementa o contador DEBUG if (DEBUG> 10) {// Imprime a cada 10 loops DEBUG = 1; // Reinicia o contador Serial.print (i); // Comandos seriais no estilo 0004 Serial.print ("\ t"); // Imprime uma guia Serial.print ("R:"); // Indica que a saída é o valor vermelho Serial.print (redVal); // Imprime o valor de vermelho Serial.print ("\ t"); // Imprime uma guia Serial.print ("G:"); // Repita para verde e azul… Serial.print (greenVal); Serial.print ("\ t"); Serial.print ("B:"); Serial.print (blueVal); // println, para terminar com um retorno de carro Serial.print ("\ t"); Serial.print ("dimValue:"); Serial.print (maxVal); // println, para terminar com um retorno de carro Serial.print ("\ t"); Serial.print ("esperar:"); Serial.print (esperar); // escreve o valor de potPin0 no monitor Serial.print ("\ t"); Serial.print ("hueRGBvalue"); Serial.print (potVal); // escreve o valor de potPin0 no monitor Serial.print ("\ t"); Serial.print ("buttonState:"); Serial.print (buttonState); // escreve o valor de potPin0 no monitor Serial.print ("\ t"); Serial.print ("buttonPresses:"); Serial.println (buttonPresses); // escreve o valor dos botões pressionados no monitor}}} void dim () // Função para escurecimento do branco // talvez mais tarde para todos os modos {maxVal = analogRead (dimPin); maxVal / = 4; // Faixa analógica de 0..1024 muito para escurecer o valor 0..255 analogWrite (dimredPin, maxVal); analogWrite (dimgreenPin, maxVal); analogWrite (dimbluePin, maxVal);} void Moodlamp () {esperar = analogRead (potPin0); // procure o valor do potPin0; // se nenhum potenciômetro estiver conectado: aguarde 255 i + = 1; // Incrementar contador // i = i - maxVal; if (i <255) // Primeira fase de fades {redVal - = 1; // Red down greenVal + = 1; // Verde para cima blueVal = 1; // Azul baixo} else if (i <509) // Segunda fase de fades {redVal = 1; // Red low greenVal - = 1; // Verde para baixo blueVal + = 1; // Azul para cima} else if (i <763) // Terceira fase de fades {redVal + = 1; // Vermelho para cima greenVal = 1; // Green lo2 blueVal - = 1; // Azul para baixo} else // Redefina o contador e reinicie os fades {i = 1; } // fazemos "255-redVal" em vez de apenas "redVal" porque os // LEDs são conectados a + 5V em vez de Gnd analogWrite (redPin, 255 - redVal); // Grava os valores atuais nos pinos do LED analogWrite (greenPin, 255 - greenVal); analogWrite (bluePin, 255 - blueVal); / * dimredVal = min (redVal - maxVal, 255); // escurecimento 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); // Grava os valores atuais nos pinos do LED analogWrite (greenPin, 255 - dimgreenVal); analogWrite (bluePin, 255 - dimblueVal); * / esperar / = 4; atrasar (esperar); // Pausa para 'esperar' milissegundos antes de retomar o loop} void RGBPotMixer () {potVal = analogRead (potPin2); // lê o valor do potenciômetro no pino de entrada potVal = potVal / 4; // converter de 0-1023 para 0-255 hue_to_rgb (potVal); // tratar potVal como matiz e converter para rgb vals // "255-" é porque temos LEDs de ânodo comum, não de cátodo comum analogWrite (redPin, 255-redVal); // Grava os valores nos pinos do LED analogWrite (greenPin, 255-greenVal); analogWrite (bluePin, 255-blueVal); } void White () {analogWrite (redPin, maxVal); // Grava os valores nos pinos do LED analogWrite (greenPin, maxVal); analogWrite (bluePin, maxVal); } / *

  • Dado um matiz variável 'h', que varia de 0-252,
  • defina o valor da cor RGB apropriadamente.
  • Assume a saturação maxValimum e o valor máximo (brilho)
  • Executa matemática puramente inteira, sem ponto flutuante.

* / void hue_to_rgb (byte hue) {if (hue> 252) hue = 252; // retroceda para 252 !! nejo byte hd = matiz / 42; // 36 == 252/7, 252 == H_MAX byte hi = hd% 6; // dá 0-5 bytes f = hue% 42; byte fs = f * 6; switch (hi) {case 0: redVal = 252; greenVal = fs; blueVal = 0; pausa; caso 1: redVal = 252-fs; greenVal = 252; blueVal = 0; pausa; caso 2: redVal = 0; greenVal = 252; blueVal = fs; pausa; caso 3: redVal = 0; greenVal = 252-fs; blueVal = 252; pausa; caso 4: redVal = fs; greenVal = 0; blueVal = 252; pausa; caso 5: redVal = 252; greenVal = 0; blueVal = 252-fs; pausa; }} void isr0 () {Serial.println ("\ n / n inerrupt / n"); buttonState = digitalRead (switchPin); // lê o estado inicial delayMicroseconds (100000); // if (val! = buttonState) {// o estado do botão mudou! // if (buttonState == HIGH) {// verifique se o botão está pressionado buttonPresses ++; //} // val = buttonState; // salve o novo estado em nossa variável if (buttonPresses == 3) {// zur cksetzen buttonPresses = 0; }} //} O próximo estágio foram os drivers de transistor. Usei 3 transistores PNP com corrente máxima de 3 Amperes. Depois que a corrente direta e a tensão foram reguladas, o LEDemitter funcionou bem com intensidade total.

Etapa 6: faça com que seja autônomo com o bootloader queimado pelo PonyProg

Obtenha-o de maneira independente com o Bootloader queimado do PonyProg
Obtenha-o de maneira independente com o Bootloader queimado do PonyProg

Como usar sua porta paralela para gravar o carregador de inicialização arduino em um ATmega168 ou ATmega8 para usar um chip vazio barato com o arduino environment.coming em breve … talvez em um instructable separado Aqui também é um bom instrutível para usar o chip autônomo: https: / /www.instructables.com/id/uDuino-Very-Low-Cost-Arduino-Compatible-Developme/?ALLSTEPS

Etapa 7: Esse é o meu Arduino Moodlamp

Então esse é o meu Arduino Moodlamp
Então esse é o meu Arduino Moodlamp

Se você gostou, por favor me avalie.

Recomendado: