Edited at

夜の地震の時に明かりを自動でつけるデバイスをRaspberry pi3とArduino nanoで作る


動機

日本では夜の地震が多い、というような記事を見かけた。というわけで夜に安全な避難をするためには何が必要か考えた。夜って暗いうえに地震でパニクるので足元がおろそかになるじゃないかな〜。やっぱりその時に明かりがあると安全な避難ができるんじゃないか、ということで緊急地震速報と連動して明かりつけてくれたりしたら便利なんじゃね?ってことで備忘録も兼ねてこの記事を書く

明かりは赤外線リモコンでつくものをしよう


構成

ざっくり作り方


使用機器

・raspberry pi3 model B

・arduino nano ch340(amazonで1個4~500円の互換品

・赤外線LED

・赤外線受光モジュール(OSRB38C9AA) http://akizukidenshi.com/catalog/g/gI-04659/


仕組み

raspberry piでtwitterの緊急地震速報botから地震のデータを取得する

地震の速報ツイートを取得したらi2cでarduinoに信号を与えて赤外線の信号を送る(※raspberry piで赤外線リモコン組もうとして挫折した


参考にしたURL

raspberry piとarduinoのi2c

https://sites.google.com/site/memorandumjavaandalgorithm/raspberry-pi-jiang-zuo-arduino-i2c-jie-xu

arduinoの赤外線信号の解析と送信

https://www.erestage.com/arduino/remo_recv/

https://www.erestage.com/arduino/arduino-send-remo/


緊急地震速報のbotさん

今回はこちらのかたのツイッターで行います

スクリーンショット 2019-01-17 0.56.15.png


raspberry pi側の地震でarduinoを動かすプログラム

基本的には前に書いたqiitaにURlのarduinoのプログラムを合わせただけ

https://qiita.com/nya3_neko2/items/d7214cce1ae00db3ade0

#!/usr/bin/env python 

# coding: utf-8
#import tweepy
import smbus #I2C通信するためのモジュールsmbusをインポートする
from twython import Twython,TwythonError
import datetime
import time
#twitterの認証情報を入力
CONSUMER_KEY = ""
CONSUMER_SECRET = ''
ACCESS_KEY = ''
ACCESS_SECRET = ''
api = Twython(CONSUMER_KEY,CONSUMER_SECRET,ACCESS_KEY,ACCESS_SECRET)
print('Auth Done!')

bus = smbus.SMBus(1) ##I2C通信するためのモジュールsmbusのインスタンスを作成
adress = 0x04 #arduinoのサンプルプログラムで設定したI2Cチャンネル

#日時取得
now = datetime.datetime.now()
print(now)
tw_text = ('First value')
print(tw_text)

try:
user_timeline = api.get_user_timeline(screen_name='v0x0o',count=1)
except TwythonError as e:
print('error')
print (e)

while True:
#重複処理
print(tw_text)
for tweet in user_timeline:
print(tweet['text'])
print("From now on, checking duplication")

#TL取得更新
try:
user_timeline = api.get_user_timeline(screen_name='v0x0o',count=1)
print("GET TL")
except TwythonError as error:
print('error')
print (error)
if tw_text != tweet['text'] :
print(tw_text)
print(tweet['text'])
print('This is new tweet')
#TLの取得
try:
user_timeline = api.get_user_timeline(screen_name='v0x0o',count=1)
print("GET TL")
except TwythonError as error:
print('error')
print (error)
for tweet in user_timeline:
print("tw_textに代入")
target1 = '地震速報'
fb1 = 0
fd1 = tweet['text'].find(target1)
print('find' + str(fd1))
if fd1 == -1:
print('This tweet is not order')
if fd1 != -1:
print('This is earthquake flash news!')
target2 = '港区'#設置場所の情報を入力
fb2 = 0
fd2 = tweet['text'].find(target2)
if fd2 != -1:
print('Action for earthquake!')
#arduinoを動かすためのI2Cのデータ送信
try:
#Arduinoへ文字『R』を送る、ordはアスキーコードを取得
bus.write_byte(adress, ord('R'))

#Arduinoからのメッセージを取得し表示する、chrはアスキーコードを文字へ変換
#msg = chr(bus.read_byte(adress))
#print(msg)
#Arduinoからデータ取得する場合はコメントアウトを解く
tw_text = tweet['text']
else :
print("I have seen")
print('4')
print(tw_text)
print(tweet['text'])
print("==========================================================")
time.sleep(5)#〜秒ごとに繰り返す


おわりに

この記事は実験してる途中なんで備忘録を兼ねて随時更新していきます