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