Arduino MusicStump: Hafif, Tutsak Dokunuş ve Sesli Uyarı: 3 Adım
Arduino MusicStump: Hafif, Tutsak Dokunuş ve Sesli Uyarı: 3 Adım
Anonim
Arduino MusicStump: Hafif, Tutsak Dokunuş ve Bir Buzzer
Arduino MusicStump: Hafif, Tutsak Dokunuş ve Bir Buzzer

Üstte bir LED halkası, ses çıkarmak için bir zil ve içinde dokunduğunuzda rengi değiştiren sabit bir dokunma sensörü bulunan etkileşimli bir ağaç. Bu eğlenceli küçük şeyi yapmak için aşağıdakilere ihtiyacınız olacak:

Elektronik: - 1x Arduino Uno

- 15x kablo

- Yuvarlak uçlu 1x havya

- 1 adet Adafruit 8 tuşlu sabit dokunuş (CAP1188)

- 1x Arduino güç kablosu

- 1x 8 LED halka

- 1x Zil

- 1x sıcak tutkal tabancası

- CAP1188 kütüphanesini indirin

- Adafruit Neopixel kütüphanesini indirin

Ekstra (gövde):

- 1x ağaç kütüğü

- İç kısım için 1x çubuk

- hepsini yerleştirmek için ahşap tabak

- Dışarısı için doldurulmuş hayvan dolgusu

Dışarıda başka bir şey de kullanabilirsiniz, yaratıcı olun!

Şimdi başlayalım…

Adım 1: Adım 1: Tutsak Dokunma ile LED Halka

Adım 1: Tutsak Dokunuşlu LED Halka
Adım 1: Tutsak Dokunuşlu LED Halka

Şimdi, eğer şanslıysanız, LED halkanızda zaten ona bağlı pimler var. Değilse, lehimleme zamanı!

Bu proje için kullanacağımız şeyler:

- DI (Dijital giriş, pin 6~

- 5V (güç için, 5V pin)

- GND (Toprak, GND pimi)

Şimdilik LED halkası bu. Şimdi tutsak dokunuş.

Bir devre tahtasına yerleştirin ve her şeyi aşağıdaki gibi bağlayın: Pin içinde SDA/MISO (analog giriş) Pin içinde A4SCK (analog giriş) A5VIN giriş (güç) 5VGND bir GND pin1x kablosunda C1'de (Captive touch'ın kendisinde)

Şimdi test etmek için aşağıdaki kodu Arduino'nuza yükleyin:

// Julia Emmink// Etkileşimli ağaç için ışık ve dokunma kodu 19/// Adafruit Neopixel ve Adafruit sabit dokunuş (CAP1188) (kurulacak) kullanılarak yapılmıştır ve LED gecikme olmadan yanıp söner

// NEOPİKSEL ~~~~~~~~~~~~~~~~~~

#Dahil etmek

#define PIXELSPIN 6 // LED Halkayı bağladığınız yer

#define NUMPIXELS 8 //Halkanızdaki LED'lerin miktarı #define CALIBRATIONTIME 20000

Adafruit_NeoPixel piksel = Adafruit_NeoPixel(NUMPIXELS, PIXELSPIN, NEO_GRB + NEO_KHZ800);

işaretsiz uzun pikselAralık = 500; // beklememiz gereken süre

imzasız uzun colorWipePreviousMillis = 0; imzasız uzun tiyatroChasePreviousMillis = 0; imzasız uzun gökkuşağıÖncekiMillis = 0; imzasız uzun gökkuşağıDöngülerÖncekiMillis = 0;

int theatreChaseQ = 0;

uint16_t currentPixel = 0;// hangi piksel üzerinde çalışıyoruz

// DOKUNMAK ~~~~~~~~~~~~~~~~~~~~~~

#include #include #include

// I2C veya SPI için Reset Pin kullanılır

#define CAP1188_RESET 9

// CS pini yazılım veya donanım SPI için kullanılır

#define CAP1188_CS 10

// Bunlar yazılım SPI'si için tanımlanmıştır, donanım SPI'si için

// Arduino belgelerinde kartın SPI pinleri #define CAP1188_MOSI 11 #define CAP1188_MISO 12 #define CAP1188_CLK 13

// I2C kullanın, sıfırlama pini yok!

Adafruit_CAP1188 cap = Adafruit_CAP1188();

geçersiz kurulum() {

// NEOPİKSEL ~~~~~~~~~~~~~~~~~ mevcutPixel = 0; piksel.begin(); // Bu, NeoPixel kitaplığını başlatır. piksel.göster(); // Bu, güncellenen piksel rengini donanıma gönderir.

// DOKUNMAK ~~~~~~~~~~~~~~~~~~~~~~

Seri.başla(300); Serial.println("CAP1188 testi!");

if (!cap.begin()) {

Serial.println("CAP1188 bulunamadı"); iken (1); } Serial.println("CAP1188 bulundu!"); }

boşluk döngüsü () {

// DOKUNMATİK + NEOPİKSEL ~~~~~~~~~~~~~~~~~~~~~ uint8_t dokundu = cap.touched(); if (dokunuldu == 0) { if ((unsigned long)(millis() - colorWipePreviousMillis) >= pikselInterval) { colorWipePreviousMillis = millis(); colorWipe(pixels. Color(0, 255, 125)); } } else { if ((unsigned long)(millis() - colorWipePreviousMillis) >= pikselInterval) { colorWipePreviousMillis = millis(); colorWipe(pixels. Color(100, 0, 150)); } }

}

geçersiz colorWipe(uint32_t c) {

// NEOPİKSEL ~~~~~~~~~~~~~~~~~ // Piksel renginden kurtulur.setPixelColor(currentPixel, c); piksel.setPixelColor(currentPixel - 1, piksel. Color(0, 0, 0)); piksel.göster(); geçerliPixel++; if (currentPixel == NUMPIXELS) { currentPixel = 0; piksel.setPixelColor(7, piksel. Renk(0, 0, 0));

}

}

Test edin ve eğlenin! Gördüğünüz gibi C1 kablosuna dokunduğunuzda renk değişiyor. (İlk seferde olmazsa, Arduino'nuzu fişten çekin ve bilgisayarınıza tekrar takın.)

Adım 2: Adım 2: Ses Ekleme

Kullanışlı bir öğretici kullanarak bunu yaptım. Öğretici aşağıdadır:

github.com/xitangg/-Pirates-of-the-Caribbe…

Zilinizi kapma zamanı! Zil sesini (-) GND pinlerinden birine ve (+) pinini 10~ pinine koyun.

Bu kadar, şimdi kodu tekrar çalıştırmanın ve o güzel Karayip Korsanları melodisini duymanın zamanı geldi! Şimdi iyi eğlenceler test edin!

// Julia Emmink// Etkileşimli ağaç için ışık, dokunma ve müzik kodu 2018-01-19// Adafruit Neopixel ve Captive Touch (CAP1188) (kurulacak) kullanılarak yapılmıştır ve LED gecikme olmadan yanıp söner

// NEOPİKSEL ~~~~~~~~~~~~~~~~~#include

#define PIXELSPIN 6

#define NUMPIXELS 8 #define CALIBRATIONTIME 20000

Adafruit_NeoPixel piksel = Adafruit_NeoPixel(NUMPIXELS, PIXELSPIN, NEO_GRB + NEO_KHZ800);

işaretsiz uzun pikselAralık=500; // beklememiz gereken süre

imzasız uzun colorWipePreviousMillis=0; imzasız uzun tiyatroChasePreviousMillis=0; imzasız uzun gökkuşağıÖncekiMillis=0; imzasız uzun gökkuşağıDöngülerÖncekiMillis=0;

int theatreChaseQ = 0;

uint16_t currentPixel = 0;// hangi piksel üzerinde çalışıyoruz

// MÜZİK ~~~~~~~~~~~~~~~~~~~~~~

const int buzzer = 10; //Pin 10'u tanımlayın, diğer PWM pinlerini (5, 6 veya 9) kullanabilir // Not 3 ve 11 pinleri Arduino'da tone fonksiyonu kullanılırken kullanılamaz Uno const int şarkı hızı = 1.5; //Şarkının daha yavaş versiyonu için 2'ye değiştirin, sayı ne kadar büyükse şarkı o kadar yavaş //****************************** ************** #define NOTE_C4 262 //Nota frekansını tanımlama #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 notlar = { //Şarkının notası, 0 bir dinlenme/nabızdır 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 süre = { / /her notanın süresi (ms cinsinden) Çeyrek Nota 250 ms olarak ayarlanmıştır 125, 125, 250, 125, 125, 125, 125, 250, 125, 125, 125, 125, 250, 125, 125, 125, 125, 375, 125};

// DOKUNMAK ~~~~~~~~~~~~~~~~~~~~~~

#include #include #include

// I2C veya SPI için Reset Pin kullanılır

#define CAP1188_RESET 9

// CS pini yazılım veya donanım SPI için kullanılır

#define CAP1188_CS 10

// Bunlar yazılım SPI'si için tanımlanmıştır, donanım SPI'si için

// Arduino belgelerinde kartın SPI pinleri #define CAP1188_MOSI 11 #define CAP1188_MISO 12 #define CAP1188_CLK 13

// I2C kullanın, sıfırlama pini yok!

Adafruit_CAP1188 cap = Adafruit_CAP1188();

geçersiz kurulum() {

// MÜZİK ~~~~~~~~~~~~~~~~~~~~~ for (int i=0;i<203;i++){ //203, içindeki toplam nota sayısıdır şarkı int bekle = süre * şarkı hızı; ton(buzzer, notlar, bekleyin); //ton(pin, frekans, süre);} //Ton çalma bitmeden sonraki döngüye gitmemesi için gecikme kullanılır //Şarkıyı tekrar çalmak için Arduino'da reset'e tıklayabilirsiniz // NEOPIXEL ~~~ ~~~~~~~~~~~~~~~ mevcutPixel = 0; piksel.begin(); // Bu, NeoPixel kitaplığını başlatır. piksel.göster(); // Bu, güncellenen piksel rengini donanıma gönderir.

// DOKUNMAK ~~~~~~~~~~~~~~~~~~~~~~

Seri.başla(300); Serial.println("CAP1188 testi!"); if (!cap.begin()) { Serial.println("CAP1188 bulunamadı"); iken (1); } Serial.println("CAP1188 bulundu!");

}

boşluk döngüsü () {

// DOKUNMATİK + NEOPİKSEL ~~~~~~~~~~~~~~~~~~~~~ uint8_t dokundu = cap.touched(); if (dokunuldu == 0) { if ((unsigned long)(millis() - colorWipePreviousMillis) >= pikselInterval) { colorWipePreviousMillis = millis(); colorWipe(pixels. Color(0, 255, 125)); } } else { if ((unsigned long)(millis() - colorWipePreviousMillis) >= pikselInterval) { colorWipePreviousMillis = millis(); colorWipe(pixels. Color(100, 0, 150)); } }

for (int i=0;i= pikselAralık) {

colorWipePreviousMillis = millis(); colorWipe(pixels. Color(0, 255, 125)); } } else { if ((unsigned long)(millis() - colorWipePreviousMillis) >= pikselInterval) { colorWipePreviousMillis = millis(); colorWipe(pixels. Color(100, 0, 150)); }}

gecikme(bekle);

}

}

geçersiz colorWipe(uint32_t c){

// NEOPİKSEL ~~~~~~~~~~~~~~~~~ // Pixellerden kurtulur.setPixelColor(currentPixel, c); piksel.setPixelColor(currentPixel-1, piksel. Color(0, 0, 0)); piksel.göster(); geçerliPixel++; if(currentPixel == NUMPIXELS){ currentPixel = 0; piksel.setPixelColor(7, piksel. Renk(0, 0, 0));

}

}

Adım 3: Ek Adım: Stump'ı 'Arduino'ya Hazır' hale getirmek

Ek Adım: Stump'ı 'Arduino Hazır' Yapmak
Ek Adım: Stump'ı 'Arduino Hazır' Yapmak
Ek Adım: Stump'ı 'Arduino Hazır' Yapmak
Ek Adım: Stump'ı 'Arduino Hazır' Yapmak
Ek Adım: Stump'ı 'Arduino Hazır' Yapmak
Ek Adım: Stump'ı 'Arduino Hazır' Yapmak

Bir ağaç kütüğü kullanmaya karar verirseniz, aşağıdakileri yapmanız gerekir.

  • Bir ağaç kütüğü alın (eski bir Noel ağacından ücretsiz aldım)
  • Arduino'nuzu ölçün ve kabloların ağaç kütüğünde nasıl olmasını istediğinizi görün
  • Güdük oymak (okuldan bir matkap makinesi kullandım)
  • Pürüzlü kenarları zımparalayın
  • Eğlenceli küçük ayrıntılar ekleyin

Eklediğim detaylar lazer kesici ile yaptığım küçük bir logoydu. Ayrıca tüm elektronik eşyalarımı ağacımın içindeki bir çubuğa yerleştirdim ve ışığın geçmesine izin vermek ve o küçük ekstra yumuşaklığı vermek için dışına doldurulmuş hayvan dolgusu ekledim.