Bark Back: Monitor IoT para Pets com Gestão Inteligente de Som
Obtenha visão em tempo real do comportamento dos seus pets de qualquer lugar. O sistema Bark Back usa Internet das Coisas para gravar níveis de ruído ambiente em sua casa, enviar dados para a nuvem e reproduzir automaticamente arquivo de áudio personalizado quando o som excede limiar definido pelo usuário.
Construído em Raspberry Pi, o projeto lê microfone MEMS SparkFun via ADC MCP3002, transmite dados de volume para CloudMQTT usando MQTT, e dispara instância OMXPlayer para tocar clipe "bark-back" pré-selecionado.
O que Você Vai Aprender
- Conectar e ler microfone MEMS SparkFun com Raspberry Pi 3.
- Transmitir níveis de volume em tempo real para CloudMQTT.
- Configurar limiar de volume que reproduz automaticamente arquivo de áudio personalizado.
Pré-requisitos
Para seguir este tutorial você precisará de Raspberry Pi 3 (ou posterior) com Raspbian OS, conectividade Wi-Fi, e conhecimento básico de Python. Familiaridade com GPIO, MQTT e conversão de sinal analógico é benéfica mas não obrigatória.
Protocolo de Comunicação MQTT
MQTT (Message Queuing Telemetry Transport) é protocolo de mensagens IoT leve. Este guia usa cliente Python Eclipse Paho e CloudMQTT como broker.
- Entender protocolos de comunicação IoT.
- Configurar conta CloudMQTT (plano gratuito "Cute Cat" é suficiente).
- Instalar e usar biblioteca Python Paho MQTT.
Breakout Microfone MEMS
Microfone MEMS SparkFun é sensor analógico; ADC MCP3002 converte sua saída para sinal digital legível pelo Raspberry Pi.
- Primeiros passos com SparkFun MEMS Microphone Breakout.
- Revisar datasheet do microfone MEMS.
- Examinar datasheet do ADC MCP3002.
Materiais
Lista abrangente de componentes necessários para o projeto. Todos itens disponíveis na SparkFun e outros varejistas.
- Bark Back: Monitor & Interact with Pets! SparkFun Wish List
- Conversor Analógico-Digital – MCP3002
- SparkFun MEMS Microphone Breakout – INMP401 (ADMP401)
- Protoboard – Autoadesiva (Branca)
- Jumpers – 6″ (M/M, pacote 20)
- Fonte Parede – 5V DC 2A (USB Micro-B)
- Cabo Ribbon GPIO Raspberry Pi – 40 pinos, 6″ (compatível Pi 3, Pi 2, B+)
- Raspberry Pi 7″ Touchscreen LCD
- Raspberry Pi 3
- Raspberry Pi™ – Cartão MicroSD NOOBS 16GB
- Raspberry Pi 3 + Camera Enclosure – Transparente
Periféricos adicionais:
- Cabo MicroUSB
- Cabo HDMI
- Teclado USB
- Mouse USB
- Alto-falantes com porta 1/8″
Conexão do Hardware
Conectando Pi ao microfone e ADC. Clique no diagrama de fiação para ver detalhes.
Consulte diagrama de pinout Raspberry Pi 2/3 Model B para referência.
1. Conecte MCP3002 ao Raspberry Pi.
O MCP3002 usa quatro pinos SPI: SCLK, MISO, MOSI e CS. Estes mapeiam para pinos GPIO do Pi 11 (SCLK), 9 (MISO), 10 (MOSI) e 8 (CE0).
Conexões dos pinos:
- Pino 1 → Raspberry Pi GPIO 8 (CE0)
- Pino 2 → Saída analógica microfone MEMS
- Pino 4 → GND
- Pino 5 → Raspberry Pi GPIO 10 (MOSI)
- Pino 6 → Raspberry Pi GPIO 9 (MISO)
- Pino 7 → Raspberry Pi GPIO 11 (SCLK)
- Pino 8 → Raspberry Pi 3.3V out
2. Fie breakout do Microfone MEMS.
- Vcc → Raspberry Pi 3.3V
- GND → Raspberry Pi GND
- AUD → MCP3002 Pino 2
Configuração do Pi
Garanta que seu Raspberry Pi está totalmente atualizado e interface SPI habilitada.
Passo 1: Verifique e Instale Atualizações
sudo apt-get update
sudo apt-get upgrade
sudo reboot
Passo 2: Habilite SPI e instale dependências
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
Passo 3: Teste OMXPlayer
OMXPlayer vem pré-instalado no Raspbian. Verifique reprodução:
omxplayer /home/pi/…/SongFilePath/SongFileName.mp3
# Se necessário, force saída local:
omxplayer -o local /home/pi/…/SongFilePath/SongFileName.mp3
Passo 4: Configure CloudMQTT
- Crie conta CloudMQTT (plano gratuito "Cute Cat").
- Instancie novo MyCloud.
- No console, adicione regra ACL para permitir publish/subscribe.
- Use WebSocket UI para monitorar mensagens.
- Instale cliente Paho MQTT:
pip install paho-mqtt
Configuração de Software
O sistema Bark Back tem duas funções centrais: (1) disparar arquivo de áudio quando cachorro late, e (2) enviar dados de volume para nuvem.
Antes de codificar, grave ou obtenha seus clipes de áudio "bark-back" e coloque em diretório acessível (ex.: Desktop). O script Python abaixo está pronto para uso; você também pode clonar repositório completo de 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()
Certifique-se de substituir valores placeholder em songList e creds com seus caminhos de arquivo reais e credenciais CloudMQTT.
Sinta-se à vontade para personalizar o script — por exemplo, ajustar limiar de volume, adicionar logging, ou integrar sensores adicionais.
Próximos Passos
Explore melhorias adicionais como:
- Integrar display touchscreen para mostrar níveis de volume em tempo real.
- Adicionar feed de câmera para monitorar seu pet visualmente.
- Implementar dashboard web para monitoramento remoto.
Para recursos adicionais, consulte datasheet do microfone MEMS SparkFun, datasheet do ADC MCP3002, e documentação do cliente Eclipse Paho MQTT.
Boa hacking e que seu cachorro aproveite ambiente mais silencioso e feliz!
Processo de manufatura
- Construa uma Estação Meteorológica e de Qualidade do Ar com Raspberry Pi, InfluxDB e Grafana
- Monitor de Temperatura e Umidade em Rede com Raspberry Pi – Guia DIY de Configuração
- Monitor de Temperatura e Umidade Residencial com Raspberry Pi e Dashboard Web – Rastreamento Remoto em Tempo Real
- Monitoramento Profissional de Temperatura com Raspberry Pi e DS18B20
- Construindo Estação Meteorológica Externa com Raspberry Pi 2 e ADS‑WS1
- Monitoramento Preciso de Temperatura em Closet de Servidores com Raspberry Pi
- Rastreamento Avançado de Bolas de Tênis de Mesa com OpenCV no Raspberry Pi
- Construa um Controle Remoto Universal Profissional para Raspberry Pi com LIRC
- Controle um LED com Sensor de Movimento PIR no Raspberry Pi
- Convertendo RF em DC com Raspberry Pi: Construindo e Solucionando Problemas de um Detector de Envelope