mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik brauche Denkanstoss für interaktive LED Matrix


Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

ich steh grad ein bisschen auf dem Schlauch, wie die Software aussehen 
muss, um interaktiv LEDs anzusteuern, wie es beispielsweise in diesem 
Beitrag "Interactive LED wie geht das" gemacht wird.

Bisher gehe ich davon aus, dass über zwei (besser drei) Lichtsensoren 
ermittelt wird, wie schnell etwas die Sensoren abdunkelt. In 
Abhängigkeit dieses Wertes werden dann entsprechend die LEDs 
angesteuert.

So, und um das umzusetzen brauch ich jetzt n kleinen Stupser in die 
richtige Richtung.
Mein Ansatz wäre eine StateMachine. Der ermittelte Geschwindigkeitswert 
wird an die StateMachine übergeben. Die SM fadet kontinuierlich ein und 
aus, wobei bei jedem Durchlauf der Maximalwert des Fadings und die 
Geschwindigkeit des Fadens erhöht wird, bis der Geschwindigkeitswert 
erreicht wird. Das entsprechende Fading wird eine Weile gehalten, und 
danach gehts mit dem Wert wieder runter.
Wird einmal schnell und danach langsam "überflogen", passiert nix, d.h. 
der höhere Geschwindigkeitswert wird weiter "bedient". Alternativ könnte 
man schnell, aber fließend zur langsameren Fading-Stufe gehen.

Wie ist der Ansatz? Zu einfach/kompliziert gedacht? Oder völlig falsch?

Ralf

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hüülfe :)

Bin jetzt glaub ich schon einen Schritt weiter, die ursprüngliche Idee 
mit der SM scheint zumindest auf dem Papier brauchbar, allerdings brauch 
ich wohl mehr States als ursprünglich gedacht :)
Und da ich die LEDs nicht alle gleichartig faden will, sondern etwas 
durcheinander, wird's doch ein wenig komplexer, aber das bekomm ich auch 
noch hin.

Ralf

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ralf schrieb:
> Bisher gehe ich davon aus, dass über zwei (besser drei) Lichtsensoren
> ermittelt wird, wie schnell etwas die Sensoren abdunkelt. In
> Abhängigkeit dieses Wertes werden dann entsprechend die LEDs
> angesteuert.

Es gibt prinzipiell auch die Möglichkeit, die LEDs selbst als Sensoren 
zu verwenden. Für diese Anwendung zwar zu träge, aber dennoch ganz 
interessant: LEDs per Soft-PWM und Messung in den Dunkelphasen. Geht 
prima, sogar mit LED in einer Matrix :-)

Ralf schrieb:
> Mein Ansatz wäre eine StateMachine. Der ermittelte Geschwindigkeitswert
> wird an die StateMachine übergeben. Die SM fadet kontinuierlich ein und
> aus, wobei bei jedem Durchlauf der Maximalwert des Fadings und die

Statemachine? Wo siehst du da ne Statemachine???

Als erstes fällt mir da ne partielle Differentialgleichung ein. Stell 
dir einfach mehr oder weniger lose gekoppelte Oszillatoren vor, die beim 
Darüberstreichen angeschubst werden. Dann könnten sich Erregungszentren 
ausbreiten wie zB bei Wasserwellen. Ohne Kopplung der Zellen könnten 
diese immer noch schwingen. Dann wär die Berechnung etwas einfacher.

Autor: Verwirrter Anfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier gibts ein paar Infos zu so einem Tisch
http://www.evilmadscientist.com/article.php/gameoflife
die benutzen IR LEDs als Entfernungssensor

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Johann:
> Es gibt prinzipiell auch die Möglichkeit, die LEDs selbst als Sensoren
> zu verwenden. Für diese Anwendung zwar zu träge, aber dennoch ganz
> interessant: LEDs per Soft-PWM und Messung in den Dunkelphasen. Geht
> prima, sogar mit LED in einer Matrix :-)
Ja, das habe ich für ein anderes Projekt auch schon so gemacht. War zwar 
von der Reichweite her nicht wirklich berauschend und wie du sagst auch 
relativ träge, aber an und für sich ne coole Sache :) In einer Matrix 
könnte man zur Messung evtl. die LEDs aus den Reihen/Spalten nehmen, die 
gerade nicht aktiv sind.

> Statemachine? Wo siehst du da ne Statemachine???
Naja, ich dachte mir, dass ich die Geschwindigkeit der Abdunkelung 
ermittle, und diesen Wert der SM übergebe. Die SM fadet bis zu diesem 
Wert hoch (inkl.des variierenden Fadings) , bleibt eine Weile auf dem 
Level und fadet dann wieder runter. Keine gute Idee?

> Als erstes fällt mir da ne partielle Differentialgleichung ein. Stell
> dir einfach mehr oder weniger lose gekoppelte Oszillatoren vor, die beim
> Darüberstreichen angeschubst werden. Dann könnten sich Erregungszentren
> ausbreiten wie zB bei Wasserwellen. Ohne Kopplung der Zellen könnten
> diese immer noch schwingen. Dann wär die Berechnung etwas einfacher.
Das muss ich mir zuhause nochmal in Ruhe durchlesen :) Ich versteh 
erstmal nur Bahnhof grins
Wenn ich's einigermaßen im Ansatz richtig verstanden habe, dann lösen 
die Sensoren quasi einfach eine "Oszillation" der jeweils zugeordneten 
LEDs aus? Und die Oszillation geht quasi zeitversetzt über mehrere LEDs, 
um die "Wellen" zu erzeugen?

@Verwirrter Anfänger:
Danke für den Link, das lese ich mir auch mal in Ruhe durch.

Ralf

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ralf schrieb:

> erstmal nur Bahnhof *grins*
> Wenn ich's einigermaßen im Ansatz richtig verstanden habe, dann lösen
> die Sensoren quasi einfach eine "Oszillation" der jeweils zugeordneten
> LEDs aus?

Persönlich denke ich, du machst dir hier zuviele Gedanken.
Solche Dinge entstehen meistens mehr oder weniger zufällig. Man probiert 
einfach was aus, was gut klingt. Eventuell ist dann da noch ein 
Programmfehler drinnen, den man hinterher ganz einfach zum Feature 
erklärt, weil das Ergebnis gut aussieht :-)

Derartige Effektprogramme werden eher selten in allen Details 
vorgeplant, sondern man hat eine grundsätzliche Idee, probiert die 
einfach aus und variiert dann ganz einfach den Code, bis das Ergebnis 
gefällt.


Wenn dir die Oszillationen gefallen, dann würde ich so anfangen:

In der Hauptloop werden grundsätzlich alle LED ständig in ihrer 
Helligkeit oszillierend verändert. Die Frage ist nur mit welcher 
Amplitude.

D.h. die Schleife läuft ständig durch und ackert ein Array ab, welches 
die Amplitude für die Oszillation vorgibt (also einfach einen 
multipikativen Wert, der auf eine Sinusschwingung aufmultipliziert wird, 
mit dem die PWM jeder einzelnen LED angesteuert wird).

Setz ich den Amplitudenwert einer LED auf 0, dann oszilliert sie gar 
nicht, setz ich ihn auf 255, dann oszilliert sie mit voller Helligkeit.
Bei jedem Durchlauf durch das Ampliutdenarray wird auch der dort jeweils 
abgelegte Wert ein bischen kleiner gemacht. Damit wird die Oszillation 
jeder LED ganz von alleine schwächer und fadet aus.

Tja- und jetzt brauch ich nur noch ein Schema, wann welcher 
Amplitudenwert auf 'Voll' gesetzt wird. Das kann jetzt sein zb ein 
Differenzwert eines Sensors (Wert jetzt - Wert vor 0.1 Sekunden) oder 
das kann sein, dass ich einen Amplitudenwert hernehme und zb 1/4 seines 
Wertes auf die jeweils benachbarten Amplituden aufteile. Erlaubt ist was 
gefällt.

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Karl Heinz,

sorry für die späte Antwort.

> Persönlich denke ich, du machst dir hier zuviele Gedanken.
> ...
> hinterher ganz einfach zum Feature erklärt, weil das Ergebnis gut aussieht
> :-)
Naja, so kann man's auch machen :) Aber soweit muss ich erstmal kommen.

> Derartige Effektprogramme werden eher selten in allen Details
> vorgeplant, sondern man hat eine grundsätzliche Idee, probiert die
> einfach aus und variiert dann ganz einfach den Code, bis das Ergebnis
> gefällt.
Klar, aus solchen Vorgehensweisen entstehen z.T. echte Knaller.
Ich muss nur zum Grundschema erstmal kommen, der Rest dürfte kein 
Problem sein.

> Bei jedem Durchlauf durch das Ampliutdenarray wird auch der dort jeweils
> abgelegte Wert ein bischen kleiner gemacht. Damit wird die Oszillation
> jeder LED ganz von alleine schwächer und fadet aus.
Hmja, das hört sich gut an. Ich hab die PWM gegenwärtig so gelöst, dass 
sie zwar 8-Bit Auflösung hat, aber für eine lineare Helligkeitssteuerung 
nehme ich eine Tabelle aus 20 Werten, die jeweils grob mit dem Faktor 
Wurzel(20) aus 8-Bit(255).
Nach deinem Vorschlag müsste ich also bei Auslösung eines Sensors gleich 
in die volle Oszillation gehen und das runterfaden schrittweise 
automatisch machen? Das werd ich mal probieren!

> Tja- und jetzt brauch ich nur noch ein Schema...
> ...
> Erlaubt ist was gefällt.
In Verbindung mit dem obigen Vorschlag wäre das glaub ich ein geeigneter 
Ansatzpunkt.

Besten Dank, ich werd mal sehen, was ich da gezaubert bekomme!

Ralf

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.