Inhaltsverzeichnis:
2025 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2025-01-13 06:56
Ein interaktiver Baum mit einem LED-Ring an der Spitze, einem Summer, der Geräusche macht, und einem unverlierbaren Berührungssensor im Inneren, der die Farbe ändert, wenn Sie ihn berühren. Um dieses lustige kleine Ding zu machen, benötigen Sie Folgendes:
Elektronik: - 1x Arduino Uno
- 15x Kabel
- 1x Lötkolben mit runder Spitze
- 1x Adafruit 8-Tasten-Captive-Touch (CAP1188)
- 1x Arduino-Stromkabel
- 1x 8 LED-Ring
- 1x Summer
- 1x Heißklebepistole
- Laden Sie die Bibliothek von CAP1188 herunter
- Laden Sie die Bibliothek von Adafruit Neopixel herunter
Extra (Gehäuse):
- 1x Baumstumpf
- 1x Stick für innen
- Holzplatte zum Auflegen/Einlegen
- Stofftierfüllung für den Außenbereich
Sie können auch etwas anderes als draußen verwenden, seien Sie kreativ!
Jetzt fangen wir an…
Schritt 1: Schritt 1: LED-Ring mit Captive Touch
Wenn Sie Glück haben, sind an Ihrem LED-Ring bereits Pins angebracht. Wenn nicht, ist es Zeit zu löten!
Die Dinge, die wir für dieses Projekt verwenden werden, sind:
- DI (Digitaler Eingang, Pin 6~
- 5V (für Strom, 5V-Pin)
- GND (Die Masse, GND-Pin)
Das ist der LED-Ring fürs Erste. Jetzt die gefangene Berührung.
Legen Sie es in ein Steckbrett und schließen Sie alles wie folgt an: SDA/MISO in Pin (analog in) A4SCK in Pin (analog in) A5VIN in (Power) 5VGND in einem GND Pin1x Kabel an C1 (am Captive Touch selbst)
Laden Sie nun den folgenden Code zum Testen auf Ihr Arduino hoch:
// Julia Emmink// Licht- und Touchcode für den interaktiven Baum 19/// Hergestellt mit dem Adafruit Neopixel und Adafruit Captive Touch (CAP1188) (wird installiert) und die LED blinkt ohne Verzögerung
// NEOPIXEL ~~~~~~~~~~~~~~~~~~
#enthalten
#define PIXELSPIN 6 // Wo du den LED-Ring angeschlossen hast
#define NUMPIXELS 8 //Die Anzahl der LEDs, die sich auf Ihrem Ring befinden #define CALIBRATIONTIME 20000
Adafruit_NeoPixel-Pixel = Adafruit_NeoPixel(NUMPIXELS, PIXELSPIN, NEO_GRB + NEO_KHZ800);
vorzeichenlose lange PixelInterval = 500; // die Zeit die wir warten müssen
unsigned long colorWipePreviousMillis = 0; unsigned long theaterChasePreviousMillis = 0; unsigned long rainbowPreviousMillis = 0; unsigned long rainbowCyclesPreviousMillis = 0;
int theaterChaseQ = 0;
uint16_t currentPixel = 0; // mit welchem Pixel arbeiten wir?
// BERÜHREN ~~~~~~~~~~~~~~~~~~~~~~
#einschließen #einschließen #einschließen
// Reset Pin wird für I2C oder SPI verwendet
#define CAP1188_RESET 9
// CS-Pin wird für Software- oder Hardware-SPI verwendet
#define CAP1188_CS 10
// Diese sind für Software-SPI definiert, für Hardware-SPI, überprüfen Sie Ihre
// SPI-Pins des Boards in der Arduino-Dokumentation #define CAP1188_MOSI 11 #define CAP1188_MISO 12 #define CAP1188_CLK 13
// I2C verwenden, kein Reset-Pin!
Adafruit_CAP1188-Kappe = Adafruit_CAP1188();
Leere Einrichtung () {
// NEOPIXEL ~~~~~~~~~~~~~~~~~~ aktuelles Pixel = 0; Pixel.begin(); // Dies initialisiert die NeoPixel-Bibliothek. Pixel.show(); // Dies sendet die aktualisierte Pixelfarbe an die Hardware.
// BERÜHREN ~~~~~~~~~~~~~~~~~~~~~~
Serial.begin (300); Serial.println ("CAP1188-Test!");
if (!cap.begin()) {
Serial.println ("CAP1188 nicht gefunden"); während (1); } Serial.println ("CAP1188 gefunden!"); }
Leere Schleife () {
// TOUCH + NEOPIXEL ~~~~~~~~~~~~~~~~~~~~~~ uint8_t touched = cap.touched(); if (berührt == 0) { if ((unsigned long)(millis() - colorWipePreviousMillis) >= PixelInterval) { colorWipePreviousMillis = millis(); colorWipe(Pixel. Color(0, 255, 125)); } } else { if ((unsigned long)(millis() - colorWipePreviousMillis) >= PixelInterval) { colorWipePreviousMillis = millis(); colorWipe(Pixel. Color(100, 0, 150)); } }
}
void colorWipe(uint32_t c) {
// NEOPIXEL ~~~~~~~~~~~~~~~~~~ // Entfernt die Farbe Pixel.setPixelColor(currentPixel, c); Pixel.setPixelColor(aktuellesPixel - 1, Pixel. Color(0, 0, 0)); Pixel.show(); aktuellesPixel++; Wenn (aktuelles Pixel == NUMPIXELS) {aktuelles Pixel = 0; Pixel.setPixelColor(7, Pixel. Color(0, 0, 0));
}
}
Testen Sie es und haben Sie Spaß! Wie Sie sehen, ändert sich die Farbe, wenn Sie das C1-Kabel berühren. (Wenn dies nicht zum ersten Mal der Fall ist, trennen Sie einfach Ihren Arduino und stecken Sie ihn wieder in Ihren Computer.)
Schritt 2: Schritt 2: Sound hinzufügen
Mit der Verwendung eines praktischen Tutorials habe ich dies gemacht. Das Tutorial ist unten:
github.com/xitangg/-Fluch-der-Karibik…
Zeit, Ihren Summer zu schnappen! Stecken Sie den (-) des Summers in einen der GND-Pins und den (+) in Pin 10~
Das war es auch schon, jetzt ist es an der Zeit, den Code noch einmal auszuführen und die schöne Melodie von Fluch der Karibik zu hören! Nun viel Spaß beim Testen!
// Julia Emmink// Licht-, Touch- und Musikcode für den interaktiven Baum 19.01.2018// Hergestellt mit dem Adafruit Neopixel und Captive Touch (CAP1188) (wird installiert) und die LED blinkt ohne Verzögerung
// NEOPIXEL ~~~~~~~~~~~~~~~~~~#include
#define PIXELSPIN 6
#define NUMPIXELS 8 #define KALIBRIERUNGSZEIT 20000
Adafruit_NeoPixel-Pixel = Adafruit_NeoPixel(NUMPIXELS, PIXELSPIN, NEO_GRB + NEO_KHZ800);
vorzeichenlose lange PixelInterval=500; // die Zeit die wir warten müssen
unsigned long colorWipePreviousMillis=0; unsigned long theaterChasePreviousMillis=0; unsigned long rainbowPreviousMillis=0; unsigned long rainbowCyclesPreviousMillis=0;
int theaterChaseQ = 0;
uint16_t currentPixel = 0; // mit welchem Pixel arbeiten wir?
// MUSIK ~~~~~~~~~~~~~~~~~~~~~~
const int Summer = 10; // Definieren Sie Pin 10, können andere PWM-Pins (5, 6 oder 9) verwenden // Beachten Sie, dass die Pins 3 und 11 nicht verwendet werden können, wenn die Tonfunktion in Arduino Uno verwendet wird const int songspeed = 1,5; // Ändere auf 2 für eine langsamere Version des Songs, je größer die Zahl, desto langsamer der Song //**************************** ************** #define NOTE_C4 262 //Define Notenfrequenz #define NOTE_D4 294 #define NOTE_E4 330 #define NOTE_F4 349 #define NOTE_G4 392 #define NOTE_A4 440 #define NOTE_B4 494 #define NOTE_C5 523 #define NOTE_D5 587 #define NOTE_E5 659 #define NOTE_F5 698 #define NOTE_G5 784 #define NOTE_A5 880 #define NOTE_B5 988 //************************ ****************** int notes = { //Note des Songs, 0 ist eine Pause/Puls NOTE_E4, NOTE_G4, NOTE_A4, NOTE_A4, 0, NOTE_A4, NOTE_B4, ANMERKUNG_C5, ANMERKUNG_C5, 0, ANMERKUNG_C5, ANMERKUNG_D5, ANMERKUNG_B4, ANMERKUNG_B4, 0, ANMERKUNG_A4, ANMERKUNG_G4, ANMERKUNG_A4, 0 }; //******************************************** int Dauer = { / /Dauer jeder Note (in ms) Viertelnote ist auf 250 ms eingestellt 125, 125, 250, 125, 125, 125, 125, 250, 125, 125, 125, 125, 250, 125, 125, 125, 125, 375, 125};
// BERÜHREN ~~~~~~~~~~~~~~~~~~~~~~
#einschließen #einschließen #einschließen
// Reset Pin wird für I2C oder SPI verwendet
#define CAP1188_RESET 9
// CS-Pin wird für Software- oder Hardware-SPI verwendet
#define CAP1188_CS 10
// Diese sind für Software-SPI definiert, für Hardware-SPI, überprüfen Sie Ihre
// SPI-Pins des Boards in der Arduino-Dokumentation #define CAP1188_MOSI 11 #define CAP1188_MISO 12 #define CAP1188_CLK 13
// I2C verwenden, kein Reset-Pin!
Adafruit_CAP1188-Kappe = Adafruit_CAP1188();
Leere Einrichtung () {
// MUSIK ~~~~~~~~~~~~~~~~~~~~~~ for (int i=0;i<203;i++){ //203 ist die Gesamtzahl der Musiknoten in das Lied int wait = Dauer * Liedgeschwindigkeit; Ton (Summer, Notizen, warten); // Ton (Pin, Frequenz, Dauer);} // Verzögerung wird verwendet, damit es nicht zur nächsten Schleife geht, bevor der Ton fertig abgespielt ist // Sie können auf Arduino auf Reset klicken, um den Song zu wiederholen // NEOPIXEL ~~~ ~~~~~~~~~~~~~~~ aktuelles Pixel = 0; Pixel.begin(); // Dies initialisiert die NeoPixel-Bibliothek. Pixel.show(); // Dies sendet die aktualisierte Pixelfarbe an die Hardware.
// BERÜHREN ~~~~~~~~~~~~~~~~~~~~~~
Serial.begin (300); Serial.println ("CAP1188-Test!"); if (!cap.begin()) {Serial.println("CAP1188 nicht gefunden"); während (1); } Serial.println ("CAP1188 gefunden!");
}
Leere Schleife () {
// TOUCH + NEOPIXEL ~~~~~~~~~~~~~~~~~~~~~~ uint8_t touched = cap.touched(); if (berührt == 0) { if ((unsigned long)(millis() - colorWipePreviousMillis) >= PixelInterval) { colorWipePreviousMillis = millis(); colorWipe(Pixel. Color(0, 255, 125)); } } else { if ((unsigned long)(millis() - colorWipePreviousMillis) >= PixelInterval) { colorWipePreviousMillis = millis(); colorWipe(Pixel. Color(100, 0, 150)); } }
for (int i=0;i= PixelInterval) {
colorWipePreviousMillis = millis(); colorWipe(Pixel. Color(0, 255, 125)); } } else { if ((unsigned long)(millis() - colorWipePreviousMillis) >= PixelInterval) { colorWipePreviousMillis = millis(); colorWipe(Pixel. Color(100, 0, 150)); }}
verzögern (warten);
}
}
void colorWipe(uint32_t c){
// NEOPIXEL ~~~~~~~~~~~~~~~~~~ // Entfernt die Farbe Pixel.setPixelColor(currentPixel, c); Pixel.setPixelColor(aktuellesPixel-1, Pixel. Color(0, 0, 0)); Pixel.show(); aktuellesPixel++; if (aktuelles Pixel == NUMPIXELS) { aktuelles Pixel = 0; Pixel.setPixelColor(7, Pixel. Color(0, 0, 0));
}
}
Schritt 3: Zusätzlicher Schritt: Den Stump 'Arduino Ready' machen
Wenn Sie sich entscheiden, einen Baumstumpf zu verwenden, müssen Sie Folgendes tun.
- Holen Sie sich einen Baumstumpf (ich habe einen von einem alten Weihnachtsbaum kostenlos bekommen)
- Messen Sie Ihren Arduino und sehen Sie, wie Sie die Verkabelung im Baumstumpf haben möchten
- Stumpf aushöhlen (ich habe eine Bohrmaschine aus der Schule benutzt)
- Schleifen Sie die rauen Kanten ab
- Füge lustige kleine Details hinzu
Details, die ich hinzugefügt habe, war ein kleines Logo, das ich mit einem Laserschneider erstellt habe. Ich habe auch meine gesamte Elektronik auf einem Stock in meinem Baum gestapelt und außen eine Stofftierfüllung hinzugefügt, um das Licht durchzulassen und diese kleine zusätzliche Weichheit zu verleihen.