Cuprins:

Caseta Puzzle Arduino: 7 pași
Caseta Puzzle Arduino: 7 pași

Video: Caseta Puzzle Arduino: 7 pași

Video: Caseta Puzzle Arduino: 7 pași
Video: Ce înseamna semnul tau din nastere 2024, Iulie
Anonim
Arduino Puzzle Box
Arduino Puzzle Box

Pentru acest proiect vom realiza o casetă de puzzle care funcționează cu muzică. Esența de bază este că atunci când apăsați un buton eliberează un ton și Arduino calculează ce butoane sunt apăsate, astfel încât să știe ce este corect și care este răspunsul greșit.

Provizii

1 x Arduino uno

Rezistor 1 x 1k Ohm

Rezistențe de 5 x 220 Ohm

1 xPiezo Buzzer

5 x buton 6x6 mm

1 x set Jumper fire

1 x bord perf / strip

1 x solder

1 x balama

1 x clemă

1 x comoda mica / lemn

1x pistol de adeziv fierbinte + lipici

1 x baterie de 9v + suport

un pic de worbla

a picta

Pasul 1:

Imagine
Imagine

Pentru a începe, trebuie să apăsați pinii în panoul de testare. Acum conectați analogul 2 cu un fir la colțul plăcii. Vom conecta la acesta două rezistențe într-o linie. Primul este un rezistor de 10k Ohm. La celălalt capăt al acestui rezistor conectăm firul la pământul analogic. Al doilea rezistor este un rezistor de 220 Ohm pe care îl conectăm la primul buton. Utilizați un alt rezistor de aceeași valoare pentru a conecta a doua parte deschisă a butonului cu al doilea buton. Continuați să conectați butoanele astfel până la ultimul. La ultima apucați un fir și îl conectați la o parte închisă corespunzătoare a butonului și îl conectați la următorul din linie. Acum repetați procesul pe care l-ați făcut cu rezistențele cunoscute doar cu fire simple. Conectați primul buton la portul analogic 3, 3V de pe Arduino. În general, veți obține un fel de patern încrucișat așa cum este descris mai jos.

Pasul 2:

Apoi conectați buzzer-ul la placa de siguranță și fixați o parte de solul digital și cealaltă de portul 12. Este inteligent să încărcați deja următorul cod în Arduino, astfel încât să puteți testa dacă totul funcționează corect. Dacă este, puteți începe să lipiți componentele împreună. Faceți acest lucru scoțându-le din panou și lipind direct firele și conexiunile. Dacă credeți că aveți nevoie de mai multă lungime între butoane, puteți adăuga un fir suplimentar între rezistențe. Panoul de verificare nu mai este necesar în acest moment.

Pasul 3:

Imagine
Imagine

După ce totul este lipit, este timpul să faceți cutia în sine. Am folosit un set de sertare ieftine ca bază pentru a mea. Pur și simplu am tăiat pe jumătate pe lungime și am îndepărtat spatele și latura pe care am tăiat-o. Ar trebui să aveți două piese în formă de c acum. Tăiați o parte a uneia dintre ele pentru a o folosi ca capac. Acum rotiți una dintre piesele rămase astfel încât să se potrivească împreună ca o cutie fără capac și lipiți-le împreună. Odată ce lipiciul a fost stabilit corect, găuriți o gaură mică în fiecare parte a cutiei pentru butoane și una mai mare pentru buzzerul din capac.

Pasul 4:

Imagine
Imagine
Imagine
Imagine

Acum puteți începe să pictați cutia. Am făcut-o pe a mea cu un design de flori bazat pe BOTW, dar puteți alege cu adevărat orice design doriți. După ce ați terminat, puteți pune butoanele în interiorul găurilor și puteți pune un glob de adeziv pe spatele butonului și lemnul din jur. Același principiu se aplică buzzerului, dar al meu se potrivește perfect în gaură, făcându-l inutil. Apoi apucați niște worbla și încălziți-o și tăiați-o pentru a face niște butoane mici. Lipiți-le cu atenție pe butoane, dar asigurați-vă că nu utilizați prea mult lipici, deoarece s-ar putea să blocați accidental butoanele. Acum le puteți vopsi pentru a le face să se amestece mai mult cu cutia.

Pasul 5:

În cele din urmă lipiți sau înșurubați, clema și balamalele de pe cutie și capac care leagă cele două.

Pasul 6:

Acum, când cutia dvs. este completă, tot ce trebuie să faceți este să puneți Arduino și bateria în interior și să închideți capacul.

Pasul 7: Cod

// Acesta este codul pentru o casetă de puzzle / muzică tematică Zelda.

// acesta vă conectează codul la lista de note din cealaltă filă

#include "pitches.h"

// această variabilă se va asigura că Arduino vede o apăsare mai lungă a butonului ca o singură apăsare

int same = 0;

// de aici vă va citi intrarea

int k = 2;

// acesta este pinul dvs. de ieșire

difuzor int = 12;

// mai jos sunt melodiile finale

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_E, int SariaTime = {8, 8, 4, 8, 8, 4, 8, 8, 8, 8, 4, 8, 8, 8, 8, 3, 8, 8, 8, 2, 1};

// durata normală a unei note

int BEATTIME = 300;

// ghișeul pe care urmează să îl urmărim dacă suntem în soluție

casier int = 0;

configurare nulă () {

Serial.begin (9600);

pinMode (2, INPUT);

pinMode (1, INPUT);

}

bucla nulă () {

// citește intrarea din pini

k = analogRead (2);

int p = analogRead (1);

// dacă nu este apăsat niciun buton, nu ar trebui să existe niciun ton

if (casier == 0) {

noTone (12);

}

// dacă datele citite corespund parametrilor rulați bitul de cod descris

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

rechts ();

}

//""

altfel dacă (k 290) {

link-uri ();

}

//""

altfel dacă (k> 260 && k <280) {

boven ();

}

//""

altfel dacă (k> 240 && k <260) {

onder ();

}

//""

altfel dacă (k> 220 && k <240) {

A();

}

// dacă nu (când nu este apăsat niciun buton), rulați acest cod

altceva {

// Resetați același lucru, astfel încât să poată fi utilizat la următoarea apăsare a unui buton

la fel = 0;

// dacă contorul este de până la un anumit număr rulați bitul de cod descris

if (casier == 166) {

zelda ();

}

//""

altfel if (casier == 386) {

saria ();

}

//""

altfel if (casier == 266) {

epona ();

}

//""

altfel if (casier == 999) {

// redați acest ton pentru a marca eroarea

ton (difuzor, NOTE_C3, BEATTIME);

// resetați contorul la 0

casier = 0;

}

}

// întârzierea între intrare și ieșire

întârziere (100);

// imprimă valorile intrării dvs. pe monitorul serial

Serial.println (k);

}

// aceasta este prima melodie

void zelda () {

// setează un contor care se actualizează pe sine în timp ce redă melodia, astfel încât să poată citi și opri când ar trebui

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

// spune cât trebuie să dureze o notă

int ZTime = 1000 / ZeldaTime ;

// generează tonurile

ton (difuzor, Zelda , ZTime);

// creează întârzierea corectă

int pauză = ZTime * 1,30;

întârziere (pauză);

// resetează contorul

casier = 0;

// imprimă valorile intrării dvs. pe monitorul serial

Serial.println (casier);

}

}

//""

void epona () {

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

int ETime = 1000 / EponaTime ;

ton (difuzor, Epona , ETime);

int pauză = ETime * 1,30;

întârziere (pauză);

casier = 0;

Serial.println (casier);

}

}

//""

void saria () {

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

int STime = 1000 / SariaTime ;

ton (difuzor, Saria , STime);

int pauză = STime * 1,30;

întârziere (pauză);

casier = 0;

Serial.println (casier);

}

}

anularea rec

hts () {

// dacă acest lucru nu a fost deja apăsat

if (la fel == 0) {

// dacă contorul are în prezent una dintre aceste valori, adăugați-l

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

casier = casier + 1;

}

// în caz contrar, setați-l la 999, astfel încât să auziți zgomotul de eroare

altceva {

casier = 999;

}

// setați același lucru la unul astfel încât Arduino să nu citească o apăsare prelungită ca apăsări multiple

la fel = 1;

}

// redă tonul

altceva {

ton (difuzor, NOTE_A4, BEATTIME);

}

// imprimă valorile intrării dvs. pe monitorul serial

Serial.println (casier); }

//""

linkuri nule () {

if (la fel == 0) {

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

teller = teller + 11;

}

altfel if (teller == 0) {

casier = 111;

}

altceva {

casier = 999;

}

la fel = 1;

} altceva {

ton (difuzor, NOTE_B4, BEATTIME);

} Serial.println (casier);

}

//""

void boven () {

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

teller = teller + 21;

}

altfel if (teller == 0) {

casier = 221;

}

altceva {

casier = 999;

}

la fel = 1;

}

altceva {

ton (difuzor, NOTE_D5, BEATTIME);

Serial.println (casier);

}

}

//""

void onder () {

if (la fel == 0) {

if (casier == 343) {

teller = teller + 31;

}

altfel if (teller == 0) {

casier = 331;

} altceva {

casier = 999;

} la fel = 1;

} altceva {

ton (difuzor, NOTE_F4, BEATTIME);

Serial.println (casier);

}

}

//""

anulați un () {

if (la fel == 0) {

if (casier == 0) {

casier = 461;

}

altceva {

casier = 999;

}

la fel = 1;

}

ton (difuzor, NOTE_D4, BEATTIME);

Serial.println (casier);

}

Recomandat: