- วัสดุที่จำเป็น
- เซ็นเซอร์เสียงทำงาน
- การวัดความถี่เสียงบนออสซิลโลสโคป
- แผนภาพวงจร Arduino เครื่องตรวจจับนกหวีด
- การวัดความถี่ด้วย Arduino
- การเขียนโปรแกรม Arduino ของคุณเพื่อตรวจจับนกหวีด
- เครื่องตรวจจับนกหวีด Arduino ทำงาน
ตอนเป็นเด็กฉันรู้สึกทึ่งกับรถดนตรีของเล่นซึ่งจะถูกกระตุ้นเมื่อคุณปรบมือและเมื่อฉันโตขึ้นฉันก็สงสัยว่าเราสามารถใช้แบบเดียวกันนี้เพื่อเปิดปิดไฟและพัดลมในบ้านของเราได้หรือไม่ คงจะดีไม่น้อยที่จะเปิดพัดลมและไฟด้วยการปรบมือแทนการเดินไปที่แผงสวิตช์ แต่บ่อยครั้งมันจะทำงานผิดปกติเนื่องจากวงจรนี้จะตอบสนองต่อเสียงดังในสิ่งแวดล้อมเช่นวิทยุที่ดังหรือเครื่องตัดหญ้าของเพื่อนบ้าน แม้ว่าการสร้างสวิตช์ตบมือจะเป็นโครงการที่น่าสนุก
ตอนนั้นเองเมื่อฉันเจอวิธีการตรวจจับนกหวีดซึ่งวงจรจะตรวจจับนกหวีด เสียงนกหวีดที่แตกต่างจากเสียงอื่น ๆ จะมีความถี่สม่ำเสมอในช่วงเวลาหนึ่งและด้วยเหตุนี้จึงสามารถแยกแยะได้จากเสียงพูดหรือดนตรี ดังนั้นในการกวดวิชานี้เราจะได้เรียนรู้วิธีการตรวจสอบเสียงนกหวีดจากการเชื่อมต่อเซนเซอร์เสียงกับ Arduinoและเมื่อนกหวีดมีการตรวจพบเราจะสลับหลอดไฟ AC ผ่านการถ่ายทอด ระหว่างทางเราจะได้เรียนรู้วิธีรับสัญญาณเสียงจากไมโครโฟนและวิธีวัดความถี่โดยใช้ Arduino ฟังดูน่าสนใจดังนั้นมาเริ่มต้นกับโครงการ Home Automation Project ที่ใช้ Arduino
วัสดุที่จำเป็น
- Arduino UNO
- โมดูลเซนเซอร์เสียง
- โมดูลรีเลย์
- ไฟ AC
- การเชื่อมต่อสายไฟ
- เขียงหั่นขนม
เซ็นเซอร์เสียงทำงาน
ก่อนที่เราจะดำน้ำในการเชื่อมต่อฮาร์ดแวร์และรหัสสำหรับ Home Automation Project นี้เรามาดูเซ็นเซอร์เสียงกันก่อน เซ็นเซอร์เสียงที่ใช้ในโมดูลนี้แสดงอยู่ด้านล่าง หลักการทำงานของเซ็นเซอร์เสียงส่วนใหญ่ที่มีอยู่ในตลาดจะคล้าย ๆ กันแม้ว่ารูปลักษณ์ภายนอกอาจเปลี่ยนไปเล็กน้อย
ที่เรารู้ว่าองค์ประกอบดั้งเดิมเซ็นเซอร์เสียงเป็นไมโครโฟนไมโครโฟนเป็นประเภทของการแปลงสัญญาณที่คอนคลื่นเสียง (พลังงานเสียง) เป็นพลังงานไฟฟ้าโดยทั่วไปไดอะแฟรมภายในไมโครโฟนจะสั่นสะเทือนไปยังคลื่นเสียงในบรรยากาศซึ่งจะสร้างสัญญาณไฟฟ้าที่ขาเอาต์พุต แต่สัญญาณเหล่านี้จะมีขนาด (mV) ต่ำมากจึงไม่สามารถประมวลผลโดยตรงโดยไมโครคอนโทรลเลอร์เช่น Arduino นอกจากนี้โดยค่าเริ่มต้นสัญญาณเสียงจะเป็นแบบอะนาล็อกดังนั้นเอาต์พุตจากไมโครโฟนจะเป็นคลื่นไซน์ที่มีความถี่ผันแปร แต่ไมโครคอนโทรลเลอร์เป็นอุปกรณ์ดิจิทัลจึงทำงานได้ดีกว่ากับคลื่นสี่เหลี่ยม
ในการขยายคลื่นไซน์สัญญาณต่ำเหล่านี้และแปลงเป็นคลื่นสี่เหลี่ยมโมดูลจะใช้โมดูลเปรียบเทียบ LM393 บนบอร์ดดังที่แสดงด้านบน เอาต์พุตเสียงแรงดันต่ำจากไมโครโฟนจะจ่ายให้กับพินหนึ่งของตัวเปรียบเทียบผ่านทรานซิสเตอร์ของแอมพลิฟายเออร์ในขณะที่แรงดันอ้างอิงถูกตั้งค่าไว้ที่พินอื่นโดยใช้วงจรแบ่งแรงดันไฟฟ้าที่เกี่ยวข้องกับโพเทนชิออมิเตอร์ เมื่อแรงดันเอาต์พุตเสียงจากไมโครโฟนเกินแรงดันไฟฟ้าที่ตั้งไว้ตัวเปรียบเทียบจะสูงขึ้นด้วย 5V (แรงดันไฟฟ้าที่ใช้งาน) มิฉะนั้นตัวเปรียบเทียบจะอยู่ในระดับต่ำที่ 0V วิธีนี้คลื่นไซน์สัญญาณต่ำสามารถแปลงเป็นคลื่นสี่เหลี่ยมแรงดันสูง (5V) ได้ สแนปช็อตออสซิลโลสโคปด้านล่างแสดงให้เห็นว่าคลื่นสีเหลืองเป็นคลื่นไซน์สัญญาณต่ำและสีฟ้าบนคือคลื่นสี่เหลี่ยมเอาท์พุต ความไวสามารถควบคุมได้โดยการเปลี่ยนแปลงมิเตอร์บนโมดูล
การวัดความถี่เสียงบนออสซิลโลสโคป
โมดูลเซ็นเซอร์เสียงนี้จะแปลงคลื่นเสียงในชั้นบรรยากาศให้เป็นคลื่นสี่เหลี่ยมความถี่ของใครจะเท่ากับความถี่ของคลื่นเสียง ดังนั้นโดยการวัดความถี่ของคลื่นสี่เหลี่ยมเราสามารถหาความถี่ของสัญญาณเสียงในบรรยากาศได้ เพื่อให้แน่ใจว่าสิ่งต่างๆทำงานได้ตามที่ควรฉันเชื่อมต่อเซ็นเซอร์เสียงเข้ากับขอบเขตของฉันเพื่อตรวจสอบสัญญาณเอาต์พุตดังที่แสดงในวิดีโอด้านล่าง
ฉันเปิดโหมดการวัดในขอบเขตของฉันเพื่อวัดความถี่และใช้แอปพลิเคชัน Android (เครื่องกำเนิดเสียงความถี่) จาก Play Storeเพื่อสร้างสัญญาณเสียงของความถี่ที่ทราบ ดังที่คุณเห็นใน GID ด้านบนขอบเขตสามารถวัดสัญญาณเสียงได้อย่างแม่นยำพอสมควรค่าของความถี่ที่แสดงในขอบเขตนั้นใกล้เคียงกับที่แสดงบนโทรศัพท์ของฉันมาก ตอนนี้เรารู้ว่าโมดูลกำลังทำงานให้ดำเนินการเชื่อมต่อเซ็นเซอร์เสียงกับ Arduino
แผนภาพวงจร Arduino เครื่องตรวจจับนกหวีด
แผนภาพวงจรที่สมบูรณ์สำหรับวงจรArduino Whistle Detector Switch โดยใช้ Sound Sensorแสดงไว้ด้านล่าง วงจรถูกวาดโดยใช้ซอฟต์แวร์ Fritzing
เซ็นเซอร์เสียงและโมดูลรีเลย์ใช้พลังงานจากขา 5V ของ Arduino ขาเอาต์พุตของเซ็นเซอร์เสียงเชื่อมต่อกับพินดิจิทัล 8 ของ Arduino ซึ่งเป็นเพราะคุณสมบัติการจับเวลาของพินนั้นและเราจะพูดถึงเรื่องนี้เพิ่มเติมในส่วนการเขียนโปรแกรม โมดูลรีเลย์ถูกเรียกใช้โดยพิน 13 ซึ่งเชื่อมต่อกับ LED ในตัวบนบอร์ด UNO
ที่ด้านจ่ายไฟ AC สายกลางจะเชื่อมต่อโดยตรงกับพิน Common (C) ของโมดูลรีเลย์ในขณะที่เฟสเชื่อมต่อกับพินปกติเปิด (NO) ของรีเลย์ผ่านโหลด AC (หลอดไฟ) วิธีนี้เมื่อรีเลย์ถูกเรียกใช้ขา NO จะเชื่อมต่อกับขา C และหลอดไฟจะเรืองแสง มิฉะนั้น blub จะยังคงปิดอยู่ เมื่อทำการเชื่อมต่อแล้วฮาร์ดแวร์ของฉันจะมีลักษณะเช่นนี้
คำเตือน:การทำงานกับวงจรไฟฟ้ากระแสสลับอาจทำให้เกิดอันตรายได้โปรดใช้ความระมัดระวังขณะจัดการกับสายไฟและหลีกเลี่ยงการลัดวงจร แนะนำให้ใช้เบรกเกอร์หรือการดูแลของผู้ใหญ่สำหรับผู้ที่ไม่มีประสบการณ์เกี่ยวกับอุปกรณ์อิเล็กทรอนิกส์ โดนเตือนแล้ว !!
การวัดความถี่ด้วย Arduino
คล้ายกับขอบเขตของเราที่อ่านความถี่ของคลื่นสี่เหลี่ยมที่เข้ามาเราต้องตั้งโปรแกรม Arduino เพื่อคำนวณความถี่ เราได้เรียนรู้วิธีการทำสิ่งนี้แล้วในบทช่วยสอนการนับความถี่โดยใช้ฟังก์ชัน pulse in แต่ในบทช่วยสอนนี้เราจะใช้ไลบรารี Freqmeasureเพื่อวัดความถี่เพื่อให้ได้ผลลัพธ์ที่แม่นยำ ไลบรารีนี้ใช้การขัดจังหวะตัวจับเวลาภายในที่พิน 8 เพื่อวัดระยะเวลาที่พัลส์ยังคงเปิดอยู่ เมื่อวัดเวลาแล้วเราสามารถคำนวณความถี่โดยใช้สูตร F = 1 / T อย่างไรก็ตามเนื่องจากเราใช้ไลบรารีโดยตรงเราจึงไม่จำเป็นต้องเข้าไปในรายละเอียดการลงทะเบียนและวิธีคำนวณความถี่ในการวัด สามารถดาวน์โหลดไลบรารีได้จากลิงค์ด้านล่าง:
- ไลบรารีการวัดความถี่โดย pjrc
ที่ลิงค์ข้างต้นจะดาวน์โหลดไฟล์ซิปแล้วคุณสามารถเพิ่มไฟล์ซิปนี้เพื่อ Arduino IDE ของคุณโดยทำตามเส้นทางSketch -> รวม Library -> เพิ่มห้องสมุดซิป
หมายเหตุ: การใช้ไลบรารีจะปิดใช้งานฟังก์ชัน analogWrite บนพิน 9 และ 10 บน UNO เนื่องจากไลบรารีนี้จะถูกใช้งานตัวจับเวลา นอกจากนี้หมุดเหล่านี้จะเปลี่ยนไปหากใช้บอร์ดอื่น
การเขียนโปรแกรม Arduino ของคุณเพื่อตรวจจับนกหวีด
โปรแกรมที่สมบูรณ์ด้วยวิดีโอสาธิตสามารถพบได้ที่ด้านล่างของหน้านี้ ในหัวข้อนี้ฉันจะอธิบายโปรแกรมโดยแบ่งเป็นตัวอย่างเล็ก ๆ
เช่นเคยเราเริ่มโปรแกรมโดยรวมไลบรารีที่จำเป็นและประกาศตัวแปรที่ต้องการ ตรวจสอบให้แน่ใจว่าคุณได้เพิ่มไลบรารี FreqMeasure.h แล้วตามที่อธิบายไว้ในหัวข้อด้านบน สถานะตัวแปรแสดงสถานะของ LED และความถี่ของตัวแปรและความต่อเนื่องจะใช้เพื่อส่งออกความถี่ที่วัดได้และความต่อเนื่องตามลำดับ
# รวม
ภายในฟังก์ชั่น การตั้งค่าโมฆะ เราจะเริ่มมอนิเตอร์แบบอนุกรมที่อัตราบอด 9600 สำหรับการดีบัก จากนั้นใช้ ฟังก์ชัน FreqMeasure.begin () เพื่อเริ่มต้นพิน 8 สำหรับการวัดความถี่ นอกจากนี้เรายังประกาศด้วยว่าขา 13 (LED_BUILTIN) เป็นเอาต์พุต
การตั้งค่าเป็นโมฆะ () { Serial.begin (9600); FreqMeasure.begin (); // วัดพิน 8 ตามค่าเริ่มต้น pinMode (LED_BUILTIN, OUTPUT); }
ภายใน ลูป ไม่มีที่สิ้นสุดเราจะฟังพิน 8 ต่อไปโดยใช้ฟังก์ชัน FreqMeasure.available () หากมีสัญญาณเข้าเราจะวัดความถี่โดยใช้ FreqMeasure.read () เพื่อหลีกเลี่ยงข้อผิดพลาดเนื่องจากเสียงรบกวนเราทำการวัด 100 ตัวอย่างและหาค่าเฉลี่ยนั้น รหัสในการทำเช่นเดียวกันแสดงอยู่ด้านล่าง
ถ้า (FreqMeasure.available ()) { // ค่าเฉลี่ยหลาย ๆ การอ่าน รวม กันsum = sum + FreqMeasure.read (); นับ = นับ + 1; ถ้า (count> 100) { frequency = FreqMeasure.countToFrequency (sum / count); Serial.println (ความถี่); ผลรวม = 0; นับ = 0; } }
คุณสามารถใช้ ฟังก์ชัน Serial.println () ที่นี่เพื่อตรวจสอบค่าของความถี่สำหรับนกหวีดของคุณ ในกรณีของฉันค่าที่ได้รับคือตั้งแต่ 1800Hz ถึง 2000Hz ความถี่ในการเป่านกหวีดของคนส่วนใหญ่จะอยู่ในช่วงนี้โดยเฉพาะ แต่แม้แต่เสียงอื่น ๆ เช่นดนตรีหรือเสียงอาจตกอยู่ภายใต้ความถี่นี้ดังนั้นเราจะตรวจสอบความต่อเนื่องเพื่อความแตกต่าง หากความถี่ต่อเนื่อง 3 ครั้งเรายืนยันว่าเป็นเสียงนกหวีด ดังนั้นหากความถี่อยู่ระหว่าง 1800 ถึง 2000 เราจะเพิ่มตัวแปรที่เรียกว่าความต่อเนื่อง
ถ้า (ความถี่> 1800 && ความถี่ <2000) {ความต่อเนื่อง ++; Serial.print ("ความต่อเนื่อง ->"); Serial.println (ความต่อเนื่อง); ความถี่ = 0;}
หากค่าของความต่อเนื่องถึงหรือเกินสามเราจะเปลี่ยนสถานะของ LED โดยการสลับตัวแปรที่เรียกว่าสถานะ หากสถานะเป็นจริงแล้วเราเปลี่ยนเป็นเท็จและในทางกลับกัน
ถ้า (ความต่อเนื่อง> = 3 && state == false) {state = true; ความต่อเนื่อง = 0; Serial.println ("ไฟเปิด"); ล่าช้า (1000);} if (ความต่อเนื่อง> = 3 && state == จริง) {state = false; ความต่อเนื่อง = 0; Serial.println ("ปิดไฟ"); ล่าช้า (1000);}
เครื่องตรวจจับนกหวีด Arduino ทำงาน
เมื่อรหัสและฮาร์ดแวร์พร้อมแล้วเราสามารถเริ่มทดสอบได้ ตรวจสอบว่าการเชื่อมต่อถูกต้องและเปิดโมดูล เปิดจอภาพอนุกรมและเริ่มส่งเสียงหวีดคุณจะสังเกตเห็นค่าความต่อเนื่องที่เพิ่มขึ้นและในที่สุดก็เปิดหรือปิดหลอดไฟ ตัวอย่างสแนปช็อตของจอภาพอนุกรมของฉันแสดงอยู่ด้านล่าง
เมื่อมอนิเตอร์แบบอนุกรมแจ้งว่า Light เปิดอยู่ ที่พิน 13 จะทำให้สูงขึ้นและรีเลย์จะถูกกระตุ้นให้เปิดหลอดไฟ ในทำนองเดียวกันหลอดไฟจะถูกปิดเมื่อจอภาพแบบอนุกรมกล่าวว่าแสงปิด เมื่อคุณได้ผ่านการทดสอบการทำงานคุณสามารถใช้พลังงานการตั้งค่าการใช้อะแดปเตอร์ 12V และเริ่มควบคุม AC Home Appliance ของคุณโดยใช้นกหวีด
การทำงานทั้งหมดของโครงการนี้สามารถดูได้จากวิดีโอที่ลิงก์ด้านล่าง หวังว่าคุณจะเข้าใจบทแนะนำนี้และสนุกกับการเรียนรู้สิ่งใหม่ ๆ หากคุณมีปัญหาในการทำงานให้ทิ้งไว้ในส่วนความคิดเห็นหรือใช้ฟอรัมของเราสำหรับคำถามด้านเทคนิคอื่น ๆ