Warpcore: Unterschied zwischen den Versionen
Zeile 21: | Zeile 21: | ||
* [http://www.youtube.com/watch?v=s6huSXLGWZc YouTube: Warpcore Version 2] | * [http://www.youtube.com/watch?v=s6huSXLGWZc YouTube: Warpcore Version 2] | ||
− | == LEDs == | + | == Version 2 == |
+ | |||
+ | === Warum? === | ||
+ | |||
+ | Die erste Version des Warpcores nutzte node-firmata sowie den daran angeschlossenen Arduino sowie dessen PWM-Ausgänge zum ansteuern der Transistoren. Node-firmata nutzte für die serielle Kommunikation die Bibliothek ''node-serialport'', welche im C/C++-Binding durch die [https://github.com/voodootikigod/node-serialport/blob/master/src/serialport.cpp#L117 Verwendung einer Queue] zu Problemen führte. | ||
+ | |||
+ | Hierbei wurden alle Bytes welche gesendet werden sollen in eine Queue geworfen, welche bei zu schnellen senden vollläuft. Leider gab es keine Möglichkeit den aktuellen Stand der Queue auszulesen, um das aktualisieren des PWM-Ports zu reduzieren oder zu unterbrechen. Nach einer gewissen Zeit war der Speicher der [[Technische_Infrastruktur#Flepo|Flepo]] aufgebraucht, und das node-Programm beendete sich mit einen ''memory allocaton error''. | ||
+ | |||
+ | === Hardware === | ||
+ | |||
+ | Um jede Leuchtdiode einzeln ansteuern zu können wurde die Platine aus dem Projekt [[Project:dmx2rgb|dmx2rgb]] wiederverwendet. Diese Platine wurde ohne RS485-Chip bestückt, da wir den vorhandenen USB-2-USART-Adapter direkt an den Prozessor anschliessen konnten. | ||
+ | |||
+ | === Datenübertragung === | ||
+ | |||
+ | Der USB2USART-Adapter beherrscht nur die Standard-Baudraten, weshalb wir nicht die 250khz von DMX verwenden konnten. Hierfür haben wir die ''Firmware'' der [[Project:dmx2rgb|dmx2rgb-Platine]] modifiziert und einen eigenen [https://github.com/schinken/dmx2rgb/tree/direct_serial Branch im dmx2rgb-repository] angelegt. Die momentan verwendete Baudrate ist 230400. | ||
+ | |||
+ | Um den Anfang des Datenpaktes zu markieren, beginnt jede Übertragung mit ''0x55AA'', gefolgt von 48 Byte Daten. Jedes Byte addresiert einen Kanal der [[Project:dmx2rgb|dmx2rgb]]-Platine. | ||
+ | |||
+ | === Visualisierung === | ||
+ | |||
+ | Zurzeit läuft ein simples Testprogramm welches einen einfachen Sinus durch alle Kanäle laufen lässt. Geplant ist die Wiederherstellung der ursprünglichen Funktionalität: Den aktuellen Netzwerktraffic anzeigen. | ||
+ | |||
+ | Hierzu muss die Traffic-Ermittlung via SNMP komplett neugeschrieben, da die [https://github.com/schinken/nodejs-snmp-traffic node.js-Library] nicht weiter verwendet werden kann. | ||
+ | |||
+ | |||
+ | == Version 1 == | ||
+ | |||
+ | === LEDs === | ||
[[Datei:Preparing leds warp core.jpg|thumb|left|LEDs vorbereiten]] | [[Datei:Preparing leds warp core.jpg|thumb|left|LEDs vorbereiten]] | ||
Zeile 32: | Zeile 59: | ||
− | == Ansteuerung == | + | === Ansteuerung === |
Für die Ansteuerung verwenden wir einen [http://arduino.cc/en/Main/ArduinoBoardUno Arduino Uno] in der Revision 3. Als Ausgänge wurden die PINs 5 und 6 verwendet, da diese als PWM-Ausgang verwendet werden können. Da der Prozessor nur 40mA am Ausgang bereitstellen kann, wurde eine kleine Lochrasterplatine mit Klemmen und BC337-16 Transistoren aufgebaut. | Für die Ansteuerung verwenden wir einen [http://arduino.cc/en/Main/ArduinoBoardUno Arduino Uno] in der Revision 3. Als Ausgänge wurden die PINs 5 und 6 verwendet, da diese als PWM-Ausgang verwendet werden können. Da der Prozessor nur 40mA am Ausgang bereitstellen kann, wurde eine kleine Lochrasterplatine mit Klemmen und BC337-16 Transistoren aufgebaut. | ||
Zeile 38: | Zeile 65: | ||
Beschaltung der Transistoren: | Beschaltung der Transistoren: | ||
− | + | \\ | |
− | +----[ 470 ]-- | + | +----[ 470 ]--|<---- +12V |
_____ |/ | _____ |/ | ||
PIN5 --+----[_____]-----| | PIN5 --+----[_____]-----| | ||
Zeile 46: | Zeile 73: | ||
| +---- GND | | +---- GND | ||
| | | | ||
− | | | + | | \\ |
− | | +----[ 470 ]-- | + | | +----[ 470 ]--|<---- +12V |
| _____ |/ | | _____ |/ | ||
+----[_____]------| | +----[_____]------| | ||
Zeile 56: | Zeile 83: | ||
Für jede Farbe wurden 4 Transistoren verbaut, da vorgesehen ist auf jeder Seite des Serverschranks eine "LED-Leiste" anzubringen. Alle Dioden einer Farbe sind miteinander verbunden. Hierbei wurde für Cyan der PIN5 und für Blau der PIN6 verwendet. | Für jede Farbe wurden 4 Transistoren verbaut, da vorgesehen ist auf jeder Seite des Serverschranks eine "LED-Leiste" anzubringen. Alle Dioden einer Farbe sind miteinander verbunden. Hierbei wurde für Cyan der PIN5 und für Blau der PIN6 verwendet. | ||
− | == Arduino/Firmata == | + | === Arduino/Firmata === |
[[Datei:Rack_warp_core.gif|frame|right|Laufender Download...]] | [[Datei:Rack_warp_core.gif|frame|right|Laufender Download...]] | ||
Zeile 69: | Zeile 96: | ||
Der Code für die Ansteuerung befindet sich hier: [https://github.com/Schinken/nodejs-warpcore nodejs-warpcore] und hier [https://github.com/Schinken/H.A.R.M. H.A.R.M.] | Der Code für die Ansteuerung befindet sich hier: [https://github.com/Schinken/nodejs-warpcore nodejs-warpcore] und hier [https://github.com/Schinken/H.A.R.M. H.A.R.M.] | ||
− | == SNMP Traffic == | + | === SNMP Traffic === |
Um den Netzwerkverkehr unseres Routers zu lesen wurde das Protokoll SNMPv2 verwendet. Hierfür konnte die bereits existierende Library [https://github.com/calmh/node-snmp-native node-snmp-native] genutzt werden. | Um den Netzwerkverkehr unseres Routers zu lesen wurde das Protokoll SNMPv2 verwendet. Hierfür konnte die bereits existierende Library [https://github.com/calmh/node-snmp-native node-snmp-native] genutzt werden. |
Version vom 18. Februar 2013, 20:49 Uhr
Warpcore Status: stable | |
---|---|
Beschreibung | Trafficanzeige im Rack |
Autor: | schinken |
PayPal |
Beschreibung
Der Warpcore ist eine Beleuchtung des Racks mit Leuchtdioden, welche an den Warp-Kern des Raumschiff Enterprise angelehnt ist. Hierbei sollen die zwei verwendeten Farben abwechselnd an- und ausgeschalten, bzw "gefaded" werden.
Zugleich wird die Beleuchtung auch dazu verwendet, den aktuellen Internet-Traffic (incoming) zu visualieren. Hierzu wird die Geschwindigkeit des "Fadens" bei hohem Traffic erhöht, sowie bei geringem Traffic reduziert. Um Strom zu sparen wird die Beleuchtung abgeschalten sobald sich keine Member mehr im Space befinden. Hierzu wird die API des Open/Close_Anzeiger verwendet.
Videos von den aufbauten befinden sich hier:
Version 2
Warum?
Die erste Version des Warpcores nutzte node-firmata sowie den daran angeschlossenen Arduino sowie dessen PWM-Ausgänge zum ansteuern der Transistoren. Node-firmata nutzte für die serielle Kommunikation die Bibliothek node-serialport, welche im C/C++-Binding durch die Verwendung einer Queue zu Problemen führte.
Hierbei wurden alle Bytes welche gesendet werden sollen in eine Queue geworfen, welche bei zu schnellen senden vollläuft. Leider gab es keine Möglichkeit den aktuellen Stand der Queue auszulesen, um das aktualisieren des PWM-Ports zu reduzieren oder zu unterbrechen. Nach einer gewissen Zeit war der Speicher der Flepo aufgebraucht, und das node-Programm beendete sich mit einen memory allocaton error.
Hardware
Um jede Leuchtdiode einzeln ansteuern zu können wurde die Platine aus dem Projekt dmx2rgb wiederverwendet. Diese Platine wurde ohne RS485-Chip bestückt, da wir den vorhandenen USB-2-USART-Adapter direkt an den Prozessor anschliessen konnten.
Datenübertragung
Der USB2USART-Adapter beherrscht nur die Standard-Baudraten, weshalb wir nicht die 250khz von DMX verwenden konnten. Hierfür haben wir die Firmware der dmx2rgb-Platine modifiziert und einen eigenen Branch im dmx2rgb-repository angelegt. Die momentan verwendete Baudrate ist 230400.
Um den Anfang des Datenpaktes zu markieren, beginnt jede Übertragung mit 0x55AA, gefolgt von 48 Byte Daten. Jedes Byte addresiert einen Kanal der dmx2rgb-Platine.
Visualisierung
Zurzeit läuft ein simples Testprogramm welches einen einfachen Sinus durch alle Kanäle laufen lässt. Geplant ist die Wiederherstellung der ursprünglichen Funktionalität: Den aktuellen Netzwerktraffic anzeigen.
Hierzu muss die Traffic-Ermittlung via SNMP komplett neugeschrieben, da die node.js-Library nicht weiter verwendet werden kann.
Version 1
LEDs
Für die Realisierung wurden 20 blaue LEDs mit 8000mcd und 18 cyan/türkise LEDs mit 9000mcd verwendet. Die Leuchtdioden wurden auf eBay jeweils im 50er-Pack inklusive Vorwiderstände und Schrumpfschläuche für wenige Euros bestellt.
Im ersten Schritt wurde an jeder Leuchtdiode der mitgelieferte 470 Ohm-Widerstand an der Kathode (-) angelötet. Danach wurde ein zwei bis drei Zentimeter langes Stück des Schrumpfschlauches über den Widerstand geschoben und erhitzt, damit es nicht versehentlich bei der Montage zum Kurzschluss kommen kann. Pro Farbe wurden im Abstand von 20 Zentimeter die LEDs an einen zweiadrigen Klingeldraht angelötet. Hierbei wurde mit einem Teppichmesser die Isolierung entfernt um den Kupferdraht offenzulegen.
Die Verkabelung wurde im Rack mit Heißkleber befestigt und verlegt.
Ansteuerung
Für die Ansteuerung verwenden wir einen Arduino Uno in der Revision 3. Als Ausgänge wurden die PINs 5 und 6 verwendet, da diese als PWM-Ausgang verwendet werden können. Da der Prozessor nur 40mA am Ausgang bereitstellen kann, wurde eine kleine Lochrasterplatine mit Klemmen und BC337-16 Transistoren aufgebaut.
Beschaltung der Transistoren:
\\ +----[ 470 ]--|<---- +12V _____ |/ PIN5 --+----[_____]-----| | 4k7 |> | \ | +---- GND | | \\ | +----[ 470 ]--|<---- +12V | _____ |/ +----[_____]------| | 4k7 |> etc. \ +---- GND
Für jede Farbe wurden 4 Transistoren verbaut, da vorgesehen ist auf jeder Seite des Serverschranks eine "LED-Leiste" anzubringen. Alle Dioden einer Farbe sind miteinander verbunden. Hierbei wurde für Cyan der PIN5 und für Blau der PIN6 verwendet.
Arduino/Firmata
Der Arduino Uno ist per USB mit der Flepo verbunden. Als Firmware wurde Firmata verwendet. Implementiert wurde die Steuerung des Arduinos mit node.js, da hierfür eine nodejs-firmata Library existiert.
Die Helligkeitsberechnung wurde mit der Sinus-Funktion sin(x) realisiert. Der Wert x wird je nach Geschwindigkeit unterschiedlich stark inkrementiert. Für die Ansteuerung der zweiten LED-Farbe wurde der berechnete Wert invertiert. Die Berechnung und senden des Wertes an den Arduino wird in einem Intervall von xx Millisekunden vorgenommen.
Da der Netzwerktraffic sprunghaft steigt oder fällt, wurde der Wert mit der exponentielle Glättung geglättet. Die Geschwindigkeit ist mit maximal 6000 kb/s und minmal 100 kb/s gedeckelt.
Der Code für die Ansteuerung befindet sich hier: nodejs-warpcore und hier H.A.R.M.
SNMP Traffic
Um den Netzwerkverkehr unseres Routers zu lesen wurde das Protokoll SNMPv2 verwendet. Hierfür konnte die bereits existierende Library node-snmp-native genutzt werden.
Unter der OID ".1.3.6.1.2.1.2.2.1.10.5" stellt OpenWRT backfire 10.03.1. den Wert "br0-wan incoming" als Bytes seit der Inbetriebnahme des Gerätes zur Verfügung. Zum errechnen der aktuellen Kilobytes pro Sekunde wurde der aktuelle Wert alle 2 Sekunden abgefragt und die Zeit seit der letzten Änderung gemessen.
Der Code befindet sich hier nodejs-snmp-traffic