Bark Back: Monitor IoT Hewan Peliharaan untuk Manajemen Suara Cerdas
Dapatkan wawasan real-time tentang perilaku hewan peliharaan Anda dari mana saja. Sistem Bark Back menggunakan Internet of Things untuk merekam tingkat kebisingan lingkungan di rumah Anda, mengunggah data ke cloud, dan secara otomatis memutar berkas audio kustom ketika suara melebihi ambang yang ditentukan oleh pengguna.
Dibangun pada Raspberry Pi, proyek ini membaca mikrofon MEMS SparkFun melalui MCP3002 ADC, mengalirkan data volume ke CloudMQTT menggunakan MQTT, dan memicu instance OMXPlayer untuk memutar klip “bark-back” yang telah dipilih sebelumnya.
Apa yang Akan Anda Pelajari
- Menyambungkan dan membaca mikrofon MEMS SparkFun dengan Raspberry Pi 3.
- Mentransmisikan tingkat volume real-time ke CloudMQTT.
- Mengonfigurasi ambang volume yang secara otomatis memutar berkas audio kustom.
Prasyarat
Untuk mengikuti tutorial ini Anda memerlukan Raspberry Pi 3 (atau yang lebih baru) dengan OS Raspbian, konektivitas Wi-Fi, dan pengetahuan Python dasar. Kemudian dengan GPIO, MQTT, dan konversi sinyal analog bermanfaat tetapi tidak diperlukan.
Protokol Komunikasi MQTT
MQTT (Message Queuing Telemetry Transport) adalah protokol pesan IoT ringan. Panduan ini menggunakan klien Python Eclipse Paho dan CloudMQTT sebagai broker.
- Memahami protokol komunikasi IoT.
- Menyiapkan akun CloudMQTT (rencana gratis “Cute Cat” cukup).
- Menginstal dan menggunakan perpustakaan Python Paho MQTT.
Breakout Mikrofon MEMS
Mikrofon MEMS SparkFun adalah sensor analog; MCP3002 ADC mengubah outputnya menjadi sinyal digital yang dapat dibaca oleh Raspberry Pi.
- Memulai dengan Breakout Mikrofon MEMS SparkFun.
- Meninjau datasheet mikrofon MEMS.
- Memeriksa datasheet ADC MCP3002.
Bahan-Bahan
Berikut adalah daftar lengkap komponen yang diperlukan untuk proyek. Semua item tersedia dari SparkFun dan penjual lain.
- Bark Back: Pantau & Berinteraksi dengan Hewan Peliharaan! Daftar Keinginan SparkFun
- Pengonversi Analog-ke-Digital – MCP3002
- Breakout Mikrofon MEMS SparkFun – INMP401 (ADMP401)
- Breadboard – Self-Adhesive (Putih)
- Kabel Jumper – 6″ (M/M, 20 pack)
- Adaptor Daya Dinding – 5V DC 2A (USB Micro-B)
- Kabel Ribbon GPIO Raspberry Pi – 40-pin, 6″ (kompatibel dengan Pi 3, Pi 2, B+)
- Layar Sentuh 7″ Raspberry Pi
- Raspberry Pi 3
- Kartu MicroSD NOOBS 16GB Raspberry Pi™
- Kotak Kamera Raspberry Pi 3 – Jernih
Periferal tambahan:
- Kabel daya MicroUSB
- Kabel HDMI
- Keyboard USB
- Mouse USB
- Speaker dengan port headphone 1/8″
Penyaluran Hardware
Menghubungkan Pi ke mikrofon dan ADC. Klik pada diagram penyaluran untuk melihat lebih dekat.
Lihat diagram pinout Raspberry Pi 2/3 Model B untuk referensi.
1. Sambungkan MCP3002 ke Raspberry Pi.
MCP3002 menggunakan empat pin SPI: SCLK, MISO, MOSI, dan CS. Ini memetakan ke pin GPIO Pi 11 (SCLK), 9 (MISO), 10 (MOSI), dan 8 (CE0).
Koneksi pin:
- Pin 1 → Raspberry Pi GPIO 8 (CE0)
- Pin 2 → output analog mikrofon MEMS
- Pin 4 → GND
- Pin 5 → Raspberry Pi GPIO 10 (MOSI)
- Pin 6 → Raspberry Pi GPIO 9 (MISO)
- Pin 7 → Raspberry Pi GPIO 11 (SCLK)
- Pin 8 → output 3.3V Raspberry Pi
2. Sambungkan breakout board mikrofon MEMS.
- Vcc → output 3.3V Raspberry Pi
- GND → GND Raspberry Pi
- AUD → Pin 2 MCP3002
Konfigurasi Pi
Pastikan Raspberry Pi Anda sepenuhnya diperbarui dan antarmuka SPI diaktifkan.
Langkah 1: Periksa & Instal Pembaruan
sudo apt-get update sudo apt-get upgrade sudo reboot
Langkah 2: Aktifkan SPI dan Instal Dependensi
sudo apt-get install python-dev mkdir py-spidev cd py-spidev git clone https://github.com/doceme/py-spidev sudo python setup.py install
Langkah 3: Uji OMXPlayer
OMXPlayer sudah terinstal pada Raspbian. Verifikasi pemutaran:
omxplayer /home/pi/…/SongFilePath/SongFileName.mp3 # Jika diperlukan, paksa output lokal: omxplayer -o local /home/pi/…/SongFilePath/SongFileName.mp3
Langkah 4: Konfigurasikan CloudMQTT
- Buat akun CloudMQTT (rencana gratis “Cute Cat”).
- Buat instance MyCloud baru.
- Di konsol, tambahkan aturan ACL untuk mengizinkan publish/subscribe.
- Gunakan UI WebSocket untuk memantau pesan.
- Instal klien Paho MQTT:
pip install paho-mqtt
Setup Perangkat Lunak
Sistem Bark Back memiliki dua fungsi inti: (1) memicu berkas audio ketika anjing menggongg, dan (2) mengirim data volume ke cloud.
Sebelum coding, rekam atau dapatkan klip audio “bark-back” Anda dan tempatkan di direktori yang dapat diakses (misalnya, Desktop). Skrip Python berikut siap digunakan; Anda juga dapat mengkloning repositori lengkap dari GitHub.
# Bark Back: Monitor & Interact with Pets! # ----------------------------------------------------- # Author: jenfoxbot <[email protected]> # License: Coffee/Beer‑ware – keep this header if you use it. # Libraries import spidev from threading import Thread import subprocess import paho.mqtt.client as paho import random, time, os, urlparse # Configurable lists and credentials songList = ["/home/pi/Desktop/SongFile1.mp3", "/home/pi/Desktop/SongFile2.mp3", "/home/pi/Desktop/SongFile3.mp3", "/home/pi/Desktop/SongFile4.mp3"] creds = { 'CloudMQTT URL': 'https://m10.cloudmqtt.com', 'user': 'INSERT_CLOUDMQTT_USERNAME', 'password': 'INSERT_CLOUDMQTT_PASSWORD', 'host': 'INSERT_CLOUDMQTT_SERVER', 'port': 'INSERT_CLOUDMQTT_PORT', 'topic': 'INSERT_ACL_TOPIC' } # --- SPI / MEMS Microphone ---------------------------------------- spi = spidev.SpiDev() spi.open(0,0) # CE0 def read_spi(channel): spidata = spi.xfer2([96,0]) data = ((spidata[0] & 3) << 8) + spidata[1] return data def PTPAmp(): sampleTime = 0.05 startTime = time.time() PTPAmp = 0 maxAmp = 0 minAmp = 1023 while(time.time() - startTime < sampleTime): micOut = read_spi(0) if micOut < 1023: if micOut > maxAmp: maxAmp = micOut elif micOut < minAmp: minAmp = micOut PTPAmp = maxAmp - minAmp return PTPAmp def VolumeUnit(data, fromLow, fromHigh, toLow, toHigh): return (data - fromLow) * (toHigh - toLow) / (fromHigh - fromLow) + toLow # --- OMXPlayer wrapper --------------------------------------------- class OMXPlayer: def __init__(self, file_path): self.file_path = file_path self.is_running = False self.play_song() def call_omxplayer(self): print(f"Playing {self.file_path}\n") subprocess.Popen(["omxplayer", "-o", "local", self.file_path], stderr=subprocess.PIPE, stdout=subprocess.PIPE) self.is_running = False def play_song(self): if not self.is_running: self.song_thread = Thread(target=self.call_omxplayer) self.song_thread.start() self.is_running = True def pickRandom(songList): return random.choice(songList) # --- MQTT callbacks ----------------------------------------------- def on_connect(mosq, obj, rc): print(f"rc: {rc}") def on_message(mosq, obj, msg): print(f"{msg.topic} {msg.qos} {msg.payload}") def on_publish(mosq, obj, mid): print(f"mid: {mid}") def on_subscribe(mosq, obj, mid, granted_qos): print(f"Subscribed: {mid} {granted_qos}") def on_log(mosq, obj, level, string): print(string) # --- Main loop ---------------------------------------------------- def main(): mqttc = paho.Client() mqttc.on_message = on_message mqttc.on_connect = on_connect mqttc.on_publish = on_publish mqttc.on_subscribe = on_subscribe # mqttc.on_log = on_log # enable for debugging url_str = os.environ.get(creds['CloudMQTT URL'], 'mqtt://localhost:1883') url = urlparse.urlparse(url_str) mqttc.username_pw_set(creds['user'], creds['password']) mqttc.connect(creds['host'], creds['port']) mqttc.subscribe(creds['topic'], 0) while True: PTPamp = PTPAmp() PTPampV = round(((PTPamp * 3.3) / 1024), 2) VolUnit = VolumeUnit(PTPamp, 0, 700, 0, 10) print(PTPamp, VolUnit) if VolUnit > 7: playBack = pickRandom(songList) OMXPlayer(playBack) time.sleep(0.1) mqttc.publish("Volume", str(VolUnit)) rc = True while rc: rc = mqttc.loop() time.sleep(0.1) print(f"rc: {rc}") try: while True: pass except KeyboardInterrupt: pass if __name__ == '__main__': main()
Pastikan Anda mengganti nilai placeholder dalam songList dan creds dengan jalur berkas dan kredensial CloudMQTT sebenarnya Anda.
Rasa bebas untuk menyesuaikan skrip – misalnya, sesuaikan ambang volume, tambahkan logging, atau integrasikan sensor tambahan.
Langkah Selanjutnya
Jelajahi peningkatan lebih lanjut seperti:
- Integrasi layar sentuh untuk menampilkan tingkat volume real-time.
- Menambahkan umpan kamera untuk memantau hewan peliharaan Anda secara visual.
- Mengimplementasikan dasbor web untuk pemantauan jarak jauh.
Untuk sumber daya tambahan, konsultasikan datasheet mikrofon MEMS SparkFun, datasheet ADC MCP3002, dan dokumentasi klien MQTT Eclipse Paho.
Selamat hacking dan semoga anjing Anda menikmati lingkungan yang lebih tenang dan lebih bahagia!