สารบัญ:

รีเลย์สัญญาณเตือนช่องแช่แข็ง: 5 ขั้นตอน
รีเลย์สัญญาณเตือนช่องแช่แข็ง: 5 ขั้นตอน

วีดีโอ: รีเลย์สัญญาณเตือนช่องแช่แข็ง: 5 ขั้นตอน

วีดีโอ: รีเลย์สัญญาณเตือนช่องแช่แข็ง: 5 ขั้นตอน
วีดีโอ: ตู้เย็นไฟเข้าแต่ไม่เย็น ไม่ทำงาน ซ่อมง่ายๆด้วยตัวเอง ใน 5 นาที 2024, กรกฎาคม
Anonim
รีเลย์สัญญาณเตือนช่องแช่แข็ง
รีเลย์สัญญาณเตือนช่องแช่แข็ง

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

ปัญหานี้มีอยู่ 2 ส่วน เราต้องการวิธีการตรวจจับสัญญาณเตือนภัยที่ดับลง และวิธีการถ่ายทอดข้อเท็จจริงนี้ไปยังพื้นที่อยู่อาศัยของเรา การออกแบบที่ฉันใช้คือการใช้ Raspberry Pi เพื่อฟังสัญญาณเตือนช่องแช่แข็งที่ดับลง จากนั้นจึงส่งข้อความเตือนที่ได้ยินไปยังวิทยุในประเทศของฉันซึ่งเปิดใช้งาน uPNP Universal Plug and Play (UpnP) เป็นมาตรฐานสำหรับการค้นหาและโต้ตอบกับบริการต่างๆ ที่นำเสนอโดยอุปกรณ์ต่างๆ บนเครือข่าย รวมถึงเซิร์ฟเวอร์สื่อและเครื่องเล่น แม้ว่าฉันไม่คิดว่าตู้แช่แข็งจะถูกสร้างขึ้นเมื่อมีการพัฒนามาตรฐาน ข้อความเตือนมีเสียงดังและน่ารำคาญ และซ้ำไม่รู้จบจนกระทั่งปิดวิทยุ

ฉันเลือกที่จะตรวจจับการเตือนด้วย Raspberry Pi Zero W และ Seeed ReSpeaker 2-Mics Pi HAT Raspberry PI Zero เป็นรุ่นราคาประหยัดของ Raspberry Pi และตัวเลือก W มี WiFi ในตัว ในขณะที่ Seeed Pi HAT จำหน่ายในราคาต่ำกว่า $10 มีไฟ LED ในตัวและปุ่มผู้ใช้ Pi HAT เป็นการ์ดต่อที่เสียบเข้ากับ Raspberry Pi โดยตรง ทำให้มีขั้นตอนการประกอบที่ง่ายมาก รุ่น Pi ใด ๆ จะมีความสามารถมากกว่างานนี้และไมโครโฟนที่เลือกสามารถถูกแทนที่ได้แม้ว่าฉันจะใช้ไฟ LED ในตัวในโครงสร้างนี้

ง่ายที่จะตรวจสอบว่าวิทยุหรือทีวีเหมาะกับคุณหรือไม่ มีแนวโน้มที่จะอธิบายว่า "เปิดใช้งาน DLNA" หรือคล้ายกัน สิ่งนี้ใช้ uPNP ในการสื่อสาร บนพีซีที่ใช้ Windows ให้เลือกไฟล์ mp3 และ “Cast to Device” หากอุปกรณ์ของคุณปรากฏขึ้นและคุณสามารถเล่นไฟล์ได้ แสดงว่าคุณพร้อมแล้ว

ฉันแบ่งซอฟต์แวร์ออกเป็น 2 สคริปต์ python, checkFreezer.py เพื่อตรวจสอบว่ามีการทริกเกอร์การแจ้งเตือนช่องแช่แข็งหรือไม่ และ RaiseAlarm.py เพื่อส่งสัญญาณเตือน สคริปต์เหล่านี้สามารถพัฒนาและทดสอบแยกกันได้ และสามารถดัดแปลงหรือแทนที่ได้อย่างง่ายดายสำหรับวิธีการส่งเสียงเตือนของไมโครโฟนแบบต่างๆ

เสบียง

  • ซอฟต์แวร์ -https://github.com/wapringle/freezer-alarm
  • ราสเบอร์รี่ PI Zero W
  • Seeed ReSpeaker 2-Mics Pi HAT
  • วิทยุที่เปิดใช้งาน uPNP

ขั้นตอนที่ 1: การออกแบบตัวตรวจจับ

เมื่อเปิดประตูช่องแช่แข็งทิ้งไว้และอุณหภูมิสูงขึ้น ช่องแช่แข็งจะส่งเสียงเตือน "บี๊บบี๊บ" เช่นเดียวกับเสียงบี๊บอิเล็กทรอนิกส์ส่วนใหญ่ นี่คือความถี่เดียว แนวคิดคือการสุ่มตัวอย่างอินพุตเสียง ดำเนินการ Fast Fourier Transform (FFT) ซึ่งแปลงสัญญาณตามเวลาเป็นความถี่ตาม กล่าวอีกนัยหนึ่งคือการแยกสัญญาณเพื่อแสดงความถี่ต่างๆ ในสัญญาณ ดู Raspberry Pi Spectrum Analyzer ที่สอนได้พร้อมแถบ LED RGB เราสามารถค้นหาจุดสูงสุดที่ความถี่เสียงกริ่งและเรียกการเตือนเมื่อเสียงกริ่งเปิดใช้งานอยู่ระยะหนึ่ง

เครื่องตรวจจับนี้มีข้อกำหนด 2 ข้อ

  • ควรตรวจจับเสียงกริ่งแม้ในที่ที่มีเสียงรบกวนรอบข้าง (กำจัดลบเท็จ)
  • ไม่ควรถูกกระตุ้นโดยเสียงรบกวนรอบข้าง (กำจัดผลบวกที่ผิดพลาด)

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

ขั้นตอนที่ 2: การกำหนดค่าตัวตรวจจับ

การกำหนดค่าเครื่องตรวจจับ
การกำหนดค่าเครื่องตรวจจับ
การกำหนดค่าเครื่องตรวจจับ
การกำหนดค่าเครื่องตรวจจับ
การกำหนดค่าเครื่องตรวจจับ
การกำหนดค่าเครื่องตรวจจับ

ด้วยโทรศัพท์ของฉัน ฉันเก็บตัวอย่างเสียงเป็นไฟล์ WAV ของออดช่องแช่แข็งเพียงอย่างเดียว โดยมีพื้นหลังที่มีเสียงดัง และขณะที่ฮูเวอร์ทำงาน ฉันปรับโค้ดเพื่อดำเนินการ FFT จากโพสต์ Reading Audio Stream สำหรับ FFT (หากมีข้อสงสัย ให้ลอกเลียนแบบ) และใช้สคริปต์ fourierTest.py เพื่อพล็อตตัวอย่างแบบ Raw และ Fourier Transformed ของออดในพื้นหลังที่เงียบ มีเสียงดัง และมีเสียงดังมาก การเพิ่มขึ้นของระดับที่ความถี่ 645 นั้นเด่นชัดในโครงเรื่องแรกและยังคงมีนัยสำคัญโดยมีพื้นหลังที่มีเสียงดังมาก

ขั้นตอนที่ 3: การสร้างตัวตรวจจับ

การประกอบเครื่องตรวจจับ

ง่ายมาก. Pi W มาพร้อมกับ Wifi ในตัวและ HAT เสียบเข้ากับหมุด GPIO บน Pi การกำหนดค่าซอฟต์แวร์ต้องใช้ขั้นตอน

  • ติดตั้ง raspbian distro บน Raspberry Pi มีคำแนะนำมากมายเกี่ยวกับเรื่องนี้ที่สามารถอธิบายได้ดีกว่าที่ฉันทำได้
  • ตั้งค่า Wifi (เหมือนกันด้านบน)
  • ต้องติดตั้งแพ็คเกจ alsa

$ sudo apt-get ติดตั้ง libasound-dev

$ pip ติดตั้ง pyalsaaudio

  • เชื่อมต่อ HAT กับราสเบอร์รี่ PI
  • ทำตามคำแนะนำบนเว็บไซต์ seeed เพื่อติดตั้งไดรเวอร์สำหรับ HAT
  • เรียกใช้ seeed diagnostics เพื่อตรวจสอบว่า HAT ทำงานและกำหนดค่าอย่างเหมาะสม

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

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

การฝึกอบรมเครื่องตรวจจับ

เครื่องตรวจจับได้รับการฝึกฝนโดยการสแกนแต่ละตัวอย่างเมื่อมีการเล่นการบันทึก WAV ของออดไปที่เครื่องตรวจจับ โปรแกรมจะแสดงตำแหน่งในสเปกตรัม FFT ที่มีระดับพลังงานสูงสุด (ความถี่สูงสุด) ร่วมกับระดับของความถี่สูงสุดนั้น การหาความถี่ของออดและระดับกำลังที่เปล่งออกมานั้นเป็นเรื่องง่าย

มี 2 วิธีในการตรวจสอบว่าเสียงบี๊บเกิดขึ้นหรือไม่:-

  1. ความถี่เสียงกริ่งเป็นความถี่สูงสุดในตัวอย่างหรือไม่
  2. หรือระดับพลังงานที่ความถี่ออดเกินเกณฑ์หรือไม่?

ทั้งสองวิธีทำงานในตัวอย่างที่เงียบ แต่วิธีที่สองดีกว่ากับตัวอย่างที่มีเสียงดัง ดังนั้นฉันจึงใช้วิธีนั้น

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

เราต้องการน้ำหนักสำหรับ upvote และ downvote พร้อมกับเกณฑ์ ฉันทำสิ่งนี้ด้วยการลองผิดลองถูกกับตัวอย่างจำนวนหนึ่ง ฉันไม่จำเป็นต้องกำหนดความถี่เสียงกริ่งจริง ฉันแค่มองหาความถี่ที่โดดเด่นในสเปกตรัม fft

ขั้นตอนที่ 4: การส่งข้อความไปยังวิทยุ

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

  • www.electricmonk.nl/log/2016/07/05/exploring-upnp-with-python/ นี่เป็นภาพรวมที่ดีว่าทุกอย่างเข้ากันได้อย่างไร
  • developer.sony.com/develop/audio-control-api/get-started/browse-dlna-file
  • stackoverflow.com/questions/28422609/how-to-send-setavtransporturi-using-upnp-c/35819973

ฉันใช้ Wireshark ที่ทำงานบนพีซีที่ใช้ Windows เพื่อยกเลิกการเลือกลำดับข้อความเมื่อเล่นไฟล์ตัวอย่างจากพีซีของฉันทางวิทยุ และหลังจากเล่นซอเล็กน้อย ฉันก็ได้ลำดับคำสั่งที่ใช้งานได้ นี่คือ

  • เปิดเว็บเซิร์ฟเวอร์ป๊อปอัปเพื่อแสดงข้อความเตือนเมื่อวิทยุร้องขอ
  • ตั้งระดับเสียงเป็น LOUD (ข้อความเตือนควรดึงดูดความสนใจของทุกคน)
  • ส่ง uri ของข้อความเตือนไปยังวิทยุ
  • โพลวิทยุจนสถานะปัจจุบันเป็น "STOPPED"
  • รับวิทยุเพื่อ "เล่น" uri
  • ทำซ้ำ 2 ขั้นตอนสุดท้ายจนกระทั่งสถานะปัจจุบันเป็น "NO MEDIA PRESENT" ซึ่งหมายความว่าระบบตอบรับการปลุกโดยการปิดวิทยุ
  • สุดท้ายปิดเว็บเซิร์ฟเวอร์และออก

นี่คือสคริปต์ riseAlarm.py

ขั้นตอนที่ 5: ลงมือทำเอง

ลงมือทำเอง
ลงมือทำเอง

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

การตั้งค่า PI Zero W รวมถึงไมโครโฟน

  • ประกอบฮาร์ดแวร์ตามขั้นตอนที่3
  • ดาวน์โหลดสคริปต์การเตือนช่องแช่แข็งจากคำแนะนำนี้ หรือจากที่เก็บ git ซึ่งมีแทร็กโบนัสสองสามแทร็ก

$ git clone

คุณต้องติดตั้งซอฟต์แวร์เพื่อใช้ไฟ LED APA102 บนบอร์ด ฉันได้รวมสำเนาของ apa102.py ไว้ในไดเร็กทอรีการทำงาน git

ฝึกเครื่องตรวจจับของคุณ

ฉันได้เพิ่มตัวเลือกการฝึกอบรมให้กับสคริปต์ checkFreezer.py การดำเนินการนี้จะรันแบบสแตนด์อโลนและพิมพ์การวินิจฉัยไปยังบรรทัดคำสั่ง แต่ก่อนอื่น คุณต้องบันทึกตัวอย่างการเตือนบางส่วนในสภาพแวดล้อมที่เงียบเป็นไฟล์ WAV และทำเช่นเดียวกันกับไฟล์ที่มีสัญญาณรบกวน ในการฝึกให้สำเร็จ คุณต้องหาความถี่ FFT ที่มีระดับสูงสุดก่อน ("ความถี่สูงสุด") จากนั้นจึงหาระดับเกณฑ์สำหรับความถี่นั้นเพื่อตั้งค่าทริกเกอร์ ในการดำเนินการนี้ ให้เรียกใช้สคริปต์ checkFreezer ในโหมดการฝึก ด้วยตัวเลือก '-t' และเล่นการบันทึกการเตือน

$ หลาม checkFreezer.py -t

การดำเนินการนี้สคริปต์ในโหมดการฝึกอบรม มันพิมพ์ว่า "พร้อม" เมื่อเริ่มต้น HAT ที่เห็นแล้วและไฟ LED เปลี่ยนเป็นสีเขียว จากนั้นจะเป็นเส้นสำหรับเสียงที่ไม่สำคัญที่ได้ยิน เช่น

$ หลาม checkFreezer.py -t

ความถี่สูงสุดพร้อม 55 ทริกเกอร์ระดับ 1 ถูกทริกเกอร์หรือไม่ ความถี่สูงสุดผิดพลาด 645 ระดับทริกเกอร์ 484 ถูกทริกเกอร์หรือไม่ ความถี่สูงสุดผิดพลาด 645 ระดับทริกเกอร์ 380 ถูกทริกเกอร์หรือไม่ เท็จ

ความถี่สูงสุดคือ ในกรณีนี้คือ 645 และนั่นจะกลายเป็นความถี่ทริกเกอร์ ตอนนี้เพื่อให้ได้ระดับทริกเกอร์ ให้รัน checkFreezer อีกครั้ง ตั้งค่า trigger

$ หลาม checkFreezer.py -t --trigger=645

ความถี่สูงสุดพร้อม 645 ระดับทริกเกอร์ 1273 ถูกทริกเกอร์หรือไม่ ความถี่สูงสุดผิดพลาด 645 ระดับทริกเกอร์ 653 ถูกทริกเกอร์หรือไม่ ความถี่สูงสุดผิดพลาด 645 ระดับทริกเกอร์ 641 ถูกทริกเกอร์หรือไม่ ความถี่สูงสุดผิดพลาด 645 ระดับทริกเกอร์ 616 ถูกทริกเกอร์หรือไม่ เท็จ

สุดท้าย เราต้องการธรณีประตูทริกเกอร์ที่จะเริ่มทำงานเมื่อตรวจพบเสียงบี๊บ แต่จะไม่สนใจเสียงรบกวน เช่น

$ หลาม checkFreezer.py -t --trigger=645 --threshold=500

ความถี่สูงสุดพร้อม 645 ระดับทริกเกอร์ 581 ถูกทริกเกอร์หรือไม่ ความถี่สูงสุดที่แท้จริง 645 ระดับทริกเกอร์ 798 ถูกทริกเกอร์หรือไม่ ความถี่สูงสุดที่แท้จริง 645 ระดับทริกเกอร์ 521 ถูกทริกเกอร์หรือไม่ จริง

ทดสอบกับตัวอย่างที่มีสัญญาณรบกวนสองสามตัวอย่าง และคุณควรจะสามารถสร้างค่าเกณฑ์ที่แยกแยะระหว่างเสียงของตัวไล่เสียงและเสียงรอบข้างได้ คุณควรเห็นไฟ LED เปลี่ยนเป็นสีแดงเมื่อมีการเรียงลำดับเสียงบี๊บเป็นเวลาสองสามวินาที หากจะเร็ว/ช้าในการแก้ไขการตั้งค่าในสคริปต์

การเชื่อมต่อกับวิทยุ

ในการกำหนดค่าสคริปต์สำหรับการตั้งค่าของคุณเอง คุณต้องค้นหาที่อยู่ IP และหมายเลขพอร์ตที่อุปกรณ์ของคุณใช้สำหรับบริการ UPnP การตั้งค่าวิทยุควรมีสิ่งเหล่านี้ หมายเลขพอร์ตเริ่มต้นคือ 8080 และจะแปลกใจหากแตกต่างกัน

ฉันได้ระบุข้อความเตือนเริ่มต้นที่ชื่อตู้แช่แข็ง.mp3 รู้สึกอิสระที่จะแทนที่ด้วยข้อความของคุณเอง

แก้ไขสคริปต์ด้วยที่อยู่ IP ที่เหมาะสมและเรียกใช้สคริปต์

$ หลาม riseAlarm.py

ถ้าทุกอย่างเรียบร้อยดี ข้อความเตือนที่ดังและน่ารำคาญจะระเบิดออกจากวิทยุของคุณจนกว่าวิทยุจะปิด เป็นการยกเลิกการปลุก

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

กำลังถ่ายทอดสด

ลบแฟล็กการฝึก '-t' และเรียกใช้ checkFreezer ด้วยค่าของคุณเอง เช่น

$ หลาม checkFreezer.py --trigger=645 --threshold=200

หากต้องการเริ่มต้นการรีบูต ให้เพิ่มในไฟล์ /etc/rc.local

cd /home/pi/ตู้แช่แข็ง-นาฬิกาปลุก

(หลาม checkFreezer.py --trigger=645 --threshold=200 > /tmp/freezer 2> /tmp/freezererror &) & ออก 0

ไฟ LED สีเขียวจะสว่างขึ้นและคุณพร้อมสำหรับการดำเนินการ เล่นเสียงบี๊บเตือนของคุณ หลังจากนั้นไม่กี่วินาที ไฟ LED จะเปลี่ยนเป็นสีแดง และข้อความเตือนจะเล่นทางวิทยุของคุณ

ในที่สุด

วาง PI ไว้ที่ตำแหน่งใกล้กับช่องแช่แข็ง ให้พ้นทาง และข้างแหล่งจ่ายไฟ เปิดเครื่องและไฟ LED สีเขียวควรติด ทดสอบการปลุกโดยการเปิดประตูทิ้งไว้ ไฟควรเปลี่ยนเป็นสีแดงและข้อความเตือนจะเล่นทางวิทยุ

ความสำเร็จ !! คุณทำได้แล้ว ให้รางวัลตัวเองด้วยเครื่องดื่มเย็นๆ จากช่องแช่แข็ง แต่อย่าลืมปิดประตูช่องแช่แข็ง!

แนะนำ: