Dies ist eine alte Version des Dokuments!


MoodStrip

LED Streifen zur Musik Blinken lassen

Wisser: Skruppy, Wanda, Jan?
Mitwisser:

Status: working, in progress, documentation needed
Tags: elektro, software, AVR, LED, Musik, processing, C, Java, Arduino, reverse engineering

Einleitung

Vorlage

Komponenten

  • IDE/Framework: Processing (leider Java)
  • PulseAudio
  • ALDI 5m LED Schnur 27W laut Werbung (15W in echt)
  • Arduino

Installation

apt-get install openjdk-6-jre openjdk-6-jre-lib pavucontrol

Auf der Processing Webseite die „LINUX“ Version runterladen und entpacken.

Um PulseAudio support in Processing zu haben, müssen jetzt files aus den oben installierten System Paketen in den entpackten Prozessing Ordner kopiert werden.

cp  /usr/lib/jvm/java-6-openjdk/jre/lib/ext/pulse-java.jar      ./processing-<versions nummer>/java/lib/ext/
cp  /usr/lib/jvm/java-6-openjdk/jre/lib/i386/libpulse-java.so   ./processing-<versions nummer>/java/lib/i386/

Konfiguration

Mit pavucontrol den „Monitor“ Kanal der gewünschen Audio Sink als Source für das Programm einstellen.

Umsetzung

Aufbau der PCB

Ein Mikrocontroller ohne Aufdruck empfängt IR signale und steuert per PWM die LEDs. Er hat vermutlich eine Frequenz von 8Mhz. Es sind noch andere, für das Ziel uninteresante Komponenten auf der Platine. Für jeden der drei Farbkanäle gibt es die Folgende Ansteuerungsschaltung.

(Der Circuit Simulator Queltext zum importieren http://pastebin.com/emEJ5TZF)

An der Angegebene stelle wurde die Verbindung zwischen Mikrocontroller und der LED Steuerschaltung aufgetrennt und beide Seiten (jeweils aller drei Kanäle) an eine Buchsenleiste ausgeführt. An ihr kann man nun entweder eigene Steuersignale einspeisen, die orginal Signale Auswerten oder mit Brücken den Normalbetrieb herstellen.

Orginal Ansteuerung

  • 12V an den Streifen
  • R: 0,78A G: 0,78A B: 0,64A (im einzelbetrieb einer Farbe, 100% duty-cycle)
  • Größter beobachteter Gesamtsprom: 1,23A (ggf. falsch gemessen, da gepulst)
  • Größte beobachtete Gesamtleistung: 15W (ggf. falsch gemessen, da gepulst)

Werden alle Farben mit 100% duty-cycle gleichzeitig betrieben (also schlich alles mit dauerstrom an), so ergibt sich ein verbrauch von 26W. Das entspricht fast der Werbung. Allerdings ist mit dem mitgelieferten controller diese ansteuerung nicht möglich. Da sobald eine weitere farbe ins spiel kommt keine farbe mit 100% duty-cycle leuft. D.h. für einen kurzen moment (zu begin der periode) können 26W vom netzteil gefordert werden, jedoch wird das licht nie eine helligkeit von 26W haben. Wie gut meine messungen sind weis ich nicht, da ich nicht weis wie gut das messgerät mit gepulsten strömen umgehen kann, auf jedenfall hatt die anzeige nicht geflackert.

Die PWM Frequenz ist 438Hz (die Periodendauer 2,282ms). Der duty-cycle bei 100% rot/grün/blau ist in den Helligkeitsstufen:
100%; 88,2%; 78,4%; 59%; 49,2%; 39,48%; 29,76%; 20%; 10,3%

Neue ansteuerung

OK, als erstes hilft uns ein bash einzeiler um die passenen mC zu finden (Wir brauchen welche mit 16 bit timern die mindestens 3 OCR haben).

( find /usr/avr/include/avr -name 'io*.h' | while read file ; do grepf -P 'define.*OCR.*_SFR_(IO|MEM)16' $file | grepf -o 'OCR[A-Z0-9]*' | cut -c 4 | sort | uniq -c -w 1 | while read line ; do if [ $(echo $line | cut -d ' ' -f 1) -ge 3 ] ; then echo -en "${file:23:-2}    \\tOCR${line:2} -- " ; echo $(grepf 'definitions for' $file | cut -d ' ' -f 6- ) ; fi ; done ; done ) | sort -n

und das Ergebniss:

canxx           OCR1 -- AT90CAN32, AT90CAN64 and AT90CAN128 */
canxx           OCR3 -- AT90CAN32, AT90CAN64 and AT90CAN128 */
m128            OCR1 --
m128            OCR3 --
m128rfa1        OCR1 -- ATmega128RFA1 */
m128rfa1        OCR3 -- ATmega128RFA1 */
m128rfa1        OCR4 -- ATmega128RFA1 */
m128rfa1        OCR5 -- ATmega128RFA1 */
m16m1           OCR0 -- ATmega16M1 */
m16m1           OCR1 -- ATmega16M1 */
m16m1           OCR2 -- ATmega16M1 */
m16u2           OCR1 -- ATmega16U2 */
m16u4           OCR1 -- ATmega16U4 */
m16u4           OCR3 -- ATmega16U4 */
m3000           OCR1 -- M3000 from Intelligent Motion Systems . */
m32m1           OCR0 -- ATmega32M1 */
m32m1           OCR1 -- ATmega32M1 */
m32m1           OCR2 -- ATmega32M1 */
m32u2           OCR1 -- ATmega32U2 */
m32u4           OCR1 -- ATmega32U4. */
m32u4           OCR3 -- ATmega32U4. */
m32u6           OCR1 -- ATmega32U6 */
m32u6           OCR3 -- ATmega32U6 */
m64m1           OCR0 -- ATmega64M1 */
m64m1           OCR1 -- ATmega64M1 */
m64m1           OCR2 -- ATmega64M1 */
m64     OCR1 --
m64     OCR3 --
m8u2            OCR1 -- ATmega8U2 */
mxx0_1          OCR1 -- ATmega640, Atmega1280, ATmega1281,
mxx0_1          OCR3 -- ATmega640, Atmega1280, ATmega1281,
mxx0_1          OCR4 -- ATmega640, Atmega1280, ATmega1281,
mxx0_1          OCR5 -- ATmega640, Atmega1280, ATmega1281,
tn2313          OCR1 -- ATtiny2313 */
usbxx2          OCR1 -- AT90USB82 and AT90USB162. */
usbxx6_7        OCR1 -- AT90USB646, AT90USB647, AT90USB1286
usbxx6_7        OCR3 -- AT90USB646, AT90USB647, AT90USB1286
90pwm1          OCR0 -- AT90PWM1 device */
90pwm1          OCR2 -- AT90PWM1 device */
90pwm216        OCR0 -- AT90PWM216 */
90pwm216        OCR1 -- AT90PWM216 */
90pwm216        OCR2 -- AT90PWM216 */
90pwm2b         OCR0 -- AT90PWM2B */
90pwm2b         OCR1 -- AT90PWM2B */
90pwm2b         OCR2 -- AT90PWM2B */
90pwm316        OCR0 -- AT90PWM316 */
90pwm316        OCR1 -- AT90PWM316 */
90pwm316        OCR2 -- AT90PWM316 */
90pwm3b         OCR0 -- AT90PWM3B */
90pwm3b         OCR1 -- AT90PWM3B */
90pwm3b         OCR2 -- AT90PWM3B */
90pwm81         OCR0 -- AT90PWM81 */
90pwm81         OCR2 -- AT90PWM81 */
90pwmx          OCR0 -- AT90PWM2(B) and AT90PWM3(B) */
90pwmx          OCR1 -- AT90PWM2(B) and AT90PWM3(B) */
90pwmx          OCR2 -- AT90PWM2(B) and AT90PWM3(B) */

Ergebnis

AWESOME *blink* *blink* *blink* … jetzt kann ich endlich wieder wie zu den guten alten ACAB Zeiten mit dem Epilepsi Faktor Arbeiten.

CPU auslastung von 100% nerft. Mit hörem nice wert läst sich aber wunderbar paralel arbeiten (auch wenn der PC viel heiße luft produziert).

Kein flackern oder ruckeln der LED. Ersteres war mit einer Frequenz von 100Hz nerfig. Nachdem es ca. verfünffacht wurde ist es OK. Es muss jedoch nochmal überprüft werden wie groß die schaltverluste sind. Das ruckeln war mit einer Baudrate von 9600 sichtbar (ca. 137Hz bei Farb updates). Mit doppelter baudrate und somit frequenz fält das nicht mehr auf.

Eine Gamma Korektur hat Große auswirkungen!

Dubstep ist perfekt für die Visualisierung mit dem Akuellen Programm (welches noch viel Raum für verbesserungen hat)

projects/moodstrip.1332616499.txt.gz · Zuletzt geändert: 2012/03/24 20:14 von skruppy