Оглавление:

Пазл Arduino: 7 шагов
Пазл Arduino: 7 шагов

Видео: Пазл Arduino: 7 шагов

Видео: Пазл Arduino: 7 шагов
Видео: Подключение семисегментного индикатора к АРДУИНО / Как подключить семисегментный индикатор 2024, Июль
Anonim
Коробка-головоломка Arduino
Коробка-головоломка Arduino

Для этого проекта мы собираемся сделать коробку-головоломку, которая работает с музыкой. Основная суть этого состоит в том, что когда вы нажимаете кнопку, он отпускает мелодию, и Arduino вычисляет, какие кнопки были нажаты, чтобы знать, какой ответ правильный, а какой неправильный.

Запасы

1 х Arduino uno

1 резистор 1 кОм

5 резисторов по 220 Ом

1 х пьезо-зуммер

5 кнопок 6x6 мм

1 х набор перемычек

1 х перфорированная / полосовая доска

1 х набор припоя

1 х петля

1 х зажим

1 x небольшой комод / дерево

1x горячий клеевой пистолет + клеевые стержни

1 х 9 В аккумулятор + держатель

кусочек верблы

покрасить

Шаг 1:

Изображение
Изображение

Для начала вам нужно вдавить булавки в макетную плату. Теперь подключите аналог 2 проводом к углу платы. Мы собираемся подключить к нему в линию два резистора. Первый - резистор на 10 кОм. К другому концу этого резистора подключаем провод к аналоговой земле. Второй резистор - это резистор 220 Ом, который мы подключаем к первой кнопке. Используйте другой резистор того же номинала, чтобы соединить вторую открытую сторону кнопки со второй кнопкой. Продолжайте соединять кнопки, как это, до последней. На последнем вы берете провод, подключаете его к соответствующей закрытой стороне кнопки и подключаете к следующему на линии. Теперь вы повторяете процесс, который вы проделали с резисторами, которые известны только для простых проводов. Подключите первую кнопку к аналоговому порту 3,3 В на вашем Arduino. В итоге у вас получится нечто вроде креста, изображенного ниже.

Шаг 2:

Затем подключите зуммер к макетной плате и прикрепите одну сторону к цифровому заземлению, а другую - к 12 портам. Разумно уже загрузить следующий код в ваш Arduino, чтобы вы могли проверить, все ли работает правильно. Если это так, вы можете приступить к пайке компонентов вместе. Для этого выньте их из макета и спаяйте провода и соединения вместе напрямую. Если вы думаете, что вам нужно больше длины между кнопками, вы можете добавить дополнительный провод между резисторами. На этом этапе макетная плата больше не нужна.

Шаг 3:

Изображение
Изображение

После того, как все припаяно, пора изготовить саму коробку. Я использовал дешевый набор ящиков в качестве основы для своей. Я просто разрезал пополам вдоль и удалил заднюю часть и сторону, которую прорезал. Теперь у вас должно получиться две детали в форме буквы «С». Отрежьте одну сторону одной из них, чтобы использовать ее как крышку. Теперь поверните одну из оставшихся частей, чтобы они сложились вместе, как коробка без крышки, и склейте их вместе. Как только клей застынет должным образом, просверлите в крышке небольшие отверстия с каждой стороны коробки для кнопок и большие отверстия для зуммера.

Шаг 4:

Изображение
Изображение
Изображение
Изображение

Теперь можно приступить к покраске коробки. Я сделал свой с цветочным дизайном, основанным на BOTW, но вы действительно можете выбрать любой дизайн, который хотите. После этого вы можете вставить пуговицы в отверстия и нанести каплю клея на заднюю часть пуговицы и окружающую древесину. Тот же принцип применяется к зуммеру, но мой идеально подходит для отверстия, поэтому в нем нет необходимости. Затем вы берете немного верблы, нагреваете и разрезаете, чтобы получилось несколько маленьких пуговиц. Осторожно приклейте их к пуговицам, но не используйте слишком много клея, иначе пуговицы могут случайно застрять. Теперь вы можете закрасить их, чтобы они больше вписывались в коробку.

Шаг 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_D5, NOTE_C5, NOTE_B4; NOTE_A

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;

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, ВХОД);

pinMode (1, ВХОД);

}

void loop () {

// считывает ввод с контактов

k = analogRead (2);

int p = analogRead (1);

// если ни одна кнопка не нажата, не должно быть звука

if (teller == 0) {

noTone (12);

}

// если прочитанные данные соответствуют параметрам, запускаем описанный бит кода

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

rechts ();

}

//""

else if (k 290) {

ссылки ();

}

//""

else if (k> 260 && k <280) {

boven ();

}

//""

else if (k> 240 && k <260) {

ондер ();

}

//""

else if (k> 220 && k <240) {

а ();

}

// если нет (когда ни одна кнопка не нажата), запускаем этот код

еще {

// сбросить так же, чтобы его можно было использовать при следующем нажатии кнопки

то же = 0;

// если счетчик доходит до определенного числа, запускаем описанный бит кода

if (teller == 166) {

zelda ();

}

//""

else if (teller == 386) {

сария ();

}

//""

else if (teller == 266) {

эпона ();

}

//""

else if (кассир == 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 pause = ZTime * 1.30;

задержка (пауза);

// сбрасывает счетчик

кассир = 0;

// выводит значения вашего ввода в последовательный монитор

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

}

}

//""

void epona () {

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

int ETime = 1000 / EponaTime ;

тон (динамик, Epona , ETime);

int pause = ETime * 1.30;

задержка (пауза);

кассир = 0;

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

}

}

//""

void saria () {

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

int STime = 1000 / SariaTime ;

тон (динамик, Сария , STime);

int pause = STime * 1.30;

задержка (пауза);

кассир = 0;

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

}

}

недействительная запись

hts () {

// если это еще не было нажато

if (same == 0) {

// если счетчик в настоящее время имеет одно из этих значений, добавьте это к нему

if (кассир == 0 || кассир == 132 || кассир == 165 || кассир == 232 || кассир == 265 || кассир == 331 || кассир == 374) {

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

}

// в противном случае установите значение 999, чтобы вы услышали шум ошибки

еще {

кассир = 999;

}

// устанавливаем то же самое на единицу, чтобы Arduino не считал длительное нажатие как многократное нажатие

то же = 1;

}

// проигрываем тон

еще {

тон (динамик, NOTE_A4, BEATTIME);

}

// выводит значения вашего ввода в последовательный монитор

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

//""

void links () {

if (same == 0) {

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

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

}

else if (teller == 0) {

кассир = 111;

}

еще {

кассир = 999;

}

то же = 1;

} еще{

тон (динамик, NOTE_B4, BEATTIME);

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

}

//""

void boven () {

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

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

}

else if (teller == 0) {

teller = 221;

}

еще {

кассир = 999;

}

то же = 1;

}

еще {

тон (динамик, NOTE_D5, BEATTIME);

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

}

}

//""

void onder () {

if (same == 0) {

if (teller == 343) {

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

}

else if (teller == 0) {

teller = 331;

} еще {

кассир = 999;

} same = 1;

} еще {

тон (динамик, NOTE_F4, BEATTIME);

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

}

}

//""

void a () {

if (same == 0) {

if (teller == 0) {

teller = 461;

}

еще {

кассир = 999;

}

то же = 1;

}

тон (динамик, NOTE_D4, BEATTIME);

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

}

Рекомендуемые: