Isi kandungan:

Kotak Teka-teki Arduino: 7 Langkah
Kotak Teka-teki Arduino: 7 Langkah

Video: Kotak Teka-teki Arduino: 7 Langkah

Video: Kotak Teka-teki Arduino: 7 Langkah
Video: Crack The Code Game, Built Into A DIY Safe Box 2024, November
Anonim
Kotak Teka-teki Arduino
Kotak Teka-teki Arduino

Untuk projek ini kita akan membuat kotak teka-teki yang sesuai dengan muzik. Inti asasnya ialah apabila anda menekan butang, ia akan melepaskan nada dan Arduino mengira butang mana yang ditekan sehingga ia tahu apa yang betul dan apa jawapan yang salah.

Bekalan

1 x Arduino uno

Perintang Ohm 1 x 1k

Perintang 5 x 220 Ohm

1 xPiezo Buzzer

Butang tekan 5 x 6x6 mm

1 x tetapkan wayar Jumper

1 x papan perf / jalur

1 x dijual

1 x engsel

1 x pengapit

1 x peti laci / kayu kecil

1x lem panas + tongkat gam

1 x 9v bateri + pemegang

sedikit worbla

cat

Langkah 1:

Imej
Imej

Untuk memulakan dengan anda harus menekan pin di papan roti anda. Sekarang sambungkan analog 2 dengan wayar ke sudut papan. Kami akan menghubungkan dua perintang ke dalam satu garis. Yang pertama ialah perintang Ohk 10k. Di hujung perintang ini, kami menyambungkan wayar ke tanah analog. Perintang kedua adalah perintang 220 Ohm yang kita sambungkan ke butang pertama. Gunakan perintang lain dengan nilai yang sama untuk menghubungkan bahagian terbuka kedua butang dengan butang kedua. Terus sambungkan butang seperti ini hingga yang terakhir. Yang terakhir anda ambil wayar dan sambungkannya ke bahagian tertutup butang yang sesuai dan sambungkan ke yang berikutnya dalam satu baris. Anda kini mengulangi proses yang anda lakukan dengan perintang yang hanya diketahui dengan wayar biasa. Sambungkan butang pertama ke port analog 3, 3V di Arduino anda. Secara keseluruhan anda akan mendapat sejenis salib seperti yang digambarkan di bawah.

Langkah 2:

Seterusnya pasangkan buzzer ke papan roti dan selamatkan satu sisi ke landasan digital dan sebelah ke port 12. Adalah bijak untuk memuat naik kod berikut ke dalam Arduino anda supaya anda dapat menguji apakah semuanya berfungsi dengan betul. Sekiranya ia boleh mula menyolder komponen bersama-sama. Lakukan ini dengan mengeluarkannya dari papan roti dan memateri wayar dan sambungan secara langsung. Sekiranya anda fikir anda memerlukan lebih banyak panjang di antara butang, anda boleh menambah wayar tambahan di antara perintang. Papan roti tidak lagi diperlukan pada ketika ini.

Langkah 3:

Imej
Imej

Setelah semuanya terpateri, inilah masanya untuk membuat kotak itu sendiri. Saya menggunakan set laci yang murah sebagai asas untuk saya. Saya hanya memotong separuh panjang dan melabuhkan punggung dan sisi yang saya potong. Anda mesti mempunyai dua kepingan berbentuk c sekarang. Potong salah satu bahagian daripadanya untuk digunakan sebagai penutup. Sekarang putar salah satu kepingan yang tinggal sehingga ia sesuai seperti kotak tanpa penutup dan lekatkan bersama. Setelah gam dipasang dengan betul, gerudi lubang kecil di setiap sisi kotak untuk butang dan lubang yang lebih besar untuk bel di penutupnya.

Langkah 4:

Imej
Imej
Imej
Imej

Sekarang anda boleh mengecat kotak itu. Saya membuat reka bentuk bunga berdasarkan BOTW tetapi anda boleh memilih reka bentuk yang anda mahukan. Setelah selesai, anda boleh meletakkan butang di dalam lubang dan meletakkan gumpalan gam di bahagian belakang butang dan kayu di sekitarnya. Prinsip yang sama berlaku untuk buzzer tetapi tambang sesuai dengan lubang di dalamnya sehingga tidak perlu. Seterusnya anda ambil worbla dan panaskan dan potong untuk membuat beberapa butang kecil. Lekatkan mereka dengan hati-hati ke butang tetapi pastikan tidak menggunakan banyak lem kerana anda mungkin butang tersekat secara tidak sengaja. Sekarang anda boleh mengecatnya agar lebih padat dengan kotak.

Langkah 5:

Terakhir anda lem atau skru, penjepit dan engsel pada kotak dan penutup yang menghubungkan kedua-duanya.

Langkah 6:

Setelah kotak anda selesai, yang perlu anda lakukan ialah meletakkan Arduino dan bateri di dalamnya dan tutup penutupnya.

Langkah 7: Kod

// Ini adalah kod untuk kotak teka-teki / muzik bertema Zelda.

// ini menghubungkan kod anda dengan senarai nota di tab lain

#masuk "pitches.h"

// pemboleh ubah ini akan memastikan bahawa Arduino melihat tekan butang yang lebih lama hanya dengan satu tekan

int sama = 0;

// dari sini ia akan membaca input anda

int k = 2;

// ini adalah pin output anda

pembesar suara int = 12;

// di bawah adalah melodi akhir

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, NOT_4, NOT_5, NOT_5, NOT_5

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, NOT_4, NOT_4, NOT_4, NOT_

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

// tempoh normal nota

int BEATTIME = 300;

// kaunter yang akan terus dicari adalah kita ada penyelesaiannya

int teller = 0;

batal persediaan () {

Serial.begin (9600);

pinMode (2, INPUT);

pinMode (1, INPUT);

}

gelung kosong () {

// membaca input dari pin

k = analogRead (2);

int p = analogRead (1);

// jika tidak ada butang yang ditekan, seharusnya tidak ada nada

jika (juruwang == 0) {

noTone (12);

}

// jika data yang dibaca sesuai dengan parameter jalankan kod bit yang dijelaskan

jika (k> 320 && k <350) {

rechts ();

}

//""

lain jika (k 290) {

pautan ();

}

//""

lain jika (k> 260 && k <280) {

anyaman ();

}

//""

lain jika (k> 240 && k <260) {

onder ();

}

//""

lain jika (k> 220 && k <240) {

a ();

}

// jika tidak (bila tidak ada butang ditekan), jalankan kod ini

lain {

// reset sama sehingga dapat digunakan pada saat butang ditekan

sama = 0;

// jika pembilang mencapai nombor tertentu jalankan kod bit yang dijelaskan

jika (juruwang == 166) {

zelda ();

}

//""

lain jika (juruwang == 386) {

saria ();

}

//""

lain jika (juruwang == 266) {

epona ();

}

//""

lain jika (juruwang == 999) {

// mainkan nada ini untuk menandakan ralat

nada (pembesar suara, NOTE_C3, BEATTIME);

// tetapkan semula kaunter ke 0

juruwang = 0;

}

}

// kelewatan antara input dan output

kelewatan (100);

// mencetak nilai input anda di monitor bersiri

Bersiri.println (k);

}

// ini adalah melodi pertama

batal zelda () {

// ini menetapkan penghitung yang memperbaharui dirinya semasa memainkan melodi sehingga dapat membacanya dan berhenti bila seharusnya

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

// mengatakan berapa lama nota boleh bertahan

int ZTime = 1000 / ZeldaTime ;

// menghasilkan nada

nada (pembesar suara, Zelda , ZTime);

// mewujudkan kelewatan yang betul

int pause = ZTime * 1.30;

kelewatan (jeda);

// menetapkan semula kaunter

juruwang = 0;

// mencetak nilai input anda di monitor bersiri

Serial.println (juruwang);

}

}

//""

batal epona () {

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

int ETime = 1000 / EponaTime ;

nada (pembesar suara, Epona , ETime);

int pause = ETime * 1.30;

kelewatan (jeda);

juruwang = 0;

Serial.println (juruwang);

}

}

//""

saria batal () {

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

int STime = 1000 / SariaTime ;

nada (pembesar suara, Saria , STime);

int pause = STime * 1.30;

kelewatan (jeda);

juruwang = 0;

Serial.println (juruwang);

}

}

batal rec

hts () {

// jika ini belum ditekan

jika (sama == 0) {

// jika kaunter mempunyai salah satu nilai ini, tambahkan ini

jika (teller == 0 || teller == 132 || teller == 165 || teller == 232 || teller == 265 || teller == 331 || teller == 374) {

teller = juruwang + 1;

}

// jika tidak, tetapkan ke 999 sehingga anda mendengar bunyi ralat

lain {

juruwang = 999;

}

// tetapkan sama dengan yang satu agar Arduino tidak membaca akhbar yang berpanjangan sebagai banyak tekan

sama = 1;

}

// mainkan nada

lain {

nada (pembesar suara, NOTE_A4, BEATTIME);

}

// mencetak nilai input anda di monitor bersiri

Serial.println (juruwang); }

//""

pautan tidak sah () {

jika (sama == 0) {

jika (teller == 133 || teller == 254 || teller == 244 || teller == 332 || teller == 375 || teller == 221) {

teller = juruwang + 11;

}

lain jika (juruwang == 0) {

juruwang = 111;

}

lain {

juruwang = 999;

}

sama = 1;

} lain {

nada (pembesar suara, NOTE_B4, BEATTIME);

} Serial.println (juruwang);

}

//""

boven kosong () {

jika (sama == 0) {if (juruwang == 111 || juruwang == 144 || juruwang == 233) {

teller = juruwang + 21;

}

lain jika (juruwang == 0) {

juruwang = 221;

}

lain {

juruwang = 999;

}

sama = 1;

}

lain {

nada (pembesar suara, NOTE_D5, BEATTIME);

Serial.println (juruwang);

}

}

//""

batal onder () {

jika (sama == 0) {

jika (juruwang == 343) {

juruwang = juruwang + 31;

}

lain jika (juruwang == 0) {

juruwang = 331;

} lain {

juruwang = 999;

} sama = 1;

} lain {

nada (pembesar suara, NOTE_F4, BEATTIME);

Serial.println (juruwang);

}

}

//""

batal a () {

jika (sama == 0) {

jika (juruwang == 0) {

juruwang = 461;

}

lain {

juruwang = 999;

}

sama = 1;

}

nada (pembesar suara, NOTE_D4, BEATTIME);

Serial.println (juruwang);

}

Disyorkan: