Obsah:

Puzzle Box Arduino: 7 krokov
Puzzle Box Arduino: 7 krokov

Video: Puzzle Box Arduino: 7 krokov

Video: Puzzle Box Arduino: 7 krokov
Video: STEM-проекты вне уроков: Ракетостроение и «умная таблетница» 2024, November
Anonim
Puzzle Box Arduino
Puzzle Box Arduino

Pre tento projekt budeme vyrábať puzzle box, ktorý bude pracovať s hudbou. Základom je, že keď stlačíte tlačidlo, vydá melódiu a Arduino vypočíta, ktoré tlačidlá sú stlačené, aby vedel, čo je správne a čo je nesprávna odpoveď.

Zásoby

1 x Arduino č

Rezistor 1 x 1k Ohm

Rezistory 5 x 220 ohmov

1 x Piezo bzučiak

5 x tlačidlo 6x6 mm

1 x sada prepojovacích káblov

1 x doska perf/strip

1 x súprava vojakov

1 x záves

1 x svorka

1 x malá komoda/drevo

1x horúca lepiaca pištoľ + lepiace tyčinky

1 x 9v batéria + držiak

trochu worbla

farba

Krok 1:

Obrázok
Obrázok

Na začiatku musíte stlačiť svoje kolíky na doske. Teraz pripojte analóg 2 pomocou drôtu k rohu dosky. Chystáme sa k nemu pripojiť dva odpory v rade. Prvým je odpor 10 kOhm. Na druhý koniec tohto rezistora pripojíme vodič k analógovej zemi. Druhý odpor je odpor 220 Ohm, ktorý pripájame k prvému tlačidlu. Na prepojenie druhej otvorenej strany tlačidla s druhým tlačidlom použite iný odpor rovnakej hodnoty. Pokračujte v pripájaní týchto tlačidiel až k poslednému. V poslednom chytíte drôt a pripojíte ho k zodpovedajúcej zatvorenej strane tlačidla a prepojíte s ďalším v poradí. Teraz zopakujte postup, ktorý ste urobili s odpormi, ktoré poznáte iba z obyčajných drôtov. Pripojte prvé tlačidlo k analógovému 3, 3V portu na vašom Arduino. Celkovo získate nejaký krížový otcovský vzor, ako je to znázornené nižšie.

Krok 2:

Potom zapojte bzučiak do doštičky a jednu stranu pripevnite k digitálnej zemi a druhú k portu 12. Je múdre už nahrať nasledujúci kód do vášho Arduina, aby ste si mohli vyskúšať, či všetko funguje správne. Ak je, môžete začať spájkovať komponenty dohromady. Vykonajte to tak, že ich vyberiete z doštičky a priamo spájkujete vodiče a spojenia. Ak si myslíte, že medzi tlačidlami potrebujete väčšiu dĺžku, môžete medzi odpory pridať ďalší vodič. V tejto chvíli už doska na chlieb nie je potrebná.

Krok 3:

Obrázok
Obrázok

Potom, čo je všetko spájkované, je čas urobiť samotnú škatuľu. Ako základ som použil lacnú sadu zásuviek. Jednoducho som skrátil pozdĺžne na polovicu a odstránil som chrbát a stranu, ktorou som prestrihol. Teraz by ste mali mať dva kusy v tvare c. Jednému z nich odstrihnite jednu stranu, aby ste ho mohli použiť ako veko. Teraz otočte jeden zo zvyšných kúskov tak, aby do seba zapadali ako krabica bez veka, a prilepte ich k sebe. Akonáhle lepidlo dobre stuhne, vyvŕtajte na každej strane škatule malý otvor pre gombíky a väčší pre bzučiak vo veku.

Krok 4:

Obrázok
Obrázok
Obrázok
Obrázok

Teraz sa môžete pustiť do maľovania škatule. Urobil som svoj s kvetinovým dizajnom založeným na BOTW, ale môžete si skutočne vybrať ľubovoľný dizajn, ktorý chcete. Potom môžete gombíky vložiť do otvorov a na zadnú stranu gombíka a okolité drevo naniesť gulôčku lepidla. Ten istý princíp platí pre bzučiak, ale môj dokonale zapadá do otvoru, takže nie je potrebný. Ďalej uchopte worblu a zahrejte ju a nakrájajte, aby ste vytvorili malé gombíky. Opatrne ich prilepte na gombíky, ale dávajte pozor, aby ste nepoužili veľa lepidla, pretože by ste sa mohli omylom zaseknúť. Teraz ich môžete namaľovať, aby viac splynuli s krabicou.

Krok 5:

Nakoniec prilepte alebo priskrutkujte svorku a závesy na škatuli a veku, ktoré ich spájajú.

Krok 6:

Teraz, keď je vaša škatuľka kompletná, stačí do nej vložiť Arduino a batériu a zavrieť veko.

Krok 7: Kód

// Toto je kód pre puzzle/hudobný box s tematikou Zeldy.

// toto spojí váš kód so zoznamom poznámok na ďalšej karte

#include "pitches.h"

// táto premenná zabezpečí, že Arduino bude dlhšie stlačenie tlačidla vnímať len ako jedno stlačenie

int same = 0;

// odtiaľto bude čítať váš vstup

int k = 2;

// toto je tvoj výstupný pin

int reproduktor = 12;

// nižšie sú koncové melódie

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_B4, 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_E4, NOTE_G

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

// normálne trvanie poznámky

int BEATTIME = 300;

// počítadlo, ktoré bude sledovať, ak sme v riešení

int teller = 0;

neplatné nastavenie () {

Serial.begin (9600);

pinMode (2, VSTUP);

pinMode (1, VSTUP);

}

prázdna slučka () {

// číta vstup z pinov

k = analógové Čítanie (2);

int p = analógové Čítanie (1);

// ak nie je stlačené žiadne tlačidlo, nemal by byť žiadny tón

if (teller == 0) {

noTone (12);

}

// ak načítané údaje zodpovedajú parametrom, spustite popísaný bit kódu

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

rechts ();

}

//""

else if (k 290) {

odkazy ();

}

//""

else if (k> 260 && k <280) {

boven ();

}

//""

else if (k> 240 && k <260) {

onder ();

}

//""

else if (k> 220 && k <240) {

a ();

}

// ak nie (keď nie je stlačené žiadne tlačidlo), spustite tento kód

inak {

// reset to isté, aby ho bolo možné použiť pri nasledujúcom stlačení tlačidla

rovnaké = 0;

// ak je počítadlo do určitého čísla, spustite popísaný bit kódu

if (teller == 166) {

zelda ();

}

//""

else if (teller == 386) {

saria ();

}

//""

else if (teller == 266) {

epona ();

}

//""

else if (teller == 999) {

// hrou označte chybu

tón (reproduktor, NOTE_C3, BEATTIME);

// vynulujte počítadlo na 0

pokladník = 0;

}

}

// oneskorenie medzi vstupom a výstupom

oneskorenie (100);

// vytlačí hodnoty vášho vstupu na sériový monitor

Serial.println (k);

}

// toto je prvá melódia

void zelda () {

// toto nastaví počítadlo, ktoré sa samo aktualizuje počas prehrávania melódie, aby ju mohlo čítať a zastaviť, keď by malo

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

// hovorí, ako dlho by mala poznámka trvať

int ZTime = 1000 / ZeldaTime ;

// generuje tóny

tón (reproduktor, Zelda , ZTime);

// vytvára správne oneskorenie

int pauza = ZTime * 1,30;

oneskorenie (pauza);

// vynuluje počítadlo

pokladník = 0;

// vytlačí hodnoty vášho vstupu na sériový monitor

Serial.println (pokladník);

}

}

//""

void epona () {

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

int ETime = 1000 / EponaTime ;

tón (reproduktor, Epona , ETime);

int pauza = ETime * 1,30;

oneskorenie (pauza);

pokladník = 0;

Serial.println (pokladník);

}

}

//""

void saria () {

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

int STime = 1000 / SariaTime ;

tón (reproduktor, Saria , STime);

int pauza = STime * 1,30;

oneskorenie (pauza);

pokladník = 0;

Serial.println (pokladník);

}

}

prázdny rec

hts () {

// ak toto ešte nebolo stlačené

ak (to isté == 0) {

// ak má počítadlo aktuálne jednu z týchto hodnôt, pridajte k tomu toto

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

pokladník = pokladník + 1;

}

// inak nastavte na 999, aby ste počuli hluk z chýb

inak {

pokladník = 999;

}

// nastavte rovnakú hodnotu na jednu, aby Arduino nečítalo predĺžené stlačenie ako viacnásobné stlačenie

rovnaké = 1;

}

// zahrajte tón

inak {

tón (reproduktor, NOTE_A4, BEATTIME);

}

// vytlačí hodnoty vášho vstupu na sériový monitor

Serial.println (pokladník); }

//""

neplatné odkazy () {

ak (to isté == 0) {

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

teller = teller + 11;

}

else if (teller == 0) {

pokladník = 111;

}

inak {

pokladník = 999;

}

rovnaké = 1;

} else {

tón (reproduktor, NOTE_B4, BEATTIME);

} Serial.println (pokladník);

}

//""

void boven () {

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

teller = teller + 21;

}

else if (teller == 0) {

pokladník = 221;

}

inak {

pokladník = 999;

}

rovnaké = 1;

}

inak {

tón (reproduktor, NOTE_D5, BEATTIME);

Serial.println (pokladník);

}

}

//""

void onder () {

ak (to isté == 0) {

if (teller == 343) {

pokladník = pokladník + 31;

}

else if (teller == 0) {

pokladník = 331;

} else {

pokladník = 999;

} rovnaké = 1;

} else {

tón (reproduktor, NOTE_F4, BEATTIME);

Serial.println (pokladník);

}

}

//""

neplatné () {

ak (to isté == 0) {

if (teller == 0) {

pokladník = 461;

}

inak {

pokladník = 999;

}

rovnaké = 1;

}

tón (reproduktor, NOTE_D4, BEATTIME);

Serial.println (pokladník);

}

Odporúča: