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


von Dominic M. (dommii)


Angehängte Dateien:

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:
1
//Random Lauflicht
2
//32bit für 4 74HC595
3
4
//Variablen initiieren               
5
  unsigned long Display = 0;            //HC595 out
6
  
7
  unsigned long top = 0;                //LEDs die von oben nach unten wandern
8
  unsigned long bottom = 0;             //LEDs die von unten nach oben Wandern
9
  unsigned long topbottom = 0;          //LEDs die von oben nach unten oder von unten nach oben Wandern
10
  
11
  int toptime = 0;                      //Anzahl Takte die neue LEDs von oben nachkommen/nicht nachkommen
12
  bool topon = true;                    //Zustand ob von oben LEDS nachkommen/nicht nachkommen
13
  
14
  unsigned long middle1=0;              //LEDs die von der Mitte nach oben wandern
15
  unsigned long middle2=0;              //LEDs die von der Mitte nach oben wandern
16
  unsigned long middle=0;               //LEDs die von der Mitte wandern
17
  
18
  int bottomtime = 0;                   //Anzahl LEDs von unten nachkommen/nicht nachkommen
19
  bool bottomon = true;                 //Zustand ob von der Mitte LEDS nachkommen/nicht nachkommen
20
  
21
  int middletime = 0;                   //Anzahl Takte die neue LEDs von oben nachkommen/nicht nachkommen
22
  bool middleon = true;                 //Zustand ob von der Mitte LEDS nachkommen/nicht nachkommen
23
24
//Pin verbinden mit SER
25
int dataPin = 8;
26
//Pin verbinden mit RCLK
27
int latchPin = 9;
28
//Pin verbinden mit SRCLK
29
int clockPin = 10;
30
31
32
void setup() {
33
  //Pins als Output setzen
34
  pinMode(latchPin, OUTPUT);
35
  pinMode(clockPin, OUTPUT);
36
  pinMode(dataPin, OUTPUT);
37
}
38
39
void loop() {
40
41
//LEDs von oben
42
if (toptime == 0){                  //Abfrage übrige Takte oben = 0
43
  if (topon == false){              //wenn keine LEDs nachkommen
44
    toptime = random(1,8);          //random Takte 
45
    topon = true;                   //LEDs sollen nachkommen
46
  }
47
  else{                             //wenn LEDs nachkommen
48
    toptime = random(25,200);       //random Takte
49
    topon = false;                  //LEDs sollen nicht nachkommen
50
  }
51
}
52
53
if (topon == true){                 //Wenn LEDs nachkommen sollen
54
 top = top + 3;                    //setze oberste zwei LEDs ON
55
}
56
57
//LEDs von unten
58
if (bottomtime == 0){               //Abfrage übrige Takte unten = 0
59
  if (bottomon == false){           //wenn keine LEDs nachkommen
60
    bottomtime = random(1,8);       //random Takte
61
    bottomon = true;                //LEDs sollen nachkommen
62
  }
63
  else{                             //wenn LEDs nachkommen
64
    bottomtime = random(50,200);    //random Takte
65
    bottomon = false;               //LEDs sollen nicht nachkommen
66
  }
67
}
68
    
69
if (bottomon == true){              //Wenn LEDs nachkommen sollen
70
  bottom = bottom + 2147483648;     //setze unterste LED ON
71
}
72
73
//LEDs von der Mitte
74
if (middletime == 0){               //Abfrage übrige Takte Mitte = 0
75
  if (middleon == false){           //wenn keine LEDs nachkommen
76
    middletime = random(2,12);      //random Takte
77
    middleon = true;                //LEDs sollen nachkommen
78
  }
79
  else{                             //wenn LEDs nachkommen
80
    middletime = random(200,400);   //random Takte
81
    middleon = false;               //LEDs sollen nicht nachkommen
82
  }
83
}
84
    
85
if (middleon == true){              //Wenn LEDs nachkommen sollen
86
  middle1 = middle1 + 65536;        //setze LED Mitte oben ON
87
  middle2 = middle2 + 131072;       //setze LED Mitte unten ON
88
}
89
90
//Zusammenführen der Ausgabe
91
middle = middle1 | middle2;         //gebe aus LEDs mitte nach oben OR LEDs mitte nach unten
92
topbottom = top | bottom;           //gebe aus LEDs von oben OR LEDs von unten
93
Display = topbottom | middle;       //HC595 out LEDs
94
    
95
//Ausgabe HC595
96
digitalWrite(latchPin, LOW);
97
shiftOut(dataPin, clockPin, MSBFIRST, (Display >> 24));
98
shiftOut(dataPin, clockPin, MSBFIRST, (Display >> 16));
99
shiftOut(dataPin, clockPin, MSBFIRST, (Display >> 8));
100
shiftOut(dataPin, clockPin, MSBFIRST, Display);
101
digitalWrite(latchPin, HIGH);
102
                               
103
//Lauflicht
104
top = top * 4;                      //verschiebe LEDs von oben um zwei Stellen nach unten
105
bottom = bottom / 4;                //verschiebe LEDs von unten um zwei Stellen nach unten
106
middle1 = middle1 / 2;              //verschiebe LEDs von Mitte oben um eine Stelle nach oben 
107
middle2 = middle2 * 2;              //verschiebe LEDs von Mitte oben um eine Stelle nach oben
108
109
//Runterzählen bis nächstes Event
110
toptime--;                      //verringere übrige Takte oben um 1
111
bottomtime--;                   //verringere übrige Takte unten um 1
112
middletime--;                   //verringere übrige Takte Mitte um 1
113
    
114
//Zeit bis nächster Takt
115
delay(75);
116
}

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
von komisch (Gast)


Lesenswert?

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

Aber dennoch nette Idee!

von tester (Gast)


Lesenswert?

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

Das ist Arduino-Syle.

von Dominic M. (dommii)


Lesenswert?

Das ist in Arduino geschrieben, ergo braucht man nur genau das, ohne 
Main..

Beste Grüße, Dominic

von Falk B. (falk)


Lesenswert?

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

(wurde mal gecovered . . .)

https://www.youtube.com/watch?v=z-CiCllfvWQ#t=0m56s

;-)

von Magnus M. (magnetus) Benutzerseite


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 ?

von Andreas G. (beastyk)


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

von Und ich klick hier auch noch rein... (Gast)


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.

von Magnus M. (magnetus) Benutzerseite


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 ?

von Ach Du grüne Neune (Gast)


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 ...)?

von Skeptisch (Gast)


Lesenswert?

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

Ich auch nicht.

von Äxl (geloescht) (Gast)


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

von Reiner_Gast (Gast)


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

von Und ich klick hier auch noch rein... (Gast)


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.

von Dominic M. (dommii)


Angehängte Dateien:

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
von Dominic Mähling (Gast)


Angehängte Dateien:

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

von Dominic M. (dommii)


Angehängte Dateien:

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: https://youtu.be/AJpfOoCa7xY

Beste Grüße, Dominic

von Ach Du grüne Neune (Gast)


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?

von Dominic M. (dommii)


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

von Ach Du grüne Neune (Gast)


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.    :)

von Segler (Gast)


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.

von Dominic M. (dommii)


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
von dudley (Gast)


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.

von Dominic M. (dommii)


Angehängte Dateien:

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
von Joachim B. (jar)


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.

von Falk B. (falk)


Lesenswert?

@ Dominic M. (dommii)

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

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

von Dominic M. (dommii)


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
von Dominic M. (dommii)


Angehängte Dateien:

Lesenswert?

Das Paket mit den LEDs ist angekommen, dank 
https://www.mikrocontroller.net/articles/AVR-Tutorial:_Schieberegister#Acht_LEDs_mit_je_20mA_pro_Schieberegister 
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

von Falk B. (falk)


Lesenswert?

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

;-)

von Paul B. (paul_baumann)


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

von dudley (Gast)


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

von dudley (Gast)


Lesenswert?

kann man das ganze irgendwie auf den arduino übertragen
zb das nano board aufstecken

von Dominic M. (dommii)


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

von bernte (Gast)


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.
von StefG (Gast)


Lesenswert?

Zum Glück kenne ich niemanden, der Valentin heisst ;-)

von Dominic M. (dommii)



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: 
https://www.youtube.com/watch?v=Z0uOGYcWwuw Morgen geht es dann an die 
Holzarbeiten. :)

Beste Grüße,

Dominic

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
Noch kein Account? Hier anmelden.