工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

Bark Back:スマート音響管理のためのIoTペットモニター

どこからでもペットの行動をリアルタイムで把握。Bark BackシステムはIoTを活用して自宅の環境騒音レベルを記録し、データをクラウドにアップロードし、音がユーザー定義の閾値を超えるとカスタム音声ファイルを自動再生します。

Raspberry Pi上に構築されたこのプロジェクトは、SparkFun MEMSマイクロフォンをMCP3002 ADC経由で読み取り、MQTTでCloudMQTTに音量データをストリーミングし、OMXPlayerインスタンスをトリガーしてプリセットの「吠え返し」クリップを再生します。

学べること

前提条件

このチュートリアルを進めるには、Raspbian OS搭載のRaspberry Pi 3(以降)、Wi-Fi接続、基本的なPython知識が必要。GPIO、MQTT、アナログ信号変換の知識があれば有利ですが必須ではありません。

MQTT通信プロトコル

MQTT(Message Queuing Telemetry Transport)は軽量IoTメッセージングプロトコル。このガイドではEclipse Paho PythonクライアントとCloudMQTTブローカーを使用。

  1. IoT通信プロトコルの理解。
  2. CloudMQTTアカウントのセットアップ(無料「Cute Cat」プランで十分)。
  3. Paho MQTT Pythonライブラリのインストールと使用。

MEMSマイクロフォンブレークアウト

SparkFun MEMSマイクロフォンはアナログセンサー。MCP3002 ADCがその出力をRaspberry Piで読み取り可能なデジタル信号に変換。

  1. SparkFun MEMS Microphone Breakoutの入門。
  2. MEMSマイクロフォンデータシートの確認。
  3. MCP3002 ADCデータシートの確認。

材料

プロジェクトに必要なコンポーネントの包括的なリスト。すべてSparkFunやその他の小売店で入手可能。

追加周辺機器:

ハードウェア接続

PiをマイクロフォンとADCに接続。配線図をクリックで拡大。

参照用にRaspberry Pi 2/3 Model Bピンアウト図を参照してください。

1. MCP3000をRaspberry Piに接続

MCP3002は4つのSPIピンを使用:SCLK、MISO、MOSI、CS。これらはPi GPIOピン11(SCLK)、9(MISO)、10(MOSI)、8(CE0)にマッピング。

ピン接続:

2. MEMSマイクロフォンブレークアウトボードを配線

Pi設定

Raspberry Piが完全に更新済みで、SPIインターフェースが有効であることを確認。

ステップ1:更新の確認とインストール

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

ステップ2:SPI有効化と依存関係インストール

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

ステップ3:OMXPlayerテスト

OMXPlayerはRaspbianにプリインストール。再生確認:

omxplayer /home/pi/…/SongFilePath/SongFileName.mp3
# 必要に応じてローカル出力強制:
omxplayer -o local /home/pi/…/SongFilePath/SongFileName.mp3

ステップ4:CloudMQTT設定

  1. CloudMQTTアカウント作成(無料「Cute Cat」プラン)。
  2. 新しいMyCloudインスタンスを作成。
  3. コンソールでACLルールを追加し、publish/subscribeを許可。
  4. WebSocket UIでメッセージ監視。
  5. Paho MQTTクライアントインストール:
    pip install paho-mqtt

ソフトウェアセットアップ

Bark Backシステムには2つの核心機能があります:(1)犬の吠え声で音声ファイルをトリガー、(2)音量データをクラウドに送信。

コーディング前に、「吠え返し」音声クリップを録音または入手し、アクセス可能なディレクトリ(例:Desktop)に配置。以下のPythonスクリプトはすぐに使用可能。GitHubから完全なリポジトリをクローンすることもできます。

# Bark Back: Monitor & Interact with Pets!
# -----------------------------------------------------
# Author: jenfoxbot <[email protected]>
# License: Coffee/Beer-ware - 使用時はこのヘッダーを保持。
# 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 # デバッグ用に有効化
    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()

songListとcredsのプレースホルダー値を実際のファイルパスとCloudMQTT認証情報に置き換えてください。

スクリプトを自由にカスタマイズしてください。例えば、音量閾値の調整、ログ追加、追加センサーの統合など。

次のステップ

更なる拡張として以下を検討:

追加リソースとして、SparkFun MEMSマイクロフォンデータシート、MCP3002 ADCデータシート、Eclipse Paho MQTTクライアントドキュメントを参照してください。

ハッピーハッキング、そしてあなたの犬がより静かで幸せな環境を享受できますように!

製造プロセス

  1. Raspberry Piで構築する空気質・気象ステーション:InfluxDB & Grafana活用
  2. Raspberry Pi温度・湿度ネットワークモニター – DIYセットアップガイド
  3. Raspberry Pi & Webダッシュボードで自宅温度・湿度監視 – リアルタイムリモート追跡
  4. Raspberry PiとDS18B20によるプロフェッショナルな温度監視
  5. Raspberry Pi 2とADS-WS1で屋外気象観測ステーションを構築
  6. Raspberry Piでサーバークローゼットの温度を正確に監視
  7. OpenCVでRaspberry Pi上級卓球球追跡
  8. LIRCでプロフェッショナルなRaspberry Piユニバーサルリモコンを構築
  9. Raspberry PiでPIRモーションセンサーとLEDを制御
  10. Raspberry PiでRFをDCに変換: エンベロープ検波器の構築とトラブルシューティング
  11. Cycle Chaser: Raspberry Piで自転車をナイトタイムライトショーに変身