INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
LED Treppenbeleuchtung - Noobine
07.01.2015, 21:08 (Dieser Beitrag wurde zuletzt bearbeitet: 07.01.2015 22:01 von Schnibbelchen.)
Beitrag #1
Lightbulb LED Treppenbeleuchtung - Noobine
Hallo zusammen,

ich bin ganz neu hier und in der Arduino Welt allgemein.
Kurz vor Weihanchten hat mich mein Freund auf Arduino aufmerksam gemacht und ein wenig ausgefragt, ob das denn nicht was für mich wäre. Da ich wohl nicht gerade negativ darauf reagiert habe, haben wir direkt ein potentielles Projekt zusammen gesponnen:
Wieso nicht die Treppe in meiner Wohnung nach oben ins Schlafzimmer mit Sensoren und LEDs bestücken, sodass ein Lauflicht nach oben angeht, wenn der Sensor unten reagiert, und das ganze genauso von oben nach unten, wenn der Sensor reagiert.

Habe dann zu Weihnachten von meinem Freund den Arduino UNO und diverses Zubehör für mein Projekt bekommen Big Grin
Nun ist es so, dass ich mehr oder weniger bei Null anfange, was Elektronik und all das Programmieren angeht. Also habe ich erst mal fleißig LEDs auf alle erdenklichen Arten zum Leuchten/Blinken gebracht.

Mittlerweile habe ich den Code so gut wie fertig. Mehr oder weniger genau so, wie er sein soll (Dank herzhafter Schubser von meinem Freund, als ich mal wieder auf dem Schlauch stand :rolleyesSmile :

Code:
int sensorPin = 13;                      
int sensorPin2 = A0;
int LED;                                      
int sensorState;                        
int sensorState2;                            
int block1 = 12;                          
int block2 = 11;                            
int block3 = 10;                            
boolean Tabelle[15] = {0,0,0,0,0,1,1,1,1,1,0,0,0,0,0};
boolean Tabelle2[15] = {0,0,0,0,0,1,1,1,1,1,0,0,0,0,0};  
int a = 0;                                  
int b = 0;                                  
int c = 0;                                  
int d = 10;
int e = 10;
int f = 10;
int x = 0;
int t = 1;
boolean Q=0;
boolean Q2=0;

void setup()
{    
  pinMode(sensorPin,INPUT);  
  pinMode(sensorPin2,INPUT);  
  pinMode(block1,OUTPUT);
  pinMode(block2,OUTPUT);
  pinMode(block3,OUTPUT);
  for (LED=1; LED<6; LED++)                    
  {                                          
    pinMode(LED,OUTPUT);                    
  }                                          
}

void loop ()
{

  
  if (Q==0)
  {
  sensorState=digitalRead(sensorPin);
  }
  
  if (sensorState == 0)
  {
  Q=1;
  BLOCK1 ();
if (a<5)
  {
  a++;
  }
else
  {
  if (b<5)
    {
     b++;
    }
  else
    {
     if (c<5)
       {
       c++;
       }
     else
       {
         if (a<10)
         {
           a++;
         }
       else
         {
         if (b<10)
           {
            b++;
            }
         else
           {
           if (c<10)
             {
             c++;
             }
           else
             {
               a=0;
               b=0;
               c=0;
             Q=0;
             }
           }
         }
       }
     }
   }
}






  
  if (Q2==0)
  {
  sensorState2=digitalRead(sensorPin2);
  }
  
  if (sensorState2 == 1)
  {
  Q2=1;
   BLOCK2();
if (f>5)
  {
  f--;
  }
else
  {
  if (e>5)
    {
     e--;
    }
  else
    {
     if (d>5)
       {
       d--;
       }
     else
       {
         if (f>=0)
         {
           f--;
         }
       else
         {
         if (e>=0)
           {
            e--;
            }
         else
           {
           if (d>=0)
             {
             d--;
             }
           else
             {
               d=10;
               e=10;
               f=10;
             Q2=0;
             }
           }
         }
       }
     }
   }
}


}




void BLOCK1 ()
{
for (x=0; x<50; x++)
  {
  digitalWrite(block2,LOW);
  digitalWrite(block3,LOW);
  digitalWrite(1,LOW);
  digitalWrite(2,LOW);
  digitalWrite(3,LOW);
  digitalWrite(4,LOW);
  digitalWrite(5,LOW);
  digitalWrite(block1,HIGH);
  digitalWrite(1,Tabelle[a]);                  
  digitalWrite(2,Tabelle[a+1]);                
  digitalWrite(3,Tabelle[a+2]);                
  digitalWrite(4,Tabelle[a+3]);                
  digitalWrite(5,Tabelle[a+4]);
  delay(t);  
  digitalWrite(block1,LOW);
  digitalWrite(block3,LOW);
  digitalWrite(1,LOW);
  digitalWrite(2,LOW);
  digitalWrite(3,LOW);
  digitalWrite(4,LOW);
  digitalWrite(5,LOW);
  digitalWrite(block2,HIGH);
  digitalWrite(1,Tabelle[b]);
  digitalWrite(2,Tabelle[b+1]);
  digitalWrite(3,Tabelle[b+2]);
  digitalWrite(4,Tabelle[b+3]);
  digitalWrite(5,Tabelle[b+4]);
  delay(t);  
  digitalWrite(block1,LOW);
  digitalWrite(block2,LOW);
  digitalWrite(1,LOW);
  digitalWrite(2,LOW);
  digitalWrite(3,LOW);
  digitalWrite(4,LOW);
  digitalWrite(5,LOW);
  digitalWrite(block3,HIGH);
  digitalWrite(1,Tabelle[c]);
  digitalWrite(2,Tabelle[c+1]);
  digitalWrite(3,Tabelle[c+2]);
  digitalWrite(4,Tabelle[c+3]);
  digitalWrite(5,Tabelle[c+4]);
  delay(t);
  }
}

void BLOCK2 ()
{
for (x=0; x<50; x++)
  {
  digitalWrite(block2,LOW);
  digitalWrite(block3,LOW);
  digitalWrite(1,LOW);
  digitalWrite(2,LOW);
  digitalWrite(3,LOW);
  digitalWrite(4,LOW);
  digitalWrite(5,LOW);
  digitalWrite(block1,HIGH);
  digitalWrite(1,Tabelle2[d]);                  
  digitalWrite(2,Tabelle2[d+1]);              
  digitalWrite(3,Tabelle2[d+2]);                
  digitalWrite(4,Tabelle2[d+3]);                
  digitalWrite(5,Tabelle2[d+4]);
  delay(t);  
  digitalWrite(block1,LOW);
  digitalWrite(block3,LOW);
  digitalWrite(1,LOW);
  digitalWrite(2,LOW);
  digitalWrite(3,LOW);
  digitalWrite(4,LOW);
  digitalWrite(5,LOW);
  digitalWrite(block2,HIGH);
  digitalWrite(1,Tabelle2[e]);
  digitalWrite(2,Tabelle2[e+1]);
  digitalWrite(3,Tabelle2[e+2]);
  digitalWrite(4,Tabelle2[e+3]);
  digitalWrite(5,Tabelle2[e+4]);
  delay(t);  
  digitalWrite(block1,LOW);
  digitalWrite(block2,LOW);
  digitalWrite(1,LOW);
  digitalWrite(2,LOW);
  digitalWrite(3,LOW);
  digitalWrite(4,LOW);
  digitalWrite(5,LOW);
  digitalWrite(block3,HIGH);
  digitalWrite(1,Tabelle2[f]);
  digitalWrite(2,Tabelle2[f+1]);
  digitalWrite(3,Tabelle2[f+2]);
  digitalWrite(4,Tabelle2[f+3]);
  digitalWrite(5,Tabelle2[f+4]);
  delay(t);
  }
}

Und hier noch ein Video , wie das ganze dann auf dem Steckbrett aussieht.
Ich habe gerade keine 2 funktionierenden Sensoren, daher ist der zweite Sensor mit einem Kabel nur so "hin simuliert"... Der "richtige" Sensor an Pin13 ist invertierend... Sprich, wenn er HIGH ist, kommt kein Signal, bei LOW kommt eins... Bei der Kabel-Variante ist es "normal".

Und nun meine Fragen:
1. Wie man sieht, geht das Licht recht schnell an und wieder aus. Wie ich das ganz generell regeln kann, ist mir klar (den Zählwert für x in der jeweiligen for-Schleife ändern). Nun rennt aber kein Mensch in der Geschwindigkeit die Treppe hoch bzw. runter.... Wie schaffe ich es, dass das Licht in dieser schnellen Geschwindigkeit an- aber dafür langsamer wieder ausgeht? Bzw wenn alle LEDs an sind, 3-4 Sekunden anbleiben und dann erst wieder der Reihe nach ausschalten. Habe diverse delays eingebaut, die aber alle nichts bringen... Nur komische Blink-Effekte, die ich nicht haben will.

2. Kann man das selbe Ergebnis auch mit irgendwie übersichtlicherem Code schreiben? Oder auf geschicktere Art und Weise?
Soll ich mich mal mit interrupts auseinander setzen? Verstehe aber nicht ganz, was die hierfür bringen könnten...

3. Warum um alles in der Welt reicht es aus, wenn ich bei meinem simulierten Sensor einfach nur ein Ende vom Kabel in den Pin stecke, um ein Signal zu bekommen? Das verstehe ich nicht. Das Kabel führt doch ins "leere" und sollte gar kein Signal erkennen? Oder zählt die Luft hier schon als GND? Huh


Ich hoffe ich könnt mit meinen Infos etwas anfangen und mir ein wenig weiterhelfen Smile Ansonsten einfach bescheid geben!

Freu mich auf eure Antworten!
Viele liebe Grüße,
Schnibbi
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.01.2015, 23:43
Beitrag #2
RE: LED Treppenbeleuchtung - Noobine
Ich kann zumindest die 3. Frage beantworten: Die Eingänge brauchen einen klar definierten Status... sprich entweder HIGH oder LOW, man kann dazu interne Widerstände aktivieren, oder eben extern Widerstände einlöten... Wenn du mit dem Taster/Sensor gegen + schalten willst, legst du den PIN am Board hochohmig gegen Masse (z.B. 10kOhm)... oder eben umgedreht...

Gleiches gilt übrigens auch für MOSFets- schon als Hinweis, wenn Ihr dann größere LEDs ansteuern wollt...
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
09.01.2015, 06:38
Beitrag #3
RE: LED Treppenbeleuchtung - Noobine
In meinen Augen stellt sich generell die FrGe was passiert, wenn jemand auf der Treppe umkehrt, stehen bleibt oder das Tempo ändert. Möglicherweise macht es Sinn mit Sensoren am Anfang/Ende der Treppe den Sketch zu starten. Aber ergänzend könnte man die Position mit einem Ultraschallsensor präzisieren...
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
09.01.2015, 10:49
Beitrag #4
RE: LED Treppenbeleuchtung - Noobine
(07.01.2015 21:08)Schnibbelchen schrieb:  1. Wie man sieht, geht das Licht recht schnell an und wieder aus. Wie ich das ganz generell regeln kann, ist mir klar (den Zählwert für x in der jeweiligen for-Schleife ändern). Nun rennt aber kein Mensch in der Geschwindigkeit die Treppe hoch bzw. runter.... Wie schaffe ich es, dass das Licht in dieser schnellen Geschwindigkeit an- aber dafür langsamer wieder ausgeht? Bzw wenn alle LEDs an sind, 3-4 Sekunden anbleiben und dann erst wieder der Reihe nach ausschalten. Habe diverse delays eingebaut, die aber alle nichts bringen... Nur komische Blink-Effekte, die ich nicht haben will.
Dein Coding ist ziemlich schwer zu verstehen, speziell das mit den a,b,c etc. habe ich ganz und gar nicht kapiert. Ich gehe mal davon aus, dass Du auch selbst beim Verstehen Deines Codings an eine Komplexitätsgrenze gestoßen bist. Mir wäre auch nicht klar, wo man da noch was ändern kann ohne dass das ganze gar nicht mehr funktioniert.
Meiner Meinung nach muss man das ganze etwas anders angehen, um da noch durchzublicken. Dann könnte es auch einfacher werden, die LEDs länger anzulassen etc.

Zitat:2. Kann man das selbe Ergebnis auch mit irgendwie übersichtlicherem Code schreiben? Oder auf geschicktere Art und Weise?
Soll ich mich mal mit interrupts auseinander setzen? Verstehe aber nicht ganz, was die hierfür bringen könnten...
Geschickteres/übersichtlicheres Coding: Ja, auf jeden Fall! Interrupts braucht man eigentlich nicht, auch wenn man da ggf. was mit Timern machen könnte. Meiner Meinung nach macht's das aber nicht einfacher oder besser.
Soweit ich das Coding und den Aufbau verstehe, werden die LEDs mit Multiplexing angesteuert. Es gibt 3 Gruppen mit (maximal) je 6 LEDs. Wenn die LEDs leuchten, dann wird jede Gruppe 1ms lang zum Leuchten gebracht, dann kommt die nächste.
Als erstes bin ich mir nicht so ganz sicher, ob das für eine Treppenhausbeleuchtung das Richtige ist. Du brauchst da sowieso ein bisschen mehr Power, was bedeutet, dass Du sowieso noch ein bisschen Elektronik basteln musst. Ich würde dann gleich zu Schieberegistern übergehen oder gleich WS2812-LEDs oder Ketten nehmen.
Unabhängig davon: Wenn ich das zu machen hätte würde ich mir erst einmal Coding schreiben, das die LEDs in einem sozusagen beliebigen Muster zum Leuchten bringt, und zwar "für immer". Das könnte so gehen: Eine (statische oder globale) Variable hält den momentanen Zustand der LEDs. Ein long int würde z.B. für 32 LEDs reichen, da 32 Bit.
Dann noch eine Funktion, die aus loop() heraus alle 10ms aufgerufen wird (das reicht). Die Funktion würde sich beim ersten Aufruf um den ersten "Block" kümmern, beim zweiten um den zweiten Block, dann um den dritten und dann wieder von vorne.
Zwischen den Aufrufen hast Du dann im loop() Zeit für Sensorabfragen und weiteren Sachen, wie z.B. die Variable für den LED-Zustand neu "berechnen". Dann kannst Du dort auch entscheiden, wann Du z.B. die LEDs wieder abschalten willst.
Ich würde auch eine Funktion bauen, die eine einzelne LED ein- oder ausschalten kann. Wenn Du dann irgendwann doch die Hardware ersetzt, dann musst Du nur daran schrauben.

Zitat:3. Warum um alles in der Welt reicht es aus, wenn ich bei meinem simulierten Sensor einfach nur ein Ende vom Kabel in den Pin stecke, um ein Signal zu bekommen? Das verstehe ich nicht. Das Kabel führt doch ins "leere" und sollte gar kein Signal erkennen? Oder zählt die Luft hier schon als GND? Huh
Die Eingänge sind ziemlich empfindlich. Da Du den Eingang nicht mit INPUT_PULLUP versehen hast, kann bei einem offenen Eingang alles passieren. Dass er ohne den Draht auf HIGH ist, ist mehr oder weniger Zufall. Wenn Du das Ding berührst (es reicht ggf. sogar mit dem Finger), dann werden ein paar Elektronen ausgetauscht, was schon für ein "Umschalten" reichen kann.

Gruß,
Thorsten

Falls ich mit einer Antwort helfen konnte, wuerde ich mich freuen, ein paar Fotos oder auch ein kleines Filmchen des zugehoerigen Projekts zu sehen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
09.01.2015, 12:45
Beitrag #5
RE: LED Treppenbeleuchtung - Noobine
Hallo Schnibbi,
das geht wesentlich einfacher.
Mach es mit zwei Ultraschallsensoren oben und unten und WS2812B Stripes.
Dann kannst du erst einmal alle Farben die du willst ansteuern, brauchst im ganzen nur drei Adern für die gesamten Stufen und die Geschwindigkeit ist auch einfach einstellbar.
Wenn du willst kann ich dir einen Sketch schicken, der das alles macht, z.B auch wenn du unten anfänst, Licht an von unten nach oben, wenn du oben raus gehst Licht aus von unten nach oben, drehst du aber um, dann Licht aus von oben nach unten u.s.w.
gruß
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
09.01.2015, 23:13
Beitrag #6
RE: LED Treppenbeleuchtung - Noobine
mich würde der sketch auch interessieren....;-)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
10.01.2015, 07:52
Beitrag #7
RE: LED Treppenbeleuchtung - Noobine
Hallo, ich hätte auch Interesse an dem Sketch
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
11.01.2015, 12:03
Beitrag #8
RE: LED Treppenbeleuchtung - Noobine
Hallo zusammen,

vielen lieben Dank für die ausführlichen Antworten! Mit diesem Ausmaß hätte ich jetzt gar nicht gerechnet Big Grin

Bevor ich jetzt viel dazu sagen kann, muss ich eure Tipps und Infos erst einmal durcharbeiten. Bin bisher noch zu gar nichts gekommen. Dann kann ich mehr dazu sagen.
Ganz generell habe ich auch Interesse an dem Sketch. Auch wenn ich es eigentlich selbst machen möchte. Aber dann kann ich das als "Stützrad" verwenden Smile Das wäre super.

Danke nochmal und bis bald!
Schnibbi
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Treppenbeleuchtung mit Stripes! Kawaci 0 1.229 26.01.2016 22:58
Letzter Beitrag: Kawaci

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste