はじめに
PicoMiteでも試したRaspberry Pi Picoへの入力として焦電型赤外線(人感)センサーモジュール SB412Aを使い、センサーで人を検出した時に出力の赤色LEDを転送させる仕組みをMachiKaniaで試しました。
検証環境
下記の環境で動作を検証しました。
- MachiKania : phyllosoma 1.6.0.0 https://github.com/machikania/phyllosoma/tree/production からダウンロードしたソースを自分でビルド
- MachiKania簡易キットを使用
- 焦電型赤外線センサー : 焦電型赤外線(人感)センサーモジュール SB412A
接続
Raspberry Pi Picoと焦電型赤外線センサー、赤色LEDは下記のように接続しました。
SB412AのVoutの接続ポートとして最初にGP0を試しましたがなぜかハイレベルの入力値しか得られなかったのでGP1に接続しました。他のGP2〜GP9でもうまく動作しました。
| Pico(GP) | Pico(物理) | SB412A | LED |
|---|---|---|---|
| GP1 | 2 | Vout | Vout |
| GP22 | 29 | -- | アノード |
| 3V3 | 36 | + | -- |
| GND | 38 | - | カソードー抵抗器 |
焦電型赤外線センサーは基板上の半固定抵抗器の値で出力の保持時間が決まります。何とか調整して2秒ほどに設定されています。
プログラム
SB412Aの出力を取得し、H(1)のときにLEDを点灯するようにしました。SB412Aの状態の確認とLEDへの出力はタイマー割り込みを使用して定期的に実行するようにしました。
また、LCDへの表示はGEN3Oクラスを使って大きな文字で表示するようにしました。
USECLASS GEN3O
USEGRAPHIC
K=NEW(GEN3O,88,"UTF-8")
CLS
C=0
REM タイマ割り込みを1000マイクロ秒(1ミリ秒)ごとに発生
USETIMER 1000
REM タイマー割り込みルーチンを指定
INTERRUPT TIMER,SB412A
WHILE INKEY()=0:WEND
END
REM 割り込みルーチン
LABEL SB412A
REM SB412A出力の取得
A=IN(1)
REM SB412Aの出力が直前と異なり、Hレベルtのときカウンターを増加
IF B!=A AND A=1 THEN C=C+1
REM メッセージ表示
POINT 0,30
K.GPRT("検出回数:"+DEC$(C)+"回",7,8)
REM LEDをオンあるいはオフ
OUT 12,A
REM 現在の状態を記憶
B=A
RETURN
実行結果
以下が実行です。
さいごに
タイマー割り込みを使うことで無限ループ内で実行するよりもスムーズに動作しているように感じられました。
最初にSB412Aを接続したGP0はなぜだかSB412Aの出力を常にH(ハイレベル)としても読み取る現象が起きていました。GP1〜GP9では正しくSB412Aの出力をちゃんと読み取れました。

