สารบัญ:

กล่องปริศนา Arduino: 7 ขั้นตอน
กล่องปริศนา Arduino: 7 ขั้นตอน

วีดีโอ: กล่องปริศนา Arduino: 7 ขั้นตอน

วีดีโอ: กล่องปริศนา Arduino: 7 ขั้นตอน
วีดีโอ: ลุงตู่ หรือ ลุงป้อม อย่างฮา แถมสวยมีสเน่ห์อีกด้วย มิสแกรนด์ 2023 🇹🇭 2024, กรกฎาคม
Anonim
Arduino Puzzle Box
Arduino Puzzle Box

สำหรับโปรเจ็กต์นี้ เราจะทำกล่องปริศนาที่ทำงานร่วมกับดนตรีได้ สาระสำคัญพื้นฐานของมันคือเมื่อคุณกดปุ่ม มันจะปล่อยเพลงออกมา และ Arduino จะคำนวณว่าปุ่มใดถูกกด เพื่อให้รู้ว่าอะไรถูกและอะไรคือคำตอบที่ผิด

เสบียง

1 x Arduino uno

ตัวต้านทาน 1 x 1k โอห์ม

ตัวต้านทาน 5 x 220 โอห์ม

1 xPiezo Buzzer

ปุ่มกด 5 x 6x6 มม.

1 x ชุดสายจัมเปอร์

1 x บอร์ด perf/สตริป

1 x ชุดบัดกรี

1 x บานพับ

1 x แคลมป์

1 x ตู้ลิ้นชักเล็ก/ไม้

1x ปืนกาวร้อน + แท่งกาว

แบตเตอรี่ 1 x 9v + ที่ยึด

วอร์บลานิดหน่อย

สี

ขั้นตอนที่ 1:

ภาพ
ภาพ

ในการเริ่มต้นคุณต้องกดหมุดบนเขียงหั่นขนมของคุณ ตอนนี้เชื่อมต่อแอนะล็อก 2 ด้วยสายที่มุมของบอร์ด เราจะเชื่อมต่อตัวต้านทานสองตัวเข้ากับมันในแนวเดียวกัน อย่างแรกคือตัวต้านทาน 10k โอห์ม ที่ปลายอีกด้านหนึ่งของตัวต้านทานนี้เราเชื่อมต่อสายกับกราวด์แอนะล็อก ตัวต้านทานตัวที่สองคือตัวต้านทาน 220 โอห์มที่เราเชื่อมต่อกับปุ่มแรก ใช้ตัวต้านทานอื่นที่มีค่าเท่ากันเพื่อเชื่อมต่อด้านที่เปิดที่สองของปุ่มกับปุ่มที่สอง เชื่อมต่อปุ่มแบบนี้จนถึงปุ่มสุดท้าย สุดท้ายคุณคว้าลวดและเชื่อมต่อกับด้านปิดที่สอดคล้องกันของปุ่มและเชื่อมต่อกับสายถัดไปในบรรทัด ตอนนี้คุณทำซ้ำขั้นตอนที่คุณทำกับตัวต้านทานเท่านั้นที่รู้ด้วยสายธรรมดา เชื่อมต่อปุ่มแรกเข้ากับพอร์ตอนาล็อก 3, 3V บน Arduino ของคุณ โดยรวมแล้วคุณจะได้รับแบบ cross patern ตามที่แสดงด้านล่าง

ขั้นตอนที่ 2:

จากนั้นเสียบออดเข้ากับเขียงหั่นขนมและยึดด้านหนึ่งกับกราวด์ดิจิตอลและอีกด้านหนึ่งเข้ากับพอร์ต 12 เป็นการดีที่จะอัปโหลดโค้ดต่อไปนี้ไปยัง Arduino เพื่อให้คุณสามารถทดสอบว่าทุกอย่างถูกต้องหรือไม่ หากเป็นเช่นนั้น คุณสามารถเริ่มบัดกรีส่วนประกอบเข้าด้วยกันได้ ทำได้โดยนำออกจากเขียงหั่นขนมแล้วบัดกรีสายไฟและการเชื่อมต่อเข้าด้วยกันโดยตรง ถ้าคุณคิดว่าคุณต้องการความยาวมากขึ้นระหว่างปุ่มต่างๆ คุณสามารถเพิ่มลวดพิเศษระหว่างตัวต้านทานได้ ตอนนี้ไม่จำเป็นต้องใช้เขียงหั่นขนมอีกต่อไป

ขั้นตอนที่ 3:

ภาพ
ภาพ

หลังจากที่ทุกอย่างถูกบัดกรีแล้วก็ถึงเวลาทำกล่องด้วยตัวเอง ฉันใช้ชุดลิ้นชักราคาถูกเป็นฐานของฉัน ฉันแค่ผ่าครึ่งตามยาวแล้วเอาด้านหลังและด้านที่ฉันผ่าออก ตอนนี้คุณควรมีชิ้นส่วนรูปตัว c สองชิ้น ตัดด้านหนึ่งเพื่อใช้เป็นฝา ตอนนี้หมุนชิ้นส่วนที่เหลือหนึ่งชิ้นเพื่อให้พอดีกันเหมือนกล่องที่ไม่มีฝาปิดแล้วทากาวเข้าด้วยกัน เมื่อกาวเซ็ตตัวถูกต้องแล้ว ให้เจาะรูเล็กๆ ในแต่ละด้านของกล่องสำหรับกระดุม และเจาะให้ใหญ่ขึ้นสำหรับกริ่งที่ฝา

ขั้นตอนที่ 4:

ภาพ
ภาพ
ภาพ
ภาพ

ตอนนี้คุณสามารถทาสีกล่องได้ ฉันทำการออกแบบดอกไม้ตาม BOTW แต่คุณสามารถเลือกการออกแบบที่คุณต้องการได้จริงๆ หลังจากนี้เสร็จแล้ว คุณสามารถใส่กระดุมเข้าไปในรูและติดกาวที่ด้านหลังของกระดุมและไม้รอบๆ หลักการเดียวกันนี้ใช้กับออด แต่ของฉันพอดีกับรูอย่างสมบูรณ์ทำให้ไม่จำเป็น ต่อไปคุณหยิบวอร์บลาและความร้อนแล้วตัดเพื่อทำปุ่มเล็กๆ ค่อยๆ ติดกาวบนปุ่มต่างๆ แต่อย่าใช้กาวมากเกินไป เพราะอาจทำให้ปุ่มติดโดยไม่ได้ตั้งใจ ตอนนี้คุณสามารถทาสีทับเพื่อให้เข้ากับกล่องมากขึ้น

ขั้นตอนที่ 5:

สุดท้ายคุณกาวหรือสกรู แคลมป์และบานพับบนกล่องและฝาที่เชื่อมต่อทั้งสอง

ขั้นตอนที่ 6:

เมื่อกล่องของคุณเสร็จสมบูรณ์แล้ว สิ่งที่คุณต้องทำคือใส่ Arduino และแบตเตอรี่เข้าไปข้างในแล้วปิดฝา

ขั้นตอนที่ 7: รหัส

// นี่คือรหัสสำหรับกล่องดนตรี/ปริศนาธีม Zelda

// นี่เชื่อมต่อรหัสของคุณกับรายการบันทึกย่อในแท็บอื่น ๆ

#รวม "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_

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_E}

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 = 0;

การตั้งค่าเป็นโมฆะ () {

Serial.begin(9600);

โหมดพิน (2, อินพุต);

โหมดพิน (1, อินพุต);

}

วงเป็นโมฆะ () {

// อ่านอินพุตจากพิน

k = แอนะล็อกอ่าน(2);

int p = analogRead(1);

//ถ้าไม่มีการกดปุ่มใดๆ ก็ไม่ควรมีเสียง

ถ้า (ผู้บอก == 0) {

โนโทน(12);

}

// ถ้าข้อมูลที่อ่านสอดคล้องกับพารามิเตอร์ให้รันบิตโค้ดที่อธิบายไว้

ถ้า (k > 320 && k < 350) {

rechts();

}

//""

อย่างอื่นถ้า (k 290) {

ลิงค์ ();

}

//""

อื่นถ้า (k > 260 && k < 280) {

โบเวน();

}

//""

อื่นถ้า (k> 240 && k <260) {

บน ();

}

//""

อื่นถ้า (k > 220 && k < 240) {

NS();

}

// หากไม่เป็นเช่นนั้น (เมื่อไม่มีการกดปุ่ม) ให้รันโค้ดนี้

อื่น {

// reset เหมือนเดิม ใช้ได้ครั้งถัดไปที่กดปุ่ม

เหมือนกัน = 0;

// ถ้าตัวนับถึงจำนวนที่แน่นอนให้รันโค้ดบิตที่อธิบายไว้

ถ้า (ผู้บอก == 166) {

เซลด้า();

}

//""

อื่นถ้า (ผู้บอก == 386) {

ซาเรีย();

}

//""

อื่นถ้า (ผู้บอก == 266) {

epona();

}

//""

อื่นถ้า (ผู้บอก == 999) {

// เล่นโทนนี้เพื่อทำเครื่องหมายข้อผิดพลาด

โทนเสียง (ลำโพง NOTE_C3, BEATTIME);

//รีเซ็ตตัวนับเป็น0

หมอดู = 0;

}

}

//ความล่าช้าระหว่างอินพุตและเอาต์พุต

ล่าช้า (100);

// พิมพ์ค่าอินพุตของคุณในมอนิเตอร์แบบอนุกรม

Serial.println(k);

}

// นี่คือทำนองเพลงแรก

โมฆะ zelda() {

// เป็นการตั้งค่าตัวนับที่อัปเดตตัวเองขณะเล่นเมโลดี้เพื่อให้สามารถอ่านและหยุดเมื่อควร

สำหรับ (int i = 0; i < sizeof (Zelda); i++) {

//บอกว่าโน้ตควรอยู่ได้นานแค่ไหน

int ZTime = 1,000 / ZeldaTime;

//สร้างเสียง

โทนเสียง (ลำโพง, Zelda, ZTime);

//สร้างการหน่วงเวลาที่ถูกต้อง

int หยุดชั่วคราว = ZTime * 1.30;

ล่าช้า (หยุดชั่วคราว);

//รีเซ็ตตัวนับ

หมอดู = 0;

// พิมพ์ค่าอินพุตของคุณในมอนิเตอร์แบบอนุกรม

Serial.println (หมอดู);

}

}

//""

โมฆะepona() {

สำหรับ (int i = 0; i < sizeof (Epona); i++) {

int ETime = 1,000 / EponaTime;

น้ำเสียง (ลำโพง, Epona, ETime);

หยุดชั่วคราว = ETime * 1.30;

ล่าช้า (หยุดชั่วคราว);

หมอดู = 0;

Serial.println (หมอดู);

}

}

//""

โมฆะซาเรีย () {

สำหรับ (int i = 0; i < sizeof(Saria); i++) {

int STime = 1,000 / SariaTime;

น้ำเสียง (ผู้พูด, Saria, STime);

int หยุดชั่วคราว = STime * 1.30;

ล่าช้า (หยุดชั่วคราว);

หมอดู = 0;

Serial.println (หมอดู);

}

}

เป็นโมฆะ rec

hts() {

// ถ้ายังไม่ได้กด

ถ้า (เหมือนกัน == 0) {

// ถ้าตัวนับปัจจุบันมีค่าเหล่านี้ให้เพิ่มเข้าไป

if (teller == 0 || teller == 132 || teller == 165 || teller == 232 || teller == 265 || teller == 331 || หมอดู == 374) {

หมอดู = หมอดู + 1;

}

// มิฉะนั้นให้ตั้งค่าเป็น 999 เพื่อให้คุณได้ยินเสียงข้อผิดพลาด te

อื่น {

หมอดู = 999;

}

// ตั้งค่าเหมือนกันเพื่อให้ Arduino ไม่อ่านการกดที่ยืดเยื้อเป็นการกดหลายครั้ง

เหมือนกัน = 1;

}

// เล่นเสียง

อื่น {

โทนเสียง (ลำโพง NOTE_A4, BEATTIME);

}

// พิมพ์ค่าอินพุตของคุณในมอนิเตอร์แบบอนุกรม

Serial.println (หมอดู); }

//""

ลิงก์เป็นโมฆะ () {

ถ้า (เหมือนกัน == 0) {

if (teller == 133 || teller == 254 || teller == 244 || teller == 332 || teller == 375 || หมอดู == 221) {

หมอดู = หมอดู + 11;

}

อื่นถ้า (ผู้บอก == 0) {

หมอดู = 111;

}

อื่น {

หมอดู = 999;

}

เหมือนกัน = 1;

} อื่น{

โทนเสียง (ลำโพง NOTE_B4, BEATTIME);

} Serial.println (หมอดู);

}

//""

เป็นโมฆะ boven() {

if (เท่ากัน == 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 (หมอดู);

}

}

//""

เป็นโมฆะ () {

ถ้า (เหมือนกัน == 0) {

ถ้า (ผู้บอก == 0) {

หมอดู = 461;

}

อื่น {

หมอดู = 999;

}

เหมือนกัน = 1;

}

โทนเสียง (ลำโพง NOTE_D4, BEATTIME);

Serial.println (หมอดู);

}

แนะนำ: