バークバックインタラクティブペットモニター
家から離れている間、ペットのアンティックのとらえどころのない謎に光を当ててください!このモノのインターネット(IoT)バークバックプロジェクトは、家の騒音レベルを監視してクラウドにアップロードするため、愛するペットをチェックできます。最良の部分:音量が大きすぎる場合(つまり、Fidoが吠えている、または他の騒ぎを起こしている場合)、プログラムは独自の「吠え声」オーディオファイルを再生して、子犬の気をそらし、静かにします。
このプロジェクトでは、Raspberry Piを使用して、SparkFun MEMSマイクブレークアウトボードを読み取り、オーディオプレーヤーをトリガーします。データは、MQTT通信プロトコルを使用してCloudMQTTサービスにアップロードされます。
デモについては、以下のビデオをご覧ください!
このチュートリアルの対象
このチュートリアルでは、次の方法を説明します。
- Raspberry Pi3を使用してSparkFunMEMSマイクを接続して読み取ります
- ボリュームレベルをCloudMQTTサービスにアップロードします
- 音量のしきい値を使用して、犬がうるさくなりすぎた場合に、犬の「吠え声」をトリガーします。
推奨読書
このプロジェクトをビルドするには、完全に構成されたWiFi接続のRaspberry Pi3とRaspbianOSが必要です。また、Pythonプログラミングのほか、(1)Raspberry Pi GPIOピンの使用と制御、(2)MQTT通信、(3)アナログ信号の3つを知っておくと役立ちます。これらのいずれかがなじみのない場合、または単に好奇心が強い場合(好奇心が強い!)
MQTT通信プロトコル
MQTT(Message Query Telemetry Transport)は、人気のあるIoT通信プロトコルです。 PahoクライアントのPythonライブラリとCloudMQTTと呼ばれるMQTTサービスを使用します。
- IoTの通信プロトコルの調査
- CloudMQTT入門
- Eclipse Paho MQTTPythonクライアントライブラリの概要
MEMSマイクブレイクアウトボード
MEMSマイクはアナログマイクであるため、Raspberry PiデジタルGPIOピンを使用してアナログ信号を読み取るには、MCP3002アナログ-デジタルコンバーター(「ADC」)が必要です。
- SparkFunMEMSマイクブレイクアウトボードの使用を開始する
- MEMSマイクデータセット
- MCP3002ADCデータセット
資料
フォローするには、次の資料が必要です。
吠える:ペットを監視して操作する! SparkFunウィッシュリスト
次のものも必要です:
- MicroUSB電源ケーブル
- HDMIケーブル
- USBキーボード
- USBマウス
- 1/8インチヘッドフォンポート付きスピーカー
Piを他のハードウェアに接続します。詳細については、配線図をクリックしてください。
Raspberry Pi 2(および3)モデルBのピン配置図は次のとおりです。
1。 MCP3002をRaspberryPiに接続します。
MCP3002のクローズアップ
SPI通信用の4つのSPIピンがあります:シリアルクロック(「SCL」)、マスター入力スレーブ出力(「MISO」)、マスター出力スレーブ入力(「MOSI」)、およびチップセレクト(「CS」)。これらのピンは、それぞれRaspberry Pi GPIOピン11(SCLK)、GPIOピン9(MISO)、GPIOピン10(MOSI)、およびGPIOピン8(CE0)に対応します。
MCP302のピン配置図は次のとおりです。
MCP3002ピンで次の接続を行います。
- ピン1をRaspberryPi GPIOピン8(CE0)に接続します
- ピン2をMEMSマイクブレークアウトボードのアナログ出力に接続します
- ピン4をGNDに接続します
- ピン5をRaspberryPi GPIOピン10(MOSI)に接続します
- ピン6をRaspberryPi GPIOピン9(MISO)に接続します
- ピン7をRaspberryPi GPIOピン11(SCLK)に接続します
- ピン8をRaspberryPi3.3V出力に接続します
2。ワイヤーをMEMSマイクブレイクアウトボードにはんだ付けします。 MCP3002とRaspberryPiに接続します。
- VccをRaspberryPi3.3Vに接続します。
- GNDをRaspberryPiGNDに接続します
- AUDをMCP3002ピン2に接続します
Pi構成
RPiが接続されました!
ステップ1:アップデートの確認とインストール
アップデートを確認してインストールします:
sudo apt-get update
sudo apt-get upgrade
sudo restart
ステップ2:MEMSマイク+ MCP3002用のSPIインターフェースを設定する
Python Devパッケージをインストールします:
sudo apt-get install python-dev
サブフォルダーを作成し、シリアルポートインターフェイス(「SPI」)をインストールします。
mkdir py-spidev
git clone git://github.com/doceme/py-spidev
sudo pythonsetup。 py install
問題が発生した場合のSPI-Devドキュメントは次のとおりです。
ステップ3:OMXPlayerでサウンドを再生する
OMXPlayerは、Raspbian OSにプリロードされたオーディオおよびビデオプレーヤーです(woo!)。 .wav、.mp3、.m4aなどのほとんどのサウンドファイルタイプで動作します。これを使用して「吠え声」の音を再生します。
ターミナルで、次のコマンドを使用してOMXPlayerをテストします。
omxplayer / home / pi /…/ SongFilePath / SongFileName.mp3
それでも問題が解決しない場合は、ローカルのオーディオ出力デバイスに強制的に適用してみてください。
omxplayer -o local/home/pi/…/SongFilePath/SongFileName.mp3
ステップ4:CloudMQTTサーバーを構成する
次に、MQTTサーバーをセットアップします。 CloudMQTTを使用してこれを行うには、次のようにします。
- CloudMQTTアカウントを設定します(「かわいい猫」プランは無料です)。
- 新しいMyCloudインスタンスを作成します。
- コンソールで、新しいACLルールを作成します。
- CloudMQTTコンソールの「WebsocketUI」で公開されたメッセージを監視できます。
最後に、MQTTPahoクライアントPythonライブラリをインストールします。
pip install paho-mqtt
バークバックの目標は2つあります。(1)犬が吠えるときにオーディオファイルをトリガーすることと、(2)音量レベルのデータをサーバーに送信することです。
ただし、最初に再生するには「バークバック」サウンドが必要です。 GarageBand(またはスマートフォン)でサウンドを簡単に録音して、RaspberryPiに送信できます。簡単にアクセスできる場所(デスクトップなど)にファイルを保存します。
これで、Bark BackPythonプログラムを作成する準備が整いました。 …または単に私のものを使用してください:
これがこのプロジェクトのGitHubリポジトリです。以下のコードをコピーして貼り付けることもできます(これはPythonであることに注意してください)。
########################### #########################
#Bark Back:監視してペットと対話する!##
##### ###############################################
#jenfoxbotによって記述されたコード<[メール保護]>
#コードはオープンソースのコーヒー/ビールウェアライセンスです。
#コンテンツが気に入った場合はヘッダー+を保持してください
#あなたが私に遭遇した場合、私にコーヒーやビールを買ってください!
################################ #####################
#ライブラリを作成して文書化してくれた人々に感謝します
#このプロジェクトで使用されている関数。
#Libraries
#SPI
import spidev
#OMXPlayer
スレッドからimportThread
import subprocess
#MQTT
import paho.mqtt.client as paho
#Other
import random、time、os、urlparse
import time
songList =[“ SongFile1”、#e.g。 「/home/pi/Desktop/SongFile.mp3」
「SongFile2」、
「SongFile3」、
「SongFile4」]
creds ={
‘CloudMQTT URL’: ‘INSERT_CLOUDMQTT_URL’、#e.g。 'https://m10.cloudmqtt.com'
'user': 'INSERT_CLOUDMQTT_USERNAME'、
'password': 'INSERT__CLOUDMQTT_PASSWORD'、
'host': 'INSERT_CLOUDMQTT_SERVER'
'ポート': 'INSERT_CLOUDMQTT_PORT'、
'トピック': 'INSERT_ACL_TOPIC'
}
#################################################### ######
#SparkFunMEMSマイクブレイクアウトボードの読み取り
############################# ###########################
#SPIプロトコルを開始します。
spi =spidev.SpiDev()
spi.open(0,0)#これはRPiのCE0ピン(GPIO 08)です。CE1の場合は(0,1)を使用します
#CE0チャネルで読み取る関数
def read_spi(channel):
spidata =spi.xfer2([96,0])## 2バイトのデータ(96および0)を送信
data =((spidata [0]&3)<<8)+ spidata [1]
データを返す
#MEMSマイクからピークツーピーク振幅を計算する関数
def PTPAmp():
sampleTime =0.05#50ミリ秒のサンプルレート
startTime =time.time()
PTPAmp =0
maxAmp =0
minAmp =1023
while(time.time()– startTime
if(micOut <1023):#誤った読み取りの防止
if(micOut> maxAmp):
maxAmp =micOut
elif(micOut
PTPAmp =maxAmp – minAmp#ピークツーピークアンペアを計算します。
return PTPAmp
#ピークツーピークアンプを0〜10のボリュームユニットにマッピングする関数
def VolumeUnit(data、fromLow、fromHigh、toLow、toHigh):
return(data – fromLow)*(toHigh – toLow)/(fromHigh – fromLow)+ toLow
#################################################### ######
#オーディオ用OMXPlayerを制御するクラス
############################# ###########################
クラスOMXPlayer():
def call_omxplayer(self):
print(“ playing“ + self.file_path + '\ n')
pid =subprocess.Popen(['omxplayer'、 '-o'、 'local'、
self.file_path]、stderr =subprocess.PIPE、
stdout =subprocess.PIPE)
self.is_running =False
def play_song(self):
self.is_runningでない場合:
self.song_thread =Thread(target =self.call_omxplayer、args =())
self.song_thread.start()
self.is_running =True
def __init __(self、file_path):
self.file_path =file_path
self.is_running =False
self.play_song()
#リストからランダムな曲を選択する関数
def pickRandom(songList):
return(random.choice(songList))
#################################################### ######
#CloudMQTTサーバー
################################# #######################
#イベントコールバックを定義する
def on_connect(mosq、obj、rc):
print (“ rc:“ + str(rc))
def on_message(mosq、obj、msg):
print(msg.topic +”“ + str(msg.qos)+”“ + str(msg.payload))
def on_publish(mosq、obj、mid):
print(“ mid:“ + str(mid))
def on_subscribe(mosq、obj、mid、granted_qos):
print( "Subscribed:" + str(mid)+ "" + str(granted_qos))
def on_log(mosq、obj、level、string):
print(string)
#################################################### ######
#主な機能
################################# #######################
def main():
#Call Paho Python Client Server
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
#CLOUDMQTT_URL(またはローカルホストへのフォールバック)を解析します
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’])
#QoSレベル0でサブスクライブを開始します
mqttc.subscribe(creds [‘topic’]、0)
Trueの場合:
#1。 MEMSマイクのピークツーピークアンプのADC値を見つけます
PTPamp =PTPAmp()
#2。 ptp amp(Volts)を計算します
PTPampV =round(((PTPamp * 3.3)/ 1024)、2)
#3。 ptp amp(ADC値)を0〜10のボリューム単位にマップします
VolUnit =VolumeUnit(PTPamp、0、700、0、10)
#デバッグ用
print(PTPamp、VolUnit)
#4。ボリュームユニットが7より大きい場合は、曲の1つを再生します
if(VolUnit> 7):
playBack =pickRandom(songList)
OMXPlayer(playBack)
time.sleep( 0.1)
#5。 CloudMQTTサーバーにデータをアップロードします
mqttc.publish( "Volume"、str(VolUnit))
rc =True
while rc:
rc =mqttc.loop()
time.sleep(0.1)
print(“ rc:“ + str(rc))
try:
while True:
pass
ただし、KeyboardInterrupt:
myprocess.kill()
if __name__ ==‘__ main __’:
main()
バークバックシステムが正しく機能するには、次のように入力します。
- songList :再生する各曲のファイルパスとファイル名を入力します。
- クレジット :この辞書にCloudMQTT情報を入力してください。
コードを自由に調整および変更してください(リソースと詳細)を確認してください。 プロジェクトのバリエーションと追加のセクション。
続きを読む…
バークバックインタラクティブペットモニター
製造プロセス