Obsah:

Puzzle Box Arduino: 7 kroků
Puzzle Box Arduino: 7 kroků

Video: Puzzle Box Arduino: 7 kroků

Video: Puzzle Box Arduino: 7 kroků
Video: Crack The Code Game, Built Into A DIY Safe Box 2024, Listopad
Anonim
Puzzle Box Arduino
Puzzle Box Arduino

Pro tento projekt budeme vyrábět puzzle box, který pracuje s hudbou. Základní podstatou toho je, že když stisknete tlačítko, uvolní melodii a Arduino vypočítá, která tlačítka jsou stisknuta, aby věděl, co je správné a co špatná odpověď.

Zásoby

1 x Arduino uno

Rezistor 1 x 1k Ohm

Rezistory 5 x 220 ohmů

1 x Piezo bzučák

5 x tlačítko 6x6 mm

1 x sada propojovacích vodičů

1 x deska perf/strip

1 x sada pájek

1 x závěs

1 x svorka

1 x malá komoda/dřevo

1x horká lepicí pistole + lepicí tyčinky

1 x 9v baterie + držák

trochu worbla

malovat

Krok 1:

obraz
obraz

Nejprve musíte stisknout kolíky na prkénku. Nyní připojte analogový 2 vodičem k rohu desky. Chystáme se k němu připojit dva odpory v řadě. První je odpor 10 kOhm. Na druhý konec tohoto rezistoru připojíme vodič k analogové zemi. Druhý odpor je odpor 220 Ohm, který připojujeme k prvnímu tlačítku. K připojení druhé otevřené strany tlačítka k druhému tlačítku použijte jiný odpor stejné hodnoty. Takto připojujte tlačítka až k poslednímu. U posledního uchopte drát a připojte jej k odpovídající uzavřené straně tlačítka a připojte k dalšímu v řadě. Nyní zopakujete postup, který jste provedli s rezistory, které znáte pouze s obyčejnými dráty. Připojte první tlačítko k analogovému 3, 3V portu na vašem Arduinu. Celkově získáte jakýsi křížový otcovský vzor, jak je znázorněno níže.

Krok 2:

Dále zapojte bzučák do prkénka a zajistěte jednu stranu k digitální zemi a druhou k portu 12. Je chytré již nahrát následující kód do vašeho Arduina, abyste mohli vyzkoušet, zda vše funguje správně. Pokud ano, můžete začít pájet součásti dohromady. Udělejte to tak, že je vyjmete z prkénka a pájíte vodiče a spoje přímo k sobě. Pokud si myslíte, že potřebujete mezi tlačítky větší délku, můžete mezi odpory přidat nějaký další vodič. V tomto bodě již prkénko není nutné.

Krok 3:

obraz
obraz

Poté, co je vše pájeno, je čas vyrobit krabici samotnou. Jako základ jsem použil levnou sadu zásuvek. Jednoduše jsem podélně rozřízl na polovinu a odstranil záda a stranu, kterou jsem prořízl. Nyní byste měli mít dva kusy ve tvaru písmene c. Uřízněte jednu stranu jedné z nich a použijte ji jako víčko. Nyní otočte jeden ze zbývajících kusů tak, aby do sebe zapadly jako krabice bez víka a slepte je k sobě. Jakmile lepidlo řádně zatuhne, vyvrtejte na každé straně krabičky malý otvor pro knoflíky a větší pro bzučák ve víku.

Krok 4:

obraz
obraz
obraz
obraz

Nyní se můžete pustit do malování krabice. Udělal jsem svůj s květinovým designem založeným na BOTW, ale opravdu si můžete vybrat jakýkoli design, který chcete. Poté, co je to hotové, můžete dát knoflíky dovnitř otvorů a na zadní stranu knoflíku a okolní dřevo dát glob lepidla. Stejný princip platí pro bzučák, ale moje se perfektně hodí do otvoru, takže je zbytečný. Dále uchopte worblu a zahřejte ji a nakrájejte, abyste vytvořili malá tlačítka. Opatrně je přilepte na knoflíky, ale ujistěte se, že nepoužíváte příliš mnoho lepidla, protože byste si mohli omylem zaseknout knoflíky. Nyní je můžete vymalovat, aby více splynuly s krabicí.

Krok 5:

Nakonec přilepíte nebo přišroubujete svorku a závěsy na krabici a víku, které je spojují.

Krok 6:

Nyní, když je vaše krabice kompletní, stačí do ní vložit Arduino a baterii a zavřít víko.

Krok 7: Kód

// Toto je kód pro puzzle/hudební skříňku na téma Zelda.

// tím se váš kód spojí se seznamem poznámek na jiné kartě

#include "pitches.h"

// tato proměnná zajistí, že Arduino uvidí delší stisk tlačítka jako jediné stisknutí

int stejné = 0;

// odtud bude číst váš vstup

int k = 2;

// toto je tvůj výstupní pin

int reproduktor = 12;

// níže jsou koncové melodie

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ální doba trvání poznámky

int BEATTIME = 300;

// počítadlo, které bude sledovat, pokud jsme v řešení

int teller = 0;

neplatné nastavení () {

Serial.begin (9600);

pinMode (2, VSTUP);

pinMode (1, VSTUP);

}

prázdná smyčka () {

// čte vstup z pinů

k = analogRead (2);

int p = analogRead (1);

// pokud není stisknuto žádné tlačítko, neměl by znít žádný tón

if (teller == 0) {

noTone (12);

}

// pokud čtená data odpovídají parametrům, spusťte popsaný bit kódu

if (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();

}

// pokud ne (když není stisknuto žádné tlačítko), spusťte tento kód

jinak {

// reset stejný, aby jej bylo možné použít při příštím stisknutí tlačítka

stejné = 0;

// pokud je čítač do určitého čísla, spusťte popsaný bit kódu

if (teller == 166) {

zelda ();

}

//""

else if (teller == 386) {

saria ();

}

//""

else if (teller == 266) {

epona ();

}

//""

else if (teller == 999) {

// přehráním tohoto tónu označíte chybu

tón (reproduktor, NOTE_C3, BEATTIME);

// reset počítadla na 0

pokladník = 0;

}

}

// zpoždění mezi vstupem a výstupem

zpoždění (100);

// vytiskne hodnoty vašeho vstupu na sériovém monitoru

Serial.println (k);

}

// toto je první melodie

void zelda () {

// toto nastaví čítač, který se sám aktualizuje při přehrávání melodie, aby ji mohl přečíst a zastavit, když by měl

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

// říká, jak dlouho by měla poznámka trvat

int ZTime = 1000 / ZeldaTime ;

// generuje tóny

tón (reproduktor, Zelda , ZTime);

// vytvoří správné zpoždění

int pauza = ZTime * 1,30;

zpoždění (pauza);

// vynuluje počítadlo

pokladník = 0;

// vytiskne hodnoty vašeho vstupu na sériovém monitoru

Serial.println (pokladník);

}

}

//""

void epona () {

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

int ETime = 1000 / EponaTime ;

tón (reproduktor, Epona , ETime);

int pauza = ETime * 1,30;

zpoždění (pauza);

pokladník = 0;

Serial.println (pokladník);

}

}

//""

void saria () {

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

int STime = 1000 / SariaTime ;

tón (reproduktor, Saria , STime);

int pauza = STime * 1,30;

zpoždění (pauza);

pokladník = 0;

Serial.println (pokladník);

}

}

prázdné rec

hts () {

// pokud toto již nebylo stisknuto

if (same == 0) {

// pokud má čítač aktuálně jednu z těchto hodnot, přidejte do ní toto

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

teller = teller + 1;

}

// jinak nastavte na 999, abyste slyšeli šum chyb

jinak {

pokladník = 999;

}

// nastavte stejné na jedno, aby Arduino nečetlo delší tisk jako vícenásobné stisknutí

stejný = 1;

}

// zahrajte tón

jinak {

tón (reproduktor, NOTE_A4, BEATTIME);

}

// vytiskne hodnoty vašeho vstupu na sériovém monitoru

Serial.println (pokladník); }

//""

neplatné odkazy () {

if (same == 0) {

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

teller = teller + 11;

}

else if (teller == 0) {

pokladník = 111;

}

jinak {

pokladník = 999;

}

stejný = 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;

}

jinak {

pokladník = 999;

}

stejný = 1;

}

jinak {

tón (reproduktor, NOTE_D5, BEATTIME);

Serial.println (pokladník);

}

}

//""

void onder () {

if (same == 0) {

if (teller == 343) {

teller = teller + 31;

}

else if (teller == 0) {

pokladník = 331;

} else {

pokladník = 999;

} stejné = 1;

} else {

tón (reproduktor, NOTE_F4, BEATTIME);

Serial.println (pokladník);

}

}

//""

neplatné () {

if (same == 0) {

if (teller == 0) {

pokladník = 461;

}

jinak {

pokladník = 999;

}

stejný = 1;

}

tón (reproduktor, NOTE_D4, BEATTIME);

Serial.println (pokladník);

}

Doporučuje: