2025 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2025-01-13 06:58
Đố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:
Để 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:
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:
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);
}