Raspberry Piでごみ出しをLINEに通知する

Raspberry Piでごみ出しをLINEに通知する

ごみの日。ごみ出さなきゃなあ。・・・家族がすでに出してたら起き損だなあ。・・・でもわからないから起きなきゃ。
そこで、ごみを出したら家族にLINEでお知らせ。これで他の人がごみを出してくれた朝はゆっくり寝られる!

ごみは捨てた、また寝ていいよ君

概要

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から通知を受け取る」に設定しました。

LINE Notify
LINE NotifyはGitHub,IFTTT,MackerelなどのWebサービスからの通知を、LINEで受信することが出来る便利なサービスです。

ソースコード(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