mikrocontroller.net

Forum: Projekte & Code Valentinstag steht vor der Tür..


Autor: Dominic M. (dommii)
Datum:
Angehängte Dateien:

Bewertung
1 lesenswert
nicht lesenswert
..und da unsere Holden das Leben mit uns Bastlern des öfteren schwer 
haben, hab ich da mal was vorbereitet.

Benutzt werden ein Tiny85, vier 74HC595, 64 5mm LEDs, ein bisschen 
Hühnerfutter und 20x20cm Leiterplatte einseitig. 0,3mm Strukturbreite 
sollten zuhause gut ätz- und 0.5mm Restring gut lötbar sein. Die ganzen 
Wires unter den Vorwiderständen kriege ich noch im Code wegoptimiert, 
dazu muss nur bei den mittleren beiden shiftOut MSBFIRST in LSBFIRST 
geändert.

Damit komme ich auch direkt zum Code:
//Random Lauflicht
//32bit für 4 74HC595

//Variablen initiieren               
  unsigned long Display = 0;            //HC595 out
  
  unsigned long top = 0;                //LEDs die von oben nach unten wandern
  unsigned long bottom = 0;             //LEDs die von unten nach oben Wandern
  unsigned long topbottom = 0;          //LEDs die von oben nach unten oder von unten nach oben Wandern
  
  int toptime = 0;                      //Anzahl Takte die neue LEDs von oben nachkommen/nicht nachkommen
  bool topon = true;                    //Zustand ob von oben LEDS nachkommen/nicht nachkommen
  
  unsigned long middle1=0;              //LEDs die von der Mitte nach oben wandern
  unsigned long middle2=0;              //LEDs die von der Mitte nach oben wandern
  unsigned long middle=0;               //LEDs die von der Mitte wandern
  
  int bottomtime = 0;                   //Anzahl LEDs von unten nachkommen/nicht nachkommen
  bool bottomon = true;                 //Zustand ob von der Mitte LEDS nachkommen/nicht nachkommen
  
  int middletime = 0;                   //Anzahl Takte die neue LEDs von oben nachkommen/nicht nachkommen
  bool middleon = true;                 //Zustand ob von der Mitte LEDS nachkommen/nicht nachkommen

//Pin verbinden mit SER
int dataPin = 8;
//Pin verbinden mit RCLK
int latchPin = 9;
//Pin verbinden mit SRCLK
int clockPin = 10;


void setup() {
  //Pins als Output setzen
  pinMode(latchPin, OUTPUT);
  pinMode(clockPin, OUTPUT);
  pinMode(dataPin, OUTPUT);
}

void loop() {

//LEDs von oben
if (toptime == 0){                  //Abfrage übrige Takte oben = 0
  if (topon == false){              //wenn keine LEDs nachkommen
    toptime = random(1,8);          //random Takte 
    topon = true;                   //LEDs sollen nachkommen
  }
  else{                             //wenn LEDs nachkommen
    toptime = random(25,200);       //random Takte
    topon = false;                  //LEDs sollen nicht nachkommen
  }
}

if (topon == true){                 //Wenn LEDs nachkommen sollen
 top = top + 3;                    //setze oberste zwei LEDs ON
}

//LEDs von unten
if (bottomtime == 0){               //Abfrage übrige Takte unten = 0
  if (bottomon == false){           //wenn keine LEDs nachkommen
    bottomtime = random(1,8);       //random Takte
    bottomon = true;                //LEDs sollen nachkommen
  }
  else{                             //wenn LEDs nachkommen
    bottomtime = random(50,200);    //random Takte
    bottomon = false;               //LEDs sollen nicht nachkommen
  }
}
    
if (bottomon == true){              //Wenn LEDs nachkommen sollen
  bottom = bottom + 2147483648;     //setze unterste LED ON
}

//LEDs von der Mitte
if (middletime == 0){               //Abfrage übrige Takte Mitte = 0
  if (middleon == false){           //wenn keine LEDs nachkommen
    middletime = random(2,12);      //random Takte
    middleon = true;                //LEDs sollen nachkommen
  }
  else{                             //wenn LEDs nachkommen
    middletime = random(200,400);   //random Takte
    middleon = false;               //LEDs sollen nicht nachkommen
  }
}
    
if (middleon == true){              //Wenn LEDs nachkommen sollen
  middle1 = middle1 + 65536;        //setze LED Mitte oben ON
  middle2 = middle2 + 131072;       //setze LED Mitte unten ON
}

//Zusammenführen der Ausgabe
middle = middle1 | middle2;         //gebe aus LEDs mitte nach oben OR LEDs mitte nach unten
topbottom = top | bottom;           //gebe aus LEDs von oben OR LEDs von unten
Display = topbottom | middle;       //HC595 out LEDs
    
//Ausgabe HC595
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, (Display >> 24));
shiftOut(dataPin, clockPin, MSBFIRST, (Display >> 16));
shiftOut(dataPin, clockPin, MSBFIRST, (Display >> 8));
shiftOut(dataPin, clockPin, MSBFIRST, Display);
digitalWrite(latchPin, HIGH);
                               
//Lauflicht
top = top * 4;                      //verschiebe LEDs von oben um zwei Stellen nach unten
bottom = bottom / 4;                //verschiebe LEDs von unten um zwei Stellen nach unten
middle1 = middle1 / 2;              //verschiebe LEDs von Mitte oben um eine Stelle nach oben 
middle2 = middle2 * 2;              //verschiebe LEDs von Mitte oben um eine Stelle nach oben

//Runterzählen bis nächstes Event
toptime--;                      //verringere übrige Takte oben um 1
bottomtime--;                   //verringere übrige Takte unten um 1
middletime--;                   //verringere übrige Takte Mitte um 1
    
//Zeit bis nächster Takt
delay(75);
}

Funktionsbeschreibung:

Es starten in random Abständen von oben, unten und der Mitte aus 
LED-Reihen mit random Länge. Von oben immer 2n LEDs gleichzeitig mit 
doppelter Geschwindigkeit, von unten jede zweite mit doppelter 
Geschwindigkeit und von der Mitte gleichzeitig 1n nach oben und unten 
mit einfacher Geschwindigkeit.

Kann man da noch was optimieren? Es ist das erste Mal, das ich mich mit 
den 74HC595, schiftOut und bitweiser Manipulation beschäftige.

Wenn das Board fertig layoutet und getestet ist gibt's natürlich auch 
das noch als PDF..

Beste Grüße, Dominic

: Verschoben durch Admin
Autor: komisch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei deinem Code, welchen du übrigens hättest anhängen können, fehlt die 
main.

Aber dennoch nette Idee!

Autor: tester (Gast)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
komisch schrieb:
> Bei deinem Code, welchen du übrigens hättest anhängen können, fehlt die
> main.

Das ist Arduino-Syle.

Autor: Dominic M. (dommii)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist in Arduino geschrieben, ergo braucht man nur genau das, ohne 
Main..

Beste Grüße, Dominic

Autor: Falk B. (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein Herz da kann man programmiern,
da ist nicht viel dabei, das geht ganz schnell 1,2,3

(wurde mal gecovered . . .)

Youtube-Video "Ein Herz kann man nicht reparieren -  Udo Lindenberg"

;-)

Autor: Magnus M. (magnetus) Benutzerseite
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Falk Baumann schrieb:
> Ein Herz da kann man programmiern,
> da ist nicht viel dabei, das geht ganz schnell 1,2,3
>
> (wurde mal gecovered . . .)

Na ja... es hätte vielleicht (besser) von Paul Brunner gecovert werden 
können - wenn er es denn rechtzeitig geschafft hätte 😉

Autor: Andreas G. (beastyk)
Datum:

Bewertung
3 lesenswert
nicht lesenswert
Moin Leute,
egal ob er klingelt, klopft oder schreit, laßt den Kerl namens Valentin 
bloß nicht rein.
Einige sagen er ist ein Abzocker, andere halten ihn für einen 
Schwerenöter, persönlich denke ich der Typ bringt nur alles 
durcheinander!

Gruß
Beast

Autor: Und ich klick hier auch noch rein... (Gast)
Datum:

Bewertung
-2 lesenswert
nicht lesenswert
Ein sinnloses Palaver...und niemand sagt, wann dieser blöde Tag nun 
eigentlich ist! Das wäre mit Abstand die wichtigste Info des Threads.

Autor: Magnus M. (magnetus) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und ich klick hier auch noch rein... schrieb:
> Ein sinnloses Palaver...und niemand sagt, wann dieser blöde Tag
> nun
> eigentlich ist! Das wäre mit Abstand die wichtigste Info des Threads.

Ach wie süß ist das denn 😊

Autor: Ach Du grüne Neune (Gast)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Und ich klick hier auch noch rein... schrieb:
> wann dieser blöde Tag nun
> eigentlich ist!

Der Valentinstag ist dieses Jahr am 14. Februar. Ich glaube sogar, dass 
er nächstes Jahr auch wieder auf den 14. Februar fällt.

Was kann den das Herz (blinken, Lauflicht, Farben ...)?

Autor: Skeptisch (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Waf ist ja unterschiedlich spezifiziert, aber meine Liebste fände das 
ganz und gar nicht romantisch.

Ich auch nicht.

Autor: Äxl (geloescht) (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach Du grüne Neune schrieb:
> Und ich klick hier auch noch rein... schrieb:
>> wann dieser blöde Tag nun
>> eigentlich ist!
>
> Der Valentinstag ist dieses Jahr am 14. Februar. Ich glaube sogar, dass
> er nächstes Jahr auch wieder auf den 14. Februar fällt.
>
> Was kann den das Herz (blinken, Lauflicht, Farben ...)?

Lasst uns kurz überlegen:
Neujahr war der erste?
Doch, kommt hin.

Äxl

Autor: Reiner_Gast (Gast)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Dominic M. schrieb:
> Benutzt werden ein Tiny85, vier 74HC595, 64 5mm LEDs, ein bisschen
> Hühnerfutter und 20x20cm Leiterplatte einseitig. 0,3mm Strukturbreite
> sollten zuhause gut ätz- und 0.5mm Restring gut lötbar sein

Kurz meine 2 Cent zur Hardware.

Wenn du statt der vier 74HC595 einen MAX7221 nehmen würdest, dann 
könntest du die 64 LEDs in 8er Gruppen (= je ein Digit) mit je 8 
Segmenten (SegA-DP) organisieren... Das spart immerhin 63 Widerstände 
ein...

Die Programmierung ist etwas aufwendiger als mit dem Schieberegister, 
aber dafür gibt es zum Glück schon fertige Libs für die Arduino Umgebung

Autor: Und ich klick hier auch noch rein... (Gast)
Datum:

Bewertung
-2 lesenswert
nicht lesenswert
Nun, welcher Kerl auch immer dieses Datum kennt, muss wohl so einiges 
dafür tun, daß seine Holde noch ne Weile bei ihm bleibt...
Danke trotzdem für die Info.
Bitte öffnet nächstes Jahr wieder solch einen Thread, denn sonst vergess 
ich diesen albernen Tag erneut.

Autor: Dominic M. (dommii)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Bei einigen der Antworten sollte sich der Verfasser fragen ob er nicht 
eine schöne kleine Idee bitter nötig hätte, eure Zeilen strotzen vor 
Liebhaberfähigkeiten ;)

Den MAX7221 habe ich aufgrund der aufwendigeren Programmierung und 
vorallem weil einseitig deutlich mehr Jumperwire fällig wären verworfen. 
Preislich tut sich auch nicht viel, der MAX wäre trotz weniger 
Widerständen sogar ein bisschen teurer. Nichtsdestotrotz danke für den 
sachdienlichen Hinweis :)

Der Code hat gestern Nacht eine neue Form angenommen und dürfte damit 
auch für die Stammtischbelegschaft ohne romantische Ader taugen. Er kann 
nun unterschiedliche Pattern, unterschiedliche Geschwindigkeiten usw. 
Findet sich im Anhang.

Ich bestelle nun Platinenmaterial und dann wird gebastelt..

Beste Grüße, Dominic

: Bearbeitet durch User
Autor: Dominic Mähling (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Und da mehr random immer mehr gut ist hab ich in der Mittagspause noch 
ein bisschen dran rumgefummelt, wenn ich zuhause bin mache ich mal ein 
Video.  Allerdings darf man weder für die *led noch *space null 
einsetzen, sonst spinnt das Programm, da muss ich also nochmal bei..

Beste Grüße,

Dominic

Autor: Dominic M. (dommii)
Datum:
Angehängte Dateien:

Bewertung
1 lesenswert
nicht lesenswert
Nach den Downloadzahlen gehend muss ich davon ausgehen das wegen dem "da 
muss ich nochmal bei" die ältere Version bevorzugt wird. Die hat aber 
genau den gleichen Bug. Den habe ich zwar heute korrigiert bekommen, 
aber das war unverhältnismäßig viel Code. Da *space oder *led gleich 
null eh eine eher unsinnige Eingabe wäre lasse ich das jetzt einfach so.

Naja, der Schaltplan wurde umgestrickt, so spare ich mir die Hälfte an 
Widerständen und die LEDs kriegen doppelten Strom bei gleicher Belastung 
der HC. Die Strukturgröße ist auf 0,5mm Breite und 0,25mm Abstand 
gewachsen, das sollte zuhause noch besser gehen.

Das Video findet sich hier: Youtube-Video "Lauflicht"

Beste Grüße, Dominic

Autor: Ach Du grüne Neune (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dominic M. schrieb:
> Das Video findet sich hier

Das sind schon gute Effekte. Aber wenn zwei LED's in Reihe geschaltet 
sind, können diese nicht mehr einzeln angesteuert werden!

Entweder stimmt das Video nicht, oder der Schaltplan stimmt nicht?

Autor: Dominic M. (dommii)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke :)

Bei der Platine leuchten die LEDs rechts und links gleichzeitig, weil 32 
Kanäle für 64 LEDs. Das Video zeigt nur der Probeaufbau für's 
Programmieren den ich mit Klamotten aus der Grabbelkiste zusammengehauen 
habe.

Beste Grüße, Dominic

Autor: Ach Du grüne Neune (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dominic M. schrieb:
> Bei der Platine leuchten die LEDs rechts und links gleichzeitig, weil 32
> Kanäle für 64 LEDs.

Jaa, das ist natürlich erstens eine sehr gute und effiziente Idee und 
zweitens sieht es auch optisch noch symmetrischer und besser aus. Da 
gebe ich dir recht.

Im Kopf kann ich mir schon ungefähr vorstellen, wie das dann ausschaut. 
Wenn das Herz fertig ist, kannst Du ja mal ein Video bei YouTube 
hochladen. Ich jedenfalls würde mich darauf freuen, weil ich Spielereien 
mit LED's immer gut finde.    :)

Autor: Segler (Gast)
Datum:

Bewertung
1 lesenswert
nicht lesenswert
Skeptisch schrieb:
> Waf ist ja unterschiedlich spezifiziert, aber meine Liebste fände das
> ganz und gar nicht romantisch.
>
> Ich auch nicht.

Hmmmja, genau. Das weibliche Pendant zu so einem Geschenk wäre wohl eine 
handgehäkelte Krawatte mit Herzchen und Einhörnern drauf.
Mit sowas muss man eine Partnerschaft eigentlich nicht belasten.

Autor: Dominic M. (dommii)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ihr müsst alles schreckliche Biester zu Hause haben, oder keine Ahnung 
von Frauen. Naja, mein Beileid und gute Besserung :D

Beste Grüße, Dominic

: Bearbeitet durch User
Autor: dudley (Gast)
Datum:

Bewertung
5 lesenswert
nicht lesenswert
ja richtig alles schreckliche biester, zwingen dich zu heiraten, zu 
kindern, zum häuslich werden, zum immer fleißig arbeiten gehen und dann 
kommst du irgendwann nach hause und stellst fest das sie seit jahren die 
beine für eine anderen breit macht. weil du ja so langweilig geworden 
bist, kaum noch weg gehst, keine freunde mehr hast, nur noch arbeiten 
gehst.

Irgendwann wirst auch du aufwachen.

Autor: Dominic M. (dommii)
Datum:
Angehängte Dateien:

Bewertung
1 lesenswert
nicht lesenswert
Q.E.D. :D

Naja, auf die Gefahr hin direkt das nächste Reizthema zu triggern: Ich 
finde was AutoDesk mit Eagle anstellt hervorragend, die Integration in 
Fusion ist tadellos, siehe Anhang :)

Beste Grüße, Dominic

: Bearbeitet durch User
Autor: Joachim B. (jar)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dominic M. schrieb:
> Q.E.D. :D

ist sehr schön geworden!

Dominic M. schrieb:
> der MAX wäre trotz weniger
> Widerständen sogar ein bisschen teurer

das wundert mich jetzt, ist dir deine Liebste das nicht wert?
Brauchst du 1000 Stück, weil sie doch nicht DIE LIEBSTE ist?

Dominic M. schrieb:
> Bei einigen der Antworten sollte sich der Verfasser fragen ob er nicht
> eine schöne kleine Idee bitter nötig hätte

s.o.

Autor: Falk B. (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Dominic M. (dommii)

>rendering.jpg
>Fusion ist tadellos, siehe Anhang :)

Und die Leitungen sind die Herzkranzgefäße! Sehr realistisch! ;-)

Autor: Dominic M. (dommii)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Joachim wenn der MAX mir die Arbeit erleichtert hätte wäre mir der 
Preisunterschied egal gewesen. Wenn er das Projekt signifikant 
vergünstigt hätte, wäre mir das bisschen mehr Arbeit egal gewesen. Aber 
teurer und mehr Arbeit? Da spiel ich nicht mit :D

Falk ich finde auch da kann man mit arbeiten, mal ab von solchen 
Spielereien ist das ultimativ praktisch für alles was über "ich nehme 
meine Platine und flansche die in ein Standardgehäuse in das die Löcher 
Pi mal Daumen mit dem Akkubohrschrauber gedengelt werden" hinaus geht..

Beste Grüße, Dominic

: Bearbeitet durch User
Autor: Dominic M. (dommii)
Datum:
Angehängte Dateien:

Bewertung
1 lesenswert
nicht lesenswert
Das Paket mit den LEDs ist angekommen, dank 
https://www.mikrocontroller.net/articles/AVR-Tutor... 
konnte der Serienwiderstand problemlos von 180 auf 68 gesenkt werden und 
die Eagle-Dateien und ein PDF zum Belichten finden sich im Anhang.

Dazu noch für die eher semikreativen eine kleine Inspiration, so werde 
ich das ganze Aufbauen, und meine Holde wird sich mit 99,9%iger 
Sicherheit freuen ;)

Beste Grüße, Dominic

Autor: Falk B. (falk)
Datum:

Bewertung
4 lesenswert
nicht lesenswert
In uns'rer Küche rußt der Ofen,
in meinem Herzen ruhst nur du.

;-)

Autor: Paul B. (paul_baumann)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Falk B. schrieb:
> In uns'rer Küche rußt der Ofen,
> in meinem Herzen ruhst nur du.

Du bist ein Romantiker vor dem Herrn!

:))

MfG Paul

Autor: dudley (Gast)
Datum:

Bewertung
-2 lesenswert
nicht lesenswert
ich würde gern die Reaktion deiner liebsten wissen
wenn sie zum dank schön einen wegsteckt, dann würde ich das auch 
nachbauen

Autor: dudley (Gast)
Datum:

Bewertung
-1 lesenswert
nicht lesenswert
kann man das ganze irgendwie auf den arduino übertragen
zb das nano board aufstecken

Autor: Dominic M. (dommii)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein bisschen Contenance.

Bis jetzt betreibe ich die Schieberegister mit einem Uno, und das 
Programmieren des Tiny85 übernimmt er auch. Der Code dafür kannst du dir 
oben runter laden, da steht drinnen was an welchen Pin muss.

Beste Grüße, Dominic

Autor: bernte (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
wäre da nicht eine ecke bequemer gewesen mit ws2812b streifen
wenn man die auf die seite stellt geht damit auch eine Herzform
die leds müssen ja nich zwangsweise direkt nach vorn rausstrahlen
außerdem hättest du noch raum für verschiedene farbmusster

meiner tusse gefällt zb ein spezieller blau oder orangeton besser als 
rot
regenbogen kommt auch gut

Beitrag #5284983 wurde von einem Moderator gelöscht.
Autor: StefG (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Zum Glück kenne ich niemanden, der Valentin heisst ;-)

Autor: Dominic M. (dommii)
Datum:
Angehängte Dateien:

Bewertung
2 lesenswert
nicht lesenswert
WS2812B wäre eine Möglichkeit gewesen, aber zur Seite raus ist jetzt 
nicht allzu hübsch und außer der Platine und den LEDs hatte ich alles 
da.

Naja, gestern geätzt, heute bestückt und in Betrieb genommen: 
Youtube-Video "LED Herz Tiny85 74HC595" Morgen geht es dann an die 
Holzarbeiten. :)

Beste Grüße,

Dominic

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.

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