Innehållsförteckning:
Video: Arduino Puzzle Box: 7 steg
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:41
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:
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:
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:
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:
Crack the Code Game, Arduino Based Puzzle Box: 4 Steg (med bilder)
Crack the Code Game, Arduino Based Puzzle Box: I den här instruktionsboken kommer jag att visa dig hur du bygger ditt eget crack -kodspel där du använder en roterande kodare för att gissa den slumpmässigt genererade koden till kassaskåpet. Det finns 8 lysdioder på framsidan av kassaskåpet för att berätta hur många av de
Heroes of Hammerwatch Puzzle på en Arduino: 4 steg
Heroes of Hammerwatch Puzzle on an Arduino: Hej alla, det här är mitt första intructable och engelska är inte mitt första språk så var fri att korrigera mig där jag har fel. Hammerwatch med arduino
A Juke Box for the Very Young Aka Raspi-Music-Box: 5 steg
A Juke Box for the Very Young … Aka Raspi-Music-Box: Inspirerad av den instruerbara " Raspberry-Pi-baserade-RFID-Music-Robot " som beskriver en musikspelare ROALDH byggde för sin 3-åring, bestämde jag mig för att bygga en jukebox för mina ännu yngre barn. Det är i grunden en låda med 16 knappar och en Raspi 2 i
PUZZLE - Arduino Logic Game: 3 steg
PUZZLE - Arduino Logic Game: Hej. Jag skulle vilja berätta om historien om att skapa ett enkelt pusselspel " Puzzle " med Arduino UNO och TFT-Shield. För att skapa spelet behövde jag följande komponenter: Arduino UNO Power Adapter (AC-DC) 6-12V för Arduino UNO Micro
Puzzle Box - Codebreakers and Groundbreakers [UCM]: 7 steg (med bilder)
Puzzle Box - Codebreakers and Groundbreakers [UCM]: Ett laserskuret pusselådesats avsett för en digital makerverkstad på Fitzwilliam Museum, Cambridge i samband med deras utställning av Codebreakers och Groundbreakers. För workshopen var knappen i pusselboxen ansluten till en MakeyMakey en