Innholdsfortegnelse:
2025 Forfatter: John Day | [email protected]. Sist endret: 2025-01-13 06:58
Et interaktivt tre med en LED -ring på toppen, en summer for å lage lyd og en fanget berøringssensor inni som endrer fargen mens du berører den. For å lage denne morsomme lille tingen trenger du følgende:
Elektronikk:- 1x Arduino Uno
- 15x kabler
- 1x loddejern med rund spiss
- 1x Adafruit 8-key captive touch (CAP1188)
- 1x Arduino strømkabel
- 1x 8 LED -ring
- 1x summer
- 1x varm limpistol
-Last ned biblioteket til CAP1188
- Last ned biblioteket til Adafruit Neopixel
Ekstra (foringsrør):
- 1x trestubbe
- 1x pinne til innsiden
- trefat for å legge alt på/inn
- Fyllet dyrefyll for utsiden
Du kan også bruke noe annet som utenfor, vær kreativ!
La oss begynne…
Trinn 1: Trinn 1: LED -ring med Captive Touch
Hvis du er heldig, har LED -ringen din allerede festet pins. Hvis ikke er det på tide å lodde!
Tingene vi skal bruke til dette prosjektet er:
- DI (Digital inngang, pin 6 ~
- 5V (for strøm, 5V pin)
- GND (bakken, GND -pinnen)
Det er LED -ringen for nå. Nå den fengslende berøringen.
Plasser den i et brødbrett og koble til alt som følger: SDA/MISO i pin (analog inn) A4SCK i pin (analog inn) A5VIN i (strøm) 5VGND i en GND pin1x kabel ved C1 (på Captive touch selv)
Nå for å teste last opp følgende kode til Arduino:
// Julia Emmink // Lys- og berøringskode for det interaktive treet 19 /// Laget med bruk av Adafruit Neopixel og Adafruit captive touch (CAP1188) (skal installeres) og LED -en blinker uten forsinkelse
// NEOPIXEL ~~~~~~~~~~~~~~~~~~~
#inkludere
#define PIXELSPIN 6 // Hvor du koblet LED -ringen
#define NUMPIXELS 8 // Mengden av lysdioder som er på ringen din #define CALIBRATIONTIME 20000
Adafruit_NeoPixel piksler = Adafruit_NeoPixel (NUMPIXELS, PIXELSPIN, NEO_GRB + NEO_KHZ800);
usignerte lange pikslerInterval = 500; // tiden vi trenger å vente
usignert lang colorWipePreviousMillis = 0; usignert lang theaterChasePreviousMillis = 0; usignert lang regnbuePreviousMillis = 0; usignert lang regnbueCyclesPreviousMillis = 0;
int theaterChaseQ = 0;
uint16_t currentPixel = 0; // hvilken piksel bruker vi
// TOUCH ~~~~~~~~~~~~~~~~~~~~~~~
#include #include #include
// Reset Pin brukes for I2C eller SPI
#define CAP1188_RESET 9
// CS -pin brukes til programvare eller maskinvare SPI
#define CAP1188_CS 10
// Disse er definert for programvare SPI, for maskinvare SPI, sjekk din
// styrets SPI -pinner i Arduino -dokumentasjonen #define CAP1188_MOSI 11 #define CAP1188_MISO 12 #define CAP1188_CLK 13
// Bruk I2C, ingen tilbakestillingsnål!
Adafruit_CAP1188 cap = Adafruit_CAP1188 ();
ugyldig oppsett () {
// NEOPIXEL ~~~~~~~~~~~~~~~~~~ currentPixel = 0; pixels.begin (); // Dette initialiserer NeoPixel -biblioteket. piksler. vis (); // Dette sender den oppdaterte pikselfargen til maskinvaren.
// TOUCH ~~~~~~~~~~~~~~~~~~~~~~~
Serial.begin (300); Serial.println ("CAP1188 test!");
hvis (! cap.begin ()) {
Serial.println ("CAP1188 ikke funnet"); mens (1); } Serial.println ("CAP1188 funnet!"); }
void loop () {
// TOUCH + NEOPIXEL ~~~~~~~~~~~~~~~~~~~~ uint8_t touched = cap.touched (); if (berørt == 0) {if ((unsigned long) (millis () - colorWipePreviousMillis)> = pixelsInterval) {colorWipePreviousMillis = millis (); colorWipe (piksler. Color (0, 255, 125)); }} annet {if ((unsigned long) (millis () - colorWipePreviousMillis)> = pixelsInterval) {colorWipePreviousMillis = millis (); colorWipe (piksler. Color (100, 0, 150)); }}
}
void colorWipe (uint32_t c) {
// NEOPIXEL ~~~~~~~~~~~~~~~~~ // Bli kvitt fargepikslene.setPixelColor (currentPixel, c); pixels.setPixelColor (currentPixel - 1, pixels. Color (0, 0, 0)); piksler. vis (); currentPixel ++; hvis (currentPixel == NUMPIXELS) {currentPixel = 0; pixels.setPixelColor (7, pixels. Color (0, 0, 0));
}
}
Test det og ha det gøy! Som du ser når du berører C1 -ledningen, endres fargen. (Hvis det ikke er første gangen, bare koble fra Arduino og koble den til datamaskinen igjen.)
Trinn 2: Trinn 2: Legge til lyd
Med bruk av en praktisk opplæring laget jeg dette. Opplæringen er nedenfor:
github.com/xitangg/-Pirates-of-the-Caribbe…
På tide å ta tak i summeren din! Sett (-) på summeren i en av GND-pinnene og (+) i pin 10 ~
Det er omtrent det, nå er det på tide å kjøre koden igjen og høre den nydelige Pirates of the Caribbean -melodien! Ha det gøy å teste nå!
// Julia Emmink // Lys, berøring og musikkode for det interaktive treet 2018-01-19 // Laget med bruk av Adafruit Neopixel og Captive Touch (CAP1188) (skal installeres) og LED blinker uten forsinkelse
// NEOPIXEL ~~~~~~~~~~~~~~~~~~~#inkludere
#define PIXELSPIN 6
#define NUMPIXELS 8 #define CALIBRATIONTIME 20000
Adafruit_NeoPixel piksler = Adafruit_NeoPixel (NUMPIXELS, PIXELSPIN, NEO_GRB + NEO_KHZ800);
usignerte lange pikslerInterval = 500; // tiden vi trenger å vente
usignert lang colorWipePreviousMillis = 0; usignert lang theaterChasePreviousMillis = 0; usignert lang regnbuePreviousMillis = 0; usignert lang regnbueCyclesPreviousMillis = 0;
int theaterChaseQ = 0;
uint16_t currentPixel = 0; // hvilken piksel bruker vi
// MUSIKK ~~~~~~~~~~~~~~~~~~~~~~~
const int summer = 10; // Definer pin 10, kan bruke andre PWM -pins (5, 6 eller 9) // Note pins 3 og 11 kan ikke brukes når du bruker tonefunksjonen i Arduino Uno const int songspeed = 1,5; // Endre til 2 for en tregere versjon av sangen, jo større tall jo saktere sangen // *************************** ********* ***** 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 = {// Notat av sangen, 0 er en hvil/puls 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 varighet = { / /varighet for hver note (i ms) Kvartalsnotat er satt til 250 ms 125, 125, 250, 125, 125, 125, 250, 125, 125, 125, 125, 125, 125, 125, 125, 125, 375, 125};
// TOUCH ~~~~~~~~~~~~~~~~~~~~~~~
#include #include #include
// Reset Pin brukes for I2C eller SPI
#define CAP1188_RESET 9
// CS -pin brukes til programvare eller maskinvare SPI
#define CAP1188_CS 10
// Disse er definert for programvare SPI, for maskinvare SPI, sjekk din
// styrets SPI -pinner i Arduino -dokumentasjonen #define CAP1188_MOSI 11 #define CAP1188_MISO 12 #define CAP1188_CLK 13
// Bruk I2C, ingen tilbakestillingsnål!
Adafruit_CAP1188 cap = Adafruit_CAP1188 ();
ugyldig oppsett () {
// MUSIKK ~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i <203; i ++) {// 203 er det totale antallet noter i sangen int wait = varighet * sanghastighet; tone (summer, notater , vent); // tone (pin, frekvens, varighet);} // forsinkelse brukes slik at den ikke går til neste sløyfe før tonen er ferdig med å spille // Du kan klikke reset på Arduino for å spille av sangen // NEOPIXEL ~~~ ~~~~~~~~~~~~~~~ currentPixel = 0; pixels.begin (); // Dette initialiserer NeoPixel -biblioteket. piksler. vis (); // Dette sender den oppdaterte pikselfargen til maskinvaren.
// TOUCH ~~~~~~~~~~~~~~~~~~~~~~~
Serial.begin (300); Serial.println ("CAP1188 test!"); if (! cap.begin ()) {Serial.println ("CAP1188 ikke funnet"); mens (1); } Serial.println ("CAP1188 funnet!");
}
void loop () {
// TOUCH + NEOPIXEL ~~~~~~~~~~~~~~~~~~~~ uint8_t touched = cap.touched (); if (berørt == 0) {if ((unsigned long) (millis () - colorWipePreviousMillis)> = pixelsInterval) {colorWipePreviousMillis = millis (); colorWipe (piksler. Color (0, 255, 125)); }} annet {if ((unsigned long) (millis () - colorWipePreviousMillis)> = pixelsInterval) {colorWipePreviousMillis = millis (); colorWipe (piksler. Color (100, 0, 150)); }}
for (int i = 0; i = pixelsInterval) {
colorWipePreviousMillis = millis (); colorWipe (piksler. Color (0, 255, 125)); }} annet {if ((unsigned long) (millis () - colorWipePreviousMillis)> = pixelsInterval) {colorWipePreviousMillis = millis (); colorWipe (piksler. Color (100, 0, 150)); }}
forsinkelse (vent);
}
}
void colorWipe (uint32_t c) {
// NEOPIXEL ~~~~~~~~~~~~~~~~~ // Bli kvitt fargepikslene.setPixelColor (currentPixel, c); pixels.setPixelColor (currentPixel-1, pixels. Color (0, 0, 0)); piksler. vis (); currentPixel ++; hvis (currentPixel == NUMPIXELS) {currentPixel = 0; pixels.setPixelColor (7, pixels. Color (0, 0, 0));
}
}
Trinn 3: Ytterligere trinn: Gjør stubben 'Arduino Ready'
Hvis du bestemmer deg for å bruke en trestubbe, må du gjøre følgende.
- Få en trestubbe (jeg har en gratis fra et gammelt juletre)
- Mål Arduinoen din og se hvordan du vil ha ledningene i trestubben
- Hul ut stubben (jeg brukte en boremaskin fra skolen)
- Slip av de grove kantene
- Legg til morsomme små detaljer
Detaljer jeg la til var en liten logo som jeg laget med en laserskjærer. Jeg stablet også all elektronikken min inne på en pinne inne i treet mitt, og jeg la til utstoppet dyrefyll på utsiden for å slippe lyset gjennom og gi den lille ekstra mykheten.