2025 Autor: John Day | [email protected]. Viimati modifitseeritud: 2025-01-13 06:57
Selle projekti jaoks valmistame mõistatuskarbi, mis töötab muusikaga. Selle põhiolemus on see, et kui vajutate nuppu, vabastab see viisi ja Arduino arvutab, milliseid nuppe vajutatakse, nii et ta teab, mis on õige ja mis vale vastus.
Tarvikud
1 x Arduino uno
1 x 1 kΩ takisti
5 x 220 oomi takistid
1 x Piezo summer
5 x nupp 6x6 mm
1 x komplekt Jumper juhtmed
1 x perf/ribaplaat
1 x jootekomplekt
1 x liigend
1 x klamber
1 x väike kummut/puit
1x kuum liimipüstol + liimipulgad
1 x 9v aku + hoidik
natuke muret
värvida
Samm 1:
Alustuseks peate vajutama oma leivalauale nööpnõelad. Nüüd ühendage analoog 2 juhtmega plaadi nurga külge. Me ühendame sellega kaks takisti reas. Esimene on 10k oomi takisti. Selle takisti teise otsa ühendame juhtme analoogmaandusega. Teine takisti on 220 oomi takisti, mille ühendame esimese nupuga. Kasutage teist sama väärtusega takistit, et ühendada nupu teine avatud külg teise nupuga. Jätkake selliste nuppude ühendamist viimasega. Viimasel võtate juhtmest kinni ja ühendate selle nupu vastava suletud küljega ning ühendate selle järgmisega. Nüüd kordate protsessi, mida tegite takistitega, mida teame ainult tavaliste juhtmetega. Ühendage esimene nupp oma Arduino analoog -3, 3V pordiga. Kokkuvõttes saate mingi ristipatteri, nagu allpool kujutatud.
2. samm:
Seejärel ühendage helisignaal leivaplaadiga ja kinnitage üks külg digitaalse maanduse külge ja teine 12 -porti. Tark on juba järgmine kood oma Arduinosse üles laadida, et saaksite testida, kas kõik töötab õigesti. Kui see on nii, võite hakata komponente kokku jootma. Selleks võtke need leivaplaadist välja ja jootke juhtmed ja ühendused otse kokku. Kui arvate, et vajate nuppude vahel rohkem pikkust, saate takistite vahele lisada lisatraadi. Leivalaud pole praegu enam vajalik.
3. samm:
Kui kõik on joodetud, on aeg karp ise valmistada. Mina kasutasin oma alusena odavat sahtlikomplekti. Lõikasin lihtsalt pikuti pooleks ja eemaldasin selja ja külje, mille läbi lõikasin. Nüüd peaks teil olema kaks c -kujulist tükki. Lõigake üks neist ühest küljest, et seda kaanena kasutada. Nüüd pöörake üht ülejäänud tükki nii, et need sobiksid kokku nagu kaaneta kast ja liimige need kokku. Kui liim on korralikult tardunud, puurige kasti mõlemasse külge väike auk nuppude jaoks ja suurem kaane sumina jaoks.
4. samm:
Nüüd saate hakata kasti värvima. Ma tegin oma BOTW -l põhineva lillekujundusega, kuid saate tõesti valida mis tahes kujunduse. Pärast seda saate nööbid aukudesse panna ja nööbi tagaküljele ning ümbritsevale puidule liimikera panna. Sama põhimõte kehtib sumisti kohta, kuid minu oma sobib ideaalselt auku, muutes selle tarbetuks. Järgmisena haarate töölaua ja kuumutate ning lõigake see väikeste nuppude tegemiseks. Liimige need ettevaatlikult nuppude külge, kuid ärge kasutage liiga palju liimi, sest võite nupud kogemata kinni jääda. Nüüd saate need üle värvida, et need karbiga paremini seguneksid.
5. samm:
Lõpuks liimite või kruvite, klamber ja hinged karbil ja kaanel, mis neid kahte ühendavad.
6. samm:
Nüüd, kui teie kast on valmis, peate vaid panema Arduino ja aku selle sisse ning sulgema kaas.
Samm: kood
// See on Zelda -teemalise pusle/muusikakasti kood.
// see ühendab teie koodi märkmete loendiga teisel vahekaardil
#include "pitchid.h"
// see muutuja tagab, et Arduino näeb nupu pikemat vajutamist vaid ühe vajutusena
int sama = 0;
// siit loeb see teie sisendit
int k = 2;
// see on teie väljundnõel
int kõneleja = 12;
// allpool on lõppmeloodiad
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_4, int SariaTime = {8, 8, 4, 8, 8, 4, 8, 8, 8, 8, 4, 8, 8, 8, 8, 3, 8, 8, 8, 2, 1};
// noodi tavaline kestus
int BEATTIME = 300;
// loendur, mida me jälgime, kui oleme lahenduses
int teller = 0;
tühine seadistus () {
Seriaalne algus (9600);
pinMode (2, INPUT);
pinMode (1, INPUT);
}
void loop () {
// loeb sisendit tihvtidelt
k = analoogLoe (2);
int p = analoogLoe (1);
// kui ühtegi nuppu ei vajutata, ei tohiks tooni olla
kui (teller == 0) {
noTone (12);
}
// kui loetud andmed vastavad parameetritele, käivitage kirjeldatud koodibitt
kui (k> 320 && k <350) {
rechts ();
}
//""
muidu kui (k 290) {
lingid ();
}
//""
muidu kui (k> 260 && k <280) {
kootud ();
}
//""
muidu kui (k> 240 && k <260) {
onder ();
}
//""
muidu kui (k> 220 && k <240) {
a ();
}
// kui seda ei tehta (kui ühtegi nuppu ei vajutata), käivitage see kood
muu {
// lähtesta sama, et seda saaks järgmisel nupuvajutusel kasutada
sama = 0;
// kui loendur on teatud arvuni, käivitage kirjeldatud koodibitt
kui (teller == 166) {
zelda ();
}
//""
muidu kui (teller == 386) {
saria ();
}
//""
muidu kui (teller == 266) {
epona ();
}
//""
muidu kui (teller == 999) {
// esita seda tooni vea märkimiseks
toon (kõlar, NOTE_C3, BEATTIME);
// lähtesta loendur 0 -le
teller = 0;
}
}
// viivitus sisendi ja väljundi vahel
viivitus (100);
// prindib jadamonitori sisendi väärtused
Seeria.println (k);
}
// see on esimene meloodia
tühine zelda () {
// see seab loenduri, mis värskendab ennast meloodia esitamise ajal, et see saaks seda lugeda ja peatada, kui peaks
jaoks (int i = 0; i <sizeof (Zelda); i ++) {
// ütleb, kui kaua peaks noot kestma
int ZTime = 1000 / ZeldaTime ;
// genereerib toonid
toon (kõneleja, Zelda , ZTime);
// loob õige viivituse
int paus = ZTime * 1.30;
viivitus (paus);
// lähtestab loenduri
teller = 0;
// prindib jadamonitori sisendi väärtused
Serial.println (teller);
}
}
//""
tühine epona () {
jaoks (int i = 0; i <sizeof (Epona); i ++) {
int ETime = 1000 / EponaTime ;
toon (kõneleja, Epona , ETime);
int paus = ETime * 1.30;
viivitus (paus);
teller = 0;
Serial.println (teller);
}
}
//""
tühine saria () {
jaoks (int i = 0; i <sizeof (Saria); i ++) {
int STime = 1000 / SariaTime ;
toon (kõneleja, Saria , STime);
int paus = STime * 1.30;
viivitus (paus);
teller = 0;
Serial.println (teller);
}
}
tühine rets
hts () {
// kui seda pole juba vajutatud
kui (sama == 0) {
// kui loenduril on praegu üks neist väärtustest, lisage see sellele
kui (teller == 0 || teller == 132 || teller == 165 || teller == 232 || teller == 265 || teller == 331 || teller == 374) {
teller = teller + 1;
}
// muidu määrake see 999 -le, nii et kuulete veamüra
muu {
teller = 999;
}
// seada samale ühele, nii et Arduino ei loe pikemaajalisi vajutusi mitme vajutusena
sama = 1;
}
// mängi tooni
muu {
toon (kõlar, NOTE_A4, BEATTIME);
}
// prindib jadamonitori sisendi väärtused
Serial.println (teller); }
//""
tühjad lingid () {
kui (sama == 0) {
kui (teller == 133 || teller == 254 || teller == 244 || teller == 332 || teller == 375 || teller == 221) {
teller = teller + 11;
}
muidu kui (teller == 0) {
teller = 111;
}
muu {
teller = 999;
}
sama = 1;
} muud {
toon (kõlar, NOTE_B4, BEATTIME);
} Serial.println (teller);
}
//""
void boven () {
kui (sama == 0) {kui (teller == 111 || teller == 144 || teller == 233) {
teller = teller + 21;
}
muidu kui (teller == 0) {
teller = 221;
}
muu {
teller = 999;
}
sama = 1;
}
muu {
toon (kõlar, NOTE_D5, BEATTIME);
Serial.println (teller);
}
}
//""
void onder () {
kui (sama == 0) {
kui (teller == 343) {
teller = teller + 31;
}
muidu kui (teller == 0) {
teller = 331;
} muud {
teller = 999;
} sama = 1;
} muud {
toon (kõlar, NOTE_F4, BEATTIME);
Serial.println (teller);
}
}
//""
tühine a () {
kui (sama == 0) {
kui (teller == 0) {
teller = 461;
}
muu {
teller = 999;
}
sama = 1;
}
toon (kõlar, NOTE_D4, BEATTIME);
Serial.println (teller);
}