Talaan ng mga Nilalaman:

Arduino Puzzle Box: 7 Mga Hakbang
Arduino Puzzle Box: 7 Mga Hakbang

Video: Arduino Puzzle Box: 7 Mga Hakbang

Video: Arduino Puzzle Box: 7 Mga Hakbang
Video: @Numberblocks - Addition and Subtraction! | Learn to Count 2024, Nobyembre
Anonim
Arduino Puzzle Box
Arduino Puzzle Box

Para sa proyektong ito ay gagawa kami ng isang kahon ng palaisipan na gumagana sa musika. Ang pangunahing kabuluhan nito ay kapag pinindot mo ang isang pindutan ay naglalabas ito ng isang tune at kinakalkula ng Arduino kung aling mga pindutan ang pinindot upang malaman nito kung ano ang tama at kung ano ang maling sagot.

Mga gamit

1 x Arduino uno

1 x 1k Ohm risistor

5 x 220 Ohm resistors

1 xPiezo Buzzer

5 x pushbutton 6x6 mm

1 x set Jumper wires

1 x perf / strip board

1 x solderset

1 x bisagra

1 x clamp

1 x maliit na dibdib ng mga drawer / kahoy

1x mainit na baril ng pandikit + mga pandikit na pandikit

1 x 9v baterya + may hawak

kaunting worbla

pintura

Hakbang 1:

Larawan
Larawan

Upang magsimula sa kailangan mong pindutin ang iyong mga pin sa iyong breadboard. Ngayon ikonekta ang analog 2 sa isang kawad sa sulok ng board. Ikonekta namin ang dalawang resistors dito sa isang linya. Ang una ay isang resistor na 10k Ohm. Sa kabilang dulo ng risistor na ito ay kumokonekta kami sa wire sa analog ground. Ang pangalawang risistor ay isang resistor na 220 Ohm kumokonekta kami sa unang pindutan. Gumamit ng isa pang risistor ng parehong halaga upang ikonekta ang pangalawang bukas na bahagi ng pindutan sa pangalawang pindutan. Patuloy na ikonekta ang mga pindutan tulad nito hanggang sa huling isa. Sa huling kukuha ka ng isang kawad at ikonekta ito sa isang kaukulang saradong gilid ng pindutan at ikonekta ito sa susunod na nasa linya. Inuulit mo ngayon ang proseso na ginawa mo sa mga resistors na alam mo lang sa mga simpleng wires. Ikonekta ang unang pindutan sa analog 3, 3V port sa iyong Arduino. Lahat sa lahat ay makakakuha ka ng isang uri ng cross patern na nakalarawan sa ibaba.

Hakbang 2:

Susunod na plug mo buzzer sa breadboard at i-secure ang isang gilid sa digital ground at ang isa pa sa 12 port. Ito ay matalino upang mai-upload ang sumusunod na code sa iyong Arduino upang masubukan mo kung ang lahat ay gumagana nang tama. Kung ito ay maaari mong simulang magkakasama sa paghihinang ng mga sangkap. Gawin ito sa pamamagitan ng paglabas sa kanila ng breadboard at paghihinang ng mga wire at koneksyon nang direkta. Kung sa palagay mo kailangan mo ng higit pang haba sa pagitan ng mga pindutan maaari kang magdagdag ng dagdag na kawad sa pagitan ng mga resistors. Ang breadboard ay hindi na kinakailangan sa puntong ito.

Hakbang 3:

Larawan
Larawan

Matapos ang lahat ay maghinang oras na upang gawin ang kahon mismo. Gumamit ako ng isang murang hanay ng mga drawer bilang isang batayan para sa minahan. Pasimpleng pinutol ko ang kalahating pahaba at tinanggal ang likuran at ang tagiliran na pinagputol ko. Dapat ay mayroon kang dalawang piraso ng hugis c ngayon. Gupitin ang isang gilid ng isa sa mga ito upang magamit bilang takip. Paikutin ngayon ang isa sa natitirang mga piraso upang magkasama sila tulad ng isang walang takip na kahon at idikit ito. Kapag ang pandikit ay nakatakda nang maayos, mag-drill ng isang maliit na butas sa bawat panig ng kahon para sa mga pindutan at isang mas malaki para sa buzzer sa talukap ng mata.

Hakbang 4:

Larawan
Larawan
Larawan
Larawan

Ngayon ay makakapunta ka sa pagpipinta ng kahon. Ginawa ko ang akin ng isang disenyo ng bulaklak batay sa BOTW ngunit maaari kang pumili ng anumang disenyo na nais mo. Matapos ito ay tapos na maaari mong ilagay ang mga pindutan sa loob ng mga butas at maglagay ng isang glob ng pandikit sa likod ng pindutan at sa mga nakapaligid na kahoy. Nalalapat ang parehong prinsipyo sa buzzer ngunit ang minahan ay ganap na umaangkop sa butas na ginagawa itong hindi kinakailangan. Susunod na kukuha ka ng ilang worbla at pag-init at gupitin ito upang makagawa ng ilang maliliit na pindutan. Maingat na idikit ang mga ito papunta sa mga pindutan ngunit tiyaking hindi gagamitin sa labis na pandikit dahil maaari mong aksidenteng ma-stuck ang mga pindutan. Ngayon ay maaari mo nang ipinta ang mga ito upang maisama pa ang mga ito sa kahon.

Hakbang 5:

Panghuli mong pandikit o tornilyo, ang salansan at mga bisagra sa kahon at takip na kumukonekta sa dalawa.

Hakbang 6:

Ngayon na kumpleto na ang iyong kahon ang kailangan mo lang gawin ay ilagay ang Arduino at baterya sa loob nito at isara ang takip.

Hakbang 7: Code

// Ito ang code para sa isang Zelda na may temang puzzle / music box.

// kinokonekta nito ang iyong code sa listahan ng mga tala sa iba pang tab

# isama ang "mga pitches.h"

// ang variable na ito ay titiyakin na ang Arduino ay makakakita ng isang mas matagal na pindutin ang pindutan bilang isang pagpindot lamang

int pareho = 0;

// mula dito babasahin ang iyong input

int k = 2;

// ito ang iyong output pin

int speaker = 12;

// sa ibaba ay ang mga huling himig

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, NOTE5, NOTE

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

int SariaTime = {8, 8, 4, 8, 8, 4, 8, 8, 8, 8, 4, 8, 8, 8, 8, 3, 8, 8, 8, 2, 1};

// ang normal na tagal ng isang tala

int BEATTIME = 300;

// ang counter na susubaybayan ay nasa solusyon tayo

int teller = 0;

walang bisa ang pag-setup () {

Serial.begin (9600);

pinMode (2, INPUT);

pinMode (1, INPUT);

}

void loop () {

// binabasa ang input mula sa mga pin

k = analogRead (2);

int p = analogRead (1);

// kung walang anumang pindutan na pinindot dapat walang tono

kung (teller == 0) {

noTone (12);

}

// kung ang binasang data ay tumutugma sa mga parameter patakbuhin ang inilarawan na bit ng code

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

rechts ();

}

//""

kung hindi man (k 290) {

mga link ();

}

//""

kung hindi man (k> 260 && k <280) {

boven ();

}

//""

kung hindi man (k> 240 && k <260) {

onder ();

}

//""

kung hindi man (k> 220 && k <240) {

a ();

}

// kung hindi (kapag hindi pinindot ang pindutan), patakbuhin ang code na ito

iba pa {

// reset parehas upang magamit ito sa susunod na pinindot ang isang pindutan

pareho = 0;

// kung ang counter ay hanggang sa isang tiyak na numero patakbuhin ang inilarawan na bit ng code

kung (teller == 166) {

zelda ();

}

//""

kung hindi man (teller == 386) {

saria ();

}

//""

kung hindi man (teller == 266) {

epona ();

}

//""

kung hindi man (teller == 999) {

// play this tone upang markahan ang error

tono (nagsasalita, NOTE_C3, BEATTIME);

// reset ang counter sa 0

tagapagbalita = 0;

}

}

// ang pagkaantala sa pagitan ng input at output

pagkaantala (100);

// print ang mga halaga ng iyong input sa serial monitor

Serial.println (k);

}

// ito ang unang himig

void zelda () {

// nagtatakda ito ng isang counter na nag-a-update sa sarili nito habang pinapatugtog ang himig upang mabasa ito at huminto kung kailan dapat

para sa (int i = 0; i <sizeof (Zelda); i ++) {

// sabi kung gaano katagal dapat magtagal ang isang tala

int ZTime = 1000 / ZeldaTime ;

// bumubuo ng mga tono

tono (nagsasalita, Zelda , ZTime);

// lumilikha ng tamang pagkaantala

int pause = ZTime * 1.30;

antala (i-pause);

// resets counter

tagapagbalita = 0;

// print ang mga halaga ng iyong input sa serial monitor

Serial.println (teller);

}

}

//""

void epona () {

para sa (int i = 0; i <sizeof (Epona); i ++) {

int ETime = 1000 / EponaTime ;

tono (nagsasalita, Epona , ETime);

int pause = ETime * 1.30;

antala (i-pause);

tagapagbalita = 0;

Serial.println (teller);

}

}

//""

void saria () {

para sa (int i = 0; i <sizeof (Saria); i ++) {

int STime = 1000 / SariaTime ;

tono (nagsasalita, Saria , STime);

int pause = PANAHON * 1.30;

antala (i-pause);

tagapagbalita = 0;

Serial.println (teller);

}

}

walang bisa rec

hts () {

// kung hindi pa ito napipindot

kung (pareho == 0) {

// kung ang counter ay kasalukuyang may isa sa mga halagang ito idagdag ito rito

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

teller = teller + 1;

}

// kung hindi man ay itakda ito sa 999 upang marinig mo ang ingay ng error

iba pa {

tagapagbalita = 999;

}

// magtakda ng pareho sa isa upang ang Arduino ay hindi mabasa ang isang matagal na pindutin bilang maraming mga pagpindot

pareho = 1;

}

// patugtugin ang tono

iba pa {

tono (speaker, NOTE_A4, BEATTIME);

}

// print ang mga halaga ng iyong input sa serial monitor

Serial.println (teller); }

//""

walang bisa na mga link () {

kung (pareho == 0) {

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

tagapagbalita = tagwento + 11;

}

kung hindi man (teller == 0) {

tagapagbalita = 111;

}

iba pa {

tagapagbalita = 999;

}

pareho = 1;

} iba pa {

tono (speaker, NOTE_B4, BEATTIME);

} Serial.println (teller);

}

//""

void boven () {

kung (pareho == 0) {kung (teller == 111 || teller == 144 || teller == 233) {

tagapagbalita = tagwento + 21;

}

kung hindi man (teller == 0) {

tagapagbalita = 221;

}

iba pa {

tagapagbalita = 999;

}

pareho = 1;

}

iba pa {

tono (nagsasalita, NOTE_D5, BEATTIME);

Serial.println (teller);

}

}

//""

void onder () {

kung (pareho == 0) {

kung (teller == 343) {

tagapagbalita = tagwento + 31;

}

kung hindi man (teller == 0) {

tagapagbalita = 331;

} iba pa {

tagapagbalita = 999;

} pareho = 1;

} iba pa {

tono (speaker, NOTE_F4, BEATTIME);

Serial.println (teller);

}

}

//""

walang bisa () {

kung (pareho == 0) {

kung (teller == 0) {

tagapagbalita = 461;

}

iba pa {

tagapagbalita = 999;

}

pareho = 1;

}

tono (nagsasalita, NOTE_D4, BEATTIME);

Serial.println (teller);

}

Inirerekumendang: