Es spukt im Gebüsch

Es wird früher dunkel. Die perfekte Jahreszeit um etwas Arduino-Zauber in den Vorgarten zu bringen. Heute mit leuchtenden Augen im Gebüsch.

Dazu brauchst du nur ein paar rote LEDs* und ein paar Meter Kabel. Das bekommst du, wenn du ein altes Netzwerkkabel opferst. Darin befinden sich acht Adern aus massivem Drat.

Löte zwei LEDs aneinander. Achte darauf, dass du jeweils die langen und kurzen Beinchen verbindest. Dann löte jeweils noch ein Dratende fest.

Arduino Lichterkette LEDs

Biege die beiden LEDs, sodass sie in die gleiche Richtung leuchten. Das wären also schon mal zwei Augen. Wiederhole das, solange du Lust hast. Ich hab neun Augenpaare gelötet.

Schaltplan

Arduino Lichterkette

Knüpfe aus dem Kabel einen Kabelbaum, bei dem die GND-Ader die gesamte Länge ausmacht. Die Augenpaare sollten ca. 15 cm auseinander sein. Pro Augenpaar brauchst du nun ein Versorgungskabel mit Vorwiderstand (220 Ohm). Diese kannst du entweder direkt anlöten, oder ein kleines Breadboard zwischenschalten.

Code

Das Arduino-Programm setzt sich im Grunde aus drei Phasen zusammen. Dem Aufwachen, dem Blinzeln (Twinkle) und dem Einschlafen. Diese Funktionen werden zeitgesteuert aufgerufen und erzeugen das Verhalten der Augen im Gebüsch.

int ledPins[] = {2, 3, 4, 5, 6, 7, 8, 9, 10};
int ledState[] = {0, 0, 0, 0, 0, 0, 0, 0, 0};
int ledNumber = 9;
int theLED;
long myTimer = 0;
int myTimerout = 20000;

boolean sleeping = true;

void setup() {
  // put your setup code here, to run once:
  for (int i = 0; i < ledNumber; i++) {
    pinMode(ledPins[i], OUTPUT);
    digitalWrite(ledPins[i], LOW);
  }
  randomSeed(analogRead(0));
}

void aufwachen() {
  while (sleeping) {
    int ledSum = 0;
    for (int i = 0; i < ledNumber; i++) {
      ledSum += ledState[i];
    }
    if (ledSum == ledNumber) sleeping = false;

    theLED = random(ledNumber);
    if (random(10) == 1) {
      ledState[theLED] = 1;
      digitalWrite(ledPins[theLED], HIGH);
    }
    delay(20);
  }
}

void einschlafen() {
  while (!sleeping) {
    int ledSum = 0;
    for (int i = 0; i < ledNumber; i++) {
      ledSum += ledState[i];
    }
    if (ledSum == 0) sleeping = true;

    theLED = random(ledNumber);
    if (random(10) == 1) {
      ledState[theLED] = 0;
      digitalWrite(ledPins[theLED], LOW);
    }
    delay(20);
  }
}

void twinkle(int theLED) {
  digitalWrite(theLED, LOW);
  delay(100);
  digitalWrite(theLED, HIGH);
}

void loop() {
  if (sleeping) {
    if (random(1000) == 1) {
      aufwachen();
      myTimer = millis();
    }
  } else {
    if (random(30) == 1) twinkle(random(ledNumber));
    if (myTimer + myTimerout < millis()) {
      einschlafen();
      delay(10000);
    }
  }
  delay(10);
}

Jetzt kannst du die Lötstellen an den LEDs noch mit Isolierband umwickeln und das Arduino selbst mit Netzteil und Breadboard in eine Plastiktüte verpacken. Ein Gummiband rum und ab ins Beet. Die Öffnung der Tüte sollte natürlich nach unten zeigen.

Hast du weitere Fragen? Probier doch mal unser brandneues Forum zu Arduino aus!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

 

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.