Mục lục:

Hộp câu đố Arduino: 7 bước
Hộp câu đố Arduino: 7 bước

Video: Hộp câu đố Arduino: 7 bước

Video: Hộp câu đố Arduino: 7 bước
Video: Điều Khiển Led 7 Đoạn Bằng Arduino UNO R3 | Điện tử DAT 2024, Tháng bảy
Anonim
Hộp câu đố Arduino
Hộp câu đố Arduino

Đối với dự án này, chúng tôi sẽ làm một hộp xếp hình hoạt động với âm nhạc. Ý chính cơ bản của nó là khi bạn nhấn một nút, nó sẽ phát ra một giai điệu và Arduino sẽ tính toán những nút nào được nhấn để nó biết đâu là câu trả lời đúng và đâu là câu trả lời sai.

Quân nhu

1 x Arduino chưa

Điện trở 1 x 1k Ohm

Điện trở 5 x 220 Ohm

1 xPiezo Buzzer

5 x nút bấm 6x6 mm

1 x bộ dây Jumper

1 x bảng điều khiển / dải

1 x hàn

1 x bản lề

1 x kẹp

1 x tủ ngăn kéo nhỏ / gỗ

1x súng bắn keo nóng + keo dính

1 x pin 9v + giá đỡ

một chút của lobla

Sơn

Bước 1:

Hình ảnh
Hình ảnh

Để bắt đầu, bạn phải bấm ghim vào breadboard. Bây giờ kết nối analog 2 bằng một sợi dây vào góc của bảng. Chúng tôi sẽ kết nối hai điện trở với nó thành một đường dây. Đầu tiên là một điện trở 10k Ohm. Với đầu kia của điện trở này, chúng tôi kết nối dây với đất tương tự. Điện trở thứ hai là một điện trở 220 Ohm, chúng tôi kết nối với nút đầu tiên. Dùng một điện trở khác có cùng giá trị để nối mặt hở thứ hai của nút với nút thứ hai. Tiếp tục kết nối các nút như thế này cho đến nút cuối cùng. Cuối cùng, bạn lấy một sợi dây và kết nối nó với một mặt đóng tương ứng của nút và kết nối nó với cái tiếp theo trong dòng. Bây giờ bạn lặp lại quá trình bạn đã làm với các điện trở chỉ biết với dây đơn giản. Kết nối nút đầu tiên với cổng 3V tương tự trên Arduino của bạn. Nói chung, bạn sẽ nhận được một loại patern chéo như được mô tả dưới đây.

Bước 2:

Tiếp theo, cắm buzzer của bạn vào breadboard và cố định một bên vào mặt đất kỹ thuật số và một bên vào cổng 12. Thật thông minh khi đã tải mã sau vào Arduino của bạn để bạn có thể kiểm tra xem mọi thứ có hoạt động chính xác hay không. Nếu đúng như vậy, bạn có thể bắt đầu hàn các thành phần lại với nhau. Thực hiện việc này bằng cách lấy chúng ra khỏi breadboard và hàn trực tiếp các dây và kết nối với nhau. Nếu bạn nghĩ rằng bạn cần thêm chiều dài ở giữa các nút, bạn có thể thêm một số dây bổ sung vào giữa các điện trở. Tại thời điểm này, breadboard không còn cần thiết nữa.

Bước 3:

Hình ảnh
Hình ảnh

Sau khi mọi thứ được hàn, đã đến lúc tự làm hộp. Tôi đã sử dụng một bộ ngăn kéo rẻ tiền làm cơ sở cho mình. Tôi chỉ đơn giản là cắt đôi theo chiều dài và loại bỏ mặt sau và mặt mà tôi cắt qua. Bây giờ bạn sẽ có hai mảnh hình chữ c. Cắt một bên của một trong số chúng để sử dụng làm nắp. Bây giờ xoay một trong các mảnh còn lại để chúng khớp với nhau giống như một chiếc hộp không nắp và dán chúng lại với nhau. Sau khi keo đã đặt đúng cách, hãy khoan một lỗ nhỏ ở mỗi bên của hộp cho các nút và lỗ lớn hơn cho buzzer trên nắp.

Bước 4:

Hình ảnh
Hình ảnh
Hình ảnh
Hình ảnh

Bây giờ bạn có thể sơn cái hộp. Tôi đã làm của tôi với một thiết kế hoa dựa trên BOTW nhưng bạn thực sự có thể chọn bất kỳ thiết kế nào bạn muốn. Sau khi hoàn thành, bạn có thể đặt các nút bên trong các lỗ và nhỏ một giọt keo lên mặt sau của nút và phần gỗ xung quanh. Nguyên tắc tương tự áp dụng cho bộ rung nhưng mỏ vừa khít hoàn toàn trong lỗ khiến nó không cần thiết. Tiếp theo, bạn lấy một ít sợi vải và đun nóng và cắt nó để làm một số nút nhỏ. Cẩn thận dán chúng vào các nút nhưng đảm bảo không sử dụng nhiều keo vì bạn có thể vô tình làm các nút bị kẹt. Bây giờ bạn có thể sơn chúng lên để làm cho chúng hòa hợp với hộp hơn.

Bước 5:

Cuối cùng bạn dán keo hoặc vít, kẹp và bản lề vào hộp và nắp để kết nối hai chiếc.

Bước 6:

Bây giờ hộp của bạn đã hoàn thành, tất cả những gì bạn phải làm là đặt Arduino và pin vào bên trong hộp và đóng nắp lại.

Bước 7: Mã

// Đây là mã cho hộp âm nhạc / câu đố theo chủ đề Zelda.

// điều này kết nối mã của bạn với danh sách ghi chú trong tab khác

#include "pitch.h"

// biến này sẽ đảm bảo rằng Arduino thấy nút nhấn lâu hơn chỉ bằng một lần nhấn

int cùng = 0;

// từ đây nó sẽ đọc đầu vào của bạn

int k = 2;

// đây là chân đầu ra của bạn

int loa = 12;

// bên dưới là những giai điệu kết thúc

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

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

// thời lượng bình thường của một ghi chú

int BEATTIME = 300;

// bộ đếm sẽ theo dõi chúng ta đang ở trong giải pháp

int giao dịch viên = 0;

void setup () {

Serial.begin (9600);

pinMode (2, INPUT);

pinMode (1, INPUT);

}

void loop () {

// đọc đầu vào từ các chân

k = analogRead (2);

int p = analogRead (1);

// nếu không có nút nào được nhấn thì sẽ không có âm báo

if (giao dịch viên == 0) {

noTone (12);

}

// nếu dữ liệu đọc tương ứng với các tham số, hãy chạy bit mã được mô tả

nếu (k> 320 && k <350) {

rechts ();

}

//""

khác nếu (k 290) {

các liên kết ();

}

//""

khác nếu (k> 260 && k <280) {

boven ();

}

//""

khác nếu (k> 240 && k <260) {

onder ();

}

//""

khác nếu (k> 220 && k <240) {

Một();

}

// nếu không (khi không có nút nào được nhấn), hãy chạy mã này

khác {

// đặt lại giống nhau để nó có thể được sử dụng trong lần nhấn nút tiếp theo

giống nhau = 0;

// nếu bộ đếm lên đến một số nhất định, hãy chạy bit mã được mô tả

if (giao dịch viên == 166) {

zelda ();

}

//""

khác nếu (người giao dịch == 386) {

saria ();

}

//""

khác nếu (người giao dịch == 266) {

epona ();

}

//""

khác nếu (người giao dịch == 999) {

// phát âm báo này để đánh dấu lỗi

âm báo (loa, NOTE_C3, BEATTIME);

// đặt lại bộ đếm về 0

giao dịch viên = 0;

}

}

// độ trễ giữa đầu vào và đầu ra

chậm trễ (100);

// in các giá trị đầu vào của bạn trong màn hình nối tiếp

Serial.println (k);

}

// đây là giai điệu đầu tiên

void zelda () {

// điều này đặt bộ đếm tự cập nhật trong khi phát giai điệu để nó có thể đọc và dừng khi cần

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

// cho biết một ghi chú sẽ tồn tại trong bao lâu

int ZTime = 1000 / ZeldaTime ;

// tạo âm báo

giai điệu (loa, Zelda , ZTime);

// tạo độ trễ chính xác

int pause = ZTime * 1.30;

trì hoãn (tạm dừng);

// đặt lại bộ đếm

giao dịch viên = 0;

// in các giá trị đầu vào của bạn trong màn hình nối tiếp

Serial.println (giao dịch viên);

}

}

//""

void epona () {

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

int ETime = 1000 / EponaTime ;

âm điệu (người nói, Epona , ETime);

int pause = ETime * 1.30;

trì hoãn (tạm dừng);

giao dịch viên = 0;

Serial.println (giao dịch viên);

}

}

//""

void saria () {

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

int STime = 1000 / SariaTime ;

giai điệu (người nói, Saria , STime);

int pause = STime * 1.30;

trì hoãn (tạm dừng);

giao dịch viên = 0;

Serial.println (giao dịch viên);

}

}

void rec

hts () {

// nếu điều này chưa được nhấn

nếu (giống nhau == 0) {

// nếu bộ đếm hiện có một trong các giá trị này, hãy thêm giá trị này vào

if (người kể == 0 || người kể == 132 || người kể == 165 || người kể == 232 || người kể == 265 || người kể == 331 || người nói == 374) {

người giao dịch = người kể + 1;

}

// nếu không, hãy đặt nó thành 999 để bạn nghe thấy tiếng ồn lỗi te

khác {

giao dịch viên = 999;

}

// đặt giống nhau thành một để Arduino không đọc một lần nhấn kéo dài như nhiều lần nhấn

giống nhau = 1;

}

// phát âm báo

khác {

âm báo (loa, NOTE_A4, BEATTIME);

}

// in các giá trị đầu vào của bạn trong màn hình nối tiếp

Serial.println (giao dịch viên); }

//""

liên kết vô hiệu () {

nếu (giống nhau == 0) {

if (người giao dịch == 133 || người giao dịch == 254 || người giao dịch == 244 || người giao dịch == 332 || người giao dịch == 375 || người giao dịch == 221) {

người giao dịch = người giao dịch + 11;

}

khác nếu (người giao dịch == 0) {

giao dịch viên = 111;

}

khác {

giao dịch viên = 999;

}

giống nhau = 1;

} khác{

âm báo (loa, NOTE_B4, BEATTIME);

} Serial.println (giao dịch viên);

}

//""

void boven () {

if (giống nhau == 0) {if (người giao dịch == 111 || người giao dịch == 144 || người giao dịch == 233) {

người giao dịch = người giao dịch + 21;

}

khác nếu (người giao dịch == 0) {

giao dịch viên = 221;

}

khác {

giao dịch viên = 999;

}

giống nhau = 1;

}

khác {

âm báo (loa, NOTE_D5, BEATTIME);

Serial.println (giao dịch viên);

}

}

//""

void onder () {

nếu (giống nhau == 0) {

if (giao dịch viên == 343) {

người giao dịch = người giao dịch + 31;

}

khác nếu (người giao dịch == 0) {

giao dịch viên = 331;

} khác {

giao dịch viên = 999;

} giống nhau = 1;

} khác {

âm báo (loa, NOTE_F4, BEATTIME);

Serial.println (giao dịch viên);

}

}

//""

void a () {

nếu (giống nhau == 0) {

if (giao dịch viên == 0) {

giao dịch viên = 461;

}

khác {

giao dịch viên = 999;

}

giống nhau = 1;

}

âm báo (loa, NOTE_D4, BEATTIME);

Serial.println (giao dịch viên);

}

Đề xuất: