Hallo Forum.
Ein Kollege von mir fragte mich nach einem Lauflicht für die Carrera-Bahn. Er wollte das in einer engen Kurve als Lichteffekt an/in die Leitplanke bauen. Es sollte für ihn unkompliziert zu verbauen sein also kam ich auf die Idee mit einem einfachen USB Steckernetzgerät zu arbeiten.
Mir fiel der Artikel "Belebtes Haus mit Attiny" hier aus diesem Forum ein und ich besorgte mir mal ein paar davon.
Für den ersten Versuch verwendete ich den Attiny 85. Mit diesem wollte ich ein 5-fach Lauflicht realisieren.
Zu diesem Zweck machte ich einen Arduino Uno zu einem ISP-Programmer (Anleitungen gibt's in Netz...)
Attinys verstehen fast die gleichen Befehle wie so ein Arduino also ran ans Werk.
Es sollte ein Lauflicht sein bei dem während der Zeit in der eine LED nicht blitzt sie dennoch ein wenig leuchtet. Das sehe ich oft bei den Baustellen auf der Autobahn. Der Attiny hat aber nicht die Möglichkeit alle Augänge mit >Analogwrite< zu beschreiben. Da musste ich mir was einfallen lassen.
Ich kann nicht programmieren so gab es für mich nur eine Lösung: Lesen, lesen, lesen....
Ausprobieren.. und raus gekommen ist dieser "Code"
[spoiler title=Aufklappen]
// 5-fach Lauflicht mit gedimmtem Zwichenleuchten.
// >>> ohne analogWrite <<<
// by Huby(2015)
int ledPin1 = 0;
int ledPin2 = 1;
int ledPin3 = 2;
int ledPin4 = 3;
int ledPin5 = 4;
int pwmHigh = 5; // Helligkeit der
int pwmLow = 200-pwmHigh; // gedimmten Leds
void setup(){
pinMode(ledPin1,OUTPUT);
pinMode(ledPin2,OUTPUT);
pinMode(ledPin3,OUTPUT);
pinMode(ledPin4,OUTPUT);
pinMode(ledPin5,OUTPUT);
}
void loop(){
for (int i=0; i<25; i++){
digitalWrite(ledPin1,HIGH);
delayMicroseconds(pwmHigh);
if(i>0&&i<2) {
;
} else {
digitalWrite(ledPin1,LOW);
delayMicroseconds(pwmLow);
}
digitalWrite(ledPin2,HIGH);
delayMicroseconds(pwmHigh);
if(i>3&&i<5) {
;
} else {
digitalWrite(ledPin2,LOW);
delayMicroseconds(pwmLow);
}
digitalWrite(ledPin3,HIGH);
delayMicroseconds(pwmHigh);
if(i>6&&i<8) {
;
} else {
digitalWrite(ledPin3,LOW);
delayMicroseconds(pwmLow);
}
digitalWrite(ledPin4,HIGH);
delayMicroseconds(pwmHigh);
if(i>9&&i<11) {
;
} else {
digitalWrite(ledPin4,LOW);
delayMicroseconds(pwmLow);
}
digitalWrite(ledPin5,HIGH);
delayMicroseconds(pwmHigh);
if(i>12&&i<14) {
;
} else {
digitalWrite(ledPin5,LOW);
delayMicroseconds(pwmLow);
}
}
}
[/spoiler]
Alle C++ Programmierer schlagen gerade die Hände über dem Kopf zusammen aber es läuft
5-Kanal
Da der Chip nur das Lauflicht befeuert konnte ich es so machen das die LEDs sehr schnell nacheinander durchgeschaltet wurden und jeweils die eine welche gerade den Blitz darstellen soll eine Zeitlag nicht ausgeschaltet wird.
Ich habe danach das ganze etwas zusammen gekürzt und für den Attiny 84 auf ein 11-fach Lauflicht geschrieben
[spoiler title=11-fach Lauflicht]
// 11-fach Lauflicht mit gedimmtem Zwichenleuchten.
// >>> ohne analogWrite <<<
// by Huby(2015)
int anz = 11; //Anzahl der LedPins
int ledPin[]={0,1,2,3,4,5,6,7,8,9,10}; //LedPins
int pwmHigh = 10; //Helligkeit der
int pwmLow = 200-pwmHigh; //gedimmten LEDs
void setup() {
for (int p=0; p<anz; p++){
pinMode(ledPin[p],OUTPUT); //Alle LedPins auf Ausgang setzen
}
}
void loop() {
for (int i=0; i<50; i++){ // "i" von Null bis Fünfzig zählen
for (int q=0; q<anz; q++){ // zum Durchlauf der Leds Null bis "anz"
digitalWrite(ledPin[q],HIGH); // Jeweilige Led "an"
if(i>(((q+1)*3)-2)&&i<((q+1)*3)) { //Bestimmte Led bleibt bei best. "i" an
;
} else {
delayMicroseconds(pwmHigh); //ansonsten wird sie nach pwmHigh
digitalWrite(ledPin[q],LOW); //wieder
delayMicroseconds(pwmLow); //ausgeschaltet
}
}
}
}
[/spoiler]
11-Kanal
Ich habe heute keine Ahnung wie ich auf diesen Code gekommen bin aber er läuft.
Das Ganze sollte ja einfach zu verbauen sein. Ich Habe mir ein D-Sub Stecker/Kupplung Gehäuse vorgenommen und mit einer Lochstreifenplatine was gebastelt
Bild entfernt (keine Rechte)
Stecker
Bild entfernt (keine Rechte)
Buchse
Weil ja immer nur 2 LEDs gleichzeitig leuchten komme ich mit nur einem Widerstand aus.
Das fertige Teil braucht der Kollege jetzt nur noch in ein Handynetzteil zu stecken und los gehts.
Bild entfernt (keine Rechte)
Bild entfernt (keine Rechte)
Das gleiche mit dem großen D-Sub Gehäuse
Bild entfernt (keine Rechte)
Bild entfernt (keine Rechte)
Bild entfernt (keine Rechte)
Bild entfernt (keine Rechte)
Bild entfernt (keine Rechte)
Bei den LEDs habe ich 5mm superhelle glasklare rote benutzt. Die habe ich in die Carrera Leitplanke gebohrt und verklebt.
Und wenn sie nicht explodiert sind dann blinken sie noch heute.
Gruß Huby. 8)