Inhoudsopgave:
2025 Auteur: John Day | [email protected]. Laatst gewijzigd: 2025-01-13 06:57
Een interactieve boom met een LED-ring aan de bovenkant, een zoemer om geluid te maken en een aanraaksensor aan de binnenkant die van kleur verandert als je hem aanraakt. Om dit leuke kleine ding te maken, heb je het volgende nodig:
Elektronica: - 1x Arduino Uno
- 15x kabels
- 1x soldeerbout met ronde punt
- 1x Adafruit 8-key captive touch (CAP1188)
- 1x Arduino-voedingskabel
- 1x 8 LED-ring
- 1x zoemer
- 1x heet lijmpistool
- Download de bibliotheek van CAP1188
- Download de bibliotheek van Adafruit Neopixel
Extra (omhulsel):
- 1x boomstronk
- 1x stokje voor binnen
- houten plateau om alles op/in te plaatsen
- Gevulde dieren vulling voor buiten
Je kunt ook iets anders als buiten gebruiken, wees creatief!
Laten we nu beginnen…
Stap 1: Stap 1: LED-ring met Captive Touch
Als je geluk hebt, heeft je LED-ring al pinnen eraan. Zo niet, dan is het tijd om te solderen!
De dingen die we voor dit project zullen gebruiken zijn:
- DI (digitale ingang, pin 6~
- 5V (voor stroom, 5V-pin)
- GND (de grond, GND-pin)
Dat is de LED-ring voor nu. Nu de gevangene aanraking.
Plaats het in een breadboard en sluit alles als volgt aan: SDA/MISO in pin (analog in) A4SCK in pin (analog in) A5VIN in (power) 5VGND in een GND pin1x kabel op C1 (op de Captive touch zelf)
Om nu te testen, upload de volgende code naar je Arduino:
// Julia Emmink// Licht- en aanraakcode voor de interactieve boom 19/// Gemaakt met behulp van de Adafruit Neopixel en Adafruit captive touch (CAP1188) (moet worden geïnstalleerd) en de LED knippert zonder vertraging
// NEOPIXEL ~~~~~~~~~~~~~~~~~~
#erbij betrekken
#define PIXELSPIN 6 // Waar je de LED Ring hebt aangesloten
#define NUMPIXELS 8 //Het aantal LED's op uw ring #define CALIBRATIONTIME 20000
Adafruit_NeoPixel-pixels = Adafruit_NeoPixel (NUMPIXELS, PIXELSPIN, NEO_GRB + NEO_KHZ800);
niet-ondertekende lange pixelsInterval = 500; // de tijd die we moeten wachten
unsigned long colorWipePreviousMillis = 0; ongetekende lange theaterChasePreviousMillis = 0; unsigned long rainbowPreviousMillis = 0; niet-ondertekende lange regenboogCyclesPreviousMillis = 0;
int theaterChaseQ = 0;
uint16_t currentPixel = 0;// op welke pixel werken we?
// TOUCH ~~~~~~~~~~~~~~~~~~~~~~
#include #include #include
// Reset Pin wordt gebruikt voor I2C of SPI
#define CAP1188_RESET 9
// CS-pin wordt gebruikt voor software of hardware SPI
#define CAP1188_CS 10
// Deze zijn gedefinieerd voor software SPI, voor hardware SPI, controleer uw
// SPI-pinnen van het bord in de Arduino-documentatie #define CAP1188_MOSI 11 #define CAP1188_MISO 12 #define CAP1188_CLK 13
// Gebruik I2C, geen reset-pin!
Adafruit_CAP1188 cap = Adafruit_CAP1188();
ongeldige setup() {
// NEOPIXEL ~~~~~~~~~~~~~~~~~~ currentPixel = 0; pixels.begin(); // Hiermee wordt de NeoPixel-bibliotheek geïnitialiseerd. pixels.show(); // Dit stuurt de bijgewerkte pixelkleur naar de hardware.
// TOUCH ~~~~~~~~~~~~~~~~~~~~~~
Serieel.begin(300); Serial.println ("CAP1188-test!");
if (!cap.begin()) {
Serial.println ("CAP1188 niet gevonden"); terwijl (1); } Serial.println("CAP1188 gevonden!"); }
lege lus () {
// TOUCH + NEOPIXEL ~~~~~~~~~~~~~~~~~~~~~~ uint8_t touched = cap.touched(); if (aangeraakt == 0) { if ((unsigned long)(millis() - colorWipePreviousMillis) >= pixelsInterval) { colorWipePreviousMillis = millis(); colorWipe(pixels. Color(0, 255, 125)); } } else { if ((unsigned long)(millis() - colorWipePreviousMillis) >= pixelsInterval) { colorWipePreviousMillis = millis(); colorWipe(pixels. Color(100, 0, 150)); } }
}
void colorWipe(uint32_t c) {
// NEOPIXEL ~~~~~~~~~~~~~~~~~~ // Verwijdert de kleur pixels.setPixelColor(currentPixel, c); pixels.setPixelColor(currentPixel - 1, pixels. Color(0, 0, 0)); pixels.show(); huidigePixel++; if (currentPixel == NUMPIXELS) { currentPixel = 0; pixels.setPixelColor(7, pixels. Color(0, 0, 0));
}
}
Test het en veel plezier! Zoals je ziet verandert de kleur als je het C1-snoer aanraakt. (Als dit niet de eerste keer is, koppelt u gewoon uw Arduino los en sluit u deze weer aan op uw computer.)
Stap 2: Stap 2: Geluid toevoegen
Met behulp van een handige tutorial heb ik dit gemaakt. De tutorial is hieronder:
github.com/xitangg/-Pirates-of-the-Caribbe…
Tijd om je zoemer te pakken! Plaats de (-) van de zoemer in een van de GND-pinnen en de (+) in pin 10~
Dat was het zo'n beetje, nu tijd om de code opnieuw uit te voeren en dat mooie Pirates of the Caribbean-deuntje te horen! Nu veel plezier met testen!
// Julia Emmink// Licht, aanraking en muziekcode voor de interactieve boom 2018-01-19// Gemaakt met behulp van de Adafruit Neopixel en Captive Touch (CAP1188) (moet nog worden geïnstalleerd) en de LED knippert zonder vertraging
// NEOPIXEL ~~~~~~~~~~~~~~~~~~#include
#define PIXELSPIN 6
#define NUMPIXELS 8 #define CALIBRATIONTIME 20000
Adafruit_NeoPixel-pixels = Adafruit_NeoPixel (NUMPIXELS, PIXELSPIN, NEO_GRB + NEO_KHZ800);
niet-ondertekende lange pixelsInterval=500; // de tijd die we moeten wachten
unsigned long colorWipePreviousMillis=0; unsigned long theaterChasePreviousMillis=0; unsigned long rainbowPreviousMillis=0; niet-ondertekende lange regenboogCyclesPreviousMillis=0;
int theaterChaseQ = 0;
uint16_t currentPixel = 0;// op welke pixel werken we?
// MUZIEK ~~~~~~~~~~~~~~~~~~~~~~
const int zoemer = 10; //Definieer pin 10, kan andere PWM-pinnen gebruiken (5, 6 of 9) //Let op pinnen 3 en 11 kunnen niet worden gebruikt bij gebruik van de toonfunctie in Arduino Uno const int songspeed = 1.5; //Verander in 2 voor een langzamere versie van het nummer, hoe groter het nummer, hoe langzamer het nummer //****************************** *************** #define NOTE_C4 262 //Definiëren van nootfrequentie #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 of the song, 0 is a rust/pulse NOTE_E4, NOTE_G4, NOTE_A4, NOTE_A4, 0, NOTE_A4, NOTE_B4, NOTE_C5, NOTE_C5, 0, NOTE_C5, NOTE_D5, NOTE_B4, NOTE_B4, 0, NOTE_A4, NOTE_G4, NOTE_A4, 0 }; //********************************************* int duur = { / /duur van elke noot (in ms) Kwartnoot is ingesteld op 250 ms 125, 125, 250, 125, 125, 125, 125, 250, 125, 125, 125, 125, 250, 125, 125, 125, 125, 375, 125};
// TOUCH ~~~~~~~~~~~~~~~~~~~~~~
#include #include #include
// Reset Pin wordt gebruikt voor I2C of SPI
#define CAP1188_RESET 9
// CS-pin wordt gebruikt voor software of hardware SPI
#define CAP1188_CS 10
// Deze zijn gedefinieerd voor software SPI, voor hardware SPI, controleer uw
// SPI-pinnen van het bord in de Arduino-documentatie #define CAP1188_MOSI 11 #define CAP1188_MISO 12 #define CAP1188_CLK 13
// Gebruik I2C, geen reset-pin!
Adafruit_CAP1188 cap = Adafruit_CAP1188();
ongeldige setup() {
// MUZIEK ~~~~~~~~~~~~~~~~~~~~~~ voor (int i=0;i<203;i++){ //203 is het totale aantal muzieknoten in het nummer int wait = duur * songspeed; toon (zoemer, noten , wacht); //tone(pin, frequency, duration);} //delay wordt gebruikt zodat het niet naar de volgende lus gaat voordat de toon klaar is met spelen //Je kunt op reset klikken op Arduino om het nummer opnieuw af te spelen // NEOPIXEL ~~~ ~~~~~~~~~~~~~~~ currentPixel = 0; pixels.begin(); // Hiermee wordt de NeoPixel-bibliotheek geïnitialiseerd. pixels.show(); // Dit stuurt de bijgewerkte pixelkleur naar de hardware.
// TOUCH ~~~~~~~~~~~~~~~~~~~~~~
Serieel.begin(300); Serial.println ("CAP1188-test!"); if (!cap.begin()) { Serial.println("CAP1188 niet gevonden"); terwijl (1); } Serial.println("CAP1188 gevonden!");
}
lege lus () {
// TOUCH + NEOPIXEL ~~~~~~~~~~~~~~~~~~~~~~ uint8_t touched = cap.touched(); if (aangeraakt == 0) { if ((unsigned long)(millis() - colorWipePreviousMillis) >= pixelsInterval) { colorWipePreviousMillis = millis(); colorWipe(pixels. Color(0, 255, 125)); } } else { if ((unsigned long)(millis() - colorWipePreviousMillis) >= pixelsInterval) { colorWipePreviousMillis = millis(); colorWipe(pixels. Color(100, 0, 150)); } }
voor (int i=0;i= pixelsInterval) {
colorWipePreviousMillis = millis(); colorWipe(pixels. Color(0, 255, 125)); } } else { if ((unsigned long)(millis() - colorWipePreviousMillis) >= pixelsInterval) { colorWipePreviousMillis = millis(); colorWipe(pixels. Color(100, 0, 150)); }}
vertraging (wacht);
}
}
void colorWipe(uint32_t c){
// NEOPIXEL ~~~~~~~~~~~~~~~~~~ // Verwijdert de kleur pixels.setPixelColor(currentPixel, c); pixels.setPixelColor(currentPixel-1, pixels. Color(0, 0, 0)); pixels.show(); huidigePixel++; if(currentPixel == NUMPIXELS){ currentPixel = 0; pixels.setPixelColor(7, pixels. Color(0, 0, 0));
}
}
Stap 3: Extra stap: de stronk 'Arduino Ready' maken
Als u besluit een boomstronk te gebruiken, moet u het volgende doen.
- Koop een boomstronk (ik heb er een gratis gekregen van een oude kerstboom)
- Meet je Arduino en kijk hoe je de bedrading in de boomstronk wilt hebben
- Hol de stronk uit (ik gebruikte een boormachine van school)
- Schuur de ruwe randen eraf
- Voeg leuke kleine details toe
Details die ik heb toegevoegd was een klein logo dat ik heb gemaakt met een lasersnijder. Ik heb ook al mijn elektronica aan de binnenkant op een stok in mijn boom gestapeld en aan de buitenkant heb ik knuffelbeestenvulling toegevoegd om het licht door te laten en die kleine extra zachtheid te geven.