제조공정
집을 떠나 있는 동안 애완동물의 익살스러운 미스터리를 밝혀보세요! 이 IoT(사물 인터넷) Bark Back 프로젝트는 가정의 소음 수준을 모니터링하고 클라우드에 업로드하여 사랑하는 애완동물을 확인할 수 있도록 합니다. 가장 좋은 점:소리가 너무 커지면(예:Fido가 짖거나 다른 소란을 피우는 경우) 프로그램이 자신의 "짖는 소리" 오디오 파일을 재생하여 강아지의 주의를 산만하게 하고 조용하게 하는 데 도움이 됩니다.
이 프로젝트는 Raspberry Pi를 사용하여 SparkFun MEMS 마이크 브레이크아웃 보드를 읽고 오디오 플레이어를 트리거합니다. 데이터는 MQTT 통신 프로토콜을 사용하여 CloudMQTT 서비스에 업로드됩니다.
데모를 보려면 아래 동영상을 확인하세요!
이 튜토리얼에서는 다음을 수행하는 방법을 보여줍니다.
<울>
이 프로젝트를 빌드하려면 완전히 구성되고 Wi-Fi에 연결된 Raspberry Pi 3(Raspbian OS 포함)가 필요합니다. 또한 일부 Python 프로그래밍과 다음 세 가지 사항을 아는 것도 도움이 됩니다. (1) Raspberry Pi GPIO 핀 사용 및 제어, (2) MQTT 통신, (3) 아날로그 신호. 이 중 하나라도 낯설거나 그냥 궁금하다면(궁금해요!)
MQTT(Message Query Telemetry Transport)는 널리 사용되는 IoT 통신 프로토콜입니다. Paho Client Python 라이브러리와 CloudMQTT라는 MQTT 서비스를 사용하겠습니다.
<올>MEMS 마이크는 아날로그 마이크이므로 Raspberry Pi 디지털 GPIO 핀으로 아날로그 신호를 읽으려면 MCP3002 아날로그-디지털 변환기("ADC")가 필요합니다.
<올>따라 하려면 다음 자료가 필요합니다.
Bark Back:애완동물 모니터링 및 상호작용 SparkFun 위시리스트
다음도 필요합니다.
<울>
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 핀으로 다음과 같이 연결합니다.
<울>2. MEMS 마이크 브레이크아웃 보드에 와이어를 납땜합니다. MCP3002 및 Raspberry Pi에 연결합니다.
<울>
RPi가 연결되었습니다!
업데이트 확인 및 설치:
sudo apt-get update
sudo apt-get upgrade
sudo 재부팅
Python 개발자 패키지 설치:
sudo apt-get install python-dev
하위 폴더를 만들고 직렬 포트 인터페이스("SPI")를 설치합니다.
mkdir py-spidev
git clone git://github.com/doceme/py-spidev
sudo python setup. 파이 설치
문제가 발생하는 경우 SPI-Dev 문서를 참조하세요.
OMXPlayer는 Raspbian OS에 사전 로드된 오디오 및 비디오 플레이어입니다(우!). .wav, .mp3 및 .m4a를 포함한 대부분의 사운드 파일 형식에서 작동합니다. 이것을 사용하여 "뒤로 짖는" 소리를 재생합니다.
터미널에서 다음 명령을 사용하여 OMXPlayer를 테스트합니다.
omxplayer /home/pi/…/SongFilePath/SongFileName.mp3
그래도 작동하지 않으면 로컬 오디오 출력 장치를 통해 강제로 시도해 보십시오.
omxplayer -o local /home/pi/…/SongFilePath/SongFileName.mp3
이제 MQTT 서버를 설정합니다! CloudMQTT를 사용하여 이 작업을 수행하려면 다음을 수행하십시오.
<올>
마지막으로 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
if(micOut <1023):#오류 판독 방지
if(micOut> maxAmp):
maxAmp =micOut
elif(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()
바크 백 시스템이 제대로 작동하려면 다음을 입력하세요.
<울>자유롭게 코드를 조정하고 수정하십시오. 리소스 및 추가 정보를 확인하세요. 프로젝트 변형 및 추가 섹션.
더 많은 정보를 읽어보세요...
Bark Back Interactive Pet Monitor
제조공정
구성품 및 소모품 Arduino UNO × 1 SparkFun 단일 리드 심박수 모니터 - AD8232 × 1 HC-05 블루투스 모듈 × 1 SparkFun 납땜 가능 브레드보드 - 미니 × 1 남성/여성 점퍼 와이어 × 15 필요한 도구 및 기계 테이프, 전기 뜨거운 글루건(일반) 이 프로젝트 정보 영감 뉴스를 읽다가 연간 사망에 관한 설문조사를 보고 환자
구성품 및 소모품 라즈베리 파이 2 모델 B × 1 PNY 16GB Turbo MicroSDXC CL10 × 1 SparkFun Arduino Pro Mini 328 - 5V/16MHz × 1 SainSmart 5V 4채널 솔리드 스테이트 릴레이 보드 × 1 Tolako 5v Arduino용 릴레이 모듈 × 1 DS18b20 방수 온도 센서 × 1 4.7k 옴 저항기 - 1/4와트 - 5% - 4K7(10개)