+
Frambuesa Pi analizador de espectro con la tira del RGB LED y Python En busca de un primer proyecto de probar en un Frambuesa Pi, pensé que mejor que un analizador de espectro? (A veces esta pantalla se denomina erróneamente como un ecualizador gráfico - que te permite cambiar el sonido, lo muestra) Yo era capaz de conseguir que hacer FFT 2048pt y mp3 de decodificación en tiempo real, y mientras eso no debería ser difícil en una pi teniendo en cuenta un montón de UCS de 8 bits han hecho hacer FFT en tiempo real, todo está hecho en Python, lo que hace conveniente (para mí) para añadir finalmente el control a través de un navegador web, sms, y otras cosas. No hay mucho espacio de sobra, sin embargo, se ahoga cuando muevo el ratón. La mayor parte del código para hacer esto ya está disponible, mi objetivo aquí es sólo para documentar más o menos los pasos para conseguir este trabajo, desde la perspectiva de un usuario Pi primera vez. También hice algunos ajustes en el trozo análisis FFT para acelerar las cosas un poco. Hardware. (Gracias por los juguetes Adafruit!) ROSSP - Creo que el mío está ejecutando sibilante, Raspbian, ver 3.10.19 15 pies (1 m) de tira del RGB LED. $ 125 ( 160 leds) controlables a través de SPI, construido en el control PWM, sólo envían actualizaciones - muy agradable. Sólo estoy usando una tira envuelta alrededor de 5 para formar columnas, y la escritura a diferentes segmentos de la tira. De esta manera sólo tengo tres cables conectados a la tierra, Pi: SPI SPI reloj y de datos. fuente de alimentación de 5V 10A para conducir los LED. $ 25, que probablemente podría alimentar el Pi con esto, también. Esos son los elementos esenciales, pero probablemente querrá un montón de otras cosas: adaptador WiFi USB $ 7,61 (controladores de chipset RTL8188CUS están integradas en OS sibilante!). Solía estas instrucciones para hacerlo funcionar. tarjeta SD (me dieron uno de 8 GB) altavoces USB Alimentación $ 10 Hub USB de encendido para conectar el teclado, el ratón, wifi, Algunos cargador de teléfono celular para alimentar el Pi es a través de conector de alimentación USB cable de Ethernet para conectarse a Internet a través de un ordenador portátil pre-wifi teclado USB, ratón, monitor HDMI alambre, algunos cables de puente de mujer a mujer Software : Que en su mayoría sólo utiliza este código controlador de luces de navidad a base de Pi impresionante de Chris Usey, Todd Giles y Ryan Jennings. Es un centro de comando completo para la orquestación de las luces de Navidad de audio (WAV, MP3, etc). Su código que permite a las listas de reproducción de instalación y encender y apagar la energía de 120 V CA basado en bandas de frecuencia. Incluso puede votar en las canciones a través de mensajes SMS! Su código se ve en las bandas de frecuencia en la música, y si el sonido cruza un umbral, se vuelve un pin GPIO en. He cambiado el código para mostrar el nivel de la banda de frecuencia real en una tira de LED RGB, en lugar de tener un interruptor on / off umbral. Sobre la base de similitudes en el código, sospecho que obtuvieron su código de procesamiento FFT de este pitón de demostración FFT en tiempo real. el control de Python LPD8806 tira del RGB LED a través de SPI. Esto no está relacionado con este proyecto, pero utiliza el IDE Geany para la codificación. Paso 1: Conectar tira de LED y la configuración del software LED RGB En lugar de tratar con tiras de LED independientes para cada columna, sólo enrollé una sola tira de LED 152 de ida y vuelta, fijándola con bandas de sujeción a una puerta del bebé. Esto desperdicia algunos LED, ya que no estoy nada se presentan en las curvas, pero se podía evitar el desperdicio LED cortando los cables de la tira y de soldadura entre las columnas. Soldar el 5V, planta, del reloj y de las líneas de datos de entrada hasta el final de la tira de LED, y conectarse a Pi como se muestra en el enlace o en mis fotos. Asegúrese de conectar la tierra de la alimentación de 5V a la tierra del pi! Coge el software y siga las instrucciones para obtener el Pi capaz de salida de SPI. Es importante que utilice el SPI hardware porque cualquier enfoque poco golpeando no será lo suficientemente rápido. para permitir que el hardware SPI (siga las instrucciones en la página GIT). He añadido el directorio de instalación a mi PYTHONPATH en. bashrc para que pudiera llamar a las funciones desde cualquier lugar..bashrc en el interior: exportación PYTHONPATH = $ PYTHONPATH: / home / pi / RPI-LPD8806-master probar que la banda funciona ejecutando el código de ejemplo: El código de navidad luz que vamos a descargar más tarde quiere correr como root, y cuando se ejecuta cosas con un sudo delante, las variables de entorno, en concreto, se PYTHONPATH no se transfiere. Tuve que editar / etc / sudoers escribiendo y después se añadió en la parte inferior Predeterminados por defecto = env_keep SYNCHRONIZED_LIGHTS_HOME env_keep + = PYTHONPATH la primera línea es algo que necesitaremos para el paquete de luces de Navidad que se instalará más adelante. Estos hacen que esas variables de entorno se quedan al ejecutar cosas como sudo. Para probar que la tienes puesta a punto adecuada, cierre la terminal y volver a abrir, a continuación, escriba que debería encender las primeras 10 LEDs. Un último paso es hacer algunas modificaciones para acelerar la escritura de la avenida principal. Dentro ledstrip. py, asegúrese use_py_spi = True en la línea de def __init__ def __init __ (self, leds, use_py_spi = True, dev =): Ahora dentro LPD8806.py, vamos a cambiar la velocidad del SPI a 16MHz importar spidev self. spi = spidev. SpiDev () self. spi. open (0,0) = 16000000 self. spi. max_speed_hz de impresión 'py-spidev MHz:% d'% (self. spi. max_speed_hz / 1000000.0) Esa declaración de impresión no es sólo para asegurarse de que todo se ajusta correctamente. Un último cambio en el archivo LPD8806.py está en la función de actualización (). Por alguna razón, me di led. update () estaba tomando mucho tiempo, upwords de 25ms. Para conseguir un buen efecto visual, que quería toda mi bucle de análisis y visualización para funcionar a 20 Hz, o 50 ms por lazo, y la quema de la mitad de ese tiempo de espera para la tira de LED no funcionaría. Y extrañamente, a 16 MHz, lo que debería haber durado menos de un ms. 3 bytes por LED, LED, 152 (3 * 152 * 8 bits / 16 M) = .2ms! (No 25ms) Cuando pongo un alcance de hasta el puerto SPI, cada byte salía a 16MHz, pero hubo una pausa después de cada 160us llamada a self. spi. xfer2 (). Mi solución fue recopilar toda la cadena de bytes en un búfer y self. spi. xfer2 única llamada () una vez: actualización def (auto, tampón): temp_buffer = [] si self. use_py_spi: for x in range (self. leds): temp_buffer = temp_buffer + [i para i en tampón [x]] # self. spi. xfer2 ([i para i en tampón [x]] ) self. spi. xfer2 (temp_buffer) self. spi. xfer2 ([0x00,0x00,0x00]) #zero llenar el último para evitar colores perdidos en el self. spi. xfer2 final ([0x00]) #once más con sentimiento - esto ayuda :) time2 = time. time () Escribiendo a 152 LEDs en 16MHz debería tener muy poco tiempo - usted debe ver el último cambio LED al mismo tiempo, el primero hace Algunas otras personas han tenido problemas con esto y tiene alrededor de ella, echa un vistazo a los efectos de vídeo POV increíble con una sola tira de LED verticales (envío de datos a través de 8 MHz de 20 pies de gato 5!):
No comments:
Post a Comment