Mündəricat:

Arduino Puzzle Box: 7 addım
Arduino Puzzle Box: 7 addım

Video: Arduino Puzzle Box: 7 addım

Video: Arduino Puzzle Box: 7 addım
Video: Puzzle Box [Arduino] 2024, Noyabr
Anonim
Arduino Bulmacalar Qutusu
Arduino Bulmacalar Qutusu

Bu layihə üçün musiqi ilə işləyən bir tapmaca qutusu hazırlayacağıq. Bunun əsas mahiyyəti ondan ibarətdir ki, bir düyməni basdığınız zaman bir melodiyanı buraxır və Arduino hansı düymələrin basıldığını hesablayır ki, nəyin doğru, nəyin yanlış olduğunu bilsin.

Təchizat

1 x Arduino uno

1 x 1k Ohm müqavimət

5 x 220 Ohm rezistorlar

1 xPiezo Buzzer

5 x 6x6 mm düymə

1 x Jumper telləri

1 x mükəmməl/şerit lövhə

1 x lehim dəsti

1 x menteşe

1 x sıxac

1 x kiçik sandıq/ağac

1x isti yapışqan silahı + yapışqan çubuqlar

1 x 9v batareya + tutacaq

bir az worbla

çəkmək

Addım 1:

Şəkil
Şəkil

Başlamaq üçün çörək taxtanızdakı sancaqları basmalısınız. İndi analoq 2 -ni lövhənin küncünə bir tel ilə bağlayın. İki rezistoru bir xəttə bağlayacağıq. Birincisi 10k Ohm rezistordur. Bu rezistorun digər ucuna telləri analoq yerə bağlayırıq. İkinci müqavimət, ilk düyməyə bağladığımız 220 Ohm rezistordur. Düymənin ikinci açıq tərəfini ikinci düyməyə bağlamaq üçün eyni dəyərdə olan başqa bir rezistor istifadə edin. Düymələri sonuna qədər bu şəkildə bağlamağa davam edin. Sonda bir tel götürüb düymənin müvafiq qapalı tərəfinə bağlayın və bir sonrakı xəttə bağlayın. İndi yalnız bildiyiniz rezistorlar ilə etdiyiniz prosesi təkrarlayırsınız. İlk düyməni Arduino -dakı analog 3, 3V portuna qoşun. Ümumiyyətlə, aşağıda təsvir edildiyi kimi bir növ çarpaz ata əldə edəcəksiniz.

Addım 2:

Sonra səs siqnalını çörək taxtasına qoşun və bir tərəfini rəqəmsal yerə, digər tərəfini isə 12 porta bağlayın. Aşağıdakı kodu artıq Arduino -ya yükləmək ağıllıdır, buna görə hər şeyin düzgün işlədiyini yoxlaya bilərsiniz. Əgər belədirsə, komponentləri birlikdə lehimləməyə başlaya bilərsiniz. Bunları çörək taxtasından çıxararaq telləri və əlaqələri bir -birinə birbaşa lehimləməklə edin. Düymələr arasında daha çox uzunluğa ehtiyacınız olduğunu düşünürsünüzsə, rezistorların arasına əlavə tel əlavə edə bilərsiniz. Bu anda çörək taxtasına ehtiyac yoxdur.

Addım 3:

Şəkil
Şəkil

Hər şey lehimləndikdən sonra qutunun özünü düzəltməyin vaxtıdır. Özüm üçün ucuz bir çekmece dəsti istifadə etdim. Sadəcə uzunluğunun yarısını kəsdim və kəsdiyim arxa və yan hissəni çıxardım. İndi c şəkilli iki ədəd olmalıdır. Qapaq kimi istifadə etmək üçün onlardan birinin bir tərəfini kəsin. İndi qalan hissələrdən birini qapaqsız bir qutu kimi bir -birinə yapışması üçün döndərin və yapışdırın. Yapışqan düzgün bir şəkildə qurulduqda, qutunun hər tərəfində düymələr üçün kiçik bir çuxur qazın və qapağındakı səs siqnalı üçün daha böyük.

Addım 4:

Şəkil
Şəkil
Şəkil
Şəkil

İndi qutunu rəngləməyə başlaya bilərsiniz. BOTW -ə əsaslanan bir çiçək dizaynı ilə mənimki etdim, amma həqiqətən istədiyiniz dizaynı seçə bilərsiniz. Bunu etdikdən sonra düymələri çuxurların içinə qoyub düymənin arxasına və ətrafdakı taxta bir kürək yapışqan qoya bilərsiniz. Eyni prinsip səs siqnalı üçün də keçərlidir, amma mənimki lazımsız hala gətirən çuxura mükəmməl uyğun gəlir. Sonra kiçik bir düymələr etmək üçün bir az worbla götürün və qızdırın və kəsin. Diqqətlə düymələrə yapışdırın, amma çox yapışqan istifadə etməməyinizə əmin olun, çünki təsadüfən düymələri yapışdıra bilərsiniz. İndi daha çox qutuya qarışması üçün onları boyaya bilərsiniz.

Addım 5:

Nəhayət, ikisini birləşdirən qutunun və qapağın üzərindəki sıxac və menteşələri yapışdırırsınız və ya vidalayırsınız.

Addım 6:

Qutunuz tamamlandıqdan sonra Arduino və batareyanı içəri qoyub qapağı bağlamaq kifayətdir.

Addım 7: Kod

// Bu Zelda temalı tapmacanın/musiqi qutusunun kodudur.

// bu, kodunuzu digər nişandakı qeydlər siyahısına bağlayır

#"meydançalar.h" daxil edin

// bu dəyişən, Arduinonun düyməni daha uzun basmasını yalnız bir basış kimi görməsini təmin edəcək

int eyni = 0;

// buradan girişinizi oxuyacaq

int k = 2;

// bu çıxış pininizdir

int dinamik = 12;

// aşağıda melodiyalar var

int Zelda = {NOTE_B4, NOTE_D5, NOTE_A4, NOTE_G4, NOTE_A4, NOTE_B4, NOTE_D5, NOTE_A4, NOTE_G4, NOTE_A4, NOTE_B4, NOTE_D5, NOTE_A5, NOTE_G5, NOTE_D5, NOTE_C5, NOTE_B5, NOTE_A5;

int ZeldaTime = {2, 4, 2, 4, 4, 2, 2, 2, 4, 4, 2, 4, 2, 2, 2, 4, 4, 2};

int Epona = {NOTE_D5, NOTE_B4, NOTE_A4, NOTE_D5, NOTE_B4, NOTE_A4, NOTE_D5, NOTE_B4, NOTE_A4, NOTE_B4, NOTE_A4};

int EponaTime = {4, 4, 1.5, 4, 4, 1.5, 4, 4, 2, 2, 1};

int Saria = {NOTE_F4, NOTE_A4, NOTE_B4, NOTE_F4, NOTE_A4, NOTE_B4, NOTE_F4, NOTE_A4, NOTE_B4, NOTE_E5, NOTE_D5, NOTE_B4, NOTE_C5, NOTE_B4, NOTE_G4, NOTE_E4, NOTE_D4, NOTE_D4, NOTE_E4;

int SariaTime = {8, 8, 4, 8, 8, 4, 8, 8, 8, 8, 4, 8, 8, 8, 8, 3, 8, 8, 8, 2, 1};

// notun normal müddəti

int BEATTIME = 300;

// həllində olsaydıq izləyəcəyimiz sayğac

int teller = 0;

boş quraşdırma () {

Serial.begin (9600);

pinMode (2, GİRİŞ);

pinMode (1, GİRİŞ);

}

boşluq döngəsi () {

// sancaqlardakı girişi oxuyur

k = analogRead (2);

int p = analogRead (1);

// heç bir düyməyə basılmasa, ton olmamalıdır

əgər (danışan == 0) {

noTone (12);

}

// oxunan məlumatlar parametrlərə uyğundursa, təsvir olunan kod bitini işlədin

əgər (k> 320 && k <350) {

rechts ();

}

//""

başqa əgər (k 290) {

bağlantılar ();

}

//""

başqa halda (k> 260 && k <280) {

boven ();

}

//""

başqa halda (k> 240 && k <260) {

onder ();

}

//""

başqa halda (k> 220 && k <240) {

a ();

}

// yoxsa (heç bir düyməyə basılmadıqda), bu kodu işlədin

başqa {

// eyni şəkildə sıfırlayın, buna görə növbəti dəfə bir düyməyə basıldıqda istifadə edilə bilər

eyni = 0;

// sayğac müəyyən bir saya qədərdirsə, təsvir olunan kod bitini işlədin

əgər (kassir == 166) {

zelda ();

}

//""

başqa halda (teller == 386) {

sariya ();

}

//""

başqa halda (teller == 266) {

epona ();

}

//""

başqa halda (teller == 999) {

// xətanı qeyd etmək üçün bu tonu çalın

ton (dinamik, NOTE_C3, BEATTIME);

// sayğacı sıfıra sıfırlayın

kassir = 0;

}

}

// giriş və çıxış arasındakı gecikmə

gecikmə (100);

// seriya monitorunda daxil etdiyiniz dəyərləri çap edir

Serial.println (k);

}

// bu ilk melodiyadır

boş zelda () {

// bu, melodiyanı oxuyarkən özünü yeniləyən bir sayğac qurur ki, oxuya bilsin və lazım olanda dayandırsın

for (int i = 0; i <sizeof (Zelda); i ++) {

// qeydin nə qədər davam etməsini söyləyir

int ZTime = 1000 / ZeldaTime ;

// tonları yaradır

ton (natiq, Zelda , ZTime);

// düzgün gecikmə yaradır

int pause = ZTime * 1.30;

gecikmə (fasilə);

// sayğac sıfırlanır

kassir = 0;

// seriya monitorunda daxil etdiyiniz dəyərləri çap edir

Serial.println (kassir);

}

}

//""

boş epona () {

for (int i = 0; i <sizeof (Epona); i ++) {

int ETime = 1000 / EponaTime ;

ton (dinamik, Epona , ETime);

int pause = ETime * 1.30;

gecikmə (fasilə);

kassir = 0;

Serial.println (kassir);

}

}

//""

boş saria () {

for (int i = 0; i <sizeof (Saria); i ++) {

int STime = 1000 / SariaTime ;

ton (natiq, Saria , STime);

int pause = STime * 1.30;

gecikmə (fasilə);

kassir = 0;

Serial.println (kassir);

}

}

boş qeyd

hts () {

// buna hələ basılmamış olsaydı

əgər (eyni == 0) {

// sayğacda bu dəyərlərdən biri varsa, buna əlavə edin

əgər (teller == 0 || teller == 132 || teller == 165 || teller == 232 || teller == 265 || teller == 331 || teller == 374) {

kassir = kassir + 1;

}

// əks halda onu 999 -a təyin edin ki, səhv səsi eşitsin

başqa {

kassir = 999;

}

// Arduino uzun basmağı birdən çox basma kimi oxumaması üçün eyni birini təyin edin

eyni = 1;

}

// ton çal

başqa {

ton (dinamik, NOTE_A4, BEATTIME);

}

// seriya monitorda daxil etdiyiniz dəyərləri çap edir

Serial.println (kassir); }

//""

boş bağlantılar () {

əgər (eyni == 0) {

əgər (teller == 133 || teller == 254 || teller == 244 || teller == 332 || teller == 375 || teller == 221) {

kassir = kassir + 11;

}

başqa halda (teller == 0) {

kassir = 111;

}

başqa {

kassir = 999;

}

eyni = 1;

} başqa {

ton (dinamik, NOTE_B4, BEATTIME);

} Serial.println (kassir);

}

//""

void boven () {

if (eyni == 0) {if (teller == 111 || teller == 144 || teller == 233) {

kassir = kassir + 21;

}

başqa halda (teller == 0) {

kassir = 221;

}

başqa {

kassir = 999;

}

eyni = 1;

}

başqa {

ton (dinamik, NOTE_D5, BEATTIME);

Serial.println (kassir);

}

}

//""

void onder () {

əgər (eyni == 0) {

əgər (deyən == 343) {

kassir = kassir + 31;

}

başqa halda (teller == 0) {

kassir = 331;

} başqa {

kassir = 999;

} eyni = 1;

} başqa {

ton (dinamik, NOTE_F4, BEATTIME);

Serial.println (kassir);

}

}

//""

boş (a) {

əgər (eyni == 0) {

əgər (danışan == 0) {

kassir = 461;

}

başqa {

kassir = 999;

}

eyni = 1;

}

ton (dinamik, NOTE_D4, BEATTIME);

Serial.println (kassir);

}

Tövsiyə: