Mündəricat:

Arduino MusicStump: İşıq, Captive Touch və Buzzer: 3 addım
Arduino MusicStump: İşıq, Captive Touch və Buzzer: 3 addım

Video: Arduino MusicStump: İşıq, Captive Touch və Buzzer: 3 addım

Video: Arduino MusicStump: İşıq, Captive Touch və Buzzer: 3 addım
Video: ESP32 Tutorial 2 - What's ESP32, Camera Extension Board, unboxing SunFounder's ESP32 IoT Learnig kit 2024, Noyabr
Anonim
Arduino MusicStump: İşıq, Captive Touch və Buzzer
Arduino MusicStump: İşıq, Captive Touch və Buzzer

Yuxarıda LED halqası olan, interaktiv bir ağac, səs çıxarmaq üçün bir səs siqnalı və toxunduqda rəngi dəyişdirən içəridə bir toxunma sensoru. Bu əyləncəli kiçik şeyi etmək üçün aşağıdakılara ehtiyacınız olacaq:

Elektronika: 1x Arduino Uno

- 15x kabel

- Dairəvi uclu 1x lehimləmə dəmiri

- 1 x Adafruit 8 düyməli əsir toxunuşu (CAP1188)

- 1 ədəd Arduino elektrik kabeli

- 1x8 LED üzük

- 1x Buzzer

- 1 ədəd isti yapışqan tabancası

-CAP1188 kitabxanasını yükləyin

- Adafruit Neopixel kitabxanasını yükləyin

Əlavə (korpus):

- 1 ədəd ağac kötüyü

- İçəridə 1x çubuq

- hamısını yerləşdirmək üçün taxta plitə

- Xaricdən doldurulmuş heyvan içliyi

Kənarda başqa bir şey də istifadə edə bilərsiniz, yaradıcı olun!

İndi başlayaq…

Addım 1: Adım 1: Captive Touch ilə LED Üzük

Addım 1: Captive Touch ilə LED Üzük
Addım 1: Captive Touch ilə LED Üzük

İndi şanslısınızsa, LED üzüyünüzə artıq sancaqlar bağlanmışdır. Əks təqdirdə, lehimləmə vaxtıdır!

Bu layihə üçün istifadə edəcəyimiz şeylər bunlardır:

- DI (Rəqəmsal giriş, pin 6 ~

- 5V (güc üçün, 5V pin)

- GND (Torpaq, GND pin)

Hal -hazırda LED üzüyü budur.

Çörək taxtasına qoyun və hər şeyi aşağıdakı kimi bağlayın: SDA/MISO pində (analogda) A4SCK -da (analogda) A5VIN -də (gücdə) 5VGND -də C1 -də GND pin1x kabelində (Captive touch -ın özündə)

İndi test etmək üçün aşağıdakı kodu Arduino -ya yükləyin:

// Julia Emmink // İnteraktiv ağac üçün işıq və toxunma kodu 19 /// Adafruit Neopixel və Adafruit əsir toxunuşu (CAP1188) (quraşdırılacaq) və LED gecikmədən yanıb -sönür.

// NEOPIXEL ~~~~~~~~~~~~~~~~~

#daxil edin

#dexin PIXELSPIN 6 // LED Üzüyünü bağladığınız yer

#define NUMPIXELS 8 // Üzüklərinizdə olan LEDlərin sayı #define CALIBRATIONTIME 20000

Adafruit_NeoPixel pikselləri = Adafruit_NeoPixel (NUMPIXELS, PIXELSPIN, NEO_GRB + NEO_KHZ800);

işarəsiz uzun piksellərarası = 500; // gözləməli olduğumuz vaxt

işarəsiz uzun colorWipePreviousMillis = 0; imzasız uzun teatrChasePreviousMillis = 0; işarəsiz uzun göy qurşağıPreviousMillis = 0; işarəsiz uzun göy qurşağıCyclesPreviousMillis = 0;

int teatrChaseQ = 0;

uint16_t currentPixel = 0; // hansı piksel üzərində işləyirik

// TOUCH ~~~~~~~~~~~~~~~~~~~~~~

#daxil edin #daxil edin #daxil edin

// Sıfırlama Pin I2C və ya SPI üçün istifadə olunur

#define CAP1188_RESET 9

// CS pin proqram və ya hardware SPI üçün istifadə olunur

#CAP1188_CS 10 təyin edin

// Bunlar proqram SPI üçün, hardware SPI üçün yoxlanılır

// Arduino sənədlərində boardun SPI pinləri #define CAP1188_MOSI 11 #define CAP1188_MISO 12 #define CAP1188_CLK 13

// I2C istifadə edin, sıfırlama pimi yoxdur!

Adafruit_CAP1188 cap = Adafruit_CAP1188 ();

boş quraşdırma () {

// NEOPIXEL ~~~~~~~~~~~~~~~~~~ cariPixel = 0; piksel.begin (); // Bu NeoPixel kitabxanasını işə salır. piksel.show (); // Bu, yenilənmiş piksel rəngini aparata göndərir.

// TOUCH ~~~~~~~~~~~~~~~~~~~~~~

Serial.begin (300); Serial.println ("CAP1188 testi!");

if (! cap.begin ()) {

Serial.println ("CAP1188 tapılmadı"); isə (1); } Serial.println ("CAP1188 tapıldı!"); }

boşluq döngəsi () {

// TOUCH + NEOPIXEL ~~~~~~~~~~~~~~~~~~~~~~~ uint8_t toxundu = cap.touched (); if (toxunulmuş == 0) {if ((işarəsiz uzun) (milis () - colorWipePreviousMillis)> = piksellərarası) {colorWipePreviousMillis = millis (); colorWipe (piksel. Color (0, 255, 125)); }} başqa {əgər ((işarəsiz uzun) (millis () - colorWipePreviousMillis)> = piksellərarası) {colorWipePreviousMillis = millis (); colorWipe (piksel. Color (100, 0, 150)); }}

}

void colorWipe (uint32_t c) {

// NEOPIXEL ~~~~~~~~~~~~~~~~~ // Rəng piksellərindən xilas olur.setPixelColor (currentPixel, c); piksel.setPixelColor (currentPixel - 1, piksel. Color (0, 0, 0)); piksel.show (); currentPixel ++; əgər (currentPixel == NUMPIXELS) {currentPixel = 0; piksel.setPixelColor (7, piksel. Color (0, 0, 0));

}

}

Test edin və əylənin! Gördüyünüz kimi C1 kabelinə toxunduqda rəng dəyişir. (İlk dəfə deyilsə, Arduino -nu ayırın və yenidən kompüterinizə qoşun.)

Addım 2: Adım 2: Səs əlavə edin

Lazımlı bir dərsdən istifadə edərək bunu etdim. Dərslik aşağıda verilmişdir:

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

Səs siqnalınızı tutmağın vaxtı gəldi! Səs siqnalının (-) işarəsini GND pinlərindən birinə (+) isə pin 10-a daxil edin

Budur, indi kodu yenidən işlətməyin və o sevimli Pirates of the Caribbean melodiyasını eşitməyin vaxtıdır! İndi əyləncəli sınaq keçirin!

// Julia Emmink // İnteraktiv ağac üçün işıq, toxunma və musiqi kodu 2018-01-19 // Adafruit Neopixel və Captive Touch (CAP1188) (quraşdırılacaq) və LED gecikmədən yanıb -sönür.

// NEOPIXEL ~~~~~~~~~~~~~~~~~#daxildir

#PIXELSPIN 6 təyin edin

#define NUMPIXELS 8 #define CALIBRATIONTIME 20000

Adafruit_NeoPixel pikselləri = Adafruit_NeoPixel (NUMPIXELS, PIXELSPIN, NEO_GRB + NEO_KHZ800);

işarəsiz uzun piksellərarası = 500; // gözləməli olduğumuz vaxt

işarəsiz uzun colorWipePreviousMillis = 0; imzasız uzun teatrChasePreviousMillis = 0; işarəsiz uzun göy qurşağıPreviousMillis = 0; işarəsiz uzun göy qurşağıCyclesPreviousMillis = 0;

int teatrChaseQ = 0;

uint16_t currentPixel = 0; // hansı piksel üzərində işləyirik

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

const int buzzer = 10; // Pin 10 -u təyin edin, digər PWM pinlərindən istifadə edə bilərsiniz (5, 6 və ya 9) // Arduino Uno const int songspeed = 1.5 -də ton funksiyasından istifadə edərkən qeyd pinləri 3 və 11 istifadə edilə bilməz; // Mahnının daha yavaş versiyası üçün 2 -yə dəyişin, sayı nə qədər çox olarsa, mahnı da o qədər yavaş olar // *************************** ************** #define NOTE_C4 262 // Qeyd tezliyinin təyin edilməsi #deffine NOTE_D4 294 #define NOTE_E4 330 #deineDEHTE_F4 349 #deffine NOTE_G4 392 #define NOTE_A4 440 #deffine NOTE_B4 494 #deffine NOTE_C5 523 #define NOTE_D5 587 #define NOTE_E5 659 #deffine NOTE_F5 698 #deffine NOTE_G5 784 #deffine NOTE_A5 880 #deffine NOTE_B5 988 // *********************** ****************** int notları = {// Mahnının notu, 0 istirahət/nəbzdir 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 müddəti = { / /hər notun müddəti (ms olaraq) Çeyrek Qeyd 250 ms 125, 125, 250, 125, 125, 125, 125, 250, 125, 125, 125, 125, 125, 250, 125, 125, 125, 125, 375, 125};

// TOUCH ~~~~~~~~~~~~~~~~~~~~~~

#daxil edin #daxil edin #daxil edin

// Sıfırlama Pin I2C və ya SPI üçün istifadə olunur

#define CAP1188_RESET 9

// CS pin proqram və ya hardware SPI üçün istifadə olunur

#CAP1188_CS 10 təyin edin

// Bunlar proqram SPI üçün, hardware SPI üçün yoxlanılır

// Arduino sənədlərində boardun SPI pinləri #define CAP1188_MOSI 11 #define CAP1188_MISO 12 #define CAP1188_CLK 13

// I2C istifadə edin, sıfırlama pimi yoxdur!

Adafruit_CAP1188 cap = Adafruit_CAP1188 ();

boş quraşdırma () {

// MUSIC ~~~~~~~~~~~~~~~~~~~~~~~ for (int i = 0; i <203; i ++) {// 203, musiqi notlarının ümumi sayıdır mahnı int gözləyin = müddəti * mahnı sürəti; ton (buzzer, notlar , gözləyin); // ton (pin, tezlik, müddət);} // gecikmə istifadə olunur, belə ki ton çalınanadək növbəti döngəyə keçmir // Mahnını yenidən oxumaq üçün Arduinoda sıfırlama düyməsini basa bilərsiniz // NEOPIXEL ~~~ ~~~~~~~~~~~~~~~~ currentPixel = 0; piksel.begin (); // Bu NeoPixel kitabxanasını işə salır. piksel.show (); // Bu, yenilənmiş piksel rəngini aparata göndərir.

// TOUCH ~~~~~~~~~~~~~~~~~~~~~~

Serial.begin (300); Serial.println ("CAP1188 testi!"); if (! cap.begin ()) {Serial.println ("CAP1188 tapılmadı"); isə (1); } Serial.println ("CAP1188 tapıldı!");

}

boşluq döngəsi () {

// TOUCH + NEOPIXEL ~~~~~~~~~~~~~~~~~~~~~~~ uint8_t toxundu = cap.touched (); if (toxunulmuş == 0) {if ((işarəsiz uzun) (milis () - colorWipePreviousMillis)> = piksellərarası) {colorWipePreviousMillis = millis (); colorWipe (piksel. Color (0, 255, 125)); }} başqa {if ((imzasız uzun) (millis () - colorWipePreviousMillis)> = piksellərarası) {colorWipePreviousMillis = millis (); colorWipe (piksel. Color (100, 0, 150)); }}

üçün (int i = 0; i = piksellərarası) {

colorWipePreviousMillis = millis (); colorWipe (piksel. Color (0, 255, 125)); }} başqa {if ((imzasız uzun) (millis () - colorWipePreviousMillis)> = piksellərarası) {colorWipePreviousMillis = millis (); colorWipe (piksel. Color (100, 0, 150)); }}

gecikmə (gözləmək);

}

}

void colorWipe (uint32_t c) {

// NEOPIXEL ~~~~~~~~~~~~~~~~~ // Rəng piksellərindən xilas olur.setPixelColor (currentPixel, c); piksel.setPixelColor (currentPixel-1, piksel. Color (0, 0, 0)); piksel.show (); currentPixel ++; əgər (currentPixel == NUMPIXELS) {currentPixel = 0; piksel.setPixelColor (7, piksel. Color (0, 0, 0));

}

}

Addım 3: Əlavə Addım: Kökü 'Arduino Hazır' etmək

Əlavə addım: "Arduino hazır" kötük hazırlamaq
Əlavə addım: "Arduino hazır" kötük hazırlamaq
Əlavə addım: "Arduino hazır" kötük hazırlamaq
Əlavə addım: "Arduino hazır" kötük hazırlamaq
Əlavə addım: "Arduino hazır" kötük hazırlamaq
Əlavə addım: "Arduino hazır" kötük hazırlamaq

Bir ağac kötükdən istifadə etmək qərarına gəlsəniz, aşağıdakıları etməlisiniz.

  • Bir ağac kötüyü alın (köhnə bir Milad ağacından pulsuz aldım)
  • Arduino -nuzu ölçün və ağac kötüyündə naqillərin necə olmasını istədiyinizi görün
  • Kötüyü aç (məktəbdən bir qazma maşını istifadə etdim)
  • Kobud kənarları zımpara edin
  • Əyləncəli kiçik detallar əlavə edin

Əlavə etdiyim detallar lazer kəsici ilə hazırladığım kiçik bir logo idi. Ağacımın içərisindəki bir çubuğa bütün elektronik əşyalar yığdım və işığın keçməsi və bu kiçik əlavə yumşaqlığı təmin etmək üçün xaricinə doldurulmuş heyvan dolması əlavə etdim.

Tövsiyə: