読者です 読者をやめる 読者になる 読者になる

画像処理とか機械学習とか

画像処理や機械学習関連の事について気まぐれで書いていきます。歩行者検出関係が多いと思います。ハリネズミもたまに出現します。

Raspberry pi 3とArduinoの連携によるハリネズミ温度管理システムの改良Ver1.1

前回はArduinoを用いた温度の取得とLEDによる警告を行うシステムを作りました。
今回はRaspberry piとシリアル通信によりデータを共有し、もう少し改良を行います。

  • やる事
  1. ArduinoとRaspberry piの連携
  2. Arduinoで取得した温度を投げる
  3. Raspberry pi 側で温度を取得し、温度により警告をメールで飛ばす

前回Arduino側のソースコードを少し変更しました。
↓変更部分

void loop(){
  // アナログピンから計測値を取得(0〜203)
  a_in = analogRead(0);
  // 入力値を摂氏に換算
  temp_c = ((5 * a_in) / 1024) * 100;
  // 改行しながら出力
  Serial.println( temp_c );

シリアル通信でデータを投げる部分は温度だけ投げるように変更しました。
これでRaspberry pi とUSB接続してRaspberry pi 側で取得のプログラムを書けば温度が取得できるはずです。

こちらはPythonを用いてプログラムを書いていきます。
シリアル通信によるデータ取得とメール送信用のプログラムは以下のようになります。

# -*- coding: utf-8 -*-
import serial
import time
import os.path
import datetime
import smtplib
from email import Encoders
from email.Utils import formatdate
from email.MIMEBase import MIMEBase
from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText

#Google account
ADDRESS = "送信用のアドレス"
PASSWARD = "パスワード"

#SMTP Server
SMTP = "smtp.gmail.com"
PORT = 587


def create_message(from_addr, to_addr, subject, body):

msg = MIMEMultipart()
msg["From"] = from_addr
msg["To"] = to_addr
msg["Date"] = formatdate()
msg["Subject"] = subject
body = MIMEText(body)
msg.attach(body)

return msg

def send(from_addr, to_addrs, msg):

smtpobj = smtplib.SMTP(SMTP, PORT)
smtpobj.ehlo()
smtpobj.starttls()
smtpobj.ehlo()
smtpobj.login(ADDRESS, PASSWARD)
smtpobj.sendmail(from_addr, to_addrs, msg.as_string())
smtpobj.close()


if __name__ == '__main__':

count = 0;

ser = serial.Serial('/dev/ttyACM0', 9600)
print(ser.portstr)
time.sleep(3)

while 1:
time.sleep(1)
data = ser.readline()

if count > 0:
data = float(data)
print(time.ctime() + ', ' + str(data))

if data < 20 :

#adress
to_addr = "送信先のアドレス"

#subject and body
subject = "温度警告"
body = "現在の温度 " + str(data) + "度です。\n温度調節して下さい。"

#create message
msg = create_message(ADDRESS, to_addr, subject, body)

#send
send(ADDRESS, [to_addr], msg)

print('send aleart message.\n')

count = count + 1

  • 実行結果

f:id:hiro2o2:20160325173337p:plain

計測した温度が20度を下回った際に警告のメールが送信されるようになりました。

f:id:hiro2o2:20160325173615p:plain

実際に送られてきたメール


  • まとめ

ArduinoとRaspberry piを連携させたシステムを構築した。
Arduinoではセンサーの管理、Raspberry piではメール送信などの仕事をさせた。
何か他に良いアイディアが思いついたら随時追加していきます。