Turinys:
2025 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2025-01-13 06:57
Interaktyvus medis, kurio viršuje yra LED žiedas, garsinis signalas ir viduje esantis jutiklinis jutiklis, kuris keičia spalvą, kai ją liečiate. Norėdami padaryti šią linksmą smulkmeną, jums reikės:
Elektronika:- 1x „Arduino Uno“
- 15x kabeliai
- 1x lituoklis su apvaliu galu
- 1 kartas „Adafruit“8 klavišų paspaudimas (CAP1188)
- 1x „Arduino“maitinimo kabelis
- 1x 8 LED žiedas
- 1x garsinis signalas
- 1x karšto klijų pistoletas
-Atsisiųskite CAP1188 biblioteką
- Atsisiųskite „Adafruit Neopixel“biblioteką
Papildoma (korpusas):
- 1x medžio kelmas
- 1x lazda vidui
- medinė lėkštė, skirta viskam įdėti/įkišti
- Įdaryti gyvūnų iškamšos išorei
Taip pat galite naudoti ką nors kita, kaip lauke, būkite kūrybingi!
Dabar pradėkime…
1 veiksmas: 1 veiksmas: LED žiedas su „Captive Touch“
Dabar, jei jums pasisekė, jūsų LED žiedas jau turi kaiščius. Jei ne, laikas lituoti!
Šiam projektui naudosime šiuos dalykus:
- DI (skaitmeninė įvestis, 6 ~ kištukas
- 5V (galiai, 5V kaištis)
- GND (žemė, GND kaištis)
Tai kol kas LED žiedas. Dabar prisilietimas.
Įdėkite jį į duonos lentą ir prijunkite viską taip: SDA/MISO kištuke (analoginis įvestis) A4SCK kištuke (analoginis įvestis) A5VIN kištukas (maitinimas) 5VGND GND kaištyje
Dabar, norėdami išbandyti, į „Arduino“įkelkite šį kodą:
// Julia Emmink // Interaktyvaus medžio šviesos ir prisilietimo kodas
// NEOPIXEL ~~~~~~~~~~~~~~~~~~
#įtraukti
#define PIXELSPIN 6 // Kur prijungėte LED žiedą
#define NUMPIXELS 8 // Jūsų žiede esančių šviesos diodų kiekis #define CALIBRATIONTIME 20000
Adafruit_NeoPixel pikseliai = Adafruit_NeoPixel (NUMPIXELS, PIXELSPIN, NEO_GRB + NEO_KHZ800);
nepasirašyti ilgi pikseliaiIntervalas = 500; // laikas, kurio reikia laukti
nepasirašyta ilga spalvaWipePreviousMillis = 0; nepasirašytas ilgas teatrasChasePreviousMillis = 0; nepasirašyta ilga vaivorykštėPreviousMillis = 0; nepasirašyta ilga vaivorykštėCyclesPreviousMillis = 0;
int TheaterChaseQ = 0;
uint16_t currentPixel = 0; // kokiu pikseliu mes veikiame
// LIESTI ~~~~~~~~~~~~~~~~~~~~~~~
#įtraukti #įtraukti #įtraukti
// „Reset Pin“naudojamas I2C arba SPI
#define CAP1188_RESET 9
// CS pin naudojamas programinei ar aparatinei SPI
#define CAP1188_CS 10
// Tai apibrėžta programinės įrangos SPI, aparatinės įrangos SPI, patikrinkite savo
// plokštės SPI kaiščiai „Arduino“dokumentuose #define CAP1188_MOSI 11 #define CAP1188_MISO 12 #define CAP1188_CLK 13
// Naudokite I2C, be atstatymo kaiščio!
Adafruit_CAP1188 dangtelis = Adafruit_CAP1188 ();
void setup () {
// NEOPIXEL ~~~~~~~~~~~~~~~~~~ dabartinisPikselis = 0; pixels.begin (); // Tai inicijuoja „NeoPixel“biblioteką. pixels.show (); // Tai siunčia atnaujintą pikselių spalvą aparatinei įrangai.
// LIESTI ~~~~~~~~~~~~~~~~~~~~~~~
Serial.begin (300); Serial.println ("CAP1188 testas!");
if (! cap.begin ()) {
Serial.println ("CAP1188 nerasta"); tuo tarpu (1); } Serial.println ("CAP1188 rasta!"); }
void loop () {
// TOUCH + NEOPIXEL ~~~~~~~~~~~~~~~~~~~~~~ uint8_t touch = cap.touched (); if (touched == 0) {if ((unsigned long) (millis () - colorWipePreviousMillis)> = pixelsInterval) {colorWipePreviousMillis = milis (); colorWipe (pikseliai. Spalva (0, 255, 125)); }} else {if ((unsigned long) (millis () - colorWipePreviousMillis)> = pixelsInterval) {colorWipePreviousMillis = millis (); colorWipe (pikseliai. Spalva (100, 0, 150)); }}
}
void colorWipe (uint32_t c) {
// NEOPIXEL ~~~~~~~~~~~~~~~~~~ // Atsikrato spalvotų pikselių.setPixelColor (currentPixel, c); pixels.setPixelColor (currentPixel - 1, pixels. Color (0, 0, 0)); pixels.show (); currentPixel ++; if (currentPixel == NUMPIXELS) {currentPixel = 0; pixels.setPixelColor (7, pixels. Color (0, 0, 0));
}
}
Išbandykite ir linksminkitės! Kaip matote, kai paliečiate C1 laidą, spalva pasikeičia. (Jei ne pirmą kartą, tiesiog atjunkite „Arduino“ir vėl prijunkite prie kompiuterio.)
2 veiksmas: 2 veiksmas: pridėkite garsą
Naudodamasi patogia pamoka, aš tai padariau. Pamoka yra tokia:
github.com/xitangg/-Pirates-of-the-Caribbe…
Laikas pasiimti garsinį signalą! Įdėkite garsinį signalą (-) į vieną iš GND kaiščių, o (+)-į kaištį 10 ~
Maždaug tiek, dabar laikas vėl paleisti kodą ir išgirsti nuostabią Karibų piratų melodiją! Dabar smagiai išbandykite!
// Julia Emmink // Šviesos, prisilietimo ir muzikos kodas interaktyviam medžiui 19.01.2018 // Pagamintas naudojant „Adafruit Neopixel“ir „Captive Touch“(CAP1188) (turi būti įdiegtas) ir šviesos diodas mirksi nedelsiant
// NEOPIXEL ~~~~~~~~~~~~~~~~~
#define PIXELSPIN 6
#define NUMPIXELS 8 #define CALIBRATIONTIME 20000
Adafruit_NeoPixel pikseliai = Adafruit_NeoPixel (NUMPIXELS, PIXELSPIN, NEO_GRB + NEO_KHZ800);
nepasirašyti ilgi pikseliaiIntervalas = 500; // laikas, kurio reikia laukti
nepasirašyta ilga spalvaWipePreviousMillis = 0; nepasirašytas ilgas teatrasChasePreviousMillis = 0; nepasirašyta ilga vaivorykštėPreviousMillis = 0; nepasirašyta ilga vaivorykštėCyclesPreviousMillis = 0;
int TheaterChaseQ = 0;
uint16_t currentPixel = 0; // kokiu pikseliu mes veikiame
// MUZIKA ~~~~~~~~~~~~~~~~~~~~~~~
const int garsinis signalas = 10; // Apibrėžkite 10 kaištį, galite naudoti kitus PWM kaiščius (5, 6 arba 9) // Pastaba 3 ir 11 kaiščių negalima naudoti, kai naudojate tono funkciją „Arduino Uno“konst int dainų greitis = 1,5; // Pakeiskite 2 į lėtesnę dainos versiją, kuo didesnis skaičius, tuo lėčiau daina // *************************** ************** #define NOTE_C4 262 // Užrašų dažnio apibrėžimas #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 #apibrėžti NOTE_D5 587 #apibrėžti NOTE_E5 659 #apibrėžti NOTE_F5 698 #apibrėžti NOTE_G5 784 #apibrėžti NOTE_A5 880 #apibrėžti NOTE_B5 988 // *********************** ****************** int notes = {// Dainos pastaba, 0 yra poilsio/impulsas 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}; // **************************************** trukmė = { / /kiekvienos natos trukmė (ms) Ketvirčio pastaba nustatyta kaip 250 ms 125, 125, 250, 125, 125, 125, 125, 125, 250, 125, 125, 125, 125, 250, 125, 125, 125, 125, 375, 125};
// LIESTI ~~~~~~~~~~~~~~~~~~~~~~~
#įtraukti #įtraukti #įtraukti
// „Reset Pin“naudojamas I2C arba SPI
#define CAP1188_RESET 9
// CS pin naudojamas programinei ar aparatinei SPI
#define CAP1188_CS 10
// Tai apibrėžta programinės įrangos SPI, aparatinės įrangos SPI, patikrinkite savo
// plokštės SPI kaiščiai „Arduino“dokumentuose #define CAP1188_MOSI 11 #define CAP1188_MISO 12 #define CAP1188_CLK 13
// Naudokite I2C, be atstatymo kaiščio!
Adafruit_CAP1188 dangtelis = Adafruit_CAP1188 ();
void setup () {
// MUZIKA ~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i <203; i ++) {// 203 yra bendras muzikos natų skaičius daina int wait = trukmė * songpeed; tonas (garsinis signalas, užrašai , palaukite); // tonas (smeigtukas, dažnis, trukmė);} // uždelsimas naudojamas, kad jis neitų į kitą ciklą, kol tonas nebus paleistas // Jei norite pakartoti dainą, galite spustelėti „Arduino“nustatymą iš naujo // NEOPIXEL ~~~ ~~~~~~~~~~~~~~~~ dabartinisPikselis = 0; pixels.begin (); // Tai inicijuoja „NeoPixel“biblioteką. pixels.show (); // Tai siunčia atnaujintą pikselių spalvą aparatinei įrangai.
// LIESTI ~~~~~~~~~~~~~~~~~~~~~~~
Serial.begin (300); Serial.println ("CAP1188 testas!"); if (! cap.begin ()) {Serial.println ("CAP1188 nerasta"); tuo tarpu (1); } Serial.println ("CAP1188 rasta!");
}
void loop () {
// TOUCH + NEOPIXEL ~~~~~~~~~~~~~~~~~~~~~~ uint8_t touch = cap.touched (); if (touched == 0) {if ((unsigned long) (millis () - colorWipePreviousMillis)> = pixelsInterval) {colorWipePreviousMillis = milis (); colorWipe (pikseliai. Spalva (0, 255, 125)); }} else {if ((unsigned long) (millis () - colorWipePreviousMillis)> = pixelsInterval) {colorWipePreviousMillis = millis (); colorWipe (pikseliai. Spalva (100, 0, 150)); }}
for (int i = 0; i = pixelsInterval) {
colorWipePreviousMillis = milis (); colorWipe (pikseliai. Spalva (0, 255, 125)); }} else {if ((unsigned long) (millis () - colorWipePreviousMillis)> = pixelsInterval) {colorWipePreviousMillis = millis (); colorWipe (pikseliai. Spalva (100, 0, 150)); }}
atidėti (laukti);
}
}
void colorWipe (uint32_t c) {
// NEOPIXEL ~~~~~~~~~~~~~~~~~~ // Atsikrato spalvotų pikselių.setPixelColor (currentPixel, c); pixels.setPixelColor (currentPixel-1, pixels. Color (0, 0, 0)); pixels.show (); currentPixel ++; if (currentPixel == NUMPIXELS) {currentPixel = 0; pixels.setPixelColor (7, pixels. Color (0, 0, 0));
}
}
3 žingsnis: papildomas žingsnis: padarykite kelmą „Arduino paruoštą“
Jei nuspręsite naudoti medžio kelmą, atlikite šiuos veiksmus.
- Gaukite medžio kelmą (aš jį nemokamai gavau iš senos Kalėdų eglutės)
- Išmatuokite „Arduino“ir pažiūrėkite, kaip norite, kad laidai būtų medžio kelme
- Ištuštinkite kelmą (aš naudoju grąžtą iš mokyklos)
- Nubraukite šiurkščius kraštus
- Pridėkite įdomių smulkių detalių
Išsami informacija, kurią pridėjau, buvo mažas logotipas, kurį padariau lazeriniu pjaustytuvu. Aš taip pat sukravau visą savo elektroniką viduje ant medžio pagaliuko, o išorėje įdėjau iškamšų, kad šviesa praeitų ir suteiktų papildomo švelnumo.