Innehållsförteckning:

Arduino Puzzle Box: 7 steg
Arduino Puzzle Box: 7 steg

Video: Arduino Puzzle Box: 7 steg

Video: Arduino Puzzle Box: 7 steg
Video: Puzzle Box with Arduino 2024, November
Anonim
Arduino Puzzle Box
Arduino Puzzle Box

För det här projektet kommer vi att göra en pusselåda som fungerar med musik. Den grundläggande kärnan i det är att när du trycker på en knapp släpper den en melodi och Arduino beräknar vilka knappar som trycks så att den vet vad som är rätt och vad som är fel svar.

Tillbehör

1 x Arduino uno

1 x 1k Ohm motstånd

5 x 220 Ohm motstånd

1 x Piezo -summer

5 x tryckknapp 6x6 mm

1 x set bygeltrådar

1 x perf/bandbräda

1 x ledsats

1 x gångjärn

1 x klämma

1 x liten byrå/trä

1x varm limpistol + limpinnar

1 x 9v batteri + hållare

lite worbla

måla

Steg 1:

Bild
Bild

Till att börja med måste du trycka på dina stift i din brödbräda. Anslut nu analog 2 med en kabel till hörnet av kortet. Vi ska ansluta två motstånd till det i en linje. Det första är ett 10k Ohm motstånd. I andra änden av detta motstånd ansluter vi tråd till den analoga jordningen. Det andra motståndet är ett 220 Ohm motstånd som vi ansluter till den första knappen. Använd ett annat motstånd med samma värde för att ansluta den andra öppna sidan av knappen med den andra knappen. Fortsätt ansluta knapparna så här till den sista. Vid den sista tar du en tråd och ansluter den till en motsvarande stängd sida av knappen och ansluter den till nästa i raden. Du upprepar nu processen du gjorde med motstånden som du bara känner till med vanliga ledningar. Anslut den första knappen till den analoga 3, 3V -porten på din Arduino. Sammantaget kommer du att få ett slags korsmönster som visas nedan.

Steg 2:

Anslut sedan summern till brödbrädet och fäst ena sidan till den digitala marken och den andra till 12 -porten. Det är smart att redan ladda upp följande kod till din Arduino så att du kan testa om allt fungerar korrekt. Om det är det kan du börja lödda komponenterna tillsammans. Gör detta genom att ta ut dem från brödbrädan och löda ihop trådarna och anslutningarna direkt. Om du tror att du behöver mer längd mellan knapparna kan du lägga till lite extra tråd mellan motstånden. Brödbrädan är inte längre nödvändig vid denna tidpunkt.

Steg 3:

Bild
Bild

Efter att allt har lödts är det dags att göra själva lådan. Jag använde en billig låda som en bas för min. Jag skar helt enkelt på mitten på längden och tog bort baksidan och sidan jag skar igenom. Du borde ha två c -formade bitar nu. Skär ena sidan av en av dem för att använda som lock. Vrid nu en av de återstående bitarna så att de passar ihop som en locklös låda och limma ihop dem. När limmet har fastnat ordentligt, borra ett litet hål i varje sida av lådan för knapparna och ett större för summern i locket.

Steg 4:

Bild
Bild
Bild
Bild

Nu kan du måla lådan. Jag gjorde min med en blomsterdesign baserad på BOTW men du kan verkligen välja vilken design du vill. När detta är gjort kan du sätta knapparna inuti hålen och lägga en klump lim på baksidan av knappen och det omgivande träet. Samma princip gäller summern men min passar perfekt i hålet vilket gör det onödigt. Därefter tar du lite worbla och värmer och skär det för att göra några små knappar. Lim försiktigt fast dem på knapparna men se till att inte använda för mycket lim eftersom du av misstag kan fastna i knapparna. Nu kan du måla om dem för att få dem att smälta in i lådan mer.

Steg 5:

Slutligen limar eller skruvar du fast klämman och gångjärnen på lådan och locket som förbinder de två.

Steg 6:

Nu när din låda är klar är det bara att sätta in Arduino och batteriet i den och stänga locket.

Steg 7: Kod

// Detta är koden för ett pussel/musiklåda med Zelda -tema.

// detta ansluter din kod till listan med anteckningar på den andra fliken

#inkludera "pitches.h"

// denna variabel kommer att se till att Arduino ser ett längre tryck på knappen som bara ett tryck

int samma = 0;

// härifrån kommer den att läsa din input

int k = 2;

// detta är din utgångsstift

int -högtalare = 12;

// nedan är slutmelodierna

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 normala längden på en anteckning

int BATTIME = 300;

// räknaren som kommer att hålla reda på om vi är i lösningen

int teller = 0;

void setup () {

Serial.begin (9600);

pinMode (2, INPUT);

pinMode (1, INPUT);

}

void loop () {

// läser inmatningen från stiften

k = analogRead (2);

int p = analogRead (1);

// om det inte trycks på någon knapp ska det inte vara någon ton

if (teller == 0) {

noTone (12);

}

// om läsdata överensstämmer med parametrarna kör den beskrivna kodbiten

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

rechts ();

}

//""

annat om (k 290) {

länkar ();

}

//""

annars om (k> 260 && k <280) {

boven ();

}

//""

annars om (k> 240 && k <260) {

onder ();

}

//""

annars om (k> 220 && k <240) {

a ();

}

// om det inte gör det (när ingen knapp trycks in), kör den här koden

annat {

// Återställ samma så att den kan användas nästa gång en knapp trycks in

samma = 0;

// om räknaren är upp till ett visst antal kör den beskrivna koden

if (teller == 166) {

Zelda();

}

//""

annars om (teller == 386) {

saria ();

}

//""

annars om (teller == 266) {

epona ();

}

//""

annat om (teller == 999) {

// spela denna ton för att markera felet

ton (högtalare, NOTE_C3, BEATTIME);

// återställ räknaren till 0

teller = 0;

}

}

// fördröjningen mellan ingång och utgång

fördröjning (100);

// skriver ut värdena för din ingång i den seriella bildskärmen

Serial.println (k);

}

// detta är den första melodin

void zelda () {

// detta sätter en räknare som uppdaterar sig själv medan man spelar melodin så att den kan läsa den och sluta när den ska

för (int i = 0; i <sizeof (Zelda); i ++) {

// säger hur länge en lapp ska hålla

int ZTime = 1000 / ZeldaTime ;

// genererar tonerna

ton (högtalare, Zelda , ZTime);

// skapar rätt fördröjning

int paus = ZTime * 1,30;

fördröjning (paus);

// återställer räknaren

teller = 0;

// skriver ut värdena för din ingång i den seriella bildskärmen

Serial.println (teller);

}

}

//""

void epona () {

för (int i = 0; i <sizeof (Epona); i ++) {

int ETime = 1000 / EponaTime ;

ton (högtalare, Epona , ETime);

int paus = ETime * 1,30;

fördröjning (paus);

teller = 0;

Serial.println (teller);

}

}

//""

void saria () {

för (int i = 0; i <sizeof (Saria); i ++) {

int STime = 1000 / SariaTime ;

ton (talare, Saria , STime);

int paus = STime * 1,30;

fördröjning (paus);

teller = 0;

Serial.println (teller);

}

}

ogiltigt rek

hts () {

// om detta inte redan trycktes

om (samma == 0) {

// om räknaren för närvarande har ett av dessa värden, lägg till detta i den

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

teller = teller + 1;

}

// ange den annars till 999 så att du hör felbruset

annat {

teller = 999;

}

// sätt samma till en så att Arduino inte läser en utdragen press som flera tryckningar

samma = 1;

}

// spela tonen

annat {

ton (högtalare, NOTE_A4, BEATTIME);

}

// skriver ut värdena för din ingång i seriell bildskärm

Serial.println (teller); }

//""

ogiltiga länkar () {

om (samma == 0) {

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

teller = teller + 11;

}

annars om (teller == 0) {

teller = 111;

}

annat {

teller = 999;

}

samma = 1;

} annat {

ton (högtalare, NOTE_B4, BEATTIME);

} Serial.println (teller);

}

//""

void boven () {

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

teller = teller + 21;

}

annars om (teller == 0) {

teller = 221;

}

annat {

teller = 999;

}

samma = 1;

}

annat {

ton (högtalare, NOTE_D5, BEATTIME);

Serial.println (teller);

}

}

//""

void onder () {

om (samma == 0) {

if (teller == 343) {

teller = teller + 31;

}

annars om (teller == 0) {

teller = 331;

} annat {

teller = 999;

} samma = 1;

} annat {

ton (högtalare, NOTE_F4, BEATTIME);

Serial.println (teller);

}

}

//""

ogiltig a () {

om (samma == 0) {

if (teller == 0) {

teller = 461;

}

annat {

teller = 999;

}

samma = 1;

}

ton (högtalare, NOTE_D4, BEATTIME);

Serial.println (teller);

}

Rekommenderad: