Tabla de contenido:

Lámpara de humor RGB hecha a mano con Arduino: 7 pasos
Lámpara de humor RGB hecha a mano con Arduino: 7 pasos

Video: Lámpara de humor RGB hecha a mano con Arduino: 7 pasos

Video: Lámpara de humor RGB hecha a mano con Arduino: 7 pasos
Video: mi sobrino siempre a querido una silla gamer #setup #humor 2024, Diciembre
Anonim
Lámpara de humor RGB hecha a mano con Arduino
Lámpara de humor RGB hecha a mano con Arduino
Lámpara de humor RGB hecha a mano con Arduino
Lámpara de humor RGB hecha a mano con Arduino

Este instructable se subdivide en 5 partes: - Planificación de la construcción (Paso 1) - La pantalla hecha a mano (Paso 2 + 3) - El circuito electrónico para conducir LED de 3W con el controlador ATmega8 (Paso 4) - El código (Paso 5) - Cómo conseguirlo independiente (actualice el gestor de arranque Arduino con PonyProg y grabe el boceto) (Paso 6) próximamente Vid: Algunas impresiones

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

Paso 1: planificación de la construcción:

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

Me encanta hacer un concepto en una sola hoja de papel. En la primera hoja ves algunas ideas iniciales. Elegí el diseño de la parte inferior derecha. La segunda página muestra algunos detalles para la construcción. Las medidas son experimentales como cada vez, pero está bien para mí;-) Mis pensamientos sobre el hardware fueron: - ¿Puedo manejar los materiales? - ¿Brillará la luz? a través de la pantalla? - ¿Qué proporción debería tener? - ¿Cuántas perillas y potenciómetros necesitaré para una interfaz simple? Mis pensamientos sobre el software fueron: ¿Cuántas funciones diferentes debería tener la lámpara? - Desvanecimiento RGB automático con velocidad variable - Ajuste manual del color - Blanco con brillo ajustable

Paso 2: la sombra hecha a mano

La sombra hecha a mano
La sombra hecha a mano
La sombra hecha a mano
La sombra hecha a mano
La sombra hecha a mano
La sombra hecha a mano

Recolectando los materiales: La pantalla: Encontré una hoja de plástico de 30 molinos de 3 pies x 3 pies en la tienda (Imagen 1-3). Utilice un cuchillo afilado para cortarla. Esmeré el plástico con papel de lija (Imagen 4-6). Conseguir un cilindro liso Lo atornillé todo junto después de taladrar los agujeros correctos (Pic7-8). Monte las pantallas de plástico en los soportes roscados de latón. Se ve muy bien y es bastante fácil de conseguir y manipular. Perforé y golpeé los agujeros para que coincidieran con la barra roscada 1/8 (Imagen 9-10). Mientras tanto, hice un disipador de calor para enfriar los LED de 3 W y tener una base sólida. Para obtener no demasiados tonos del eje, construí una pequeña jaula de varilla de soldadura con una tuerca M8 en la parte superior (Pic12). Como acabado, ensamblé todos juntos. Los pequeños tornillos y tuercas fueron un poco complicados, pero 30 minutos después lo hice.

Paso 3: la sombra hecha a mano

La sombra hecha a mano
La sombra hecha a mano
La sombra hecha a mano
La sombra hecha a mano
La sombra hecha a mano
La sombra hecha a mano

La base: Se metieron los discos en el torno para que quedara lisa y redondeada, luego la teñí con un tinte para madera de caoba para que quedara bien el pino ¿¡¿Qué sigue?!? Decidí hacer una base con la misma plástico esmerilado como pantalla, y retroiluminarlo con un microLED RGB (Pic5). Las perillas: Hice el botón con un trozo de caoba y las perillas con un recorte de madera de nogal.

Paso 4: El circuito eléctrico:

El circuito eléctrico
El circuito eléctrico
El circuito eléctrico
El circuito eléctrico
El circuito eléctrico
El circuito eléctrico

En la primera imagen ves mi esquema. Y aquí hay otro video: https://de.youtube.com/watch? V = xkiYzQAYf_A & NR = 1

Paso 5: el código:

El código
El código
El código
El código
El código
El código

En las fotos ves mi proceso con Arduino. Primero probé con mi ProtoShield de fabricación propia, un paquete de baterías y algunos tipos de LED. Comencé con "Spooky Projects" y "BionicArduino" de TodEKurt hace algunos meses.https://todbot.com/blog/spookyarduino/ Mi código es sólo una combinación complicada de su código de proyecto. "RGBMoodlight", "RGBPotMixer" y algunas extensiones. Tres entradas analógicas y una entrada digital como interruptor de modo (Gracias a Ju. por la rutina de interrupción:). Los LED están conectados a D9, D10 y D11 que admiten PulseWithModulation. Si lo desea, puedo publicar el boceto, pero es una combinación realmente simple de estos dos códigos geniales. Aquí está mi código original de la lámpara. Se ve un poco desordenado, porque era mi una etapa muy temprana en la programación … Pero si lo copia, debería funcionar muy bien. Hay buenos aspectos, como el "PotColorMixer", el "RGBfadingFunction" y el Interrupt-Routine para el interruptor de modo./* nejo June2008

Código para mi "Moodlamp", basado en "dimmingLEDs" de Clay Shirky

* nejo septiembre 2008

  • Código final para la lámpara de ambiente con interruptor de modo de interrupción, marcación rápida analógica para desvanecimiento RGB y cambio de color RGB.
  • La función de atenuación funciona solo para el color blanco.

* nejo octubre de 2008

  • Extensión de sonido para la lámpara de ambiente:
  • Un micrófono de condensador con un pequeño amplificador LM368, un recificador y un filtro de paso bajo RC
  • con otra entrada analógica utilizo la función RGBPotMixer para cambiar el color obteniendo la señal del micrófono.

* * * Código para 3 LED de fundido cruzado, rojo, verde y azul, o un LED tricolor, usando PWM

  • El programa se desvanece lentamente de rojo a verde, de verde a azul y de azul a rojo.
  • El código de depuración asume Arduino 0004, ya que usa las nuevas funciones de estilo Serial.begin ()
  • originalmente "dimmingLEDs" por Clay Shirky

*

  • AnalogRead está habilitado en el Pin A0 para variar la velocidad de desvanecimiento RGB
  • AnalogRead está habilitado en el Pin A2 para variar el color del tonoRGB

* * * / # include // Outputint ledPin = 13; // controlPin para debuggingint redPin = 9; // LED rojo, conectado al pin digital 9int greenPin = 10; // LED verde, conectado al pin digital 10int bluePin = 11; // LED azul, conectado al pin digital 11int dimredPin = 3; // Pines para el valor de atenuación analógico, conectados al transistor driverint dimgreenPin = 5; int dimbluePin = 6; // Inputint switchPin = 2; // el interruptor está conectado al pin D2int val = 0; // variable para leer el pin statusint buttonState; // variable para mantener el botón stateint buttonPresses = 0; // 3 pulsaciones para empezar! Int potPin0 = 0; // Pot para ajustar el retardo entre desvanecimientos en Moodlamp; int potPin2 = 2; // Salida del potenciómetro para cambiar el hueRGB colorint potVal = 0; // Variable para almacenar la entrada del potenciómetroint maxVal = 0; // El valor para guardar el factor de atenuación predeterminado es 255, si no hay ningún Pot conectadoint dimPin = 4; // Maceta conectada a A4 para atenuar el brillo // Variables de programaint redVal = 255; // Variables para almacenar los valores a enviar al pinsint greenVal = 1; // Los valores iniciales son Red full, Green y Blue offint blueVal = 1; int i = 0; // Contador de bucles int espera; // = 15; // Retraso de 50 ms (0,05 segundos); acortar para un desvanecimiento más rápido k = 0; // valor del controlLED en la función blinkint DEBUG = 0; // Contador DEBUG; si se establece en 1, volverá a escribir los valores a través de serialint LCD = 0; // Contador LCD; si se establece en 1, volverá a escribir los valores a través de serialvoid setup () {pinMode (ledPin, OUTPUT); pinMode (redPin, SALIDA); // establece los pines como salida pinMode (greenPin, OUTPUT); pinMode (bluePin, SALIDA); pinMode (dimredPin, SALIDA); pinMode (dimgreenPin, SALIDA); // establece los pines como salida pinMode (dimbluePin, OUTPUT); pinMode (potPin2, ENTRADA); // pinMode (potPin0, INPUT); // pinMode (dimPin, INPUT); // pinMode (switchPin, INPUT); // Establece el pin del interruptor como entrada attachInterrupt (0, isr0, RISING); if (DEBUG) {// Si queremos ver los valores de los pines para depurar… Serial.begin (9600); //… configura la salida en serie en 0004 style}} // Programvoid loop principal () {if (buttonPresses == 0) {Moodlamp (); // llama a la función Moodlight} if (buttonPresses == 1) {RGBPotMixer (); // llama a la función manuel mix} if (buttonPresses == 2) {White (); // Aquí está todo blanco} if (buttonPresses == 3) {} // Moodlamp (); // RGBPotMixer (); //Blanco(); Monitor(); dim ();} void Monitor () {// Enviar estado al monitor if (DEBUG) {// Si queremos leer la salida DEBUG + = 1; // Incrementa el contador DEBUG if (DEBUG> 10) {// Imprime cada 10 bucles DEBUG = 1; // Resetear el contador Serial.print (i); // Comandos seriales en estilo 0004 Serial.print ("\ t"); // Imprime una pestaña Serial.print ("R:"); // Indica que la salida es valor rojo Serial.print (redVal); // Imprime el valor rojo Serial.print ("\ t"); // Imprime una pestaña Serial.print ("G:"); // Repita para verde y azul… Serial.print (greenVal); Serial.print ("\ t"); Serial.print ("B:"); Serial.print (blueVal); // println, para terminar con un retorno de carro Serial.print ("\ t"); Serial.print ("dimValue:"); Serial.print (maxVal); // println, para terminar con un retorno de carro Serial.print ("\ t"); Serial.print ("espera:"); Serial.print (esperar); // escribe el valor de potPin0 en el monitor Serial.print ("\ t"); Serial.print ("hueRGBvalue"); Serial.print (potVal); // escribe el valor de potPin0 en el monitor Serial.print ("\ t"); Serial.print ("buttonState:"); Serial.print (buttonState); // escribe el valor de potPin0 en el monitor Serial.print ("\ t"); Serial.print ("buttonPresses:"); Serial.println (buttonPresses); // escribe el valor de buttonPresses en el monitor}}} void dim () // Función para atenuar el blanco // quizás más tarde para todos los modos {maxVal = analogRead (dimPin); maxVal / = 4; // Rango analógico de 0..1024 demasiado para atenuar el valor 0..255 analogWrite (dimredPin, maxVal); analogWrite (dimgreenPin, maxVal); analogWrite (dimbluePin, maxVal);} void Moodlamp () {espera = analogRead (potPin0); // busca el valor del potPin0; // si no hay ningún Pot conectado: espere 255 i + = 1; // Contador de incrementos // i = i - maxVal; if (i <255) // Primera fase de fundidos {redVal - = 1; // Rojo abajo greenVal + = 1; // Verde arriba blueVal = 1; // Azul bajo} else if (i <509) // Segunda fase de desvanecimientos {redVal = 1; // Rojo bajo greenVal - = 1; // Verde abajo blueVal + = 1; // Azul arriba} else if (i <763) // Tercera fase de desvanecimientos {redVal + = 1; // Rojo hasta greenVal = 1; // Verde lo2 blueVal - = 1; // Azul hacia abajo} else // Vuelva a configurar el contador y comience los desvanecimientos nuevamente {i = 1; } // hacemos "255-redVal" en lugar de solo "redVal" porque los // LED están conectados a + 5V en lugar de Gnd analogWrite (redPin, 255 - redVal); // Escribe los valores actuales en los pines LED analogWrite (greenPin, 255 - greenVal); analogWrite (bluePin, 255 - blueVal); / * dimredVal = min (redVal - maxVal, 255); // atenuación 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); // Escribe los valores actuales en los pines LED analogWrite (greenPin, 255 - dimgreenVal); analogWrite (bluePin, 255 - dimblueVal); * / esperar / = 4; retrasar (esperar); // Pausa durante milisegundos de 'espera' antes de reanudar el bucle} void RGBPotMixer () {potVal = analogRead (potPin2); // lee el valor del potenciómetro en el pin de entrada potVal = potVal / 4; // convertir de 0-1023 a 0-255 hue_to_rgb (potVal); // tratar potVal como hue y convertir a rgb vals // "255-" es porque tenemos LED de ánodo común, no analogWrite de cátodo común (redPin, 255-redVal); // Escribir valores en los pines LED analogWrite (greenPin, 255-greenVal); analogWrite (bluePin, 255-blueVal); } void White () {analogWrite (redPin, maxVal); // Escribir valores en los pines LED analogWrite (greenPin, maxVal); analogWrite (bluePin, maxVal); } / *

  • Dada una tonalidad variable 'h', que oscila entre 0-252,
  • establezca el valor de color RGB de forma adecuada.
  • Asume la saturación máxima y el valor máximo (brillo)
  • Realiza matemática puramente entera, sin punto flotante.

* / void hue_to_rgb (byte matiz) {if (matiz> 252) matiz = 252; // ¡¡retrocede al 252 !! nejo byte hd = tono / 42; // 36 == 252/7, 252 == H_MAX byte hi = hd% 6; // da 0-5 bytes f = hue% 42; byte fs = f * 6; switch (hi) {caso 0: redVal = 252; greenVal = fs; blueVal = 0; rotura; caso 1: redVal = 252-fs; greenVal = 252; blueVal = 0; rotura; caso 2: redVal = 0; greenVal = 252; blueVal = fs; rotura; caso 3: redVal = 0; greenVal = 252-fs; blueVal = 252; rotura; caso 4: redVal = fs; greenVal = 0; blueVal = 252; rotura; caso 5: redVal = 252; greenVal = 0; blueVal = 252-fs; rotura; }} void isr0 () {Serial.println ("\ n / n inerrupt / n"); buttonState = digitalRead (switchPin); // lee el estado inicial delayMicroseconds (100000); // if (val! = buttonState) {// ¡el estado del botón ha cambiado! // if (buttonState == HIGH) {// verifica si el botón está ahora presionado buttonPresses ++; //} // val = buttonState; // guarda el nuevo estado en nuestra variable if (buttonPresses == 3) {// zur cksetzen buttonPresses = 0; }} //} La siguiente etapa fueron los transistor-drivers. Usé 3 transistores PNP con una corriente máxima de 3 amperios. Después de regular la corriente directa y el voltaje, el emisor LED funcionó a la perfección con toda la intensidad.

Paso 6: Consígalo de forma independiente con el gestor de arranque grabado con PonyProg

Consígalo de forma independiente con el gestor de arranque grabado con PonyProg
Consígalo de forma independiente con el gestor de arranque grabado con PonyProg

Cómo usar su puerto paralelo para grabar el gestor de arranque arduino en un ATmega168 o ATmega8 para usar un chip en blanco barato con el entorno arduino. Pronto estará disponible … tal vez en una instrucción separada Aquí también hay una buena instrucción para usar el chip de forma independiente: https: / /www.instructables.com/id/uDuino-Very-Low-Cost-Arduino-Compatible-Developme/?ALLSTEPS

Paso 7: Así que esa es mi lámpara de humor Arduino

Así que esa es mi lámpara de humor Arduino
Así que esa es mi lámpara de humor Arduino

Si te gustó, califícame.

Recomendado: