Go Down

Topic: Projektvorstellung: Beleuchtung mit WS2812B (Read 6764 times) previous topic - next topic

sschultewolter

Oct 19, 2013, 12:08 am Last Edit: Oct 19, 2013, 10:02 pm by sschultewolter Reason: 1
Hallo,

hab im Forum bereits das ein oder andere Mal bereits geschrieben, dass ich derzeit mit den WS2812B arbeite. Meine kleine Equinox ist leider noch nicht fertig (warte auf das Gehäuse, Sketch steht). Das wird sich noch ein bisschen hinziehen.

Nun, ich arbeite ebenfalls seit ein paar Wochen an einer Beleuchtung eines Regals. Es werden hierbei 8 Flaschen vom Flaschenboden aus bestrahlt. Verbaut habe ich dafür folgende Komponenten:


  • Arduino Mini Pro 5V/16MhZ

  • LC Display 1602 I²C

  • Arduino UNO DIP-Variante (zum Programmieren des Mini Pro)

  • 8 WS2812B



Noch nicht verbaut ist ein Bluetooth Modul, welches demnächst aus GB ankommen soll.
Wenn es soweit ist, wird der Arduino UNO abgebaut und die Kommunikation läuft dann nur noch über Bluetooth (Smartphone/PC). Des weiteren ist noch nicht sicher, ob das Display später im Projekt bleibt.

Ausgabe VS 2012 Professional mit Visual Micro
Code: [Select]

Compiling 'unor3sept30' for 'Arduino Pro or Pro Mini w/ ATmega328 (5V, 16 MHz)'
Binary sketch size: 12950 bytes (used 42% of a 30720 byte maximum) (0,55 secs)
Minimum Memory Usage: 588 bytes (29% of a 2048 byte maximum)
Uploading to I/O board using 'COM10'
Done uploading


Der eigentliche Grund, dass ich diese Projekt öffentlich stelle, ist u.a., dass ich nach Optimierungen suche. D.h. ich lege mich nicht fest, dass das Sketch optimal auf das Projekt ausgelegt ist. Ich wäre erfreut, wenn ihr entsprechende Stellen im Sketch nennen könnt, die man verbessern kann, falls nötig.

Dank Stefan(Eisebaer) bin ich bereits auf die Funktion memset gekommen. Dachte erst, das war etwas FastSPILibary-spezifisches. Hab dann in meinem schlauen Buch dann gesehen, dass ich damit die Werte zurücksetze.

Es gab auch eine Möglichkeit, die Funktionen nicht über ein Switch Case aufzurufen. Wie war der Befehl genau, und könnte einer ein kurzes Beispiel bringen (enum?)

Weitere Effekte folgen in Kürze...

Gruß Stefan

Der aktuelle Sketch auf Dropbox


Ich wollte eigentlich den Quellcode lesbar veröffentlichen auf Github. Jedoch wird einem die Freigabe und Änderung durch die Software sehr erschwert. Dauerhaft meldet er, Name beretis vergeben etc, ob wohl in den localen sowie online Repos die Projekte bereits entfert wurden. Des weitern stört diese commits!

Somit vorerst wieder auf der Dropbox.
Orginal Atmel AVRISP mkII zu verkaufen. Anfrage per PN ;)

Jomelo

Hi,

die Enum Möglichkeiten sparen keine Resourcen ein, aber es sieht dann schöner aus:
Code: [Select]

enum xx_ein_aus
{ ein = 1,
aus = 0,
        xyz = 2,
} status01;

void setup()
{
  status01 = ein;
}

void loop()
{
}


Des weiteren könntest du dich mit ProgMem Beschäftigen und die Fade Vektroren im Flash Speicher ablegen. Dann werden 120 Byte vom SD Ram gespart.
while(!success){try++;}

sschultewolter

#2
Oct 19, 2013, 04:15 pm Last Edit: Oct 19, 2013, 04:34 pm by sschultewolter Reason: 1
Reicht das für PROGMEM bereits aus?
Code: [Select]
#include <avr/pgmspace.h>

uint8_t fade50[40] PROGMEM =
{
0,20,21,21,22,23,24,24,
25,26,27,28,29,30,31,32,
33,34,35,37,38,39,41,42,
43,45,46,48,50,51,53,55,
57,59,61,63,65,67,70,72
};


Mit der enum Variante stehe ich noch etwas auf dem Schlauch. Sehe da gerade nicht zwingend den Vorteil.

Um eine meiner Funktionen aufzurufen, müsste ich doch dann immer noch etwas mit

if(status == "ein") fade(20, 255, 4000);
Orginal Atmel AVRISP mkII zu verkaufen. Anfrage per PN ;)

sschultewolter

Habe nun doch wieder zurückgesetzt auf die PROGMEM freie Version. Entsprechende Codezeilen wurden auskommentiert, da es hier scheinbar doch zu unerwünschten Effekten kommt, die ich mir gerade nicht erklären kann.

Habe mit und ohne #include <avr/pgmspace.h>.
Die Arrays habe ich wie folgt dann angelegt:
PROGMEM uint8_t fade75[40] = {a,b,c};

Jedoch habe ich hierbei das Problem, dass mir die Leds durchgehen sobald ich eine Funktion aufrufe mit nur einer Led.
Orginal Atmel AVRISP mkII zu verkaufen. Anfrage per PN ;)

Serenifly

Enums bringen in diesem Fall nichts. Jedenfalls wird es nicht kürzer.

Was du machen kannst ist für case 2-6 den ersten Paramter in einem byte-Array zu speichern. Und dann die Methode so aufrufen:
fadeLeds(array[modus], 255, 4000);

Dadurch wird der Code etwas kürzer.


Und PROGMEM ist etwas komplizierter:
http://arduino.cc/en/Reference/PROGMEM

Du musst auch einen anderen Datentyp verwenden und eine spezielle Funktion zum Auslesen

sschultewolter

:( Hab es mir fast gedacht, dass es letzten Endes nicht viel bringt.

Die Menüordnung soll später varieren, dann kommt es vor, dass ich keine 5 Programme habe, die die gleiche Funktion nutzen.

Zum Progmem habe ich bereits die Reference gelesen. Finde aber, dass es mit den beschriebenen doch relativ aufwendig wird.
Des weiteren, ist es nicht für die Performance dann evtl. auch nicht eher schädlich, die Daten noch einmal zusätzlich aus dem Speicher zu holen?

Ich habe ja nicht mit dem Mega getestet und möchte dieses nun auf einen Arduino mit kleinerem Speicher verfrachten. Es geht ja bereits mit dem kleinen Speicher. Des weiteren wird der Code nicht so riesig, soviele Lichteffekte fallen mir garnicht ein, um diesen zu füllen.
Orginal Atmel AVRISP mkII zu verkaufen. Anfrage per PN ;)

Serenifly

Enums sind schon schön, aber halt nicht unbedingt hier. Und sie machen den Code auch nicht kürzer, wenn sie sinnvoll sind. Aber wenn man mit Status (pl.) arbeitet, hat man aussagekräftige Namen (was du bei dir halt nicht brauchst) :) Außerdem findet eine Überprüfung beim Kompilieren statt und man kann einer enum-Variablen nicht beliebige Werte zuweisen wie bei einem Integer.

Progmem kostet dich vielleicht ein paar ms (oder eher µs?) für das Auslesen des Speichers. Das sollte verkraftbar sein. Aber wenn du wirklich erst 30% RAM verbrauchst brauchst du es nicht.

Eisebaer

hi,

ich lese hier oft, man soll doch progmem verwenden, und oft genug macht es ja auch sinn. aber eben nur dann, wenn das RAM knapp wird. ansonsten werd' ich doch nicht schnellen speicher ungenutzt lassen.

übrigens: heute war in einer folge von two and a half men zu sehen, wie walden einen aufbau mit einem arduino auf dem küchentisch stehen hat und programmiert. fand ich nett.

gruß stefan

sschultewolter

Ja genau, ich nutze erst 30% RAM, wie oben im Log zu sehen. Dann werde ich es weglassen und einmal darauf zurückkommen, wenn ichs mal wirklich gebrauchen sollte.

Die Folge ist mir nicht bekannt. Oder aber du hast genauer hingesehen als ich ;)
Schleichwerbung oder gekonntest Marketing? :D
Orginal Atmel AVRISP mkII zu verkaufen. Anfrage per PN ;)

Eisebaer

hi,

es war die folge "Noch eine Nacht mit Neil Diamond".
die, in der lindsey mit alan schluß macht.

gruß stefan

sschultewolter

Scheint, wenn ichs richtig sehe, eine Esplora zu sein.
Orginal Atmel AVRISP mkII zu verkaufen. Anfrage per PN ;)

nix_mehr_frei

Hallo Stefan,

in meiner Vor Arduino Bastelära habe ich ein Präsentationsboard für Flaschen gebaut. Basis bildete ein Streifen Küchenarbeitsplatte. Darin habe ich mit der Lochkreissäge Löcher gebohrt und Halterungen für Halogenspots befestigt. Ich nahm normale MR16 Halogenspots, flexte mit der Diamantscheibe hinten die Lampe ab, klebte eine auf einem kleinen Chipsatz-Kühlkörper sitzende Power-LED in den Reflektor und setzte dieses Konstrukt wie einen normalen MR-16 Spot in die Halterung. Die Flaschen werden auf die Spots gestellt und ergeben einen Effekt, ähnlich einer Lava-Lampe  :smiley-mr-green:
Ca. 10cm vor den Flaschen habe ich eine 3-Kant Holzleiste mit der 45° Schräge zu den Flaschen zeigend aufgeschraubt. Auf die Schräge habe ich dann LED vom laufenden Meter gepappt, um die Etiketten der Flaschen blendfrei zu beleuchten.
Bei mir alles in weiß, ohne µC, aber das ist ja ausbaufähig.

Gruß Gerald
rot ist blau und Plus ist Minus

sschultewolter

Die Halterung, bzw. Bodenplatte befindet sich noch in der Mache ;) Wobei, was du gemacht hast, wäre schon viel zu hell :D Habe jetzt im Maximalfall 8x 3x20mA (~500mA). Wobei ich diese eigentlich nie erreiche, lediglich beim Weiß Fade.
Orginal Atmel AVRISP mkII zu verkaufen. Anfrage per PN ;)

nix_mehr_frei

#13
Oct 20, 2013, 03:17 pm Last Edit: Oct 20, 2013, 03:20 pm by nix_mehr_frei Reason: 1
Na ja, auf den Spots stehen teilweise recht dunkele Fruchtweine, wo man schon kräftig reinleuchten muß. für einen ersten Versuch nahm ich 3W Cree-LED's, die tatsächlich zu viel des Guten waren. Aber 1W LED's waren genau richtig. Ich baue mir meine Konstantstromquellen auf Schaltreglerbasis selber. Basis dafür ist ein LM2576 adj, den ich als KSQ "missbrauche"  :smiley-mr-green:
Als Anhang habe ich meine schaltung als GIF angehängt, kann ich aber leider nicht in der Vorschau überprüfen  :(
Über Pin 5, ON/OFF, der an Masse liegt, kann man einen kleinen npn-Transistor einschleifen, 1K Pullup nach +Ub, 10K Basiswiderstand und du kannst die KSQ auch über einen Arduino-Pin steuern. Bedingt geht auch Helligkeitsänderung per PWM. Allerdings kann es dabei Stufen oder Flackern geben, wenn die PWM Frequenz ungünstig zur Frequenz der KSQ liegt. Ist halt quick & dirthy für einen ersten Versuch. Habe ich für die Umrüstung eines Baustrahlers mit einem 20W COB-LED Cluster und einem 555 zum dimmen so gemacht.

Gruß Gerald

rot ist blau und Plus ist Minus

malerlein

Hi Stefan
Einmal eine Frage:  wo bestellst Du deine Arduino Mini Pro 5V/16MhZ, Ich habe mir in der Bucht 4 Stück bestellt  gut sie kosten da nur 1 € plus 3,95€ versand. Jedoch ärgere ich mich darüber das ich wenn ich zusammen bestelle(die 4 Stück) für jeden Versand bezahlen muss, ich weis ja nicht ob es nicht trotzdem noch Günstig ist , da kommt jeder Mini auf 4,95€. ich habe schon versucht den Verkäufer zu erreichen aber da ist keine mail adresse bei.

l.G.Jürgen
l.G.Jürgen

Verzeihe Deinen Feinden, aber vergesse nie Ihren Namen.

Go Up