Arduino MusicStump: Light, Captive Touch og en summer: 3 trinn
Arduino MusicStump: Light, Captive Touch og en summer: 3 trinn
Anonim
Arduino MusicStump: Light, Captive Touch og en summer
Arduino MusicStump: Light, Captive Touch og en summer

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

Trinn 1: LED -ring med Captive Touch
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'

Ytterligere trinn: Gjøre stubben 'Arduino Ready'
Ytterligere trinn: Gjøre stubben 'Arduino Ready'
Ytterligere trinn: Gjøre stubben 'Arduino Ready'
Ytterligere trinn: Gjøre stubben 'Arduino Ready'
Ytterligere trinn: Gjøre stubben 'Arduino Ready'
Ytterligere trinn: Gjøre 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.