Innholdsfortegnelse:

Arduino Puzzle Box: 7 trinn
Arduino Puzzle Box: 7 trinn

Video: Arduino Puzzle Box: 7 trinn

Video: Arduino Puzzle Box: 7 trinn
Video: Как сделать игру "Мраморный лабиринт" 2024, November
Anonim
Arduino Puzzle Box
Arduino Puzzle Box

For dette prosjektet skal vi lage en puslespillboks som fungerer med musikk. Den grunnleggende kjernen i det er at når du trykker på en knapp, slipper den en melodi, og Arduino beregner hvilke knapper som trykkes slik at den vet hva som er riktig og hva som er feil svar.

Rekvisita

1 x Arduino uno

1 x 1k Ohm motstand

5 x 220 Ohm motstander

1 x Piezo -summer

5 x trykknapp 6x6 mm

1 x sett jumper ledninger

1 x perf/stripebrett

1 x loddesett

1 x hengsel

1 x klemme

1 x liten kommode/tre

1x varm limpistol + limpinner

1 x 9v batteri + holder

litt worbla

maling

Trinn 1:

Bilde
Bilde

Til å begynne med må du trykke pinnene i brødbrettet. Koble nå analog 2 med en ledning til hjørnet av brettet. Vi skal koble to motstander til det på en linje. Den første er en 10k Ohm motstand. I den andre enden av denne motstanden kobler vi ledningen til den analoge bakken. Den andre motstanden er en 220 Ohm motstand vi kobler til den første knappen. Bruk en annen motstand av samme verdi for å koble den andre åpne siden av knappen til den andre knappen. Fortsett å koble knappene slik til den siste. I den siste tar du en ledning og kobler den til en tilsvarende lukket side av knappen og kobler den til den neste i rekken. Du gjentar nå prosessen du gjorde med motstandene som du bare kjenner med vanlige ledninger. Koble den første knappen til den analoge 3, 3V -porten på Arduino. Alt i alt får du et slags kryssmønster som vist nedenfor.

Steg 2:

Deretter kobler du summeren til brødbrettet og fester den ene siden til den digitale bakken og den andre til 12 -porten. Det er smart å allerede laste opp følgende kode til Arduino slik at du kan teste om alt fungerer som det skal. Hvis det er det, kan du begynne å lodde komponentene sammen. Gjør dette ved å ta dem ut av brødbrettet og lodde ledningene og forbindelsene direkte sammen. Hvis du tror du trenger mer lengde mellom knappene, kan du legge til en ekstra ledning mellom motstandene. Brettbrettet er ikke lenger nødvendig på dette tidspunktet.

Trinn 3:

Bilde
Bilde

Etter at alt er loddet er det på tide å lage boksen selv. Jeg brukte et billig sett med skuffer som en base for min. Jeg kuttet ganske enkelt i to på langs og fjernet baksiden og siden jeg skar gjennom. Du bør ha to c -formede stykker nå. Skjær den ene siden av en av dem for å bruke som lokk. Roter nå en av de gjenværende bitene slik at de passer sammen som en lokk uten lokk og lim dem sammen. Når limet har satt seg ordentlig, borer du et lite hull i hver side av esken for knappene og et større for summeren i lokket.

Trinn 4:

Bilde
Bilde
Bilde
Bilde

Nå kan du male boksen. Jeg gjorde mitt med et blomsterdesign basert på BOTW, men du kan virkelig velge hvilket design du vil. Etter at dette er gjort kan du sette knappene inne i hullene og legge en klump lim på baksiden av knappen og det omkringliggende treverket. Det samme prinsippet gjelder summeren, men min passer perfekt i hullet, noe som gjør det unødvendig. Deretter tar du tak i litt worbla og varme og kutte den for å lage noen små knapper. Lim dem forsiktig på knappene, men pass på at du ikke bruker for mye lim fordi du ved et uhell kan sette knappene fast. Nå kan du male dem over for å få dem til å blande seg inn i esken mer.

Trinn 5:

Til slutt limer eller skruer du klemmen og hengslene på esken og lokket som forbinder de to.

Trinn 6:

Nå som esken er ferdig, er det bare å sette Arduino og batteriet i den og lukke lokket.

Trinn 7: Kode

// Dette er koden for et puslespill/musikkboks med Zelda -tema.

// dette kobler koden din til listen over notater i den andre fanen

#inkludere "pitches.h"

// denne variabelen vil sikre at Arduino ser et lengre trykk på knappen som bare ett trykk

int same = 0;

// herfra vil den lese innspillene dine

int k = 2;

// dette er utgangspinnen din

int høyttaler = 12;

// nedenfor er sluttmelodiene

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 varigheten av et notat

int BEATTIME = 300;

// telleren som kommer til å holde styr på hvor vi er i løsningen

int teller = 0;

ugyldig oppsett () {

Serial.begin (9600);

pinMode (2, INNGANG);

pinMode (1, INNGANG);

}

void loop () {

// leser inngangen fra pinnene

k = analogRead (2);

int p = analogRead (1);

// hvis det ikke er trykket på noen knapp, bør det ikke være noen tone

hvis (teller == 0) {

noTone (12);

}

// hvis lesedataene samsvarer med parameterne, kjør den beskrevne koden

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

rechts ();

}

//""

annet hvis (k 290) {

lenker ();

}

//""

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

boven ();

}

//""

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

onder ();

}

//""

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

en();

}

// hvis den ikke gjør det (når ingen knapp trykkes), kjør denne koden

annet {

// tilbakestill det samme slik at det kan brukes neste gang du trykker på en knapp

samme = 0;

// hvis telleren er opp til et visst tall, kjør den beskrevne koden

hvis (teller == 166) {

zelda ();

}

//""

annet hvis (teller == 386) {

saria ();

}

//""

annet hvis (teller == 266) {

epona ();

}

//""

annet hvis (teller == 999) {

// spill denne tonen for å markere feilen

tone (høyttaler, NOTE_C3, BEATTIME);

// nullstill telleren til 0

teller = 0;

}

}

// forsinkelsen mellom inngang og utgang

forsinkelse (100);

// skriver ut verdiene for inngangen din i den serielle skjermen

Serial.println (k);

}

// dette er den første melodien

void zelda () {

// dette setter en teller som oppdaterer seg selv mens du spiller melodien, slik at den kan lese den og stoppe når den skal

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

// sier hvor lenge en lapp skal vare

int ZTime = 1000 / ZeldaTime ;

// genererer tonene

tone (høyttaler, Zelda , ZTime);

// oppretter riktig forsinkelse

int pause = ZTime * 1,30;

forsinkelse (pause);

// tilbakestiller telleren

teller = 0;

// skriver ut verdiene for inngangen din i den serielle skjermen

Serial.println (teller);

}

}

//""

void epona () {

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

int ETime = 1000 / EponaTime ;

tone (høyttaler, 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øyttaler, Saria , STime);

int pause = STime * 1,30;

forsinkelse (pause);

teller = 0;

Serial.println (teller);

}

}

ugid rec

hts () {

// hvis dette ikke allerede var trykket

hvis (samme == 0) {

// hvis telleren for øyeblikket har en av disse verdiene, legg denne til den

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

teller = teller + 1;

}

// ellers sett den til 999 slik at du hører feilstøy

annet {

teller = 999;

}

// sett det samme til en slik at Arduino ikke leser en lang trykk som flere trykk

samme = 1;

}

// spill tonen

annet {

tone (høyttaler, NOTE_A4, BEATTIME);

}

// skriver ut verdiene for inngangen din i den serielle skjermen

Serial.println (teller); }

//""

ugyldige lenker () {

hvis (samme == 0) {

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

teller = teller + 11;

}

annet hvis (teller == 0) {

teller = 111;

}

annet {

teller = 999;

}

samme = 1;

} annet {

tone (høyttaler, NOTE_B4, BEATTIME);

} Serial.println (teller);

}

//""

void boven () {

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

teller = teller + 21;

}

annet hvis (teller == 0) {

teller = 221;

}

annet {

teller = 999;

}

samme = 1;

}

annet {

tone (høyttaler, NOTE_D5, BEATTIME);

Serial.println (teller);

}

}

//""

void onder () {

hvis (samme == 0) {

hvis (teller == 343) {

teller = teller + 31;

}

annet hvis (teller == 0) {

teller = 331;

} annet {

teller = 999;

} samme = 1;

} annet {

tone (høyttaler, NOTE_F4, BEATTIME);

Serial.println (teller);

}

}

//""

ugyldig a () {

hvis (samme == 0) {

hvis (teller == 0) {

teller = 461;

}

annet {

teller = 999;

}

samme = 1;

}

tone (høyttaler, NOTE_D4, BEATTIME);

Serial.println (teller);

}

Anbefalt: