Мазмуну:

Arduino Puzzle Box: 7 кадам
Arduino Puzzle Box: 7 кадам

Video: Arduino Puzzle Box: 7 кадам

Video: Arduino Puzzle Box: 7 кадам
Video: КАК СОБРАТЬ КУБИК РУБИКА ЗА 4 ДВИЖЕНИЯ БЕЗ АЛГОРИТМОВ И ФОРМУЛ 2024, Июль
Anonim
Arduino Puzzle Box
Arduino Puzzle Box

Бул долбоор үчүн биз музыка менен иштеген табышмак кутучасын жасап жатабыз. Мунун негизги маңызы - сиз баскычты басканыңызда ал обонду чыгарат жана Arduino кайсы баскычтар басылганын эсептейт, ошондо ал туура жана туура эмес жоопту билет.

Жабдуулар

1 x Arduino uno

1 x 1k Ом каршылыгы

5 х 220 Ом каршылыгы

1 xPiezo Buzzer

5 x 6x6 мм баскыч

1 x Jumper зымдары коюлган

1 x perf/strip board

1 x солярка

1 х илмек

1 x кыскыч

1 x кичинекей суурмалар/жыгач

1х ысык желим пистолети + клей таякчалары

1 x 9v батарея + кармагыч

бир аз worbla

боёк

1 кадам:

Сүрөт
Сүрөт

Баштоо үчүн казандарыңыздын төөнөгүчтөрүн басыңыз. Эми аналог 2ди тактанын бурчуна зым менен туташтырыңыз. Биз ага эки резисторду бир сапка туташтырганы жатабыз. Биринчиси - 10 кОмдук резистор. Бул резистордун экинчи четине биз зымды аналогдук жерге туташтырабыз. Экинчи резистор - бул биз биринчи баскычка туташтырган 220 Омдук резистор. Экинчи баскыч менен баскычтын экинчи ачык тарабын туташтыруу үчүн ошол эле мааниге ээ болгон башка резисторду колдонуңуз. Бул сыяктуу баскычтарды акыркысына чейин туташтырыңыз. Акыркысында сиз зым кармап, аны баскычтын тиешелүү жабык жагына туташтырып, экинчисине кезекке туташтырыңыз. Сиз азыр резисторлор менен жасаган процессти кадимки зымдар менен гана кайталайсыз. Биринчи баскычты Arduinoдогу аналогдук 3, 3V портуна туташтырыңыз. Жалпысынан сиз төмөндө сүрөттөлгөн кайчылаш аталыктын түрүнө ээ болосуз.

2-кадам:

Кийинкиде, сиз сигналды панельге коюп, бир жагын санариптик жерге, экинчисин 12 портко бекиңиз. Төмөндөгү кодду Arduinoго мурунтан эле жүктөө акылдуу, андыктан баары туура иштеп жаткандыгын текшере аласыз. Эгер ошондой болсо, анда сиз компоненттерди бириктирип баштасаңыз болот. Муну нан тактасынан алып, зымдарды жана туташууларды түздөн -түз ширетүү менен жасаңыз. Эгерде сиз баскычтардын ортосуна көбүрөөк узундук керек деп ойлосоңуз, анда резисторлордун ортосуна кошумча зым кошо аласыз. Бул учурда нан тактасынын кереги жок.

3 -кадам:

Сүрөт
Сүрөт

Баары ширетилгенден кийин, кутуну өзү жасоого убакыт келди. Мен кенен база катары тартмалардын арзан топтомун колдондум. Мен жөн гана узунунан жарымын кесип, аркасы менен кыйылган жагын алып салдым. Сизде азыр с түрүндөгү эки бөлүк болушу керек. Капкак катары колдонуу үчүн алардын бир жагын кесип алыңыз. Эми калган бөлүктөрдүн бирөөсүн капкагы жок кутуга окшош кылып айлантып, аларды жабыштырыңыз. Желим туура орнотулгандан кийин, кутучанын эки капталында кичине тешикти баскычтар үчүн жана чоңураакты капкактагы ызылдак үчүн бургулаңыз.

4 -кадам:

Сүрөт
Сүрөт
Сүрөт
Сүрөт

Эми сиз кутуну боёо аласыз. Мен BOTWге негизделген гүлдүн дизайны менен мина кылдым, бирок сиз каалаган дизайнды тандай аласыз. Бул бүткөндөн кийин, сиз баскычтарды тешиктердин ичине салып, баскычтын артына жана тегеректеги жыгачка желим глобус койсоңуз болот. Ушул эле принцип ызылчакка да тиешелүү, бирок меники тешикке такыр туура келбейт. Андан кийин кичине түймө жасоо үчүн бир аз ворбланы алып, жылытасыз. Аларды этияттап баскычтарга чаптаңыз, бирок көп клей колдонбогонуңузду текшериңиз, анткени кокусунан баскычтар тыгылып калышы мүмкүн. Эми сиз аларды боёк менен көбүрөөк аралаштыруу үчүн сырдай аласыз.

5 -кадам:

Акырында сиз экөөнү бириктирген кутуга жана капкакка илинген клейлерди же илгичтерди саласыз.

6 -кадам:

Эми кутуңуз бүткөндөн кийин, Arduino менен батарейканы ичине салып, капкагын жабыңыз.

7 -кадам: Код

// Бул Zelda тематикалык табышмактын/музыкалык кутунун коду.

// бул сиздин кодду башка өтмөктөгү ноталардын тизмесине байланыштырат

#"кадамдарды.h" кошуу

// бул өзгөрмө Arduino баскычты бир басуу сыяктуу узунураак басууну көрөт

int same = 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_D5, NOTE_C5, NOTE_B4, NOTE_A4;

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_D4, 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};

// нотанын кадимки узактыгы

int BEATTIME = 300;

// эсептөөчү эсептегич, биз чечүүдөбүз

int teller = 0;

жараксыз орнотуу () {

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) {

а ();

}

// эгер андай болбосо (баскыч басылбаса), бул кодду иштетиңиз

башка {

// ошол эле абалга келтирүү, ошондуктан аны кийинки жолу баскыч басылганда колдонсо болот

ошол эле = 0;

// эгерде эсептегич белгилүү бир санга чейин болсо, сүрөттөлгөн кодду иштетиңиз

эгер (айтуучу == 166) {

zelda ();

}

//""

башка болсо (теллер == 386) {

saria ();

}

//""

башка болсо (теллер == 266) {

epona ();

}

//""

башка болсо (теллер == 999) {

// катаны белгилөө үчүн бул обонду ойнотуу

тон (спикер, NOTE_C3, BEATTIME);

// эсептегичти баштапкы абалга келтирүү 0

теллер = 0;

}

}

// киргизүү менен чыгаруу ортосундагы кечигүү

кечиктирүү (100);

// сериялык мониторго киргизүүңүздүн маанилерин басып чыгарат

Serial.println (k);

}

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

void zelda () {

// бул обонду ойноп жатып өзүн жаңыртып турган эсептегичти орнотот, ошондо ал аны окуй алат жана керек болгондо токтойт

үчүн (int i = 0; i <sizeof (Zelda); i ++) {

// нота канча убакытка созулушу керектигин айтат

int ZTime = 1000 / ZeldaTime ;

// обондорду жаратат

тон (спикер, Zelda , ZTime);

// туура кечигүүнү жаратат

int пауза = ZTime * 1.30;

кечигүү (пауза);

// эсептегичти баштапкы абалга келтирет

теллер = 0;

// сериялык мониторго киргизүүңүздүн маанилерин басып чыгарат

Serial.println (теллер);

}

}

//""

бош epona () {

үчүн (int i = 0; i <sizeof (Epona); i ++) {

int ETime = 1000 / EponaTime ;

үн (спикер, Epona , ETime);

int пауза = ETime * 1.30;

кечигүү (пауза);

теллер = 0;

Serial.println (теллер);

}

}

//""

бош сария () {

үчүн (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 (теллер); }

//""

жараксыз шилтемелер () {

эгер (ошол эле == 0) {

эгер (теллер == 133 || теллер == 254 || теллер == 244 || теллер == 332 || теллер == 375 || теллер == 221) {

теллер = теллер + 11;

}

башка болсо (теллер == 0) {

теллер = 111;

}

башка {

теллер = 999;

}

бирдей = 1;

} башка {

тон (спикер, NOTE_B4, BEATTIME);

} Serial.println (теллер);

}

//""

void boven () {

if (same == 0) {if (teller == 111 || teller == 144 || teller == 233) {

теллер = теллер + 21;

}

башка болсо (теллер == 0) {

теллер = 221;

}

башка {

теллер = 999;

}

бирдей = 1;

}

башка {

тон (спикер, NOTE_D5, BEATTIME);

Serial.println (теллер);

}

}

//""

жараксыз () {

эгер (ошол эле == 0) {

эгер (айтуучу == 343) {

теллер = теллер + 31;

}

башка болсо (теллер == 0) {

теллер = 331;

} башка {

теллер = 999;

} ошол эле = 1;

} башка {

тон (спикер, NOTE_F4, BEATTIME);

Serial.println (теллер);

}

}

//""

void a () {

эгер (ошол эле == 0) {

эгер (айтуучу == 0) {

теллер = 461;

}

башка {

теллер = 999;

}

бирдей = 1;

}

тон (спикер, NOTE_D4, BEATTIME);

Serial.println (теллер);

}

Сунушталууда: