Съдържание:

Arduino пъзел кутия: 7 стъпки
Arduino пъзел кутия: 7 стъпки

Видео: Arduino пъзел кутия: 7 стъпки

Видео: Arduino пъзел кутия: 7 стъпки
Видео: History of Judge Dredd Lore and Early Years Explained - Beginners Guide - Judge Dredd Explained 2024, Ноември
Anonim
Arduino пъзел кутия
Arduino пъзел кутия

За този проект ще направим пъзел кутия, която работи с музика. Основната същност на това е, че когато натиснете бутон, той пуска мелодия и Arduino изчислява кои бутони са натиснати, така че да знае кой е правилният и кой грешен отговор.

Консумативи

1 x Arduino uno

1 x 1k Ohm резистор

5 x 220 ома резистори

1 x Пиезо зумер

5 x бутон 6x6 мм

1 x комплект джъмперни проводници

1 x перф/лента

1 x спойка

1 x панти

1 x скоба

1 x малък скрин/дърво

1x пистолет за горещо лепило + клечки за лепило

1 x 9v батерия + държач

малко worbla

боя

Етап 1:

Образ
Образ

За да започнете, трябва да натиснете щифтовете си в дъската. Сега свържете аналогов 2 с проводник към ъгъла на платката. Ще свържем два резистора към него в една линия. Първият е 10k Ohm резистор. Към другия край на този резистор свързваме проводника към аналоговото заземяване. Вторият резистор е резистор от 220 ома, който свързваме към първия бутон. Използвайте друг резистор със същата стойност, за да свържете втората отворена страна на бутона с втория бутон. Продължавайте да свързвате бутоните по този начин до последния. На последния хващате проводник и го свързвате със съответната затворена страна на бутона и го свързвате със следващия по ред. Сега повтаряте процеса, който сте направили с резисторите, само с обикновени проводници. Свържете първия бутон към аналоговия 3, 3V порт на вашия Arduino. Като цяло ще получите един вид кръстосан модел, както е показано по -долу.

Стъпка 2:

След това включете зумера в макета и закрепете едната страна към цифровото заземяване, а другата към 12 порта. Умно е вече да качите следния код във вашия Arduino, за да можете да проверите дали всичко работи правилно. Ако е така, можете да започнете да запоявате компонентите заедно. Направете това, като ги извадите от макета и запоявате проводниците и връзките заедно директно. Ако смятате, че имате нужда от повече дължина между бутоните, можете да добавите допълнителен проводник между резисторите. На този етап макетът вече не е необходим.

Стъпка 3:

Образ
Образ

След като всичко е запоено, е време да направите самата кутия. Използвах евтин комплект чекмеджета като основа за моята. Просто разрязах наполовина по дължина и отстраних гърба и страната, която прерязах. Сега трябва да имате две парчета с форма C. Изрежете едната страна на един от тях, за да използвате като капак. Сега завъртете едно от останалите парчета, така че да се поберат заедно като кутия без капак и ги залепете заедно. След като лепилото се стегне правилно, пробийте малък отвор във всяка страна на кутията за бутоните и по -голям за зумера в капака.

Стъпка 4:

Образ
Образ
Образ
Образ

Сега можете да започнете да рисувате кутията. Направих моя с цветен дизайн, базиран на BOTW, но наистина можете да изберете всеки дизайн, който искате. След като това е направено, можете да поставите бутоните вътре в отворите и да поставите кълбо лепило на гърба на бутона и околното дърво. Същият принцип важи и за зумера, но моят се вписва перфектно в дупката, което го прави ненужен. След това вземете worbla и загрейте и го изрежете, за да направите няколко малки копчета. Внимателно ги залепете върху бутоните, но внимавайте да не използвате много лепило, защото може случайно да заседнат бутоните. Сега можете да ги боядисате, за да ги накарате да се слеят повече с кутията.

Стъпка 5:

Накрая залепвате или завинтвате скобата и пантите върху кутията и капака, свързващи двете.

Стъпка 6:

Сега, когато кутията ви е пълна, всичко, което трябва да направите, е да поставите Arduino и батерията вътре в нея и да затворите капака.

Стъпка 7: Код

// Това е кодът за пъзел/музикална кутия на тема Zelda.

// това свързва кода ви със списъка с бележки в другия раздел

#include "pitches.h"

// тази променлива ще гарантира, че Arduino вижда по -продължително натискане на бутона само с едно натискане

int същото = 0;

// от тук ще прочете вашите данни

int k = 2;

// това е вашият изходен щифт

int говорител = 12;

// по -долу са крайните мелодии

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_5, NOTE_5, NOTE5

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_NET_4, NOTE4, NOTE4, NOTE4, NOTE4

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

// нормалната продължителност на бележка

int BEATTIME = 300;

// броячът, който ще следим, ако сме в решението

int teller = 0;

void setup () {

Serial.begin (9600);

pinMode (2, INPUT);

pinMode (1, INPUT);

}

void loop () {

// чете входа от щифтовете

k = analogRead (2);

int p = analogRead (1);

// ако няма натиснат бутон, не трябва да има тон

ако (калъф == 0) {

noTone (12);

}

// ако данните за четене съответстват на параметрите, изпълнете описания бит код

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

rechts ();

}

//""

иначе ако (k 290) {

връзки ();

}

//""

иначе ако (k> 260 && k <280) {

boven ();

}

//""

иначе ако (k> 240 && k <260) {

onder ();

}

//""

иначе ако (k> 220 && k <240) {

a ();

}

// ако не (когато не е натиснат бутон), стартирайте този код

иначе {

// нулирам същото, за да може да се използва следващия път, когато се натисне бутон

същото = 0;

// ако броячът е до определен брой, изпълнете описания бит код

ако (телър == 166) {

zelda ();

}

//""

иначе ако (калъф == 386) {

saria ();

}

//""

иначе ако (калъф == 266) {

epona ();

}

//""

иначе ако (телър == 999) {

// възпроизвеждаме този тон, за да отбележим грешката

тон (високоговорител, NOTE_C3, BEATTIME);

// нулираме брояча на 0

касиер = 0;

}

}

// забавянето между входа и изхода

забавяне (100);

// отпечатва стойностите на вашия вход в серийния монитор

Serial.println (k);

}

// това е първата мелодия

void zelda () {

// това задава брояч, който се актуализира, докато възпроизвежда мелодията, така че да може да я прочете и да спре, когато трябва

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

// казва колко дълго трябва да продължи една бележка

int ZTime = 1000 / ZeldaTime ;

// генерира тонове

тон (високоговорител, Zelda , ZTime);

// създава правилното забавяне

int пауза = ZTime * 1,30;

забавяне (пауза);

// нулира брояча

касиер = 0;

// отпечатва стойностите на вашия вход в серийния монитор

Serial.println (касиер);

}

}

//""

void epona () {

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

int ETime = 1000 / EponaTime ;

тон (високоговорител, Epona , ETime);

int пауза = ETime * 1,30;

забавяне (пауза);

касиер = 0;

Serial.println (касиер);

}

}

//""

void saria () {

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

int STime = 1000 / SariaTime ;

тон (оратор, Saria , STime);

int пауза = STime * 1.30;

забавяне (пауза);

касиер = 0;

Serial.println (касиер);

}

}

анул рек

hts () {

// ако това още не е натиснато

ако (същото == 0) {

// ако броячът в момента има една от тези стойности, добавете това към него

ако (разказвач == 0 || касиер == 132 || касиер == 165 || калъф == 232 || касиер == 265 || касиер == 331 || касиер == 374) {

касиер = касиер + 1;

}

// иначе го задайте на 999, за да чуете шума от грешка

иначе {

касиер = 999;

}

// задаваме същото на едно, така че Arduino да не чете продължително натискане като множество натискания

същото = 1;

}

// възпроизвеждане на тон

иначе {

тон (високоговорител, NOTE_A4, BEATTIME);

}

// отпечатва стойностите на вашия вход в серийния монитор

Serial.println (касиер); }

//""

void links () {

ако (същото == 0) {

if (разказвач == 133 || касиер == 254 || касиер == 244 || касиер == 332 || касиер == 375 || касиер == 221) {

касиер = касиер + 11;

}

иначе ако (калъф == 0) {

касиер = 111;

}

иначе {

касиер = 999;

}

същото = 1;

} else {

тон (високоговорител, NOTE_B4, BEATTIME);

} Serial.println (касиер);

}

//""

void boven () {

if (същото == 0) {if (teller == 111 || teller == 144 || teller == 233) {

касиер = касиер + 21;

}

иначе ако (калъф == 0) {

касиер = 221;

}

иначе {

касиер = 999;

}

същото = 1;

}

иначе {

тон (високоговорител, NOTE_D5, BEATTIME);

Serial.println (касиер);

}

}

//""

void onder () {

ако (същото == 0) {

ако (телър == 343) {

касиер = касиер + 31;

}

иначе ако (калъф == 0) {

касиер = 331;

} else {

касиер = 999;

} същото = 1;

} else {

тон (високоговорител, NOTE_F4, BEATTIME);

Serial.println (касиер);

}

}

//""

void a () {

ако (същото == 0) {

ако (калъф == 0) {

касиер = 461;

}

иначе {

касиер = 999;

}

същото = 1;

}

тон (високоговорител, NOTE_D4, BEATTIME);

Serial.println (касиер);

}

Препоръчано: