1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

M5Stackで会議室の使用状況をモニタリングしよう②(マグネットスイッチ+人感センサー編)

Posted at

概要

前回は会議室の利用状況をWeb上で把握できる仕組みを
 M5Stack+マグネットスイッチ→ThingSpeak
を使って構築しました。

しかし”会議後にドアを開けておく”事を忘れる場合があるため、人感センサーを使用して会議室内の人の有無をチェックできる機能を追加しました。
人感センサー付き.JPG
TS.JPG

なお、今回もUIFlowを使用して、1行もコードを書かずに構築しています。

使用したもの

・M5Stack(Basic)
・マグネットスイッチ
 →ダイソーの「ドアが開くと点灯するライト」の部品を流用
  →参考:ラズパイで100均のドア開閉センサー検知
・追加:秋月電子:焦電型赤外線センサーモジュール(焦電人感センサ)

接続方法

①マグネットスイッチ
 →21ピン
 →GND
②人感センサー
 センサー→M5Stack
 GND→GND
 VCC→5V
 OUT→5ピン

コード

最後に人を感知してから
・何秒経過したか→画面表示
・何分経過したか→ThingSpeakに通知
を出力しています(あまり大きな数値を出しても意味がないので、最大3分まで対応しています)

C1.JPG
C2.JPG

M5Door2.py
from m5stack import *
from m5ui import *
from uiflow import *
import time
import machine
import urequests

setScreenColor(0x222222)


CNT = None
isOpen = None
isMan = None


DoorStatus = M5TextBox(88, 44, "DoorStatus", lcd.FONT_DejaVu24, 0xFFFFFF, rotate=0)

from numbers import Number




setScreenColor(0x000000)
DoorStatus.setText('Started')
wait(5)
pin0 = machine.Pin(21, mode=machine.Pin.IN, pull=machine.Pin.PULL_UP)
pin1 = machine.Pin(5, mode=machine.Pin.IN, pull=machine.Pin.PULL_UP)
CNT = 1
while True:
  isOpen = pin0.value()
  isMan = pin1.value()
  if isOpen == 0:
    setScreenColor(0xff0000)
    lcd.print('Close', 0, 0, 0x000000)
  else:
    setScreenColor(0x009900)
    lcd.print('Open', 0, 0, 0x000000)
  if isMan == 0:
    if CNT >= 180:
      CNT = 180
  else:
    CNT = 1
  lcd.print(((str('Last Man Found(s):') + str(CNT))), 0, 30, 0x000000)
  if 0 == 0:
    try:
      req = urequests.request(method='GET', url=(str(((str('https://api.thingspeak.com/update?api_key=★ここにAPIKeyを入れます★&field1=') + str(isOpen)))) + str(((str(' &field2=') + str((CNT / 60)))))), headers={})
      lcd.print('Posted', 50, 120, 0x000000)
    except:
      lcd.print('NG', 50, 120, 0x000000)
  wait(5)
  CNT = (CNT if isinstance(CNT, Number) else 0) + 5
  wait_ms(2)


苦労したところ

1.ThingSpeakに2つの数値の送る書き方が分からなかった

・・・&field1=') + str(isOpen)))) + str(((str(' &field2=') + str((CNT / 60)))

という書き方で送ることができました。

2.人感センサーに反応されないようにするのが大変だった
近くにいるとどうしても反応してしまうため、センサーを皮の筆入れで包むことで遮断した

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?