Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

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

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.

  1. Entender protocolos de comunicação IoT.
  2. Configurar conta CloudMQTT (plano gratuito "Cute Cat" é suficiente).
  3. 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.

  1. Primeiros passos com SparkFun MEMS Microphone Breakout.
  2. Revisar datasheet do microfone MEMS.
  3. Examinar datasheet do ADC MCP3002.

Materiais

Lista abrangente de componentes necessários para o projeto. Todos itens disponíveis na SparkFun e outros varejistas.

Periféricos adicionais:

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:

2. Fie breakout do Microfone MEMS.

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

  1. Crie conta CloudMQTT (plano gratuito "Cute Cat").
  2. Instancie novo MyCloud.
  3. No console, adicione regra ACL para permitir publish/subscribe.
  4. Use WebSocket UI para monitorar mensagens.
  5. 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:

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

  1. Construa uma Estação Meteorológica e de Qualidade do Ar com Raspberry Pi, InfluxDB e Grafana
  2. Monitor de Temperatura e Umidade em Rede com Raspberry Pi – Guia DIY de Configuração
  3. Monitor de Temperatura e Umidade Residencial com Raspberry Pi e Dashboard Web – Rastreamento Remoto em Tempo Real
  4. Monitoramento Profissional de Temperatura com Raspberry Pi e DS18B20
  5. Construindo Estação Meteorológica Externa com Raspberry Pi 2 e ADS‑WS1
  6. Monitoramento Preciso de Temperatura em Closet de Servidores com Raspberry Pi
  7. Rastreamento Avançado de Bolas de Tênis de Mesa com OpenCV no Raspberry Pi
  8. Construa um Controle Remoto Universal Profissional para Raspberry Pi com LIRC
  9. Controle um LED com Sensor de Movimento PIR no Raspberry Pi
  10. Convertendo RF em DC com Raspberry Pi: Construindo e Solucionando Problemas de um Detector de Envelope