Lichterkette mit Arduino Befehlen steuern
Lichterketten mit Fernbedienung gibt es im Baumarkt um die Ecke. Wirklich interessante Lichteffekte kann man damit aber erst zaubern, wenn man einen Mikrocontroller anschliesst. Das ist denkbar einfach. In diesem Beispiel wird ein GroveLedString Modul mit einem Merkurboard mit Grove-Steckern über ein Grovekabel verbunden.
Grove - LED String Light Modul
Stromversorgung
Die Stromversorgung erfolgt über den Merkurboard Programmer (USB-Seriel Wandler 3.3V). Dieser liefert genug Strom auch die Lichterkette zu versorgen.
Datenanschluss
Auf dem Schaltplan erkennt man das die Lichterkette über einen I/O Pin ein oder ausgeschaltet werden kann. Wer die Lichterkette nicht nur ein und ausschten will, sondern auch die Helligkeit dimmen möchte muss sich etwas einfallen lassen. Um die Helligkeit zu Steuern verwenden wir einen PWM PIN des Merkurboards.
PWM bedeutet Pulse Width Modulation bedeutet das der Strom in schneller Abfolge ein- und ausgeschaltet wird. Ein Zeitintervall ist dabei 20 Millisekunden lang. Träge Bauelemente kann man durch ein PWM Signal dimmen. Ist der Strom z.B. 10 Millisekunden ein- und danach 10 Millisekunden abgeschalten, ist der resultierende Strom nur halb so groß. Eine LED würde also nur halb so kräftig leuchten.
Auf dem Arduino kompatiblen Merkur-Board gibt es drei Ausgänge die PWM-Signale erzeugen können
Code
extern "C" { #include <stdio.h> #include "led_pwm.h" #define LED_PIN 4 #define LED_STRING 3 uint8_t pwm = 128; uint8_t period_100ms = 1; /* 1/10 second (period_100ms * 100ms) */ } void setup (void) { arduino_pwm_timer_init (); rest_init_engine (); rest_activate_resource (&res_led_pwm, (char *)"led/pwm"); rest_activate_resource (&res_led_period, (char *)"led/period"); } void loop (void) { /* Use 255 - pwm, LED on merkur-board is wired to +3.3V */ analogWrite (LED_PIN, 255 - pwm); // Merkurboard LED analogWrite (LED_STRING, pwm); // Grove Modul printf ("clock : %lu\nmillis: %lu\n", clock_time (), millis ()); delay (period_100ms * 100); analogWrite (LED_PIN, 255); /* OFF: LED on merkur-board is wired to +3.3V */ analogWrite (LED_STRING, 0); delay (period_100ms * 100); }
Material
Links
Sketch File: https://github.com/osdomotics/osd-contiki/blob/master/examples/osd/arduino-ledstringlight/sketch.pde