Der Plan
Dekorationen gehören zu Halloween einfach dazu. Und so ein schöner Totenkopf im Fenster macht auch was her. Aber nur wenn man ihn auch sieht. Im Dunkeln ist die Wirkung eher überschaubar. Besser wäre es natürlich, wenn die Augen leuchten würden. Noch besser wenn Sie nicht nur leuchten sondern blinken oder faden. Und natürlich möglichst unregelmäßig. Also hab ich mir mal wieder meinen Lötkolben und meinen PC geschnappt und ein neues Projekt gemacht.
Benötigte Hardware
Für das Projekt hatte fast ich alles noch im Hause.
Zunächst natürlich einen Totenkopf. Den gibt's bei Amazon oder auch in einigen gut sortierten Partyläden. Meiner hat eine realistische Größe, somit kann man ihn auch gut von außen im Fenster stehend sehen.
Dann braucht man noch 2 Leuchtdioden, am besten in Farbe rot und schön hell.
Als Steuerungseinheit hatte ich noch einen DigiSpark (Digistump) über.
Natürlich geht auch jede andere Arduino Variante.
Für die Schaltung werden noch strombegrenzende Vorwiderstände a' 220Ohm für die LEDs und ein bisschen Kabel benötigt.
Zur Stromversorgung können verschiedene Arten zum Einsatz kommen. Am einfachsten ist natürlich eine Powerbank mit einem USB Verlängerungskabel. Ein bisschen Vorsicht ist da jedoch geboten, denn der Stromverbrauch kann für manche Powerbanks zu **niedrig** sein, sodass diese nach kurzer Zeit einfach abschalten oder evtl. sich auch gar nicht erst einschalten lassen.
Eine weitere Option ist eine einfache Batteriebox für 3xAAA (wenn mit 1,5V bestückt) oder 4xAAA, wenn mit Akkus (1,2V). Diese gibt es fertig bereits mit Schalter und Kabel.
Die Verkabelung ist recht einfach.
Batterie Box kommt an die GND und 5V Anschlüsse. (Bei USB Versorgung braucht man natürlich nix). An die Kathoden der beiden LEDs kommt zunächst ein Stück Kabel und diese beiden Kabel werden dann auch an den Ground Anschluss der Batteriebox gelötet.
An die Anoden der LEDs wird zunächst der Vorwiderstand (üblicherweise 220Ohm bei 2,2V LED Durchlassspannung) angelötet. Daran dann ebenfalls jeweils ein Kabel angelötet und diese dann mit den Anschlüssen P0 und P1 vom Digispark verbunden. Falls Sie einen anderen Arduino verwenden wollen, achten Sie bitte darauf, dass die Ausgänge PWM unterstützen müssen. Beim Uno oder Nano kann man die die Ausgänge 5 und 6 verwenden. Einfach im Programm ganz oben die entsprechenden Konstanten ändern. (`OUT_1` und `OUT_2`)
Jetzt kann man vorsichtig mit einem Teppichmesser einen ausklappbaren Deckel unten aus dem Kopf ausschneiden. Mitten in die Augen wird dann jeweils ein 5mm Loch gebohrt und von Innen die Leuchtdioden mit den Kabeln eingesteckt und diese mit etwas Sekundenkleber fest geklebt. Der Rest der Elektronik samt Batterie kann man dann im Totenkopf verstauen.
Der Kopf ist leicht transparent und die rote LED auf meinem Digispark ist ebenfalls sehr hell. Da diese LED auch den Pin 1 benutzt, glimmt der ganze Kopf in gleichen Takt wie die Augen. Wer das gerne unabhängig von einander haben möchte, kann natürlich auch die Augen-LED von Pin 1 auf einen anderen Pin löten und im Programm ändern. Ein weiteren PWM Ausgang bietet noch der Pin 4 am Digispark.
Die Software
Installation Digispark
Zunächst müssen Sie den richtigen Windowstreiber für den Digispark installieren. Dazu laden Sie von der Seite: [https://github.com/digistump/digiStumparduino/releases] die Datei DigiStump.Drivers.zip herunter. Diese entpacken Sie in ein beliebiges Verzeichnis und führen dort dann die Datei DPinst64.exe (Windows 64 Bit, für 32 Bit DPinst.exe) aus. Einfach den Anweisungen des Installationsprogramms folgen.
Dann muss der Digispark in den Boardmanager der Arduino IDE aufgenommen werden. Das machen Sie einfach, indem Sie in den Voreinstellungen folgende URL in die Liste "zusätzliche Boardverwalter URLs" aufnehmen. Wenn Sie bereits weitere Boardverwalter URLs dort stehen haben, bitte das Komma nicht vergessen.
> `http://digistump.com/package_digistump_index.json`
Jetzt kann man unter Werkzeuge/Board/Boardverwalter den Digistump AVR Boards Eintrag suchen. Dieser enthält das Board. Installieren Sie diesen dann.
Als letzten Schritt der Hardwareeinrichtung muss nun noch der Digispark (Default 16,5MHz) als aktives Board ausgewählt werden.
Soweit sind Sie mit der Installation fertig. Einen Port benötigen Sie nicht, eine Besonderheit des Digisparks. Will man ein Programm hochladen, geht das nur, wenn der Zwerg (Micro controller) gerade neu in den USB Anschluss eingesteckt/gestartet wurde. Beim Upload kommt in der Console folgende Anweisung:
Zu diesem Zeitpunkt muss man den Digi in den USB Port stecken.
Das Ganze geht natürlich einfacher, wenn man einen schaltbaren USB Hub hat. Dann erspart man sich das Aus/Einstecken.
Das Programm
Zu dem Programm muss ich nicht viel erzählen. Beide Ausgänge sind PWM fähig, d.h. man kann Sie mit Werten zwischen 0 und 255 füttern. Das Programm blendet aber nicht komplett aus, sondern startet mit einem minimalen Wert. Und auch die Rundenzeit wird aus einem Intervall zufällig gewählt. Das Programm lässt nun die beiden LEDs gleichzeitig in diesem zufälligen Intervall auf und abblenden.
/*
Skull
This is a tiny little program for fading red eyes on a skull for Halloween.
Designed for a Digispark or Tiny85
Copyright 2020 Wilfried Klaas
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
const byte OUT_1 = 0;
const byte OUT_2 = 1;
const byte MAX = 255;
const byte MIN = 16;
const byte DELAY= 7;
const word ROUNDTIME_MIN = 500;
const word ROUNDTIME_MAX = 1500;
bool up = true;
byte bright = MIN;
byte level = MAX;
word delayTime = 7;
word roundTime = ROUNDTIME_MIN + (ROUNDTIME_MAX - ROUNDTIME_MIN) / 2;
void setup() {
pinMode(OUT_1, OUTPUT);
pinMode(OUT_2, OUTPUT);
}
// the loop function runs over and over again forever
void loop() {
analogWrite(OUT_1, bright); // turn the LED on (HIGH is the // voltage level)
analogWrite(OUT_2, bright); // turn the LED on (HIGH is the // voltage level)
if (bright >= level) {
up = false;
}
if (bright <= MIN) {
up = true;
level = random(16, MAX);
roundTime = random(ROUNDTIME_MIN, ROUNDTIME_MAX);
delayTime = roundTime / (level - MIN);
}
if (up) {
bright++;
} else {
bright--;
}
delay(delayTime);
}
Zuletzt
Viel Spaß beim Nachbau.Ich hoffe auch dieser kleine Blog hat ihnen gefallen. Bis zum nächsten Mal .
Wilfried Klaas
5 commentaires
Andreas Wolter
@Michael Zint: man könnte den Code in der loop() in eine if-Anweisung setzen und dann mit millis() die Ausführung abhängig von der Zeit steuern.
Wenn einen Ein-/Ausschalter benötigt, könnte man das per Hardware über die Stromversorgung machen. Abhängig von Ihren Anforderungen.
Grüße,
Andreas Wolter
AZ-Delivery Blog
Michael Zint
Hallo,
erst einmal vielen dank für dieses nützliche Projekt. Mein Plan ist es ein dutzend Totenköpfe aufzuhängen, da wäre es gut wenn die LEDs auch mal für kurze Zeit ganz aus gehen, leider bin ich noch nicht so weit das auch umzusetzen. Ich habe einige Werte verändert das Ergebniss war aber leider nicht ausreichend. Ich hoffe nach so langer Zeit findet sich noch jemand der mir helfen kann.
Dirk
Ich habe mir den Skull auch nachgebaut.
Im Batteriebetreib sollte man den Spannungsregler umgehen. Der verbraucht einiges an mA.
Aber folgendes muss man über den VIN beachten.
4 volle Batterien liefern etwas mehr als 6 V.
Das ist zuviel für den Chip…
Ich habe in der Plusleitung eine Diode 1N4001 eingefügt.
Das sind ca 0,7V Spannungsabfall
Bis jetzt hat der Chip alles ohne Schaden überlebt.
Anders ist es , wenn Akkus genutzt werden. Da kann die Diode entfallen.
Hendirk Fischer
Nehmt den Vin statt den 5V-Eingang zur Stromversorgung.
Das spart (einige wenige) mA beim Betrieb der Platine.
Karl-Heinz Kaufmehl
Der Beitrag kommt genau richtig