Indholdsfortegnelse:

Arduino Puzzle Box: 7 trin
Arduino Puzzle Box: 7 trin

Video: Arduino Puzzle Box: 7 trin

Video: Arduino Puzzle Box: 7 trin
Video: DIY Electronic puzzle box 2024, Juli
Anonim
Arduino Puzzle Box
Arduino Puzzle Box

Til dette projekt skal vi lave en puslespilkasse, der fungerer med musik. Det grundlæggende i det er, at når du trykker på en knap, frigiver den en melodi, og Arduino beregner, hvilke knapper der trykkes på, så den ved, hvad der er det rigtige og hvad der er det forkerte svar.

Forbrugsvarer

1 x Arduino uno

1 x 1k Ohm modstand

5 x 220 Ohm modstande

1 x Piezo -summer

5 x trykknap 6x6 mm

1 x sæt jumperwires

1 x perf/strip board

1 x loddet sæt

1 x hængsel

1 x klemme

1 x lille kommode/træ

1x varm limpistol + limpinde

1 x 9v batteri + holder

lidt worbla

maling

Trin 1:

Billede
Billede

Til at starte med skal du trykke på dine nåle i dit brødbræt. Tilslut nu analog 2 med en ledning til hjørnet af brættet. Vi skal forbinde to modstande til det i en linje. Den første er en 10k Ohm modstand. I den anden ende af denne modstand tilslutter vi ledning til den analoge jord. Den anden modstand er en 220 Ohm modstand, vi forbinder til den første knap. Brug en anden modstand af samme værdi for at forbinde den anden åbne side af knappen med den anden knap. Bliv ved med at forbinde knapperne sådan her til den sidste. Ved den sidste griber du en ledning og slutter den til en tilsvarende lukket side af knappen og slutter den til den næste i rækken. Du gentager nu den proces, du gjorde med modstandene, der kun kendes med almindelige ledninger. Tilslut den første knap til den analoge 3, 3V -port på din Arduino. Alt i alt får du en slags krydsmønster som vist nedenfor.

Trin 2:

Derefter tilslutter du summeren til brødbrættet og fastgør den ene side til den digitale jord og den anden til 12 -porten. Det er smart at allerede uploade følgende kode til din Arduino, så du kan teste, om alt fungerer korrekt. Hvis det er det, kan du begynde at lodde komponenterne sammen. Gør dette ved at tage dem ud af brødbrættet og lodde ledningerne og forbindelserne direkte sammen. Hvis du tror, du har brug for mere længde mellem knapperne, kan du tilføje en ekstra ledning mellem modstandene. Brødbrættet er ikke længere nødvendigt på dette tidspunkt.

Trin 3:

Billede
Billede

Efter at alt er loddet er det tid til at lave selve kassen. Jeg brugte et billigt sæt skuffer som en base til min. Jeg skar simpelthen halvt på langs og fjernede bagsiden og siden, jeg skar igennem. Du skal have to c -formede stykker nu. Skær den ene side af en af dem til brug som låg. Drej nu et af de resterende stykker, så de passer sammen som en låg uden låg og lim dem sammen. Når limen har sat sig ordentligt, borer du et lille hul i hver side af boksen til knapperne og et større til summeren i låget.

Trin 4:

Billede
Billede
Billede
Billede

Nu kan du komme til at male boksen. Jeg lavede mit med et blomsterdesign baseret på BOTW, men du kan virkelig vælge ethvert design, du ønsker. Når dette er gjort, kan du lægge knapperne inde i hullerne og lægge en klump lim på bagsiden af knappen og det omgivende træ. Det samme princip gælder for summeren, men min passer perfekt i hullet, hvilket gør det unødvendigt. Derefter tager du noget worbla og opvarmer og skærer det for at lave nogle små knapper. Lim dem forsigtigt fast på knapperne, men sørg for ikke at bruge for meget lim, fordi du ved et uheld kan få knapperne til at sidde fast. Nu kan du male dem om for at få dem til at smelte mere sammen med kassen.

Trin 5:

Til sidst limer eller skruer du, klemmen og hængslerne på kassen og låget, der forbinder de to.

Trin 6:

Nu hvor din boks er komplet, skal du blot sætte Arduino og batteri i den og lukke låget.

Trin 7: Kode

// Dette er koden til et puslespil/musikboks med Zelda -tema.

// dette forbinder din kode med listen over noter i den anden fane

#include "pitches.h"

// denne variabel vil sikre, at Arduino ser et længere tryk på knappen som et enkelt tryk

int samme = 0;

// herfra vil det læse dit input

int k = 2;

// dette er din output pin

int -højttaler = 12;

// nedenfor er slutmelodierne

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_A}

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;

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

// den normale varighed af en note

int BEATTIME = 300;

// tælleren, der vil holde styr på, hvor vi er i løsningen

int teller = 0;

ugyldig opsætning () {

Serial.begin (9600);

pinMode (2, INPUT);

pinMode (1, INPUT);

}

void loop () {

// læser input fra benene

k = analogRead (2);

int p = analogRead (1);

// hvis der ikke er trykket på nogen knap, bør der ikke være nogen tone

hvis (teller == 0) {

noTone (12);

}

// hvis de læste data svarer til parametrene, kør den beskrevne bit kode

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

rechts ();

}

//""

ellers hvis (k 290) {

links ();

}

//""

ellers hvis (k> 260 && k <280) {

boven ();

}

//""

ellers hvis (k> 240 && k <260) {

onder ();

}

//""

ellers hvis (k> 220 && k <240) {

en();

}

// hvis den ikke gør det (når der ikke trykkes på en knap), skal du køre denne kode

andet {

// nulstil det samme, så det kan bruges næste gang der trykkes på en knap

samme = 0;

// hvis tælleren er op til et bestemt tal, kør den beskrevne bit kode

hvis (teller == 166) {

zelda ();

}

//""

ellers hvis (teller == 386) {

saria ();

}

//""

ellers hvis (teller == 266) {

epona ();

}

//""

ellers hvis (teller == 999) {

// afspil denne tone for at markere fejlen

tone (højttaler, NOTE_C3, BEATTIME);

// nulstil tælleren til 0

teller = 0;

}

}

// forsinkelsen mellem input og output

forsinkelse (100);

// udskriver værdierne for dit input i den serielle skærm

Serial.println (k);

}

// dette er den første melodi

void zelda () {

// dette sætter en tæller, der opdaterer sig selv, mens melodien afspilles, så den kan læse den og stoppe, når den skal

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

// siger, hvor længe en note skal vare

int ZTime = 1000 / ZeldaTime ;

// genererer tonerne

tone (højttaler, Zelda , ZTime);

// skaber den korrekte forsinkelse

int pause = ZTime * 1,30;

forsinkelse (pause);

// nulstiller tælleren

teller = 0;

// udskriver værdierne for dit input i den serielle skærm

Serial.println (teller);

}

}

//""

void epona () {

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

int ETime = 1000 / EponaTime ;

tone (højttaler, Epona , ETime);

int pause = ETime * 1,30;

forsinkelse (pause);

teller = 0;

Serial.println (teller);

}

}

//""

void saria () {

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

int STime = 1000 / SariaTime ;

tone (højttaler, Saria , STime);

int pause = STime * 1,30;

forsinkelse (pause);

teller = 0;

Serial.println (teller);

}

}

ugyldig rec

hts () {

// hvis dette ikke allerede var trykket

hvis (samme == 0) {

// hvis tælleren i øjeblikket har en af disse værdier, tilføj dette til den

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

teller = teller + 1;

}

// ellers indstil den til 999, så du hører fejlstøj

andet {

teller = 999;

}

// indstil det samme til en, så Arduino ikke læser en længere tryk som flere tryk

samme = 1;

}

// afspil tonen

andet {

tone (højttaler, NOTE_A4, BEATTIME);

}

// udskriver værdierne for dit input i den serielle skærm

Serial.println (teller); }

//""

ugyldige links () {

hvis (samme == 0) {

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

teller = teller + 11;

}

ellers hvis (teller == 0) {

teller = 111;

}

andet {

teller = 999;

}

samme = 1;

} andet {

tone (højttaler, NOTE_B4, BEATTIME);

} Serial.println (teller);

}

//""

void boven () {

hvis (samme == 0) {hvis (teller == 111 || teller == 144 || teller == 233) {

teller = teller + 21;

}

ellers hvis (teller == 0) {

kasserer = 221;

}

andet {

teller = 999;

}

samme = 1;

}

andet {

tone (højttaler, NOTE_D5, BEATTIME);

Serial.println (teller);

}

}

//""

void onder () {

hvis (samme == 0) {

hvis (teller == 343) {

teller = teller + 31;

}

ellers hvis (teller == 0) {

teller = 331;

} andet {

teller = 999;

} samme = 1;

} andet {

tone (højttaler, NOTE_F4, BEATTIME);

Serial.println (teller);

}

}

//""

annullere a () {

hvis (samme == 0) {

hvis (teller == 0) {

teller = 461;

}

andet {

teller = 999;

}

samme = 1;

}

tone (højttaler, NOTE_D4, BEATTIME);

Serial.println (teller);

}

Anbefalede: