Bark Back : Un moniteur IoT pour animaux de compagnie pour une gestion intelligente du son
Obtenez une vision en temps réel du comportement de vos animaux de compagnie depuis n'importe où. Le système Bark Back utilise l'Internet des objets pour enregistrer les niveaux de bruit ambiant dans votre maison, envoyer les données dans le cloud, et lire automatiquement un fichier audio personnalisé quand le son dépasse un seuil défini par l'utilisateur.
Construit sur un Raspberry Pi, le projet lit un microphone MEMS SparkFun via un ADC MCP3002, stream les données de volume vers CloudMQTT via MQTT, et déclenche une instance OMXPlayer pour jouer un clip « bark-back » pré-sélectionné.
Ce que vous allez apprendre
- Connecter et lire un microphone MEMS SparkFun avec un Raspberry Pi 3.
- Transmettre les niveaux de volume en temps réel vers CloudMQTT.
- Configurer un seuil de volume qui lance automatiquement la lecture d'un fichier audio personnalisé.
Prérequis
Pour suivre ce tutoriel, vous aurez besoin d'un Raspberry Pi 3 (ou ultérieur) avec Raspbian OS, connectivité Wi‑Fi, et des connaissances de base en Python. La familiarité avec GPIO, MQTT et la conversion de signaux analogiques est bénéfique mais non requise.
Protocole de communication MQTT
MQTT (Message Queuing Telemetry Transport) est un protocole de messagerie IoT léger. Ce guide utilise le client Python Eclipse Paho et CloudMQTT comme courtier.
- Comprendre les protocoles de communication IoT.
- Configurer un compte CloudMQTT (le plan gratuit « Cute Cat » suffit).
- Installer et utiliser la bibliothèque Python Paho MQTT.
Microphone MEMS Breakout
Le microphone MEMS SparkFun est un capteur analogique ; un ADC MCP3002 convertit sa sortie en signal numérique lisible par le Raspberry Pi.
- Démarrer avec le SparkFun MEMS Microphone Breakout.
- Consulter la fiche technique du microphone MEMS.
- Examiner la fiche technique de l'ADC MCP3002.
Matériel
Voici une liste complète des composants requis pour le projet. Tous les articles sont disponibles chez SparkFun et autres revendeurs.
- Bark Back : Monitor & Interact with Pets! SparkFun Wish List
- Convertisseur Analogique-Numérique – MCP3002
- SparkFun MEMS Microphone Breakout – INMP401 (ADMP401)
- Plaque d'essai – Auto-adhésive (Blanche)
- Fils de connexion – 6″ (M/M, paquet de 20)
- Adaptateur secteur – 5V DC 2A (USB Micro‑B)
- Câble ruban GPIO Raspberry Pi – 40 broches, 6″ (compatible Pi 3, Pi 2, B+)
- Écran tactile LCD 7″ Raspberry Pi
- Raspberry Pi 3
- Raspberry Pi™ – Carte MicroSD NOOBS 16 Go
- Boîtier Raspberry Pi 3 + Caméra – Transparent
Périphériques supplémentaires :
- Câble MicroUSB
- Câble HDMI
- Clavier USB
- Souris USB
- Haut-parleurs avec prise jack 3,5 mm
Branchement matériel
Connexion du Pi au microphone et ADC. Cliquez sur le schéma de câblage pour un aperçu rapproché.
Reportez-vous au diagramme de brochage Raspberry Pi 2/3 Model B pour référence.
1. Connecter le MCP3002 au Raspberry Pi.
Le MCP3002 utilise quatre broches SPI : SCLK, MISO, MOSI et CS. Celles-ci correspondent aux broches GPIO Pi 11 (SCLK), 9 (MISO), 10 (MOSI) et 8 (CE0).
Connexions des broches :
- Broche 1 → Raspberry Pi GPIO 8 (CE0)
- Broche 2 → Sortie analogique microphone MEMS
- Broche 4 → GND
- Broche 5 → Raspberry Pi GPIO 10 (MOSI)
- Broche 6 → Raspberry Pi GPIO 9 (MISO)
- Broche 7 → Raspberry Pi GPIO 11 (SCLK)
- Broche 8 → Sortie 3,3 V Raspberry Pi
2. Câbler la carte breakout microphone MEMS.
- Vcc → Raspberry Pi 3,3 V
- GND → Raspberry Pi GND
- AUD → MCP3002 Broche 2
Configuration du Pi
Assurez-vous que votre Raspberry Pi est entièrement mis à jour et que l'interface SPI est activée.
Étape 1 : Vérifier et installer les mises à jour
sudo apt-get update
sudo apt-get upgrade
sudo reboot
Étape 2 : Activer SPI et installer les dépendances
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
Étape 3 : Tester OMXPlayer
OMXPlayer est préinstallé sur Raspbian. Vérifiez la lecture :
omxplayer /home/pi/…/SongFilePath/SongFileName.mp3
# Si nécessaire, forcer la sortie locale :
omxplayer -o local /home/pi/…/SongFilePath/SongFileName.mp3
Étape 4 : Configurer CloudMQTT
- Créez un compte CloudMQTT (plan gratuit « Cute Cat »).
- Instanciez une nouvelle instance MyCloud.
- Dans la console, ajoutez une règle ACL pour autoriser publish/subscribe.
- Utilisez l'UI WebSocket pour surveiller les messages.
- Installez le client Paho MQTT :
pip install paho-mqtt
Configuration logicielle
Le système Bark Back a deux fonctions principales : (1) déclencher un fichier audio quand le chien aboie, et (2) envoyer les données de volume vers le cloud.
Avant de coder, enregistrez ou trouvez vos clips audio « bark-back » et placez-les dans un répertoire accessible (ex. : Bureau). Le script Python suivant est prêt à l'emploi ; vous pouvez aussi cloner le dépôt complet depuis 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()
Assurez-vous de remplacer les valeurs placeholder dans songList et creds par vos vrais chemins de fichiers et identifiants CloudMQTT.
N'hésitez pas à personnaliser le script – par exemple, ajustez le seuil de volume, ajoutez de la journalisation, ou intégrez des capteurs supplémentaires.
Prochaines étapes
Explorez d'autres améliorations telles que :
- Intégrer un écran tactile pour afficher les niveaux de volume en temps réel.
- Ajouter un flux caméra pour surveiller visuellement votre animal.
- Implémenter un tableau de bord web pour la surveillance à distance.
Pour des ressources supplémentaires, consultez la fiche technique du microphone MEMS SparkFun, la fiche technique de l'ADC MCP3002 et la documentation du client MQTT Eclipse Paho.
Bon bidouillage et que votre chien profite d'un environnement plus calme et plus heureux !
Processus de fabrication
- Construire une station météo et qualité de l'air Raspberry Pi avec InfluxDB et Grafana
- Moniteur réseau température et humidité Raspberry Pi — Guide de configuration DIY
- Moniteur température et humidité domestique avec Raspberry Pi et tableau de bord web — Suivi à distance en temps réel
- Surveillance de température professionnelle sur Raspberry Pi avec DS18B20
- Construction d'une station météo extérieure avec Raspberry Pi 2 et ADS‑WS1
- Surveillance précise de la température dans un placard serveur avec Raspberry Pi
- Suivi avancé de balle de ping-pong sur Raspberry Pi avec OpenCV
- Construire une télécommande universelle Raspberry Pi professionnelle avec LIRC
- Contrôler une LED avec un capteur de mouvement PIR sur Raspberry Pi