산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

Bark Back Interactive Pet Monitor

집을 떠나 있는 동안 애완동물의 익살스러운 미스터리를 밝혀보세요! 이 IoT(사물 인터넷) Bark Back 프로젝트는 가정의 소음 수준을 모니터링하고 클라우드에 업로드하여 사랑하는 애완동물을 확인할 수 있도록 합니다. 가장 좋은 점:소리가 너무 커지면(예:Fido가 짖거나 다른 소란을 피우는 경우) 프로그램이 자신의 "짖는 소리" 오디오 파일을 재생하여 강아지의 주의를 산만하게 하고 조용하게 하는 데 도움이 됩니다.

이 프로젝트는 Raspberry Pi를 사용하여 SparkFun MEMS 마이크 브레이크아웃 보드를 읽고 오디오 플레이어를 트리거합니다. 데이터는 MQTT 통신 프로토콜을 사용하여 CloudMQTT 서비스에 업로드됩니다.

데모를 보려면 아래 동영상을 확인하세요!

이 튜토리얼에서 다룹니다

이 튜토리얼에서는 다음을 수행하는 방법을 보여줍니다.

<울>
  • Raspberry Pi 3를 사용하여 SparkFun MEMS 마이크에 연결하고 읽기
  • CloudMQTT 서비스에 볼륨 수준 업로드
  • 개가 너무 시끄럽다면 볼륨 임계값을 사용하여 "뒤로 짖는" 소리를 냅니다.
  • 권장 자료

    이 프로젝트를 빌드하려면 완전히 구성되고 Wi-Fi에 연결된 Raspberry Pi 3(Raspbian OS 포함)가 필요합니다. 또한 일부 Python 프로그래밍과 다음 세 가지 사항을 아는 것도 도움이 됩니다. (1) Raspberry Pi GPIO 핀 사용 및 제어, (2) MQTT 통신, (3) 아날로그 신호. 이 중 하나라도 낯설거나 그냥 궁금하다면(궁금해요!)

    MQTT 통신 프로토콜

    MQTT(Message Query Telemetry Transport)는 널리 사용되는 IoT 통신 프로토콜입니다. Paho Client Python 라이브러리와 CloudMQTT라는 MQTT 서비스를 사용하겠습니다.

    <올>
  • IoT용 통신 프로토콜 탐색
  • CloudMQTT 시작하기
  • Eclipse Paho MQTT Python 클라이언트 라이브러리 개요
  • MEMS 마이크 브레이크아웃 보드

    MEMS 마이크는 아날로그 마이크이므로 Raspberry Pi 디지털 GPIO 핀으로 아날로그 신호를 읽으려면 MCP3002 아날로그-디지털 변환기("ADC")가 필요합니다.

    <올>
  • SparkFun MEMS 마이크 브레이크아웃 보드 시작하기
  • MEMS 마이크 데이터시트
  • MCP3002 ADC 데이터시트
  • 자료

    따라 하려면 다음 자료가 필요합니다.

    Bark Back:애완동물 모니터링 및 상호작용 SparkFun 위시리스트



    다음도 필요합니다.

    <울>
  • MicroUSB 전원 케이블
  • HDMI 케이블
  • USB 키보드
  • USB 마우스
  • 1/8″ 헤드폰 포트가 있는 스피커
  • 하드웨어 연결

    Pi를 다른 하드웨어에 연결합니다. 자세히 보려면 ​​배선도를 클릭하십시오.

    다음은 Raspberry Pi 2(및 3) 모델 B 핀아웃 다이어그램입니다.

    1. MCP3002를 Raspberry Pi에 연결합니다.

    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을 Raspberry Pi GPIO 핀 8(CE0)에 연결
  • 2번 핀을 MEMS 마이크 브레이크아웃 보드의 아날로그 출력에 연결합니다.
  • 핀 4를 GND에 연결
  • 핀 5를 Raspberry Pi GPIO 핀 10(MOSI)에 연결
  • 핀 6을 Raspberry Pi GPIO 핀 9(MISO)에 연결
  • 핀 7을 Raspberry Pi GPIO 핀 11(SCLK)에 연결
  • 핀 8을 Raspberry Pi 3.3V 출력에 연결
  • 2. MEMS 마이크 브레이크아웃 보드에 와이어를 납땜합니다. MCP3002 및 Raspberry Pi에 연결합니다.

    <울>
  • Vcc를 Raspberry Pi 3.3V에 연결합니다.
  • GND를 Raspberry Pi GND에 연결
  • AUD를 MCP3002 핀 2에 연결
  • 파이 구성

    RPi가 연결되었습니다!

    1단계:업데이트 확인 및 설치

    업데이트 확인 및 설치:
    sudo apt-get update
    sudo apt-get upgrade
    sudo 재부팅

    2단계:MEMS 마이크 + MCP3002용 SPI 인터페이스 설정

    Python 개발자 패키지 설치:
    sudo apt-get install python-dev

    하위 폴더를 만들고 직렬 포트 인터페이스("SPI")를 설치합니다.
    mkdir py-spidev
    git clone git://github.com/doceme/py-spidev
    sudo python setup. 파이 설치

    문제가 발생하는 경우 SPI-Dev 문서를 참조하세요.

    3단계:OMXPlayer로 사운드 재생

    OMXPlayer는 Raspbian OS에 사전 로드된 오디오 및 비디오 플레이어입니다(우!). .wav, .mp3 및 .m4a를 포함한 대부분의 사운드 파일 형식에서 작동합니다. 이것을 사용하여 "뒤로 짖는" 소리를 재생합니다.

    터미널에서 다음 명령을 사용하여 OMXPlayer를 테스트합니다.
    omxplayer /home/pi/…/SongFilePath/SongFileName.mp3

    그래도 작동하지 않으면 로컬 오디오 출력 장치를 통해 강제로 시도해 보십시오.
    omxplayer -o local /home/pi/…/SongFilePath/SongFileName.mp3

    4단계:CloudMQTT 서버 구성

    이제 MQTT 서버를 설정합니다! CloudMQTT를 사용하여 이 작업을 수행하려면 다음을 수행하십시오.

    <올>
  • CloudMQTT 계정을 설정하세요('Cute Cat' 요금제는 무료).
  • 새 MyCloud 인스턴스를 만듭니다.
  • 콘솔에서 새 ACL 규칙을 만듭니다.
  • CloudMQTT 콘솔의 "Websocket UI"에서 게시된 메시지를 모니터링할 수 있습니다.
  • 마지막으로 MQTT Paho Client Python 라이브러리를 설치합니다.
    pip install paho-mqtt

    소프트웨어 설정

    Bark Back의 목표는 (1) 개가 짖을 때 오디오 파일을 트리거하고 (2) 볼륨 레벨 데이터를 서버로 보내는 두 가지입니다.

    하지만 먼저 재생하려면 "뒤로 짖는" 소리가 필요합니다! GarageBand(또는 스마트폰)에서 소리를 쉽게 녹음하여 Raspberry Pi로 보낼 수 있습니다. 파일을 쉽게 액세스할 수 있는 위치(예:바탕 화면)에 저장합니다.

    이제 Bark Back Python 프로그램을 작성할 준비가 되었습니다! ...또는 내 것을 사용하십시오:

    다음은 이 프로젝트의 GitHub 저장소입니다. 아래 코드를 복사하여 붙여넣을 수도 있습니다(Python입니다!).
    ########################## ###########################
    #Bark Back:모니터링 및 애완 동물과 상호 작용!##
    ##### ###################################################
    # jenfoxbot이 작성한 코드 <[email protected]>
    # 코드는 오픈 소스, 커피/맥주 제품 라이센스입니다.
    # 내용이 마음에 들면 헤더 +를 보관하세요.
    # 저를 만나면 커피나 맥주를 사주세요!
    ################################ #######################

    # 이 프로젝트에 사용된 라이브러리와 기능을 만들고 문서화한 사람들에게 감사드립니다.

    #Libraries
    #SPI
    spidev 가져오기
    #OMXPlayer
    스레딩 가져오기 스레드에서 가져오기
    하위 프로세스 가져오기
    #MQTT
    가져오기 paho.mqtt.client as paho
    #Other
    임의, 시간, 운영 체제, urlparse 가져오기
    시간 가져오기

    songList =["SongFile1", #e.g. "/home/pi/Desktop/SongFile.mp3"
    "SongFile2",
    "SongFile3",
    "SongFile4"]

    creds ={
    'CloudMQTT URL':'INSERT_CLOUDMQTT_URL', #e.g. 'https://m10.cloudmqtt.com'
    '사용자':'INSERT_CLOUDMQTT_USERNAME',
    '비밀번호':'INSERT__CLOUDMQTT_PASSWORD',
    '호스트':'INSERT_CLOUDMQTT_SERVER'
    '포트':'INSERT_CLOUDMQTT_PORT',
    '주제':'INSERT_ACL_TOPIC'
    }

    #################################################### ######
    # SparkFun MEMS 마이크 브레이크아웃 보드 읽기
    ############################## #############################
    #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) 전송
    데이터 =((spidata[0] &3) <<8) + spidata[1]
    데이터 반환

    #MEMS 마이크에서 피크 대 피크 진폭을 계산하는 함수
    def PTPAmp():
    sampleTime =0.05 #50ms의 샘플 속도
    startTime =time.time()

    PTPAmp =0
    maxAmp =0
    minAmp =1023

    while(time.time() – startTime micOut =read_spi(0) #채널 CE0에서 읽기
    if(micOut <1023):#오류 판독 방지
    if(micOut> maxAmp):
    maxAmp =micOut
    elif(micOut minAmp =micOut

    PTPAmp =maxAmp – minAmp #피크 대 피크 앰프를 계산합니다.
    PTPAmp 반환

    #피크-피크 앰프를 0과 10 사이의 볼륨 단위로 매핑하는 기능
    def VolumeUnit(data, fromLow, fromHigh, toLow, toHigh):
    return (data – fromLow) * (toHigh – toLow) / (fromHigh – fromLow) + toLow

    #################################################### ######
    # 오디오용 OMXPlayer를 제어하는 ​​클래스
    ############################# ############################
    class OMXPlayer():
    def call_omxplayer(self):
    인쇄("재생" + self.file_path + '\n')
    pid =subprocess.Popen(['omxplayer', '-o', '로컬',
    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 =참

    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, grant_qos):
    print("구독:" + str(mid) + " " + str(granted_qos))

    def on_log(mosq, obj, 레벨, 문자열):
    print(문자열)

    #################################################### ######
    # 주요 기능
    ################################## #########################
    def main():
    #Paho Python 클라이언트 서버 호출
    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)

    참인 동안:
    #1. MEMS 마이크 피크-투-피크 앰프에 대한 ADC 값 찾기
    PTPamp =PTPAmp()
    #2. ptp amp(볼트) 계산
    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보다 크면 노래 중 하나를 재생합니다.
    if(VolUnit> 7):
    playBack =pickRandom(songList)
    OMXPlayer(playBack)
    time.sleep( 0.1)

    #5. CloudMQTT 서버에 데이터 업로드
    mqttc.publish(“Volume”, str(VolUnit))
    rc =True
    동안 rc:
    rc =mqttc.loop()
    time.sleep(0.1)
    print("rc:" + str(rc))

    시도:
    True:
    통과
    KeyboardInterrupt 제외:
    myprocess.kill()

    if __name__ =='__main__':
    main()

    바크 백 시스템이 제대로 작동하려면 다음을 입력하세요.

    <울>
  • 노래 목록 :재생하고 싶은 곡별로 파일경로와 파일명을 적어주세요.
  • 학점 :이 사전에 CloudMQTT 정보를 입력합니다.
  • 자유롭게 코드를 조정하고 수정하십시오. 리소스 및 추가 정보를 확인하세요. 프로젝트 변형 및 추가 섹션.

    더 많은 정보를 읽어보세요...

    Bark Back Interactive Pet Monitor


    제조공정

    1. DIY 환경 및 대기 질 모니터
    2. Raspberry Pi 온도 및 습도 네트워크 모니터
    3. 웹 기반 차트가 포함된 가정(방) 온도 및 습도 모니터 – Raspberry Pi
    4. Raspberry Pi의 온도 모니터링
    5. Raspberry Pi 2 기상 관측소
    6. Raspberry Pi로 온도 모니터링
    7. 라즈베리 파이 볼 추적
    8. Raspberry Pi 범용 리모컨
    9. Raspberry Pi를 사용한 모션 센서
    10. 라즈베리 파이 한 조각