Turinys:
2025 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2025-01-13 06:57
Šiam projektui mes sukursime dėlionės dėžutę, kuri veikia su muzika. Pagrindinė jo esmė yra ta, kad paspaudus mygtuką jis išleidžia melodiją ir „Arduino“apskaičiuoja, kurie mygtukai yra paspaudžiami, kad žinotų, kas yra teisinga, o kas - neteisingas atsakymas.
Prekės
1 x „Arduino uno“
1 x 1k omo rezistorius
5 x 220 omų rezistoriai
1 x Piezo garsinis signalas
5 x 6x6 mm mygtukai
1 x komplektas jungiamųjų laidų
1 x perforuota/juostelinė lenta
1 x litavimo komplektas
1 x vyriai
1 x spaustukas
1 x maža komoda/mediena
1x karšto klijų pistoletas + klijų lazdelės
1 x 9 V baterija + laikiklis
truputis darbo
dažyti
1 žingsnis:
Norėdami pradėti, turite paspausti kaiščius savo duonos lentoje. Dabar prijunkite 2 analogą laidu prie plokštės kampo. Mes ketiname prie jo prijungti du rezistorius linijoje. Pirmasis yra 10 kΩ rezistorius. Prie kito šio rezistoriaus galo prijungiame laidą prie analoginio įžeminimo. Antrasis rezistorius yra 220 omų rezistorius, kurį mes prijungiame prie pirmojo mygtuko. Norėdami sujungti antrą atvirą mygtuko pusę su antruoju mygtuku, naudokite kitą tos pačios vertės rezistorių. Toliau prijunkite tokius mygtukus iki paskutinio. Paskutiniame jūs paimkite laidą ir prijunkite jį prie atitinkamos uždarytos mygtuko pusės ir prijunkite prie kitos eilutės. Dabar jūs kartojate procesą, kurį atlikote su rezistoriais, kuriuos žinote tik paprastais laidais. Prijunkite pirmąjį mygtuką prie analoginio 3, 3 V prievado „Arduino“. Apskritai jūs gausite kryžminį paterną, kaip parodyta žemiau.
2 žingsnis:
Tada prijunkite signalą prie duonos lentos ir vieną pusę pritvirtinkite prie skaitmeninio įžeminimo, o kitą - prie 12 prievado. Protinga jau įkelti šį kodą į „Arduino“, kad galėtumėte patikrinti, ar viskas veikia tinkamai. Jei taip, galite pradėti lituoti komponentus kartu. Padarykite tai, ištraukdami juos iš duonos lentos ir tiesiogiai lituodami laidus ir jungtis. Jei manote, kad tarp mygtukų reikia daugiau ilgio, galite pridėti papildomą laidą tarp rezistorių. Duonos lentos šiuo metu nebereikia.
3 žingsnis:
Po to, kai viskas yra sulituota, laikas pasidaryti pačią dėžutę. Aš naudoju pigų stalčių komplektą kaip savo pagrindą. Aš tiesiog perpjoviau išilgai per pusę ir nuėmiau nugarą bei šoną, kurį perpjoviau. Dabar turėtumėte turėti dvi c formos dalis. Nupjaukite vieną jų pusę, kad galėtumėte naudoti kaip dangtį. Dabar pasukite vieną iš likusių dalių taip, kad jos derėtų kaip dėžutė be dangčio ir klijuokite jas kartu. Kai klijai tinkamai sukietėja, kiekvienoje dėžutės pusėje išgręžkite mažą skylutę sagoms ir didesnę skylę dangtelyje.
4 žingsnis:
Dabar galite pradėti dažyti dėžutę. Aš padariau savo gėlių dizainą, pagrįstą BOTW, bet jūs tikrai galite pasirinkti bet kokį norimą dizainą. Kai tai bus padaryta, galite įkišti mygtukus į skylių vidų ir uždėti klijų rutulį ant mygtuko užpakalinės dalies ir aplinkinės medienos. Tas pats principas galioja ir garso signalui, bet mano puikiai tinka skylėje, todėl jo nereikia. Tada paimkite šiek tiek darbo ir pašildykite ir supjaustykite, kad padarytumėte mažus mygtukus. Atsargiai priklijuokite juos prie mygtukų, tačiau stenkitės nenaudoti daug klijų, nes galite netyčia įstrigti. Dabar galite juos dažyti, kad jie geriau susimaišytų su dėžute.
5 veiksmas:
Galiausiai klijuojate arba užsukite varžtą, spaustuką ir vyriai ant dėžutės ir dangčio, jungiančio abu.
6 žingsnis:
Dabar, kai dėžutė baigta, viskas, ką jums reikia padaryti, yra įdėti „Arduino“ir bateriją į ją ir uždaryti dangtį.
7 žingsnis: kodas
// Tai yra „Zelda“temos dėlionės/muzikos dėžutės kodas.
// tai sujungia jūsų kodą su pastabų sąrašu kitame skirtuke
#įtraukti „pikches.h“
// šis kintamasis užtikrins, kad „Arduino“matytų ilgesnį mygtuko paspaudimą kaip vieną paspaudimą
int tas pats = 0;
// iš čia jis skaitys jūsų įvestį
int k = 2;
// tai yra jūsų išvesties kaištis
int garsiakalbis = 12;
// žemiau yra pabaigos melodijos
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};
// įprasta natos trukmė
int BEATTIME = 300;
// skaitiklis, kurį ketiname sekti, jei esame sprendime
int tarėjas = 0;
void setup () {
Serial.begin (9600);
pinMode (2, INPUT);
pinMode (1, INPUT);
}
void loop () {
// skaito įvestį iš kaiščių
k = analogRead (2);
int p = analogRead (1);
// jei nepaspaudžiamas joks mygtukas, neturėtų būti jokio tono
jei (sakytojas == 0) {
noTone (12);
}
// jei nuskaityti duomenys atitinka parametrus, paleiskite aprašytą kodo bitą
jei (k> 320 && k <350) {
rechts ();
}
//""
kitaip, jei (k 290) {
nuorodos ();
}
//""
kitaip jei (k> 260 && k <280) {
boven ();
}
//""
kitaip jei (k> 240 && k <260) {
onderis ();
}
//""
kitaip, jei (k> 220 && k <240) {
a ();
}
// jei ne (kai nepaspaudžiamas joks mygtukas), paleiskite šį kodą
Kitas {
// atstatyti tą patį, kad jį būtų galima naudoti kitą kartą paspaudus mygtuką
tas pats = 0;
// jei skaitiklis yra iki tam tikro skaičiaus, paleiskite aprašytą kodo bitą
jei (kasininkas == 166) {
zelda ();
}
//""
kitaip jei (sakytojas == 386) {
sarija ();
}
//""
kitaip jei (sakytojas == 266) {
epona ();
}
//""
kitaip jei (kasininkas == 999) {
// paleiskite šį toną, kad pažymėtumėte klaidą
tonas (garsiakalbis, NOTE_C3, BEATTIME);
// atstatyti skaitiklį į 0
sakytojas = 0;
}
}
// vėlavimas tarp įvesties ir išvesties
vėlavimas (100);
// spausdina jūsų įvesties reikšmes serijiniame monitoriuje
Serijinis.println (k);
}
// tai pirmoji melodija
void zelda () {
// tai nustato skaitiklį, kuris atnaujinamas grojant melodijai, kad galėtų ją perskaityti ir sustabdyti, kai turėtų
už (int i = 0; i <sizeof (Zelda); i ++) {
// nurodo, kiek laiko turėtų trukti pastaba
int ZTime = 1000 / ZeldaTime ;
// generuoja tonus
tonas (garsiakalbis, „Zelda “, „ZTime“);
// sukuria teisingą delsą
int pauzė = ZTime * 1.30;
vėlavimas (pauzė);
// iš naujo nustato skaitiklį
sakytojas = 0;
// spausdina jūsų įvesties reikšmes serijiniame monitoriuje
Serial.println (kasininkas);
}
}
//""
void epona () {
už (int i = 0; i <sizeof (Epona); i ++) {
int ETime = 1000 / EponaTime ;
tonas (garsiakalbis, „Epona “, „ETime“);
int pauzė = ETime * 1.30;
vėlavimas (pauzė);
sakytojas = 0;
Serial.println (kasininkas);
}
}
//""
void saria () {
už (int i = 0; i <sizeof (Saria); i ++) {
int STime = 1000 / SariaTime ;
tonas (garsiakalbis, Saria , STime);
int pauzė = STime * 1.30;
vėlavimas (pauzė);
sakytojas = 0;
Serial.println (kasininkas);
}
}
negaliojantis rec
hts () {
// jei tai dar nebuvo paspausta
jei (tas pats == 0) {
// jei skaitiklis šiuo metu turi vieną iš šių verčių, pridėkite tai
jei (kasininkas == 0 || kasininkas == 132 || kasininkas == 165 || kasininkas == 232 || kasininkas == 265 || kasininkas == 331 || kasininkas == 374) {
kasininkas = kasininkas + 1;
}
// kitaip nustatykite jį į 999, kad išgirstumėte klaidos triukšmą
Kitas {
kasininkas = 999;
}
// nustatykite tą patį į vieną, kad „Arduino“neskaitytų ilgo spaudimo kaip kelių paspaudimų
tas pats = 1;
}
// groti tonu
Kitas {
tonas (garsiakalbis, NOTE_A4, BEATTIME);
}
// spausdina jūsų įvesties reikšmes serijiniame monitoriuje
Serial.println (kasininkas); }
//""
tuščios nuorodos () {
jei (tas pats == 0) {
jei (kasininkas == 133 || kasininkas == 254 || kasininkas == 244 || kasininkas == 332 || kasininkas == 375 || kasininkas == 221) {
kasininkas = kasininkas + 11;
}
kitaip jei (sakytojas == 0) {
kasininkas = 111;
}
Kitas {
kasininkas = 999;
}
tas pats = 1;
} Kitas{
tonas (garsiakalbis, NOTE_B4, BEATTIME);
} Serial.println (kasininkas);
}
//""
void boven () {
jei (tas pats == 0) {jei (sakytojas == 111 || kasininkas == 144 || kasininkas == 233) {
kasininkas = kasininkas + 21;
}
kitaip jei (sakytojas == 0) {
kasininkas = 221;
}
Kitas {
kasininkas = 999;
}
tas pats = 1;
}
Kitas {
tonas (garsiakalbis, NOTE_D5, BEATTIME);
Serial.println (kasininkas);
}
}
//""
void onder () {
jei (tas pats == 0) {
jei (sakytojas == 343) {
kasininkas = kasininkas + 31;
}
kitaip jei (sakytojas == 0) {
pasakotojas = 331;
} Kitas {
kasininkas = 999;
} tas pats = 1;
} Kitas {
tonas (garsiakalbis, NOTE_F4, BEATTIME);
Serial.println (kasininkas);
}
}
//""
anuliuoti a () {
jei (tas pats == 0) {
jei (sakytojas == 0) {
kasininkas = 461;
}
Kitas {
kasininkas = 999;
}
tas pats = 1;
}
tonas (garsiakalbis, NOTE_D4, BEATTIME);
Serial.println (kasininkas);
}