CdS(硫化カドミウム)を使用した光センサを用いて、部屋の明かりのON,OFFを検知。
明かりの切り替えがあるとメールで知らせてくれるというシステム。
使用する製品
・RaspberryPi
・Arduino
・CdS
・ブレッドボード
・10kΩ抵抗器
・ジャンパワイヤー
#システム構成図
#実装手順
- Arduinoの設定
- Gmailの設定
- RaspbeeryPiの設定
##1. Arduinoの設定
###1.下の回路図を参考にジャンパ線をつなげる
###2.プログラムをArduinoに書き込む
Arduino Web Editorのページに行き、下記ファイルをArduinoに書き込む。
※Arduino Web Editorの使い方がわからない方は別途参照が必須
const int led_pin = 9;
const int vol_pin = 0;
int vol_value = 0;
int temp=0;
void setup() {
Serial.begin( 9600 );
temp = analogRead( vol_pin );
}
void loop() {
vol_value = analogRead( vol_pin );
analogWrite( led_pin, vol_value );
if(abs(temp-vol_value)>10){ //一つ前に入ったtemp変数とvol_value変数の値が10より差が開いているか確認
Serial.println("0");
}else{
Serial.println("1");
}
temp = analogRead( vol_pin );
delay( 2000 );
}
接触の問題かわからないが、CdSの出力する値(vol_value変数)が接続するたびに異なることが起きたので、temp変数とvol_value変数の差から明かりのON,OFFを判別
###3.Arduinoのテスト
無事に書き込みが完了後、部屋の明かりをON,OFFに切り替えた時にだけ0が出力されるか確認
##2.Gamilの設定
Gmailでメールを送信するときに設定が必要になる。
1.Gmailにログイン後2段階認証プロセスをON
2.アプリパスワードを作成、16桁のパスワードを取得
アプリ パスワードを使用すると、2 段階認証プロセスに対応していない端末上のアプリから Google アカウントにログインできるようになる。このとき作成したパスワードはRaspbeeryPiで作成するメール送信pythonプログラムに入力が必要になる。
##3.RaspbeeryPiの設定
###1.下記pythonプログラムをRaspberryPi上に作成
import serial
import smtplib
import time
from email.mime.text import MIMEText
ser = serial.Serial('/dev/ttyACM0',9600,timeout=None) #Arduinoとシリアル通信
while True:
line = ser.readline()
x = int(line) #型変換 stringからint
if x==0:
if __name__ == '__main__':
to_addr = 'xxxxxxxxxxxxxxxxxxx@gmail.com' #送信先メールアドレス
from_addr = 'yyyyyyyyyyyyyyyyyyyy@gmail.com' #アプリパスワードを作成したメールアドレス
mail_id = from_addr
mail_pass = 'zzzzzzzzzzzzzzzz' #作成したアプリパスワード(16桁)に置き換える
message = MIMEText('Hello')
message['Subject'] = 'Hello'
message['From'] = from_addr
message['To'] = to_addr
sender = smtplib.SMTP_SSL('smtp.gmail.com')
sender.login(mail_id, mail_pass)
sender.sendmail(from_addr, to_addr, message.as_string())
sender.quit()
ser.close()
###2.システムが正常に動作するか確認
$python mail_send.py
エラーが検出されず部屋の照明を切り替えた時に送信先メールアドレスにメールが届いていれば完了
###3.nohupコマンドでプログラムを裏で動作させる
最後にターミナルを消しても裏でプログラムが動作しているようにするために、nohupコマンドを使用
$nohup python mail_send.py &
jobsコマンドを使用、現在実行しているジョブを確認。
$jobs
nohupの使い方についてわからない方は別途参照することをお勧めする。