はじめに
「ポストに書類が入っているか確認する」という単純だけど手間のかかる作業を課題と捉え、この課題を解決するため、ESP32マイコンと傾斜センサを使用した自動検知システムを開発しました。定期的な確認作業を自動化することで、業務効率の改善を目指しました。
システム概要
使用機材
- ESP32開発ボード
- WiFi機能内蔵で、インターネット接続が容易
- 安定した動作と豊富なライブラリが利用可能
- 低消費電力で24時間稼働に適している
- SW-520D 傾斜センサーモジュール
- Arduino用に最適化された安定性の高いモジュール
- クリーンな信号出力が特徴
- 傾斜角度に応じてON/OFF切り替えが可能
- メンテナンスフリーで長期運用に適している
- ブレッドボードとジャンパーワイヤ
- 必要に応じて配置変更が容易
動作の仕組み
- 書類提出ポストのフタに傾斜センサーを設置
- トレイのフタに傾斜センサを配置
- 書類を投函したときに傾斜が発生する位置に設置
- 書類が投函されると傾斜を検知
- センサが傾斜を電気信号として検出
- デジタル信号としてESP32に入力
- WiFi経由でSlackに通知
- 設定されたSlack WebhookにHTTPリクエストを送信
- カスタマイズ可能なメッセージフォーマット
実装のポイント
まずリポジトリです。
1. 安定性を重視した設計
誤検知や不要な通知を防ぐため、複数の安定化機能を実装しています。
const unsigned long DEBOUNCE_DELAY = 500; // チャタリング防止
const unsigned long NOTIFICATION_INTERVAL = 20000; // 通知の重複防止
const int NUM_READINGS = 10; // 平均化処理のサンプル数
デバウンス処理(チャタリング防止)
センサの物理的な揺れによる誤検知を防ぐため、500ミリ秒のデバウンス時間を設定しています。これにより、一時的な振動やノイズによる誤検知を効果的に防止できます。
平均化フィルタ(ノイズ除去)
10回のサンプリング結果の平均値を使用することで、電気的なノイズや一時的な外乱の影響を軽減しています。この処理により、より安定した検知が可能になっています。
通知インターバル制御(重複防止)
20秒間の通知抑制期間を設けることで、短時間での重複通知を防止しています。これにより、システムの使用者に適切なタイミングで必要な通知のみが届くようになっています。
2. エラー耐性の確保
長期運用を見据えて、様々なエラー状況に対応できる仕組みを実装しています。
void handleSystemError() {
errorCount++;
if (errorCount >= ERROR_LIMIT) {
sendSlackMessage("🔄 エラー回数が上限を超えたため再起動します");
ESP.restart();
}
}
WiFi接続の自動リトライ
ネットワーク接続が切断された場合、自動的に再接続を試みます。一時的な通信障害からの自動復旧が可能です。
エラー発生時の自動再起動
継続的なエラーが発生した場合、システムを自動的に再起動することで、fresh状態からの復帰を試みます。
システム状態の監視と通知
エラーの発生状況をSlackに通知することで、管理者が必要に応じて適切な対応を取ることができます。
3. シンプルな通知
ユーザビリティを重視し、シンプルで分かりやすい通知設計を採用しています。
書類が提出されると、Slackに「📄 書類が提出されました!」という通知が送られます。必要最小限の情報を、必要なタイミングで提供することにこだわりました。
- 絵文字を使用することで視認性を向上
- 簡潔な文言で状況を即座に理解可能
- 必要に応じてカスタマイズ可能な設計
コード構成
-
run.ino
: 実際の運用プログラム- システム全体の制御ロジック
- センサー読み取りとSlack通知の統合
- エラー処理とシステム監視機能
-
notify_slack.ino
: Slack通知機能のテスト用- Slack Web APIの確認
- メッセージフォーマットのテスト
-
tilt.ino
: 傾斜センサーの基本テスト- センサーの動作確認
- 基本的なセンサー値の読み取り
-
tilt_re.ino
: リファクタリング済みセンサープログラム- 最適化されたセンサー制御
- ノイズ対策の実装
まとめ
シンプルな課題に対して、必要十分な機能を実装することで、安定して動作する実用的なシステムを構築することができました。
実装のポイント
- 必要な機能に絞ったシンプルな設計
- 過剰な機能を排除し、メンテナンス性を向上
- 動作の安定性を最優先した設計判断
- 安定性を重視したエラー処理
- 予期せぬ状況への対応
- 自動復旧機能の実装
- 使いやすい通知形式
- 最小限の情報提供
- 直感的な理解が可能
「書類が届いているか確認する」という日常の小さな手間を、テクノロジーで解決できた良い例となりました。シンプルながらも実用的なこのシステムは、私たちの業務効率化の一助となっています。