Raspberry Piでごみ出しをLINEに通知する
ごみの日。ごみ出さなきゃなあ。・・・家族がすでに出してたら起き損だなあ。・・・でもわからないから起きなきゃ。
そこで、ごみを出したら家族にLINEでお知らせ。これで他の人がごみを出してくれた朝はゆっくり寝られる!
ごみは捨てた、また寝ていいよ君
「ごみは捨てた、また寝ていいよ君」
— しらかわあずま◎画家で知財屋 (@sylacwa) May 2, 2020
家族がごみを出してくれた朝はゆっくり寝られる!
たとえばこどものお手伝い。ごみ出しをお知らせするデバイスを作りました。#MFKyoto2020 #作品発表 pic.twitter.com/9IMcsQqafD
概要
Raspberry PiとCdSセルを使って、ごみ出しを感知し、LINEで家族に通知します。
使用する部品はこちらです。
- Raspberry Pi 4
- CdSセル
- NPNトランジスタ
- 抵抗
電子回路
CdSセルは、受光量に応じて抵抗値が変化する素子です。使用したものは、明るい場所では1kΩ、暗い場所では10kΩでした。ごみ袋の下にCdSセルを配置して、ごみ袋の有無によるCdSセルの抵抗値の変化を検知します。
下図(A)CdSセルが”暗”:
CdSセルの電圧=ベース・エミッタ間電圧が高くなり、トランジスタがONとなるため、コレクタ電圧は22mVとなります。
下図(B)CdSセルが”明”:
CdSセルの電圧=ベース・エミッタ間電圧が低くなり、トランジスタがOFFとなるため、コレクタ電圧は3.3Vとなります。
(A)CdSセルが”暗”
(B)CdSセルが”明”
配線図
トランジスタのコレクタ電圧をGPIOピンに入力します。
電源を3.3Vピンに、グラウンドをGNDピンに接続します。
Raspberry Piでは、入力電圧0V〜0.8Vは”0″として取得され、入力電圧1.3~3.3Vは”1″として取得されますので、 CdSセルが”暗”のとき”0″が取得され、CdSセルが”明”のとき”1″が取得されます。
LINEに通知
LINE Notify にログインしてアクセストークンを発行します。
トークン名を「ごみ出したよ!」に、通知先を「1:1でLINE Notifyから通知を受け取る」に設定しました。
ソースコード(python)
制御フローは次のとおり。
ごみ”有”⇒CdSセル”暗”⇒GPIOピン”0″⇒LINEで通知しない
ごみ”無”⇒CdSセル”明”⇒GPIOピン”1″⇒LINEで通知する
メッセージは空にし、スタンプとして’stickerPackageId’, ‘stickerId’を設定しました。
#!/usr/bin/python
# coding: utf-8
import RPi.GPIO as GPIO
import requests
while True:
#GPIO21ピンを入力に指定して、入力電圧(0or1)をCdSに格納する
GPIO.setmode(GPIO.BCM)
GPIO.setup(21, GPIO.IN)
CdS = GPIO.input(21)
GPIO.cleanup()
#CdSが1の場合、LINE Notifyを実行する
if CdS == 1:
line_notify_token = '(アクセストークン)'
line_notify_api = 'https://notify-api.line.me/api/notify'
payload = {
'message': ' ',
'stickerPackageId': 2,
'stickerId': 502,
}
headers = {'Authorization': 'Bearer ' + line_notify_token}
line_notify = requests.post(line_notify_api, data=payload, headers=headers)
break