„Arduino MusicStump“: lengvas, patrauklus prisilietimas ir garsinis signalas: 3 žingsniai
„Arduino MusicStump“: lengvas, patrauklus prisilietimas ir garsinis signalas: 3 žingsniai
Anonim
„Arduino MusicStump“: lengvas, patrauklus prisilietimas ir garsinis signalas
„Arduino MusicStump“: lengvas, patrauklus prisilietimas ir garsinis signalas

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“

1 žingsnis: šviesos diodų žiedas su jutikliniu prisilietimu
1 žingsnis: šviesos diodų žiedas su jutikliniu prisilietimu

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ą“

Papildomas žingsnis: padarykite kelmą „Arduino paruoštą“
Papildomas žingsnis: padarykite kelmą „Arduino paruoštą“
Papildomas žingsnis: padarykite kelmą „Arduino paruoštą“
Papildomas žingsnis: padarykite kelmą „Arduino paruoštą“
Papildomas žingsnis: padarykite kelmą „Arduino paruoštą“
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.