Índice:
- Etapa 1: Planejando a construção:
- Etapa 2: a sombra artesanal
- Etapa 3: a sombra artesanal
- Etapa 4: O circuito elétrico:
- Etapa 5: O Código:
- Etapa 6: faça com que seja autônomo com o bootloader queimado pelo PonyProg
- Etapa 7: Esse é o meu Arduino Moodlamp
Vídeo: Moodlamp RGB feito à mão com Arduino: 7 etapas
2024 Autor: John Day | [email protected]. Última modificação: 2024-01-30 11:40
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:
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
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 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:
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:
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
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
Se você gostou, por favor me avalie.
Recomendado:
Saco feito à mão Circuit Playground Express (CPE): 5 etapas
Saco feito à mão Circuit Playground Express (CPE): neste Instuctable, você aprenderá as etapas para codificar seu microcontrolador Circuit Playground Express (CPE) com MakeCode e fazer uma sacola com uma camisa de flanela e outro tecido. Há muito espaço para interpretação e inovação! O que você vai prog
Robô humanóide feito à mão avançado de código aberto MIA-1 !: 4 etapas
Robô humanóide feito à mão avançado de código aberto MIA-1 !: Olá a todos, hoje mostrarei como fiz o robô MIA-1, que não é apenas avançado e único, mas também de código aberto e pode ser feito sem impressão 3D !! Sim, você entendeu, este robô é totalmente feito à mão. E o código aberto significa - você obtém o
Soquete do carregador de carro feito à mão: 7 etapas
Soquete de carregador de carro feito à mão: Em nossas últimas férias na Noruega, alugamos uma van para ser usada como trailer; nesta acomodação rústica, falta um " luxo " foi a ausência de um ponto de carregamento USB na parte de trás da van, ou seja, na área de dormir, alimentado mesmo com a chave desligada
Feito em casa - Uma mão - Analisador Nitrox Baseado em Arduino: 4 etapas
Home Made - One Hand - Nitrox Analyzer Baseado em Arduino: Olá leitores, Neste instrutível, mostrarei como construí este analisador de oxigênio baseado em Arduino. *** AVISO - Este é o tipo de material que pode ser usado para controlar seu mergulho composição da mistura. O mergulho pode ser perigoso e tudo o que você faz com
Remoto IR feito à mão: 5 etapas (com imagens)
Remoto IR feito à mão: Em meu projeto anterior, usei este dispositivo como um Transmissor IR e prometi fazer o upload desta descrição do projeto nos próximos instructables. Portanto, aqui apresento a vocês o Transmissor IR usando o temporizador 555. Último projeto em que este controle remoto Queremos projetar um astável mult