Hallo Zusammen Also da es mein Erster Beitrag ist, stell ich mich noch kurz vor: Ich heisse Benjamin und bin 20 Jahre alt. Momentan in der Elektroniker Lehre, begeisterter Fotograf und Drohnennpilot . Programmiert habe ich bis jetzt vor allem mit dem Arduino. In der Schule haben wir nun mit Konsolen Anwendungen gestartet, aber halt noch die Basics. Nun zu meinem Projekt: Ich möchte einen PixelStick nachbauen. Dies ist für die Nachtfotografie sehr interessant um Grafiken, oder Farbmuster darzustellen. Dies geschieht mit einer Langzeit Belichtung, während man den Stab (zuerst) in einer Vorgegebener Zeit über eine Distanz bewegt. Die Distanz ist Grafikbreite die man darstellen will. Später soll noch ein oder sogar zwei Beschleunigungssensoren dazu kommen... Aber mal Sekundäre Idee. (PS. sie währen mit I2C angeschlossen) Die LEDs sind alle Seriell Angesteuert und brachen 30µS zum die Daten zu übernehmen. Bei 288 LEDs (zwei mal 1Meter) muss ich 8.96mS pro Zeile einrechnen um jeder LED/Pixel die entsprechende Farbe zu zuordnen. Mit den LEDs habe ich schon mit dem Arduino gearbeitet und schon selbst 110 Stücke angesteuert. Diese Funktionieren mit einem 24bit Mustter: 0b000000001111111100000000. Die ersten 8 für Rot, die zweiten 8 für Grün und die letzten 8 für Blau. In diesem Beispiel würden sie also Grün leuchten. Auch der Strom ist berechnet und kommt auf 17.28A wenn alle LEDs Weis eingeschaltet sind. Dafür verwende ich einen LiPo Akku mit 7.4V mit einem 100 W DC DC Wandler um auf 5V zu kommen, da ich keine 41.4W unnötig verbraten möchte. Die Grafik wird schon auf 288 Pixelhöhe als PNG Grafik auf einer SD Karte gespeichert. Das bedeutet bevor ich anfange zu rechnen muss ich überprüfen ob die Höhe stimmt. Ansonsten muss ich eine Fehlermeldung generieren. Meine Idee war das ich zuerst alle Pixel Auslese und in RGB Arrays mit X und Y Koordinaten abspeichere. (Oder zumindest einen Puffer von -+2 bis 3 Zeilen) Bei Meinen Beispiel Bild währen es ca 124'000 Pixel also 373'000 RGB Werte die mit den Entsprechenden Koordinaten versehen werden müssen. So weit so gut. Nur wie bekomme ich diese RGB Werte? Ich müsste die RGB werte jeweils Zeile für Zeile auslesen und abspeichern. Als Ergebnis würde ich gerne etwas wie R[Y][X]; G[Y][X] und B[Y][X] erhalten. Den die LED Ausgabe wird mit dem Befehl LED[Nummer] = DRGB(R, G, B); Ich hoffe sehr das ich alle Benötigten Infos drin habe. Auf Antworten Freue ich mich. Grüsse Benjamin
Gute Projektbeschreibung erstmal! Aber was genau ist denn nun die Frage: - Wie Du per Arduino eine SD-CARD ausliest? oder - WIE Du das PNG-Datenformat entschlüsselst? Grundsätzlich würde ich ein anderes Datenformat nehmen, z.B. BMP. Das ist simpel beherrschbar und bei 24Bit-BMP liegen die Daten schon unkomprimiert in der richtigen Reihenfolge im Bitmap vor, wenn das Bitmap zuvor um 90Grad gedreht wurde. PNG kann wegen der Komprimierung sehr tricky werden. Denn für Deine Echtzeitanwendung hast Du per Arduino weder Zeit noch Speicherplatz genug, um das ganze Bitmap zwischenzuspeichern.
Ich Gedenke das Projekt weiterhin hier zu Dokumentieren, falls es jemanden Interessiert. Die Erfahrung die ich habe, habe ich alle auf Arduino Basis gesammelt. Nun möchte ich, da ich in der Lehre bin, mit einem MSP430 anpacken. Den dieser verwenden wir auch viel im Geschäft. > Wie Du per Arduino eine SD-CARD ausliest? Korrektur: mit einem MSP430. Hier habe ich mir überlegt auf eine Library zurück zu greifen. >WIE Du das PNG-Datenformat entschlüsselst? Ich denke wohl eher BMP. Das grosse Fragezeichen steht bei mir vor allem beim Auslesen der Grafik. Vielen Dank schon mal im Voraus.
Das BMP-Format ist ja tausendfach dokumentiert und simpel. Allerdings solltest Du die Bilder unkomprimiert speichern, BMP kann komprimiert und unkomprimiert genutzt werden. Ist also Sache Deines Bildbearbeitungsprogramms, es halt erstmal unkomprimiert und in RGB zu speichern. Danach ist es einfach, als Einstieg: https://www.itwissen.info/BMP-bitmap-file-format-Bitmap-Dateiformat.html
Die WS2812b sind für solche Anwendungen aber nicht so gut geeignet, da deren Wiederholrate recht gering ist (siehe hier https://learn.adafruit.com/adafruit-neopixel-uberguide/the-magic-of-neopixels). 400Hz mögen viel klingen, aber das kann sich in lustigen Mustern bemerkbar machen. Ich weiß ja nicht, wie weit Dein Projekt ist, aber überleg Dir das nochmal mit den LEDs, nimm lieber die SK9822/APA102C LEDs. Und bezüglich des Datenformates kann ich mich nur meinen Vorrednern anschließen. Vergiss das mit dem PNG-Decoder auf dem MSP. Das braucht viel zu viel Ressourcen, und SD-Karten sind auf jeden Fall groß genug für Deine Zwecke, um die Bilddaten unkomprimiert zu speichern. Unkomprimiert kannst Du die dann Stück für reinstreamen, wenn du sie benötigst. Gruß, Markus
Hallo Markus > 400Hz mögen viel klingen, aber das kann sich in lustigen Mustern > bemerkbar machen. Ich vermute mal das es für mich in diesem Projekt nicht zentral sein wird. Den bei der Fotografie mit dieser Technik habe ich eine Belichtungszeit von mindestens 5 Sekunden. >Ich weiß ja nicht, wie weit Dein Projekt ist, aber >überleg Dir das nochmal mit den LEDs,... Leider ist das zu diesem Zeitpunkt leider schon zu Spät. Das meiste Material, darunter auch die LEDs sind schon unterwegs oder verbaut. Ich habe nun ein wenig mit BMP experimentiert. Ich habe bei Adobe Photoshop als BMP für Windows mit 24Bit und Adobe RGB 1998 ohne Komprimierung ein Bild exportiert. Naja das was ich bekommen habe ist weder in Hex noch in Dec oder Binär, nichts was mir irgendetwas Sinnvoll vorkommt. Ich habe ein für mich zufällige zusammengeworfen von Sonderzeichen, Grossbuchstaben und Zahlen erhalten. Betrachte ich die Daten falsch? Kurz umgeschaut habe ich auch Webseite gefunden um Bilddateien direkt in Hex Array zu Wandeln. Was natürlich auch eine Möglichkeit wäre. Ich selbst würde es bevorzugen diese Werte selbst zu ermitteln. Die Webseite wäre z.B. http://www.digole.com/tools/PicturetoC_Hex_converter.php Habt ihr eine gute Libery für den Zugriff auf eine SD Karte?
Benjamin B. schrieb: > Ich habe ein für mich zufällige zusammengeworfen von Sonderzeichen, > Grossbuchstaben und Zahlen erhalten. > Betrachte ich die Daten falsch? Sorry, was hattest Du denn erwartet? Dass da ein ASCII-Text kommt in der Art "Ein grüner Baum vor blauem Himmel..."? Das sind natürlich reine Binärdaten mit den Farbwerten. Ob DU die nun als ASCII, DEC, HEX interpretierst ist völlig schnuppe, es sind und bleiben binäre Farbwerte, im Wertebereich von 0-255. Natürlich können da zufällig auch Werte bei sein, die sich als ASCII interpretieren lassen. Diese Daten musst Du irgendwie zu den LED schaufeln, 3 Byte je Pixel wenn es unkomprimiertes 24Bit RGB ist. Dabei natürlich die Header-Daten überspringen, bzw. denen die X/Y-Ausdehnung entnehmen und jeweils die Enden der Pixelzeilen kalkulieren, damit das Bild am Ende nicht zum Trapez wird.
Oder du baust dir ein eigenes Datenformat für die Bilder die du auf die microsd Karte ablegst. Die Library OpenCv für computer lädt beliebige Bilddateien und ermöglicht direkt zugriff auf die Bytewerte in Form eines Arrays das man nach belieben in eine Datei schreiben kann. BMP ist aber in der tat mit wenig Einarbeitung beherschbar und sollte auch kaum overhead haben. Benjamin B. schrieb: > Ich vermute mal das es für mich in diesem Projekt nicht zentral sein > wird. > Den bei der Fotografie mit dieser Technik habe ich eine Belichtungszeit > von mindestens 5 Sekunden. So kannst du nicht rechnen. Du hälst deinen Stab ja nicht still! Nehmen wir mal an du willst einen Text mit dem Teil darstellen. Dazu würdest du den Stab aufrecht, horizontal einmal quer über das gesamte Bild bewegen. Im optimalfall könntest du also binnen 5 Sekunden, 2000Pixel horizontal darstellen da 5 mal 400hz. Könnte grade so für ansehliche Ergebnisse reichen, würde ich schätzen.
:
Bearbeitet durch User
I2C Überleger schrieb. > Sorry, was hattest Du denn erwartet? > Dass da ein ASCII-Text kommt in der Art > "Ein grüner Baum vor blauem Himmel..."? Nein so sicher nicht, ich habe naiv geglaubt das es schön Dezimal oder in HEX zumindest eine Regelmässigkeit aus zu machen sei. Nun ich bin nochmals mit 4x4Pixel Grafiken am üben und zu interpretieren. Den erst wen ich das Aufbauprinzip verstanden habe kann ich an die Programmierung gehen. Alex G. schrieb. > Nehmen wir mal an du willst einen Text mit dem Teil darstellen. Dazu > würdest du den Stab aufrecht, horizontal einmal quer über das gesamte > Bild bewegen. > Im optimalfall könntest du also binnen 5 Sekunden, 2000Pixel horizontal > darstellen da 5 mal 400hz. > Könnte grade so für ansehliche Ergebnisse reichen, würde ich schätzen. Richtig. Da gebe ich dir vollkommen Recht. Aber mal kurz Nachgerechnet: Ich habe meinen Stab mit 288 Pixel Höhe. Bei einem Bild mit ist das Seitenverhältnis oft 2:3. Dies bedeutet das ich eine Kantenlänge von 432 Pixel bekomme, auf eine Distanz von 3 Meter. Auch ist zu beachten das ich im Dunkel nicht gern und gut mal 5+ mehr Sekunden muss belichten. Da ich eine Auflösung von 144 LEDs Pro Meter habe (Gegeben durch den LED Streifen) würden 2000Pixel für eine Grafik von 13.8 Meter reichen. Für diese Anwendung genügt die Geschwindigkeit der LEDs sicher. Wegen der Qualität der Angezeigter Grafik: Die LEDs haben auch ein Streulicht, welche die Grafik mit einem ungewollten "Weichfilter" versehen. Danke viel mal für diese Überlegungen. Komme immer näher an das Ziel. Grüsse Benjamin
Ich würde mir vermutlich einen Bildconverter für den PC schreiben (Python, C#, was auch immer Dir liegt). Da wäre es ein leichtes die Pixel aus jedem beliebigen Format auszulesen, und dann als Rohwerte nach deinen wünschen in eine neue Datei (.raw) zu speichern.
Benjamin B. schrieb: > Ich habe meinen Stab mit 288 Pixel Höhe. 288 LEDs a max. 60mA = ? Ich hoffe das ist auch mit in die Planung eingeflossen!?
Teo D. schrieb: > 288 LEDs a max. 60mA = ? > Ich hoffe das ist auch mit in die Planung eingeflossen!? Benjamin B. schrieb: >> Auch der Strom ist berechnet und kommt auf 17.28A wenn alle LEDs Weis >> eingeschaltet sind. >> Dafür verwende ich einen LiPo Akku mit 7.4V mit einem 100 W DC DC >> Wandler um auf 5V zu kommen, da ich keine 41.4W unnötig verbraten >> möchte. Für den Übergang habe ich mir einen fast Militär Stecker ausgesucht der 20A verträgt. Schlussendlich habe ich einen 86.3W Scheinwerfer auf einem Stab. Um auch die Energie in Form von Wärme los zu kriegen, werden die Streifen in einem Aluminiumprofil montiert. Was ich mir überlege ist mehr wegen dem Signal-Kabel. Dieses wird ich wohl abschirmen müssen um Störungen zu vermeiden. Borislav B. schrieb: > Ich würde mir vermutlich einen Bildconverter für den PC schreiben > (Python, C#, was auch immer Dir liegt). Da wäre es ein leichtes die > Pixel aus jedem beliebigen Format auszulesen, und dann als Rohwerte nach > deinen wünschen in eine neue Datei (.raw) zu speichern. Ich würde gerne das Bild nur richtig Exportieren müssen. Wenn dann vor dem Start zuerst seine Zeit braucht um die Bilddatei zu lesen macht mir das nichts. Ich muss diese jedoch genügend schnell abrufen können. Grüsse Benjamin
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.