สารบัญ:
- ขั้นตอนที่ 1: การตั้งค่าฮาร์ดแวร์
- ขั้นตอนที่ 2: ตั้งค่าซอฟต์แวร์
- ขั้นตอนที่ 3: ปรับแต่ง
- ขั้นตอนที่ 4: โครงการเพิ่มเติม
วีดีโอ: Arduino Doorbell: 4 ขั้นตอน
2024 ผู้เขียน: John Day | [email protected]. แก้ไขล่าสุด: 2024-01-30 13:02
วันนี้ฉันจะแสดงวิธีทำกริ่งประตูโดยใช้ Arduino กริ่งประตูนี้เล่นเพลงแบบสุ่มจากคลังเพลง คุณสามารถปรับแต่งกริ่งประตูและเพิ่มเพลงได้มากขึ้น ติดตั้งภายนอกห้องนอน ห้องเรียน สำนักงาน หรือแม้แต่ประตูหน้าบ้านของคุณ!
เสบียง:
- Arduino Uno (ประเภทอื่น ๆ ส่วนใหญ่จะทำ)
- คอมพิวเตอร์ที่มี Arduino IDE สำหรับการเขียนโปรแกรม
- สายเคเบิล USB-A เป็น USB-B สำหรับการเขียนโปรแกรม Arduino
- เขียงหั่นขนม
- สายจัมเปอร์ 4x
- ปุ่มกดหรือสวิตช์อื่นๆ
- ตัวต้านทาน 10 kOhm
- ออดแบบพาสซีฟ (เช่น ลำโพงเพียโซอิเล็กทริก)
-
สำหรับการติดตั้งถาวร:
- แหล่งจ่ายไฟ DC 9V หรือแบตเตอรี่ 9V เพื่อจ่ายไฟให้กับ Arduino
- สายไฟยาว 2x สำหรับปุ่มเดินสายไฟด้านนอกประตู
ขั้นตอนที่ 1: การตั้งค่าฮาร์ดแวร์
อันดับแรก เราจะตั้งค่าฮาร์ดแวร์ เราจะเริ่มต้นด้วยออดแบบพาสซีฟ (เช่น ลำโพง) เราต้องการเชื่อมต่อปลายบวกของออดแบบพาสซีฟ (แสดงด้วยเครื่องหมาย "+") กับพินดิจิตอล 8 บน Arduino เราจะเชื่อมต่อปลายอีกด้านของออดกับกราวด์
ต่อไปเราจะติดตั้งปุ่มกดสำหรับกริ่งประตู เราจะใช้ตัวต้านทานแบบดึงลงภายนอก 10 kOhm สำหรับสวิตช์ ดังนั้นจึงไม่มีแรงดันลอยตัวหรือสถานะที่ไม่เสถียรบนอินพุตของ Arduino เมื่อใช้ตัวต้านทานแบบดึงลง Arduino จะอ่านแรงดันไฟฟ้าเป็น 0V เมื่อไม่ได้กดปุ่ม และ 5V เมื่อกดปุ่ม สำหรับข้อมูลเพิ่มเติมเกี่ยวกับตัวต้านทานแบบดึงขึ้นหรือแบบดึงลง คุณสามารถอ่านบทความนี้:
เราจะเชื่อมต่อด้านหนึ่งของปุ่มกดกับ 5V อีกด้านหนึ่งของปุ่มกดจะเชื่อมต่อกับกราวด์ผ่านตัวต้านทานแบบดึงลง 10 kOhm ข้อควรจำ: ปุ่มกดเชื่อมต่อในแนวนอนภายใน พวกเขาจะเชื่อมต่อในแนวตั้งเมื่อกดเท่านั้น ข้อมูลเพิ่มเติมมีอยู่ในบทความนี้:
ขั้นตอนที่ 2: ตั้งค่าซอฟต์แวร์
โค้ดทั้งหมดแนบมาด้วย ด้านล่างนี้คือคำอธิบายของแต่ละฟังก์ชันพร้อมสแนปชอตของโค้ด
ติดตั้ง:
ในฟังก์ชัน setup() เราต้องการกำหนดค่าพินดิจิทัลสำหรับปุ่มและลำโพงของเรา เราต้องการกำหนดค่าพิน 2 เป็นอินพุตสำหรับปุ่มของเรา และเราต้องการกำหนดค่าพิน 8 เป็นเอาต์พุตสำหรับลำโพงของเรา
นอกจากนี้เรายังต้องการ "เพาะ" เครื่องกำเนิดตัวเลขสุ่มของเราสำหรับการเลือกเพลงแบบสุ่มเมื่อมีคนกดกริ่งประตูของเรา การสร้างตัวสร้างตัวเลขสุ่มของเราหมายถึงการป้อนอินพุตแบบสุ่ม เราจะสร้างเครื่องกำเนิดตัวเลขสุ่มของเราด้วยค่าแรงดันไฟฟ้าบนอินพุตแบบอะนาล็อก 0 เนื่องจากไม่มีสิ่งใดเชื่อมต่อกับอินพุตนี้ จึงจะมี "การสุ่ม" แรงดันไฟฟ้าที่ผันผวนบนพินนี้ ซึ่งทำให้เครื่องกำเนิดตัวเลขสุ่มของเรามีค่าต่างๆ มากมาย เพื่อให้แน่ใจว่าเราจะมีลำดับการเลือกเพลงที่แตกต่างกันสำหรับกริ่งประตูของเรา สำหรับข้อมูลเพิ่มเติมเกี่ยวกับฟังก์ชัน Arduino random() ให้ไปที่นี่:
#รวม "pitches.h"
#include "songs.h" #define BUTTON_PIN 2 #define SPEAKER_PIN 8 /* ตั้งค่าฟังก์ชัน */ ตั้งค่าเป็นโมฆะ () { // เปิดใช้งานพินอินพุต/เอาต์พุต pinMode (BUTTON_PIN, INPUT); โหมดพิน (SPEAKER_PIN, เอาต์พุต); // ฟังก์ชัน seed random() เพื่อให้เราได้รับคำสั่ง randomSeed(analogRead(0)); }
ห่วง:
ในฟังก์ชัน loop() เราจะตรวจสอบอย่างต่อเนื่องเพื่อดูว่ามีการกดปุ่มหรือไม่ (พินดิจิตอล 2 สูง) หากพินสูง เรารอ 50 ms แล้วตรวจสอบอีกครั้งเพื่อให้แน่ใจว่ายังสูงอยู่ เพื่อให้แน่ใจว่ามีการกดปุ่มและไม่มีสัญญาณรบกวนที่ขาอินพุตดิจิตอลทำให้เกิดการบวกที่ผิดพลาด
เมื่อเรายืนยันแล้วว่ากดปุ่มแล้ว เราจะใช้ตัวสร้างตัวเลขสุ่มเพื่อเลือกเพลงใดเพลงหนึ่งจาก 5 เพลงโดยใช้คำสั่งเปลี่ยน ข้อมูลสำหรับเพลงเหล่านี้ถูกเก็บไว้ใน "songs.h" และข้อมูลระดับเสียงจะถูกเก็บไว้ใน "pitches.h" เมื่อเราเลือกเพลงแล้ว เราจะส่งข้อมูลนี้ไปยังฟังก์ชัน play_song()
/* ฟังก์ชัน main while loop */
void loop() {// ตรวจสอบว่ามีการกดปุ่มหรือไม่ ถ้า (digitalRead(BUTTON_PIN) == HIGH) { // หน่วงเวลา 50 ms เพื่อให้แน่ใจว่ายังคงกดอยู่ // หลีกเลี่ยงความล่าช้าในการอ่านผิดพลาด (50); if (digitalRead (BUTTON_PIN) == HIGH) { // สุ่มเลือกเพลง int song_choice = สุ่ม (5); // เลือกเพลงที่จะเล่นสลับ (song_choice) { กรณีที่ 0: play_song (ตัดผมยาว ตัดผม ตัดผม ระยะเวลา ตัดผม จังหวะ); หยุดพัก; กรณีที่ 1: play_song(marioLength, mario, marioDurations, marioTempo); หยุดพัก; กรณีที่ 2: play_song(miiLength, mii, miiDurations, miiTempo); หยุดพัก; กรณีที่ 3: play_song(hpLength, hp, hpDurations, hpTempo); หยุดพัก; กรณีที่ 4: play_song(takeonmeLength, takeonme, takeonmeDurations, takeonmeTempo); หยุดพัก; ค่าเริ่มต้น: play_song(miiLength, mii, miiDurations, miiTempo); หยุดพัก; } } } }
play_song:
play_song() รับ 4 อาร์กิวเมนต์: จำนวนเต็มของโน้ตในเพลง, อาร์เรย์จำนวนเต็มของระดับเสียงในเมโลดี้, อาเรย์จำนวนเต็มของระยะเวลา และจังหวะจำนวนเต็มสำหรับเพลงนั้น ๆ คุณต้องระบุข้อมูลเหล่านี้สำหรับทุกเพลงที่คุณต้องการเล่น สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการใช้ฟังก์ชันโทนเสียงของ Arduino คุณสามารถดูบทช่วยสอนนี้: https://www.arduino.cc/en/Tutorial/ToneMelody ฉันได้เพิ่มฟังก์ชันการทำงานบางอย่างที่ด้านบนของบทช่วยสอนนี้สำหรับบันทึกย่อประ หากค่าในอาร์เรย์ระยะเวลาบันทึกเป็นค่าลบ แสดงว่าเป็นบันทึกแบบจุด (ความยาวมากกว่า 1.5 เท่า)
/* เล่นเพลง */
เป็นโมฆะ play_song (int num_notes, int melody , int noteDurations , int tempo) { // ก้าวผ่านและเล่นโน้ตทั้งหมดสำหรับ (int i=0; i 0) { duration = tempo / noteDurations ; } // หากเป็นจำนวนลบ หมายถึง บันทึกแบบประ // เพิ่มระยะเวลาครึ่งหนึ่งสำหรับบันทึกย่อแบบอื่น if (noteDurations < 0) { duration = tempo / abs(noteDurations) * 1.5; } เสียง (SPEAKER_PIN, ทำนอง, ระยะเวลา); // หากต้องการแยกโน้ต ให้ตั้งเวลาขั้นต่ำระหว่างโน้ต // ระยะเวลาของบันทึกย่อ + 30% ดูเหมือนว่าจะทำงานได้ดี: int pauseBetweenNotes = Duration * 1.30; ล่าช้า (pauseBetweenNotes); // หยุดการเล่นเสียง: noTone(SPEAKER_PIN); } }
ตัวอย่างเพลง.h:
ด้านล่างนี้คือตัวอย่างเพลงหนึ่งใน "songs.h" หมายเหตุเป็นมาโครที่กำหนดไว้ใน "pitches.h" ตัวเลขสอดคล้องกับความถี่ของโน้ตในหน่วยเฮิรตซ์ (Hz) ระยะเวลาของโน้ตถูกกำหนดเป็น: 1 = โน้ตทั้งหมด 2 = โน้ตครึ่งตัว 4 = โน้ตสี่ตัว 8 = โน้ตตัวที่แปด -4 = โน้ตในสี่เส้นประ ฯลฯ ความยาวคือจำนวนโน้ตทั้งหมดในเพลง จังหวะเป็นตัวแบ่งความเร็วของเพลง (ตัวเลขที่สูงกว่าหมายถึงจังหวะที่ช้าลง) คุณจะต้องเล่นกับตัวเลขนี้จนกว่าคุณจะได้จังหวะที่คุณชอบ
/* แฮร์รี่พอตเตอร์ */
int hp = { NOTE_D4, NOTE_G4, NOTE_AS4, NOTE_A4, NOTE_G4, NOTE_D5, NOTE_C5, NOTE_A4, NOTE_G4, NOTE_AS4, NOTE_A4, NOTE_F4, NOTE_GS4, NOTE_D4 }; int hpระยะเวลา = { 4, -4, 8, 4, 2, 4, -2, -2, -4, 8, 4, 2, 4, 1 }; int hpLength = 14; int hpTempo = 1050;
ขั้นตอนที่ 3: ปรับแต่ง
เพิ่มเพลงมากขึ้น! ทำตามรูปแบบที่แสดงใน "songs.h" และใช้บทช่วยสอนเพื่อขอความช่วยเหลือ: https://www.arduino.cc/en/Tutorial/ToneMelody สำหรับทุกเพลงใหม่ที่คุณเพิ่ม อย่าลืมเพิ่มตัวพิมพ์ใหม่ในคำสั่ง switch และเพิ่มจำนวนสูงสุดที่ฟังก์ชัน random() สามารถสร้างได้ มีความสุขในการเข้ารหัส!
ขั้นตอนที่ 4: โครงการเพิ่มเติม
สำหรับโครงการเพิ่มเติม เยี่ยมชมหน้าของฉัน:
- https://dargen.io/
- https://github.com/mjdargen
- https://www.instructables.com/member/mjdargen/
แนะนำ:
UK Ring Video Doorbell Pro ทำงานร่วมกับ Mechanical Chime: 6 ขั้นตอน (พร้อมรูปภาพ)
UK Ring Video Doorbell Pro ทำงานร่วมกับ Mechanical Chime: ****************************************** ***************โปรดทราบว่าวิธีนี้ใช้ได้เฉพาะกับไฟ AC ตอนนี้ฉันจะอัปเดตหาก/เมื่อฉันพบวิธีแก้ปัญหาสำหรับกริ่งประตูที่ใช้ไฟ DC ในระหว่างนี้ หากคุณมีไฟ DC อุปทาน คุณจะต้องเ
DIY Smart Doorbell: รหัส การตั้งค่า และการรวม HA: 7 ขั้นตอน (พร้อมรูปภาพ)
DIY Smart Doorbell: Code, Setup และ HA Integration: ในโครงการนี้ ฉันจะแสดงให้คุณเห็นว่าคุณสามารถเปลี่ยนกริ่งประตูธรรมดาของคุณให้เป็นแบบสมาร์ทได้อย่างไรโดยไม่ต้องเปลี่ยนฟังก์ชันการทำงานปัจจุบันหรือตัดสายไฟ ฉันจะใช้บอร์ด ESP8266 ชื่อ Wemos D1 mini ใหม่กับ ESP8266 หรือไม่ ดู Introdu ของฉัน
Arduino Coronavirus Doorbell: 6 ขั้นตอน
Arduino Coronavirus Doorbell: เนื่องจากการระบาดของ coronavirus ทั่วโลก ฉันต้องการสร้างกริ่งที่คุณไม่จำเป็นต้องกดสัญญาณใด ๆ ไปยังผู้คนในนั้นว่าคุณอยู่ที่นี่และพวกเขาต้องเปิดประตู สิ่งนี้สามารถทำให้คุณติดไวรัสได้โดยการสัมผัสกริ่งประตูของคนอื่น
DIY Musical Doorbell: 7 ขั้นตอน (พร้อมรูปภาพ)
DIY Musical Doorbell: เรียนรู้วิธีทำกระดิ่งดนตรีแบบง่ายๆ โดยใช้ IC กำเนิดเมโลดี้ UM66T เครื่องสร้าง Melody จะเล่น Für Elise ของ Beethoven เมื่อถูกกระตุ้นเนื่องจากใช้ UM66T-19L มี IC เวอร์ชันต่างๆ กัน ซึ่งแต่ละรุ่นได้รับการกำหนดค่าให้เล่นต่างกัน
Dr Who Tardis Doorbell: 14 ขั้นตอน (พร้อมรูปภาพ)
Dr Who Tardis Doorbell: นี่เป็นโครงการที่ฉันคิดขึ้นมาเพื่อสร้างกริ่งประตูควานหา เป็นกริ่งไร้สายที่เมื่อกดแล้วจะเล่นเสียงจากรายการ ฉันได้บันทึกและใช้เสียงจากซีรีส์ Matt Smith เพราะนี่คือของขวัญสำหรับน้องสาวเลี้ยงของฉัน และนั่นคือเธอ