Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Bark Back: IoT-Haustiermonitor für intelligentes Schallmanagement

Bark Back: IoT-Haustiermonitor für intelligentes Schallmanagement

Erhalten Sie Echtzeit-Einblicke in das Verhalten Ihrer Haustiere – von überall. Das Bark-Back-System nutzt das Internet der Dinge, um Umgebungsgeräusche in Ihrem Zuhause aufzuzeichnen, die Daten in die Cloud hochzuladen und automatisch eine benutzerdefinierte Audiodatei abzuspielen, wenn der Schallpegel einen benutzerdefinierten Schwellenwert überschreitet.

Auf einem Raspberry Pi basierend, liest das Projekt ein SparkFun-MEMS-Mikrofon über einen MCP3002-ADC aus, streamt Lautstärkedaten per MQTT an CloudMQTT und startet eine OMXPlayer-Instanz, um einen vorgewählten „Bark-Back“-Clip abzuspielen.

Was Sie lernen werden

Voraussetzungen

Für dieses Tutorial benötigen Sie einen Raspberry Pi 3 (oder neuer) mit Raspbian OS, WLAN-Konnektivität und grundlegende Python-Kenntnisse. Vertrautheit mit GPIO, MQTT und analoger Signalwandlung ist hilfreich, aber nicht erforderlich.

MQTT-Kommunikationsprotokoll

MQTT (Message Queuing Telemetry Transport) ist ein leichtes IoT-Messaging-Protokoll. Dieser Leitfaden nutzt den Eclipse Paho Python Client und CloudMQTT als Broker.

  1. IoT-Kommunikationsprotokolle verstehen.
  2. CloudMQTT-Konto einrichten (der kostenlose „Cute Cat“-Plan reicht aus).
  3. Paho MQTT Python Library installieren und nutzen.

MEMS-Mikrofon-Breakout

Das SparkFun MEMS-Mikrofon ist ein analoger Sensor; ein MCP3002-ADC wandelt sein Ausgangssignal in ein digitales Signal um, das der Raspberry Pi lesen kann.

  1. Einstieg in das SparkFun MEMS Microphone Breakout.
  2. MEMS-Mikrofon-Datenblatt prüfen.
  3. MCP3002-ADC-Datenblatt prüfen.

Materialien

Nachfolgend eine umfassende Liste der benötigten Komponenten. Alle Artikel sind bei SparkFun und anderen Händlern erhältlich.

Zusätzliches Zubehör:

Hardware-Aufbau

Verbinden des Pi mit Mikrofon und ADC. Auf das Verdrahtungsdiagramm klicken für eine vergrößerte Ansicht.

Zum Raspberry Pi 2/3 Model B Pinout-Diagramm als Referenz.

1. MCP3002 mit dem Raspberry Pi verbinden

Der MCP3002 nutzt vier SPI-Pins: SCLK, MISO, MOSI und CS. Diese werden auf Pi GPIO-Pins 11 (SCLK), 9 (MISO), 10 (MOSI) und 8 (CE0) abgebildet.

Pin-Verbindungen:

2. MEMS-Mikrofon-Breakout-Board verdrahten

Pi-Konfiguration

Stellen Sie sicher, dass Ihr Raspberry Pi vollständig aktualisiert ist und die SPI-Schnittstelle aktiviert ist.

Schritt 1: Updates prüfen & installieren

sudo apt-get update
sudo apt-get upgrade
sudo reboot

Schritt 2: SPI aktivieren und Abhängigkeiten installieren

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

Schritt 3: OMXPlayer testen

OMXPlayer ist auf Raspbian vorinstalliert. Wiedergabe prüfen:

omxplayer /home/pi/…/SongFilePath/SongFileName.mp3
# Falls nötig, lokalen Ausgabe erzwingen:
omxplayer -o local /home/pi/…/SongFilePath/SongFileName.mp3

Schritt 4: CloudMQTT konfigurieren

  1. CloudMQTT-Konto erstellen (kostenloser „Cute Cat“-Plan).
  2. Neue MyCloud-Instanz anlegen.
  3. In der Konsole ACL-Regel hinzufügen, um Publish/Subscribe zu erlauben.
  4. WebSocket-UI nutzen, um Nachrichten zu überwachen.
  5. Paho MQTT Client installieren:
    pip install paho-mqtt

Software-Setup

Das Bark-Back-System hat zwei Kernfunktionen: (1) Audiodatei abspielen, wenn der Hund bellt, und (2) Lautstärkedaten in die Cloud senden.

Vor dem Coding Ihre „Bark-Back“-Audioclips aufnehmen oder besorgen und in einem zugänglichen Verzeichnis ablegen (z. B. Desktop). Das folgende Python-Skript ist sofort einsatzbereit; Sie können auch das komplette Repository von GitHub klonen.

# 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()

Ersetzen Sie die Platzhalterwerte in songList und creds durch Ihre tatsächlichen Dateipfade und CloudMQTT-Zugangsdaten.

Fühlen Sie frei, das Skript anzupassen – z. B. Lautstärkeschwellenwert ändern, Logging hinzufügen oder weitere Sensoren integrieren.

Nächste Schritte

Weitere Erweiterungen erkunden:

Für zusätzliche Ressourcen konsultieren Sie das SparkFun MEMS-Mikrofon-Datenblatt, das MCP3002-ADC-Datenblatt und die Eclipse Paho MQTT Client Dokumentation.

Viel Spaß beim Basteln – und möge Ihr Hund eine ruhigere, glücklichere Umgebung genießen!

Herstellungsprozess

  1. Raspberry Pi Luftqualitäts- & Wetterstation mit InfluxDB & Grafana bauen
  2. Raspberry Pi Temperatur- & Feuchtigkeits-Netzwerkmonitor – DIY Setup Guide
  3. Heim-Temperatur- & Feuchtigkeitsmonitor mit Raspberry Pi & Web-Dashboard – Echtzeit-Fernüberwachung
  4. Professionelle Temperaturüberwachung mit Raspberry Pi und DS18B20
  5. Outdoor-Wetterstation mit Raspberry Pi 2 & ADS-WS1 bauen
  6. Präzise Temperaturüberwachung im Server-Schrank mit Raspberry Pi
  7. Fortgeschrittenes Tischtennisball-Tracking mit Raspberry Pi und OpenCV
  8. Professionelle Raspberry Pi Universalfernbedienung mit LIRC bauen
  9. LED mit PIR-Bewegungsmelder am Raspberry Pi steuern
  10. RF zu DC mit Raspberry Pi wandeln: Hüllkurvendetektor bauen & troubleshooten