Das Fest, das jedes Jahr am 31. Oktober stattfindet, ist Halloween, auch bekannt als die Nacht der Hexen. Es ist ein besonders beliebtes Fest in angelsächsischen Ländern wie den Vereinigten Staaten, Kanada, Irland und dem Vereinigten Königreich, hat sich jedoch in den letzten Jahrzehnten in vielen Teilen der Welt verbreitet.
Seine Ursprünge liegen in heidnischen Ritualen und Glaubensvorstellungen über das Jenseits. Der Name stammt von dem Ausdruck „All Hallows’ Eve”, was „Allerheiligenabend” bedeutet. Im Laufe der Zeit verkürzte sich dieser Ausdruck zu „Halloween”, aber heute wird es hauptsächlich als ein Fest zum Vergnügen gefeiert. Es ist ein Fest, das mit dem Übernatürlichen, Angst und Spaß verbunden ist und bei dem Kostüme, beleuchtete Kürbisse, Süßigkeiten und Gruselgeschichten im Überfluss vorhanden sind.
Das Fest zeichnet sich dadurch aus, dass man sich mit Kostümen verkleidet, die übernatürliche Wesen darstellen (Hexen, Vampire, Geister, Monster), und es ist Brauch, dass Kinder von Haus zu Haus gehen und mit dem Spruch „Trick or Treat” (Süßes oder Saures) um Süßigkeiten bitten. Wenn sie keine Süßigkeiten bekommen, dürfen sie einen kleinen Streich spielen.
Häuser, Schulen und Geschäfte werden mit gruseligen Elementen dekoriert: Spinnweben, Skelette, Totenköpfe, Fledermäuse, Geister und gedämpftes Licht. Für die Dekoration dieses Jahres haben wir ein Projekt mit einem Skelett realisiert, das sich hin und her wiegt und, wenn sich jemand nähert, innehält, dessen Augen aufleuchten und das sich aufrichtet, natürlich mit Soundeffekten, um den Eindruck zu verstärken.
Die erforderlichen Materialien sind:
● 1 AZ-Nano V3-Platine mit USB-C-Anschluss mit Atmega328 CH340
● 1 Terminaladapterplatine mit Schraubklemmen, kompatibel mit Nano V3
● 1 MB102 Breadboard-Netzteiladapter
● 1 Mini-Breadboard 400 PIN mit 4 Stromschienen für Überbrückungskabel
● Jumper-Kabel 3 x 40 Stück, 20 cm, M2M / F2M / F2F
● 2 Rote LED
● 1 Mini-MP3-Player DFPlayer Master-Modul
● 2 Stück DFPlayer Mini 3 Watt 8 Ohm Mini-Lautsprecher
● 1 PAM8403 digitaler Mini-Audioverstärker 2x 3 Watt
● Ultra Flexible Tinned Copper
● 3 mm thick balsa wood and white wood glue
Die erforderliche Software ist:
● Arduino IDE
● SPI.h-Bibliothek (in der Arduino IDE enthalten)
● DFPlayer Mini-Bibliothek von DFRobot (DFRobotDFPlayerMini.h)
● Servo.h-Bibliothek (Download von arduino.cc)
● 001.mp3
● 002.mp3
Schaltkreis und Beschreibung der verwendeten Module

Bild 1 – Elektronisches Diagramm

Bild 2 – Verteilung der Komponenten
Wie aus dem Schaltplan ersichtlich ist, werden zwei Servomotoren verwendet, die für die Bewegung des Projekts zuständig sind. Für die Bewegung des Schaukelstuhls wird der Servomotor MG90S mit Metallgetriebe verwendet, da dieser die meiste Arbeit leisten muss, da er ständig in Bewegung ist. Für die Aufrichtbewegung des Skeletts wurde der Servomotor SG90 gewählt, der über Kunststoffgetriebe verfügt, da er nur bei Erkennung einer Präsenz aktiviert wird. Für diese Präsenzerkennung wurde der Ultraschallmodul HC-SR04 verwendet, da die Entfernung der Personen bekannt sein muss, um das Skelett zu aktivieren. Für die Beleuchtung der Augen des Skeletts wurden zwei rote LEDs verwendet, die jeweils an einen 330-Ohm-Widerstand angeschlossen werden müssen, um die Versorgungsspannung anzupassen und sie nicht zu beschädigen. Für den Ton des Schaukelstuhls und des Skeletts wurde das MP3-Minimodul DFPlayer, der Tonverstärker PAM8403 und zwei Lautsprecher DFPlayer Mini 3 Watt 8 Ohm Mini verwendet. Das gesamte Set wird über das Netzteil MB102 mit Strom versorgt, und als Mikrocontroller wird das Modul AZ-Nano V3 mit USB-C-Anschluss verwendet.
Wie bereits erwähnt, werden in diesem Projekt ein MP3-Wiedergabemodul und ein Verstärker für die Wiedergabe der Töne verwendet. Die Anschlusspins der beiden Module sind wie folgt:

Bild 3 – PAM8403

Bild 4 – Mini-MP3-Player
Für die korrekte Wiedergabe der Audiodateien muss die erste Audiodatei, die auf der microSD-Karte gespeichert wird, den Namen 001.mp3 tragen und das Geräusch von knarrendem Holz enthalten. Danach wird die Audiodatei 002,mp3 gespeichert. Das MP3-Wiedergabemodul hat die Besonderheit, dass beim Aufrufen der Datei 001 die zuerst gespeicherte Datei wiedergegeben wird und beim Aufrufen der Datei 002.mp3 die zweite gespeicherte Audiodatei wiedergegeben wird.
Pläne der Projektfiguren
Das Projekt besteht aus drei Teilen: einem Schaukelstuhl, dem Gerüst und der Basis, in die die elektronischen Komponenten eingebaut werden. Es wurde Balsaholz verwendet, da dieses Material leicht ist und eine hohe Festigkeit aufweist. Der Schaukelstuhl besteht aus vier Teilen: der Rückenlehne, zwei Seitenteilen und dem Sitz, die alle eine Dicke von 6 Millimetern haben. Um diese Dicke zu erreichen, wurden zwei gleich große Teile mit einer Dicke von 3 mm mit Weißleim zusammengeklebt. Die Abmessungen der Teile des Schaukelstuhls sind wie folgt:

Bild 5 – Schaukelstuhl
Die Skelettfigur besteht aus 9 Teilen: Schädel, Rücken, Becken, Arme und Beine.

Bild 6 – Skelett
Das Schädelstück ist 15 Millimeter dick, sodass 5 Holzstücke zusammengeklebt werden müssen. Die ersten beiden Teile bestehen nur aus dem Schädel, die letzten drei Teile bestehen aus dem Schädel und einem Schaft.
Um die beiden roten LEDs in den Augen des Schädels anzubringen, wurden die Augen der ersten vier Teile des Schädels ausgehöhlt und im fünften Teil (dem hinteren) wurden Löcher gebohrt, um die Anschlüsse der LEDs herauszuführen, da diese in die Augenhöhlen eingesetzt sind.

Bild 7 – Schädel und Augen im Schädel
Der Schädel und der Rücken sind an einem Mast befestigt, der dazu dient, das Skelett des Stuhls anzuheben. Die Arme sind durch ein Stück Draht verbunden, das durch den Mast verläuft, und diese sind an einem weiteren senkrechten Draht befestigt, der an der Basis des Skeletts angebracht ist und dafür sorgt, dass sich die Arme drehen, sodass der Eindruck entsteht, dass sie angehoben werden, wenn das Skelett angehoben wird. Der Servomotor ist an der Basis des Skelett-Ensembles installiert, um den Mast anzutreiben und das Skelett anzuheben.

Bild 8 – Detailansicht des Armbewegungsmechanismus

Bild 9 – Servomotor zum Anheben des Skeletts
Die Beine des Skeletts wurden an der Basis, auf der das Skelett ruht, festgeklebt. Die letzten beiden Details des Skeletts sind der Umhang und die Sense. Der Umhang ist in drei Teile unterteilt: die Kapuze, die Ärmel und den Umhang selbst. Um die Kapuze herzustellen, muss der obere Teil geklebt oder genäht und dann an den oberen Teil des Umhangs geklebt werden. Für die Herstellung der Ärmel müssen zwei Rechtecke gefertigt werden, die gefaltet und an einer Seite geklebt werden. Die Ärmel müssen je nach Bedarf an den Umhang oder an die Arme des Skeletts geklebt werden. In diesem Projekt wurden sie an die Arme geklebt. Der Umhang wurde an der Rückseite zugeschnitten, damit das Skelett besser zur Geltung kommt. Und schließlich hat die Sense eine Dicke von 3 mm.

Bild 10 – Umhang und Sense anlegen
Die Basis der Konstruktion ist ein Kasten, in dem die elektronischen Bauteile und der Servomotor untergebracht sind, der den Schaukelstuhl antreibt. Dieser Servomotor treibt die Konstruktion an, die an beiden Enden zwei Drähte aufweist, die durch die Oberseite des Kastens verlaufen und an der Rückseite der Kufen des Schaukelstuhls befestigt sind. Auf diese Weise ermöglichen wir die Bewegung des Schaukelstuhls.

Bild 11 – Details zur Box

Bild 12 –

Bild 13 – Montage abgeschlossen

Bild 14 – Montage abgeschlossen

Bild 15 – Skelett der Sense
Beschreibung der Funktionsweise des Projekts und Skizze
Die Funktionsweise der Schaltung ist einfach, wie aus der Schaltung ersichtlich ist. Der Ultraschallmodul HC-SR04 wird verwendet, um Signale mit einer Dauer von 10 Mikrosekunden und einer Wartezeit zwischen den Impulsen von 5 Mikrosekunden zu senden. Wenn ein Signal von einer Person oder einem Objekt zurückgeworfen wird, erfasst der Sensor das empfangene Signal und der Mikrocontroller berechnet die Zeit, die das Signal zwischen dem Senden und dem Empfangen benötigt hat. Da die Schallgeschwindigkeit in der Luft bekannt ist, kann die Entfernung zum Objekt oder zur Person ermittelt werden. Solange die Entfernung größer oder gleich 40 Zentimeter ist, bewegt sich der Schaukelstuhl durch die Wirkung des Servomotors MG90S und eine MP3-Datei mit einem knarrenden Holzgeräusch wird dank der Kombination aus dem Mini-MP3-Player DFPlayer Master Module, dem digitalen Mini-Audioverstärker PAM8403 und dem DFPlayer Mini 3 Watt 8 Ohm Mini-Lautsprecher wiedergegeben. Wenn ein Objekt oder eine Person in weniger als 40 Zentimetern Entfernung erkannt wird, bleibt der Schaukelstuhl in seiner mittleren Position stehen und der Ton wird angehalten. Nach 1,5 Sekunden leuchten die roten LEDs in den Augen des Skeletts auf und nach 2 Sekunden wird das Lachen des Skeletts wiedergegeben und das Skelett steht dank des Servomotors SG90 schnell vom Stuhl auf.
Nachdem die Funktionsweise erklärt wurde, wird nun der Sketch analysiert. Als Erstes müssen in jedem Sketch die erforderlichen Bibliotheken im Abschnitt zur Definition der globalen Variablen implementiert werden, damit die von uns verwendeten Module genutzt werden können. Die drei hinzugefügten Bibliotheken sind für die Verwendung des Moduls Mini MP3 Player DFPlayer und der Servomotoren erforderlich. Da die erforderliche Kommunikation zwischen dem MP3-Modul und dem Mikrocontroller eine serielle Kommunikation sein muss, wird mit der Bibliothek SoftwareSerial.h die Funktion aktiviert, mit der der Mikrocontroller jeden digitalen Pin für die serielle Kommunikation freigeben kann. Mit der Bibliothek DFRobotDFPlayerMini.h werden die für die Verwendung des Moduls erforderlichen Funktionen aktiviert. Die letzte Bibliothek, die hinzugefügt wird, ist <Servo.h>. Diese Bibliothek enthält die Konfiguration und die Methoden, die für die Positionsänderung der Servomotoren erforderlich sind.
#include <SoftwareSerial.h>
#include <DFRobotDFPlayerMini.h>
#include <Servo.h>
In diesem Projekt wird der Ultraschallmodul ohne Bibliothek verwendet. Es wird gezeigt, dass die Entfernung zu Objekten oder Personen mit einer einfachen mathematischen Operation ermittelt werden kann, weshalb die Bibliothek nicht hinzugefügt wird.
Nachdem die erforderlichen Bibliotheken hinzugefügt wurden, muss für jedes Modul oder jede Komponente, die dies erfordert, ein Objekt implementiert werden. Um das MP3-Wiedergabemodul zu verwenden, muss daher das Objekt mySoftwareSerial aus der Bibliothek <SoftwareSerial implementiert werden. h>, um dem Mikrocontroller die digitalen Pins anzugeben, die für die serielle Kommunikation des Moduls verwendet werden sollen. In diesem Projekt wird der digitale Pin 10 des Mikrocontrollers zum Empfangen von Daten vom Mini-MP3-Player-Modul und der digitale Pin 11 zum Senden von Daten an das Mini-MP3-Player-Modul verwendet. Um die Steuerungsmethoden und -befehle des Moduls zu verwenden, wie z. B. die Lautstärke einstellen oder die Wiedergabe einer MP3-Datei starten, wird das Objekt myDFPlayer aus der Bibliothek <DFRobotDFPlayerMini.h> erstellt.
SoftwareSerial mySoftwareSerial(10, 11);
DFRobotDFPlayerMini myDFPlayer;
Um die Servomotoren verwenden zu können, muss für jeden Servomotor ein Objekt aus der Bibliothek Servo.h instanziiert werden. Wie man sieht, sind die Namen der Objekte für die Verwendung der einzelnen Servomotoren sehr aussagekräftig und leicht zu verstehen. Außerdem wird die Variable pos definiert. Diese Variable vom Typ int wird in den Schleifen verwendet, die für die Bewegung des Servomotors des Schaukelstuhls definiert werden.
Servo servo_chair;
Servo servo_skeleton;
int pos;
In den folgenden vier Zeilen werden die Variablen definiert, die mit dem Ultraschallmodul SR-HC04 verwendet werden. Die ersten beiden sind die Variablen mit den Namen der Pins, trigPin (Signalsender) und echoPin (Signalempfänger) des Ultraschallmoduls, und als Wert enthalten sie die Nummern der Ports des Mikrocontrollers, an denen sie angeschlossen sind, nämlich an die Pins 6 und 5. In der Variablen ultrasonic_time_measurement wird der Wert der Zeit gespeichert, die der Sensor benötigt, um das von einer Person reflektierte Signal zu erkennen, nachdem er es ausgesendet hat, und in der Variablen distance wird der Wert der Entfernung gespeichert, der anhand der erkannten Zeit berechnet wird.
int trigPin = 6;
int echoPin = 5;
long ultrasonic_time_measurement;
long distance;
Die letzte Variable, die erstellt wird, ist die Variable led_eyes mit dem Wert 7. Diese Variable wird verwendet, um dem Mikrocontroller mitzuteilen, dass die roten LEDs der Augen des Skeletts an seinen digitalen Port angeschlossen sind.
int led_eyes = 7;
Nachdem die Bibliotheken implementiert, die Objekte der Module erstellt und die erforderlichen Variablen angelegt wurden, muss die Anfangskonfiguration der Module und Komponenten des Projekts definiert werden. Dies erfolgt in der Methode setup(). Als Erstes wird in dieser Methode das MP3-Modul initialisiert und seine Kommunikation mit dem Mikrocontroller über mySoftwareSerial. begin(9600), wobei 9600 die Datenübertragungsgeschwindigkeit in Baud ist. Außerdem initialisieren wir die Kommunikation mit dem Serial Monitor über Serial.begin (115200) mit einer Geschwindigkeit von 115200 Baud (die Geschwindigkeit muss unten rechts im Serial Monitor ausgewählt werden, wenn die Konsole geöffnet wird), damit die Meldungen zum Initialisierungsstatus oder zu Fehlern des MP3-Moduls angezeigt werden.
mySoftwareSerial.begin(9600);
Serial.begin(115200);
Als Nächstes muss im Code die Initialisierung des MP3-Moduls überprüft werden. Dazu wird eine bedingte Anweisung if verwendet. In der Anweisung if wird der Code innerhalb der geschweiften Klammern ausgeführt, wenn die Bedingung seines Parameters wahr ist. In diesem Fall wird überprüft, ob das MP3-Modul aus irgendeinem Grund nicht initialisiert wurde. Die verneinte Initialisierung wurde mit dem Symbol ! geschrieben. Dieses Symbol wird als Negationsmethode verwendet, sodass, wenn das Modul nicht initialisiert wird, die Bedingung wahr ist und der Code innerhalb der geschweiften Klammern ausgeführt wird und die serielle Konsole meldet, dass die Verbindungen und das Einlegen der microSD-Karte überprüft werden sollen. Wenn das MP3-Wiedergabemodul korrekt initialisiert wird, ist die Bedingung nicht erfüllt und der oben beschriebene Code wird nicht ausgeführt. Die Methode setup () weiter ausgeführt, um über die serielle Konsole mit der Zeile Serial.println(F("Correct DFPlayer initialization.")) zu melden, dass das MP3-Wiedergabemodul korrekt initialisiert wurde.
if (!myDFPlayer.begin(mySoftwareSerial)) {
Serial.println(F("Error initializing mp3 module:"));
Serial.println(F("1. Please check the connections!"));
Serial.println(F("2. Please insert the microSD memory!"));
while(true){
delay(0);
}
}
Serial.println(F("Correct DFPlayer initialization."));
Für die Erstkonfiguration der Servomotoren muss zunächst der Port des Mikrocontrollers, an den die Signalleitung des Servomotors angeschlossen ist, mit servo.attach definiert werden, sowie der Wert der Position des Servomotors in Grad im Ausgangszustand mit servo. write für den Fall, dass der Mikrocontroller eingeschaltet oder zurückgesetzt wird. Für den Servomotor des Schaukelstuhls wird angegeben, dass er mit servo_chair an Port 9 des Mikrocontrollers angeschlossen ist. attach(9) und die Ausgangsposition beträgt 90 Grad, was mit servo_chair angegeben wird. write(90). Für den Servomotor des Skeletts ist der Anschluss des Mikrocontrollers, an den er angeschlossen wurde, 8, was mit der Zeile servo_skeleton angegeben wird. attach(8) und die Ausgangsposition des Skeletts ist sitzend. Für diese Position muss der Servomotor auf 90 Grad eingestellt sein, was mit servo_skeleton.write(90) angegeben wird.
servo_chair.attach(9);
servo_chair.write(90);
servo_skeleton.attach(8);
servo_skeleton.write(90);
Für die Erstkonfiguration der roten LEDs der Skeletaugen muss zunächst der Port des Mikrocontrollers, an den die LEDs angeschlossen sind, als Ausgangsport konfiguriert werden, damit er bei einer Statusänderung Spannung liefert. Dies erfolgt mit der Codezeile pinMode (led_eyes, OUTPUT). Wenn das Skelett sitzt, dürfen seine Augen nicht leuchten, sodass dieser Port keine Spannung liefern darf. Dies geschieht, indem der Signalpegel, den er zu diesem Zeitpunkt liefert, auf einen niedrigen Pegel, d. h. auf 0 VDC, eingestellt wird. Die Zeile, mit der sein Ausgang auf einen niedrigen Pegel eingestellt wird, lautet digitalWrite (led_eyes, LOW) .
pinMode (led_eyes, OUTPUT);
digitalWrite (led_eyes, LOW);
In den letzten beiden Zeilen der Methode setup() werden die Ports des Mikrocontrollers konfiguriert, an die die Pins des Ultraschallmoduls angeschlossen sind. Der Port des Mikrocontrollers, an den der Pin TRIG des Ultraschallmoduls angeschlossen ist, wird mit pinMode (trigPin, OUTPUT) als Ausgang konfiguriert, da der Mikrocontroller mit diesem Pin die Aussendung des Ultraschallsignals steuert. Der Port des Mikrocontrollers, an den der Pin ECHO des Ultraschallmoduls angeschlossen ist, wird mit pinMode (echo_Pin, INPUT) konfiguriert, da der Mikrocontroller über diesen Port das vom Ultraschallmodul zuvor gesendete Signal empfängt, das von Personen oder Gegenständen zurückgeworfen wird.
pinMode (trigPin, OUTPUT);
pinMode (echoPin, INPUT);
Die Anfangsbedingungen aller Module und Komponenten des Projekts sind bereits konfiguriert, nun muss nur noch die Methode loop() programmiert werden, damit das gesamte System die gewünschten Bewegungen ausführt. Die erste Zeile ist ein Aufruf der Methode measure_distance(). In dieser Methode werden der Ultraschallmodul gesteuert und die Berechnungen durchgeführt, um die Entfernung zwischen einem Objekt oder einer Person und dem Ultraschallmodul zu ermitteln.
measure_distance();
Wenn diese Methode aufgerufen wird, werden Ultraschallsignale gesendet und die Berechnung anhand der Zeit durchgeführt, die das Signal benötigt hat, um zurückgeworfen zu werden. Um die Entfernung zwischen einem Objekt und dem Sensor zu berechnen, muss lediglich die Zeit gemessen werden, die zwischen dem Senden und dem Empfang eines Signals verstreicht. Die Abfolge ist wie folgt: Zuerst wird der Pin trigPin des Sensors für 5 Millisekunden auf den Zustand „low” gesetzt. Nach Ablauf dieser Zeit wird der Zustand desselben Pins trigPin für 10 Millisekunden auf „hoch” gesetzt, damit der Sensor das Signal aussendet. Nach Ablauf dieser Zeit wird der Zustand dieses Pins wieder auf „niedrig” gesetzt, um die Aussendung von Signalen zu beenden.
Sobald dies geschehen ist, berechnet die Funktion pulseIn(echoPin, HIGH) die Zeit, die seit der Aussendung des Signals durch den Pin trigPin verstrichen ist, bis der Pin echoPin des Sensors das zurückgeworfene Signal empfängt. Nun ist die Zeit bekannt, die das Signal in Mikrosekunden vom Senden bis zum Empfang benötigt hat. Diese Information ist sehr wichtig und wird in der Variablen ultrasonic_time_measurement gespeichert. Um die Entfernung zu ermitteln, muss lediglich eine mathematische Operation durchgeführt werden. Da die Schallgeschwindigkeit in der Luft bei 20 Grad Celsius 343 m/s beträgt, muss diese Geschwindigkeit in cm/µs umgerechnet werden. Der Wert wird mit der folgenden Formel berechnet:

Formel 1 – Umrechnung von m/s in cm/µs
Andererseits ist die vom Sensor gemessene Zeit die Zeit, die das Signal benötigt, um zum Objekt zu gelangen und zurückzukommen, sodass die tatsächlich benötigte Zeit bis zum Erreichen des Objekts oder der Person nur halb so lang ist wie die gemessene Zeit. Dabei ist zu beachten, dass es sich um Mikrosekunden handelt. Wenn also die benötigte Zeit und die Schallgeschwindigkeit in Zentimetern pro Mikrosekunde bekannt sind, kann die folgende Formel zur Berechnung der Entfernung angewendet werden.

Formel 2 – Entfernungsberechnung
Das Ergebnis ist die Entfernung zum Objekt in Zentimetern. Diese Entfernung wird in der Variablen distance gespeichert, um sie in bedingten Blöcken if zu verwenden. Diese Blöcke werden je nach Wert der Variablen ausgeführt. Diese Entfernung wird auch vom Serial Monitor angezeigt, wenn der Mikrocontroller mit der Arduino IDE verbunden ist.
void measure_distance() {
digitalWrite(trigPin, LOW);
delayMicroseconds(5);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
ultrasonic_time_measurement = pulseIn(echoPin, HIGH);
distance = (ultrasonic_time_measurement/2)*0.0343;
Serial.print(distance);
Serial.print(" cm");
Serial.println();
}
Sobald die Entfernung zum Objekt berechnet wurde, kehrt man zu der Codezeile zurück, die auf den Aufruf der Methode measure_distance() folgt.
Wenn man sich den Sketch ansieht, wird man feststellen, dass zwei einfache bedingte Blöcke if programmiert wurden. Diese beiden Blöcke führen die verschiedenen Aktionen aus, die die Komponenten je nach dem Wert ausführen, den die vom Sensor erkannte Person hat und der in der Variablen distance gespeichert ist. Befindet sich die Person in einer Entfernung von mindestens 40 cm, bleibt das Skelett sitzen, die LEDs der Augen sind ausgeschaltet und der Schaukelstuhl bewegt sich. Wenn der Abstand zur Person jedoch weniger als 40 cm beträgt, bleibt der Schaukelstuhl stehen, die LEDs der Augen leuchten auf und das Skelett steht vom Stuhl auf. Im Folgenden wird die Ausführung der bedingten Blöcke erläutert.
Die erste Bedingung if wird ausgeführt, wenn die Variable distance einen Wert von mindestens 40 Zentimetern hat. Die folgenden Funktionen werden ausgeführt: Zunächst wird die Lautstärke der Tonwiedergabe mit myDFPlayer.volume(15) auf einen Wert von 15 von 30 eingestellt, anschließend wird die Datei mit dem Namen 001.mp3 mit myDFPlayer. play(001) abgespielt. Diese Datei muss auf der microSD-Karte gespeichert sein, die in das MP3-Wiedergabemodul eingelegt ist, und gibt das Geräusch von knarrendem Holz wieder. Die Zeile digitalWrite (led_eyes, LOW) des Codes setzt den Pin des Mikrocontrollers, an den die LEDs der Augen des Skeletts angeschlossen sind, auf einen niedrigen Pegel (ohne Spannung), wodurch sie ausgeschaltet werden und der Servomotor des Skeletts sich in eine 90-Grad-Position begibt und sitzen bleibt.
Für die Bewegung des Schaukelstuhls wurden zwei Schleifen for mit Zählern programmiert. Die erste Schleife for beginnt mit einem Wert der Servomotorposition von 60 Grad und muss sich bis auf 115 Grad positionieren, wobei alle 18 Mikrosekunden um 1 Grad erhöht wird. Auf diese Weise ist die Bewegung kontinuierlich. Die zweite Schleife for zwingt den Servomotor, die umgekehrte Bewegung auszuführen: Von 115 Grad muss er auf 60 Grad abgesenkt werden, wobei alle 18 Mikrosekunden 1 Grad abgenommen wird.
if (distance >= 40) {
myDFPlayer.volume(15);
myDFPlayer.play(002);
digitalWrite (led_eyes, LOW);
servo_skeleton.write(90);
for (pos = 60; pos <= 115; pos += 1) {
servo_chair.write(pos);
delay(18);
}
for (pos = 115; pos >= 60; pos -= 1) {
servo_chair.write(pos);
delay(18);
}
}
Die zweite Bedingung if wird ausgeführt, wenn die Variable distance einen Wert von weniger als 40 cm hat. In diesem Fall werden die folgenden Funktionen ausgeführt: Zunächst wird die Position des Servomotors des Schaukelstuhls auf 90 Grad eingestellt, wodurch er in der Mitte bleibt, und die Funktion myDFPlayer. pause(), um die aktuell abgespielte Audiodatei anzuhalten (denken Sie daran, dass es sich um das Geräusch von knarrendem Holz mit 001.mp3 handelte), und es wird eine Pause von 1,5 Sekunden mit der Zeile delay(1500) eingelegt.
Nach der Pause leuchten die LEDs der Augen des Skeletts durch die Ausführung der Zeile digitalWrite (led_eyes, HIGH) aufgerufen wird, da diese Zeile bewirkt, dass der Port des Mikrocontrollers, an den die LEDs der Augen des Skeletts angeschlossen sind, in den High-Zustand wechselt und nun 5 VDC hat. Es folgt eine weitere Pause, diesmal jedoch von 2 Sekunden.
Jetzt fehlt nur noch die Bewegung des Skeletts und das Geräusch des Lachens. Zunächst wird die Wiedergabe des Geräusches programmiert, da der Mikrocontroller die Audiodatei für die Wiedergabe vorbereiten muss, was zu einer leichten Verzögerung bei der Wiedergabe führt. Dazu wird die Lautstärke der Geräuschwiedergabe mit myDFPlayer. volume(15) und mit myDFPlayer. play(002) wird die Datei mit dem Namen 002.mp3 abgespielt, um ein gruseliges Lachen wiederzugeben. Diese Datei muss ebenfalls auf der microSD-Karte gespeichert sein, die in das MP3-Wiedergabemodul eingelegt ist. Mit der Codezeile servo_skeleton. write(70) wird das Skelett während der Wiedergabe der Audiodatei vom Stuhl aufstehen. Mit delay(5000) wird eine Pause von 5 Sekunden eingelegt, damit die Datei vollständig abgespielt werden kann.
if (distance < 40) {
servo_chair.write(90);
myDFPlayer.pause();
delay(1000);
digitalWrite (led_eyes, HIGH);
delay(2000);
myDFPlayer.volume(15);
myDFPlayer.play(001);
servo_skeleton.write(70);
delay(5000);
}
Wir hoffen, dass Ihnen das diesjährige Halloween-Projekt gefällt, und wünschen Ihnen einen gruselig-unterhaltsamen Abend. Vielen Dank.
1 commento
Michael
Absolut cooles Projekt und sehr schön realisiert.
Da macht die Bastlei wirklich Spaß.