สารบัญ:

Arduino Doorbell: 4 ขั้นตอน
Arduino Doorbell: 4 ขั้นตอน

วีดีโอ: Arduino Doorbell: 4 ขั้นตอน

วีดีโอ: Arduino Doorbell: 4 ขั้นตอน
วีดีโอ: How To Make A Touchless Doorbell At Home || Smart Doorbell 2024, กรกฎาคม
Anonim
Arduino ออด
Arduino ออด

วันนี้ฉันจะแสดงวิธีทำกริ่งประตูโดยใช้ 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/

แนะนำ: