Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Luz de escritorio reactiva de audio Arduino

Componentes y suministros

Arduino Nano R3
× 1
módulo de sonido
× 1
Breadboard (genérico)
× 1
Cables de puente (genéricos)
× 1
Led direccionable
× 1
Ikea DROPPAR Jar
× 1
Una pequeña longitud de tubería de PVC
× 1

Herramientas y máquinas necesarias

Soldador (genérico)

Aplicaciones y servicios en línea

Arduino IDE

Acerca de este proyecto

¡¡HOLA MUNDO !!

¡Hola! En esta compilación, crearemos una luz atractiva que baila con todos los sonidos y la música, utilizando componentes simples y algunos Arduino básicos. programación. Produce un efecto asombroso mientras está parado en el escritorio cuando juega, reproduce música y cualquier otra cosa que realmente suene. ¡Vamos!

Este es un proyecto que sigo basado en el "Natural Nerd" de los youtuber que hicieron. Esta es mi versión del proyecto. Todo el mérito es para ellos y un gran agradecimiento por brindarme los detalles sobre cómo hacer el proyecto.

Enlace de Youtube

PASO 1:SUMINISTROS PRINCIPALES

Lo primero es lo primero:¿qué tipo de suministros necesitamos y cuánto cuestan? Bueno, son en gran parte opcionales y se pueden hacer con mucha improvisación. Aun así, se necesitan algunos elementos clave si desea seguir esta guía:

  • Arduino Nano (o cualquier tipo de Arduino igualmente pequeño) (enlace de compra de 12,50 RM)
  • Módulo detector de sonido (Enlace de compra de 5,90 RM)
  • fuente de alimentación de 5 voltios (o 12 voltios con módulo reductor)
  • LED direccionables de forma individual tiras de 60 leds por. medidor (enlace de compra)

Dependiendo del aspecto que desee, es posible que desee organizar las tiras de manera diferente o difuminar la luz de otra manera. Aquí es donde puedes ser creativo. Si le gusta mi enfoque, utilicé los siguientes elementos:

  • El frasco Droppar de IKEA más alto (Enlace de IKEA)
  • Una pequeña longitud de tubería de PVC.
  • Tablero de espuma
  • Pistola de pegamento caliente

A fin de cuentas, gasté alrededor de RM 83.30 dependiendo de la tienda a la que vayas y compres los artículos, donde las tiras de LED eran, con mucho, la parte más cara que me costó RM 40 por solo 1 metro.

PASO 2:ALIMENTACIÓN DE LOS COMPONENTES

La alimentación del componente será un método sencillo. Solo uso el cable USB del Arduino Nano y lo enchufo directamente a la PC. Si utiliza una fuente de alimentación externa, como una fuente de alimentación de CA a CC, necesitará un módulo reductor para ayudarlo a reducir la cantidad de flujo de corriente a su circuito. De lo contrario, si no lo está usando y es posible que tenga una gran probabilidad de quemar el Arduino, incluidos los componentes que se conectaron.

La estrella del espectáculo es el módulo detector de sonido. Esto proporcionará una señal analógica al Arduino, que podemos usar para (con suerte) iluminar inteligentemente las luces RGB. Para poder hacer esto, necesitamos alimentar ambos dispositivos. Afortunadamente, ambos requieren una entrada de 5 voltios. Estoy usando un módulo reductor para bajar de 12 voltios a 5 voltios, pero sería más fácil usar una fuente de alimentación de 5 voltios directamente. Conecte el VIN en el Arduino y en la placa del detector de sonido a la entrada positiva. Luego conecte el GND en el Arduino y el detector al negativo. Mire los cables negro y rojo en el esquema adjunto. También necesitamos conectar la entrada positiva y negativa de la tira de LED a la fuente de alimentación.

PASO 3:DETECTOR Y TIRAS

Después de haber conectado las tres partes a la alimentación, debemos conectarlas entre sí.

El módulo detector de sonido se comunicará con el Arduino a través de los pines de entrada analógica. Usaré el pin número 0 en este caso.

Las tiras de LED necesitan un pulso digital para poder entender qué LED queremos abordar. Por lo tanto, necesitamos conectar un pin de salida digital al Arduino nano. Usaré el pin número 6.

Use el tubo retráctil en el área elegida para que el cable no choque entre sí en un espacio reducido más adelante.

¡Simplemente siga el diagrama esquemático que proporcioné aquí y estará bien!

¡Genial, ahora ya casi hemos terminado con la electrónica!

PASO 4:CARGA DEL CÓDIGO

Podría decirse que la parte más importante de esta compilación será el código. Puede cambiar esta construcción de bastante genial a increíblemente increíble. Puede usar el código que proporcioné junto con este proyecto. El principio principal es mapear el valor analógico que obtenemos del sensor, a una cantidad de LED para mostrar.

PASO 5:PREPARACIÓN DE LA CARCASA

Primero pensé que la tapa estaba hecha de acrílico, después de que compré el frasco y me di cuenta de que no era acrílico sino vidrio. Así que necesito reajustar mi plan haciendo una cubierta que sea fácil de empujar y montar el Arduino y el LED. Así que elijo la tabla de espuma.

Primer paso , necesito cortar el tablero de espuma de manera que sea exactamente circular y tenga el mismo diámetro que la tapa de vidrio del frasco. No tengo las herramientas adecuadas para medir el diámetro, así que improviso el método usando un marcador húmedo y marco el diámetro del vidrio y lo sello en un papel. Después de eso, pego el papel en el tablero de espuma y en el tablero siguiendo el borde del círculo en el papel. No es perfecto, pero debería ser lo suficientemente bueno para contener todo el componente Arduino y led.

Segundo paso , necesito romper el vaso de la tapa del frasco. ¡PRECAUCIÓN! por favor cubra el frasco con una bolsa de plástico gruesa para evitar que el vidrio se esparza por la habitación y hágalo en el espacio abierto. Consciente de tu entorno. Después de romper el vidrio, asegúrese de quitar todo el vidrio que se pegó en la grieta lateral de la tapa del frasco. Esto es para evitar que usted u otras personas se lastimen al cortarse el vidrio atascado.

Tercer paso , coloque la tabla de espuma en forma de círculo en el centro de la tapa del frasco. Asegúrese de que la espuma esté apretada y no demasiado suelta para que quepan bien en el frasco.

Cuarto paso, Me acabo de dar cuenta de que necesito cambiar el diseño de este proyecto. Me gustaría hacer que el usuario sea fácil de acceder a los componentes de Arduino en caso de fallas. Entonces, decidí usar la mini placa de pruebas y la coloqué en el centro de la tapa. No solo eso, corté dos orificios para el cable del módulo de sonido que colocaré en la parte inferior de la tapa del frasco para que vaya dentro del frasco y en la placa de pruebas y un orificio más para que el Arduino se conecte con el cable USB para actuar. como fuente de alimentación para el circuito.

Quinto paso , Marco la tubería de pvc con cinta adhesiva y trazo la línea en el centro de la cinta. Luego, lo pego con cinta adhesiva en la tubería de pvc. Las marcas son un indicador de mí para cortar la tubería de pvc de manera uniforme y tratar de tener un corte limpio.

Después de medir la cantidad de longitud de pvc que necesito usar, lo corté con cuidado siguiendo la marca que proporcioné. La longitud de la tubería de pvc depende de la altura de la jarra. Puede utilizar la longitud que desee.

Sexto paso , deforma el tubo de PVC que corté con la tira de LED alrededor y lo hago ligeramente inclinado y en espiral hacia la parte superior del PVC. Me aseguro de crear un pequeño orificio para que el exceso de cable se esconda dentro del recipiente de PVC para la gestión de cables. Luego necesito encontrar una manera de colocar el PVC en la placa de pruebas. Usando una pistola de pegamento caliente o la cinta de doble cara, pude pegar el tubo de PVC a la placa de espuma adicional y luego pegarlo en el área no utilizada en la placa de pruebas. Durante este paso, puedo conectar algunos de los componentes a la placa de pruebas.

Utilice el diagrama esquemático proporcionado para conectar todos los componentes.

(El área izquierda de la placa será el positivo y el área derecha de la placa será el negativo. `

Séptimo paso, coloqué el módulo de sonido en la parte exterior de la tapa del frasco. Esto se hace a propósito para que el módulo sea más fácil captar el sonido fuera del frasco más tarde. Después de colocar el módulo, conéctelo con el cable y combínelo como se indica en el diagrama esquemático proporcionado. Luego, conecta todo el cable con el sensor y Arduino a la placa de pruebas. El Arduino está configurado verticalmente para que el cable para encender el circuito pueda conectarse con la placa Arduino fácilmente a través de la placa de espuma.

Y así, completo el proyecto. Tardo un poco más con el intento y error pero logré completarlo.

Código

  • Codificación para Arduino
Codificación para Arduino Arduino
Este código permitirá que el LED reaccione al sonido que está siendo detectado por el módulo de sonido.
 #include  / ** CONFIGURACIÓN BÁSICA ** /// La cantidad de LED en la configuración # define NUM_LEDS 60 // El pin que controla los LED # define LED_PIN 6 // El pin que leemos los valores del sensor desde # define ANALOG_READ 0 // Valor bajo del micrófono confirmado y valor máximo # define MIC_LOW 0.0 # define MIC_HIGH 200.0 / ** Otras macros * /// ¿Cuántos valores de sensor anteriores afectan el promedio operativo? #Define AVGLEN 5 // ¿Cuántos valores de sensor anteriores deciden si estamos en un pico / ALTO (por ejemplo, en una canción) #define LONG_SECTOR 20 // Mneumonics # define HIGH 3 #define NORMAL 2 // ¿Cuánto tiempo mantenemos el sonido del "promedio actual", antes de reiniciar la medición? # define MSECS 30 * 1000 # define CYCLES MSECS / DELAY / * A veces las lecturas son incorrectas o extrañas. ¿Cuánto se permite que una lectura se desvíe del promedio para que no se descarte? ** / # define DEV_THRESH 0.8 // Arduino loop delay # define DELAY 1float fscale (float originalMin, float originalMax, float newBegin, float newEnd, float inputValue, float curve); void insert (int val, int * avgs, int len); int compute_average (int * avgs, int len); void visualize_music (); // Cuántos LED mostraremos en curshow =NUM_LEDS; / * Aún no se usó realmente. Se cree que puede cambiar entre el modo reactivo de sonido y el pulso de gradiente general / color estático * / int mode =0; // Mostrando diferentes colores según el modo.int songmode =NORMAL; // Medida de sonido promedio el último CYCLESunsigned long song_avg; // La cantidad de iteraciones desde que se reinició el song_avg en iter =0; // La velocidad a la que los LED se desvanecen a negro si no relitfloat fade_scale =1.2; // Array de LED CRGB leds [NUM_LEDS]; / * Promedio de sonido corto usado para "normalizar" los valores de entrada. Usamos el promedio corto en lugar de usar la entrada del sensor directamente * / int avgs [AVGLEN] ={-1}; // Sonido más largo avgint long_avg [LONG_SECTOR] ={-1}; // Seguimiento de la frecuencia , y cuánto tiempo alcanzamos un cierto modo .truct time_keeping {unsigned long times_start; tiempos cortos;}; // Cuánto incrementar o disminuir cada color en cada ciclotruct color {int r; int g; int b;}; struct time_keeping alto; struct color Color; configuración vacía () {Serial.begin (9600); // Configure todas las luces para asegurarse de que todas funcionen como se esperaba FastLED.addLeds  (leds, NUM_LEDS); para (int i =0; i  (song_avg / iter * 1.1)) {if (high.times! =0) {if (millis () - high.times_start> 200.0) {high.times =0; modo de canción =NORMAL; } else {high.times_start =millis (); altos.veces ++; }} else {tiempos.altos ++; high.times_start =millis (); }} if (high.times> 30 &&millis () - high.times_start <50.0) songmode =HIGH; else if (millis () - high.times_start> 200) {high.times =0; modo de canción =NORMAL; }} // Función principal para visualizar los sonidos en el lampvoid visualize_music () {int sensor_value, mapped, avg, longavg; // Valor actual del sensor sensor_value =analogRead (ANALOG_READ); // Si es 0, descartar inmediatamente. Probablemente no esté bien y ahorre CPU. if (sensor_value ==0) return; // Descartar lecturas que se desvíen demasiado del promedio anterior. mapeado =(flotante) fscale (MIC_LOW, MIC_HIGH, MIC_LOW, (float) MIC_HIGH, (float) sensor_value, 2.0); avg =compute_average (prom, AVGLEN); if (((promedio - mapeado)> promedio * DEV_THRESH)) // || ((promedio - mapeado) <-avg * DEV_THRESH)) return; // Insertar nuevo prom. inserción de valores (mapeados, promedios, AVGLEN); insertar (avg, long_avg, LONG_SECTOR); // Calcula el valor del sensor "promedio de la canción" song_avg + =avg; iter ++; if (iter> CICLOS) {song_avg =song_avg / iter; iter =1; } longavg =compute_average (long_avg, LONG_SECTOR); // Comprueba si entramos en modo ALTO check_high (longavg); if (modo de canción ==ALTO) {escala_desvanecimiento =3; Color.r =5; Color.g =3; Color.b =-1; } más si (modo de canción ==NORMAL) {escala_desvanecimiento =2; Color.r =-1; Color.b =2; Color.g =1; } // Decide cuántos LED se encenderán curshow =fscale (MIC_LOW, MIC_HIGH, 0.0, (float) NUM_LEDS, (float) avg, -1); / * Configurar los diferentes leds. Control de valores demasiado altos y demasiado bajos. Algo divertido para probar:no tenga en cuenta el desbordamiento en una dirección, ¡aparecen algunos efectos de luz interesantes! * / for (int i =0; i  255) leds [i]. r =255; else if (leds [i] .r + Color.r <0) leds [i] .r =0; si no leds [i] .r =leds [i] .r + Color.r; if (leds [i] .g + Color.g> 255) leds [i] .g =255; else if (leds [i] .g + Color.g <0) leds [i] .g =0; más leds [i] .g =leds [i] .g + Color.g; if (leds [i] .b + Color.b> 255) leds [i] .b =255; else if (leds [i] .b + Color.b <0) leds [i] .b =0; si no leds [i] .b =leds [i] .b + Color.b; // Todos los demás LED comienzan su viaje hacia la oscuridad total.} Else {leds [i] =CRGB (leds [i] .r / fade_scale, leds [i] .g / fade_scale, leds [i] .b / fade_scale ); } FastLED.show (); } // Calcular el promedio de una matriz int, dado el puntero inicial y la longitudint compute_average (int * avgs, int len) {int sum =0; para (int i =0; i  10) curva =10; si (curva <-10) curva =-10; curva =(curva * -.1); // - invertir y escalar - esto parece más intuitivo - los números positivos dan más peso al extremo superior en la curva de salida =pow (10, curva); // convertir la escala lineal en exponente logarítmico para otra función de potencia // Verificar valores fuera de rango inputValues ​​if (inputValue  originalMax) {inputValue =originalMax; } // Zero Refference los valores OriginalRange =originalMax - originalMin; if (newEnd> newBegin) {NewRange =newEnd - newBegin; } else {NewRange =newBegin - newEnd; invFlag =1; } zeroRefCurVal =inputValue - originalMin; normalizedCurVal =zeroRefCurVal / OriginalRange; // normalizar a 0 - 1 float // Verificar originalMin> originalMax - las matemáticas para todos los demás casos, es decir, los números negativos parecen funcionar bien si (originalMin> originalMax) {return 0; } if (invFlag ==0) {rangedValue =(pow (normalizedCurVal, curve) * NewRange) + newBegin; } else // invertir los rangos {rangedValue =newBegin - (pow (normalizedCurVal, curve) * NewRange); } return rangedValue;} 

Esquemas


Proceso de manufactura

  1. TinyML-Language Detector basado en Edge Impulse y Arduino
  2. Juego de giroscopio Arduino con MPU-6050
  3. Dados digitales Arduino
  4. Iron Man
  5. Encuéntrame
  6. Reproducir audio en Arduino
  7. Control del humidificador Arduino
  8. Sonda usando arduino y visualización en procesamiento IDE
  9. MobBob:Robot Arduino DIY controlado por un teléfono inteligente Android
  10. NeoMatrix Arduino Pong
  11. Joystick de Arduino