Përmbajtje:

Arduino Puzzle Box: 7 hapa
Arduino Puzzle Box: 7 hapa

Video: Arduino Puzzle Box: 7 hapa

Video: Arduino Puzzle Box: 7 hapa
Video: I Have 30 Mins to DEFUSE This Puzzle!! 2024, Nëntor
Anonim
Arduino Puzzle Box
Arduino Puzzle Box

Për këtë projekt ne do të bëjmë një kuti enigmash që punon me muzikë. Thelbi themelor i tij është se kur shtypni një buton lëshon një melodi dhe Arduino llogarit se cilat butona shtypen në mënyrë që të dijë se cila është përgjigja e duhur dhe cila është e gabuar.

Furnizimet

1 x Arduino uno

Rezistencë 1 x 1k Ohm

5 x 220 Ohm rezistorë

1 xPiezo Buzzer

5 x buton 6x6 mm

1 x tela të vendosur Jumper

1 x pllakë perf/strip

1 x saldim

1 x varen

1 x pirg

1 x komodë e vogël/dru

1x armë me zam të nxehtë + shkopinj zam

1 x 9v bateri + mbajtëse

pak nga worbla

bojë

Hapi 1:

Imazhi
Imazhi

Për të filluar, duhet të shtypni kunjat në tabelën tuaj të bukës. Tani lidhni analogun 2 me një tel në cep të bordit. Ne do të lidhim dy rezistorë me të në një linjë. E para është një rezistencë 10k Ohm. Në skajin tjetër të këtij rezistori ne lidhim tela me tokën analoge. Rezistenca e dytë është një rezistencë 220 Ohm që e lidhim me butonin e parë. Përdorni një rezistencë tjetër me të njëjtën vlerë në mënyrë që të lidhni anën e dytë të hapur të butonit me butonin e dytë. Vazhdoni të lidhni butonat si kjo deri në të fundit. Në të fundit ju kapni një tel dhe e lidhni me anën përkatëse të mbyllur të butonit dhe e lidhni me atë tjetër në rresht. Tani përsërisni procesin që keni bërë me rezistorët që e dini vetëm me tela të thjeshtë. Lidhni butonin e parë me portën analoge 3, 3V në Arduino tuaj. Në përgjithësi, ju do të merrni një lloj babai kryq, siç përshkruhet më poshtë.

Hapi 2:

Futeni më pas zhurmuesin në pjatën e bukës dhe sigurojeni njërën anë në tokën dixhitale dhe tjetrën në portën 12. Smartshtë e mençur të ngarkoni tashmë kodin e mëposhtëm në Arduino tuaj në mënyrë që të provoni nëse gjithçka po funksionon si duhet. Nëse është, mund të filloni të bashkoni përbërësit së bashku. Bëni këtë duke i nxjerrë nga pjata e bukës dhe duke bashkuar telat dhe lidhjet së bashku drejtpërdrejt. Nëse mendoni se keni nevojë për më shumë gjatësi midis butonave, mund të shtoni tela shtesë në mes të rezistorëve. Tabela e bukës nuk është më e nevojshme në këtë pikë.

Hapi 3:

Imazhi
Imazhi

Pasi të jetë bashkuar gjithçka, është koha për të bërë kutinë vetë. Kam përdorur një grup mbathje të lira si bazë për timen. Thjeshtë përgjysmova përgjatë gjatësisë dhe hoqa pjesën e pasme dhe anën që kam prerë. Tani duhet të keni dy pjesë në formë c. Pritini njërën anë të njërës prej tyre për ta përdorur si kapak. Tani rrotulloni njërën nga pjesët e mbetura në mënyrë që ato të përshtaten së bashku si një kuti pa kapak dhe ngjitini së bashku. Pasi zamja të jetë vendosur siç duhet, shponi një vrimë të vogël në secilën anë të kutisë për butonat dhe një më të madhe për zilen në kapak.

Hapi 4:

Imazhi
Imazhi
Imazhi
Imazhi

Tani mund të pikturoni kutinë. Unë e kam bërë timen me një dizajn lule të bazuar në BOTW, por ju me të vërtetë mund të zgjidhni çdo dizajn që dëshironi. Pasi të bëhet kjo, mund të vendosni butonat brenda vrimave dhe të vendosni një copë zam në pjesën e pasme të butonit dhe drurit përreth. I njëjti parim vlen për zilen, por imi përshtatet në mënyrë perfekte në vrimë duke e bërë atë të panevojshme. Tjetra ju kapni një worbla dhe ngrohni dhe prerë atë në mënyrë që të bëni disa butona të vegjël. Ngjitini ato me kujdes në butona, por sigurohuni që të mos përdorni shumë zam sepse mund t'i keni bllokuar aksidentalisht. Tani mund t'i lyeni ato në mënyrë që t'i bëni ato të përzihen më shumë me kutinë.

Hapi 5:

Së fundi ju ngjitni ose vidhosni, kapësen dhe menteshat në kutinë dhe kapakun që lidhin të dy.

Hapi 6:

Tani që kutia juaj është e plotë, gjithçka që duhet të bëni është të vendosni Arduino dhe baterinë brenda tij dhe të mbyllni kapakun.

Hapi 7: Kodi

// Ky është kodi për një enigmë/kuti muzikore me temë Zelda.

// kjo lidh kodin tuaj me listën e shënimeve në skedën tjetër

#përfshi "pitches.h"

// kjo ndryshore do të sigurojë që Arduino të shikojë një shtypje më të gjatë të butonit si vetëm një shtypje

int e njëjtë = 0;

// nga këtu do të lexojë të dhënat tuaja

int k = 2;

// kjo është kunja juaj dalëse

int altoparlant = 12;

// më poshtë janë meloditë e fundit

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_E4, NOTE_G4, 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};

// kohëzgjatja normale e një shënimi

int BEATTIME = 300;

// sporteli që do të mbajë shënime po të ishim në zgjidhje

int treguesi = 0;

void setup () {

Serial.filloj (9600);

pinMode (2, INPUT);

pinMode (1, HYRJE);

}

lak void () {

// lexon hyrjen nga kunjat

k = analogRead (2);

int p = analogRead (1);

// nëse nuk është shtypur ndonjë buton nuk duhet të ketë ton

nëse (treguesi == 0) {

noTone (12);

}

// nëse të dhënat e lexuara korrespondojnë me parametrat ekzekutoni bitin e përshkruar të kodit

nëse (k> 320 && k <350) {

rechts ();

}

//""

ndryshe nëse (k 290) {

lidhje ();

}

//""

ndryshe nëse (k> 260 && k <280) {

thurur ();

}

//""

ndryshe nëse (k> 240 && k <260) {

onder ();

}

//""

ndryshe nëse (k> 220 && k <240) {

a ();

}

// nëse jo (kur nuk shtypet asnjë buton), ekzekutoni këtë kod

tjeter {

// rivendosni të njëjtën gjë që të mund të përdoret herën tjetër kur të shtypni një buton

njëjtë = 0;

// nëse numëruesi është deri në një numër të caktuar, ekzekutoni bitin e përshkruar të kodit

nëse (treguesi == 166) {

zelda ();

}

//""

tjetër nëse (treguesi == 386) {

saria ();

}

//""

tjetër nëse (treguesi == 266) {

epona ();

}

//""

tjetër nëse (treguesi == 999) {

// luajeni këtë ton për të shënuar gabimin

toni (altoparlanti, NOTE_C3, BEATTIME);

// rivendosni numëruesin në 0

tregues = 0;

}

}

// vonesa midis hyrjes dhe daljes

vonesë (100);

// printon vlerat e hyrjes suaj në monitorin serik

Serial.println (k);

}

// kjo është melodia e parë

void zelda () {

// kjo vendos një numërues që përditësohet ndërsa luan melodinë në mënyrë që të mund ta lexojë atë dhe të ndalojë kur duhet

për (int i = 0; i <sizeof (Zelda); i ++) {

// thotë se sa gjatë duhet të zgjasë një shënim

int ZTime = 1000 / ZeldaTime ;

// gjeneron tonet

toni (altoparlanti, Zelda , ZTime);

// krijon vonesën e saktë

int pauzë = ZTime * 1.30;

vonesë (pauzë);

// rivendos numëruesin

tregues = 0;

// printon vlerat e hyrjes suaj në monitorin serik

Serial.println (tregues);

}

}

//""

void epona () {

për (int i = 0; i <sizeof (Epona); i ++) {

int ETime = 1000 / EponaTime ;

toni (altoparlanti, Epona , ETime);

int pauzë = ETime * 1.30;

vonesë (pauzë);

tregues = 0;

Serial.println (tregues);

}

}

//""

void saria () {

për (int i = 0; i <sizeof (Saria); i ++) {

int STime = 1000 / SariaTime ;

toni (folës, Saria , STime);

int pauzë = Koha * 1.30;

vonesë (pauzë);

tregues = 0;

Serial.println (tregues);

}

}

void rec

hts () {

// nëse kjo nuk ishte shtypur tashmë

nëse (e njëjta == 0) {

// nëse numëruesi aktualisht ka njërën nga këto vlera, shtojeni këtë

nëse (treguesi == 0 || treguesi == 132 || treguesi == 165 || treguesi == 232 || treguesi == 265 || treguesi == 331 || treguesi == 374) {

treguesi = treguesi + 1;

}

// përndryshe vendoseni në 999 në mënyrë që të dëgjoni zhurmën e gabimit

tjeter {

tregues = 999;

}

// vendoseni njësoj në një në mënyrë që Arduino të mos lexojë një shtyp të zgjatur si shtypje të shumëfishta

njësoj = 1;

}

// luaj tonin

tjeter {

toni (altoparlanti, NOTE_A4, BEATTIME);

}

// printon vlerat e hyrjes suaj në monitorin serik

Serial.println (tregues); }

//""

lidhjet e pavlefshme () {

nëse (e njëjta == 0) {

nëse (treguesi == 133 || treguesi == 254 || treguesi == 244 || treguesi == 332 || treguesi == 375 || treguesi == 221) {

treguesi = treguesi + 11;

}

tjetër nëse (treguesi == 0) {

tregues = 111;

}

tjeter {

tregues = 999;

}

njësoj = 1;

} tjetër {

toni (altoparlanti, NOTE_B4, BEATTIME);

} Serial.println (tregues);

}

//""

void boven () {

nëse (e njëjta == 0) {nëse (treguesi == 111 || treguesi == 144 || treguesi == 233) {

tregues = tregues + 21;

}

tjetër nëse (treguesi == 0) {

tregues = 221;

}

tjeter {

tregues = 999;

}

njësoj = 1;

}

tjeter {

toni (altoparlanti, NOTE_D5, BEATTIME);

Serial.println (tregues);

}

}

//""

void onder () {

nëse (e njëjta == 0) {

nëse (treguesi == 343) {

treguesi = treguesi + 31;

}

tjetër nëse (treguesi == 0) {

tregues = 331;

} tjetër {

tregues = 999;

} njëjtë = 1;

} tjetër {

toni (altoparlanti, NOTE_F4, BEATTIME);

Serial.println (tregues);

}

}

//""

void a () {

nëse (e njëjta == 0) {

nëse (treguesi == 0) {

tregues = 461;

}

tjeter {

tregues = 999;

}

njësoj = 1;

}

toni (altoparlanti, NOTE_D4, BEATTIME);

Serial.println (tregues);

}

Recommended: