🔋 CR2032で数年駆動を目指す!ATtiny402とESP-NOWで作る超低消費電力ワイヤレスセンサー

【DIY】ホームセーフティ実践

このガイドでは、小型で安価なCR2032コイン電池を電源とし、ATtiny402をセンサーの核、ESP32をゲートウェイとしてESP-NOWで連携させる、究極の省電力ワイヤレスセンサーの作り方を解説します。

CR2032のような小型電池で長期間(数年)駆動させるには、回路設計とプログラムの両面で徹底した省電力化が必要です。ここでは、その実現に必要な部品、回路図、そしてプログラムの要点を解説します。

1. システム構成と動作原理

このシステムは、「スリープが命」です。センサーノードは通常、完全に電力を抑えたスリープ状態にあり、イベント発生時(または定時間隔)にのみ短時間だけ起動し、データを送信したらすぐにスリープに戻ります。

ユニット役割使用部品
ノード (送信機)センサーデータの取得、ESP-NOWでの高速送信ATtiny402 + ESP-01 (またはESP8266モジュール) + センサー
ゲートウェイ (受信機)ノードからのデータ受信、Wi-Fi/インターネットへの転送ESP32 DevKit
通信方式ESP-NOW (高速、低消費電力)
電源CR2032コイン電池 (ノードのみ)3V、約200mAh

なぜCR2032とESP-NOWの組み合わせが良いのか?

  1. CR2032の制約: CR2032電池は容量(約200mAh)が小さいだけでなく、最大放電電流が非常に小さいという特性があります。瞬間的に大きな電流(数十mA以上)を流すと電圧が急激に降下し、マイコンがリセットされます。
  2. ESP-NOWの利点: ESP-NOWはWi-Fi接続認証プロセスを省略できるため、Wi-Fi接続時のような瞬間的な大電流スパイク(数百mA)がほとんど発生しません。ESP8266/ESP32を送信機として使う場合でも、ESP-NOWの方がバッテリーに優しい通信方法です。
  3. ATtiny402の利点: センサー監視とロジック実行に特化し、スリープ時の消費電流がナノアンペア(nA)レベルと極めて低く、CR2032の寿命を最大限に延ばします。

2. 必要な部品リスト

CR2032電源で動作させるために、通常の開発ボードではなく、単体のチップと低消費電力部品を選定します。

部品詳細備考
マイクロコントローラATtiny402センサーロジック、スリープ管理、ESP-NOWトリガー用
ワイヤレス通信ESP-01F/S または ESP8266モジュールESP-NOW送信専用(ESP32でも可)
電源CR2032 コイン電池3V, 約200mAh。電池ホルダーも必要。
電圧安定化コンデンサ (100uF – 470uF)必須。ESP8266の瞬間的な電流スパイクを緩和し、リセットを防ぐ。
センサーリードスイッチ (またはDHT11など)超低消費電力で状態監視が可能。
プログラム用部品UPDIプログラマATtiny402への書き込みに必要。 (例: Arduino UNOを書き込み機として利用)
配線/基板ユニバーサル基板またはPCB、細線ワイヤ


3. 回路図と配線方法(超低消費電力ノード側)

CR2032で駆動させるための最も重要なポイントは、ATtiny402とESPモジュールの連携、そして電源周りの設計です。

🔋 CR2032と電圧安定化

CR2032の最大の弱点を補うために、大容量のコンデンサを電源ラインに並列接続します。

接続ポイント部品役割
CR2032の+ / GND電解コンデンサ (100uF〜470uF)ESPモジュールが送信のために瞬間的に大きな電流を要求した際、電池電圧が急降下するのを防ぎ、システムを安定させます。
CR2032の+ / GND積層セラミックコンデンサ (0.1uF)高周波ノイズを除去し、安定化を助けます。

🔌 ATtiny402とESPモジュールの接続

ATtiny402がESPモジュールのリセットピンを制御することで、必要なときだけESPモジュールを起動させます。

ATtiny402 PinESP-01/ESP8266 Pin役割
VCC/GNDVCC/GNDCR2032電源に接続 (3V)
PAx (GPIO)RST (リセット)ATtinyがESPモジュールを起動・停止させる。
PAy (GPIO)CH_PD (チップイネーブル)RSTピンでの制御が難しい場合、このピンで電源供給をコントロールする。
PAz (GPIO)TX (送信)ATtinyのデータ送信トリガー(今回は使わないが、将来的な拡張用)

具体的な動作シーケンス

  1. 通常時: ATtiny402がスリープ状態。ESPモジュールのRSTピンをGNDに落とし、完全に停止させておく。
  2. イベント発生時: ATtinyがウェイクアップ。
  3. 起動: ATtinyがRSTピンをHighにしてESPモジュールを起動させる(約数100ms)。
  4. 送信: ESPモジュールが起動次第、ATtinyがトリガー信号を送り、ESP-NOWでデータを送信。
  5. 停止: 送信完了後、ATtinyがRSTピンをGNDに落とし、ESPモジュールを停止。ATtinyもスリープに戻る。

センサーの接続

リードスイッチなどのシンプルなセンサーは、ATtiny402のGPIOピンに接続し、 外部割り込み(INT) として設定します。

  • リードスイッチ: ATtiny402のGPIOピンとGND間に接続。ピンを INPUT_PULLUP で設定しておけば、ドアが閉まっているときはHigh、開いたときにLowになり、割り込みを発生させます。

4. プログラムの要点(ATtiny402側)

ATtiny402のプログラムは、省電力ライブラリ割り込み駆動に徹底的にこだわります。

A. 低消費電力スリープの設定

ATtiny402をナノアンペアレベルのスリープモードに入れることが必須です。

C++

#include <avr/sleep.h>
#include <avr/wdt.h>

void enter_deep_sleep() {
    // 割り込み許可
    set_sleep_mode(SLEEP_MODE_PWR_DOWN); // 最も深いスリープモード
    sleep_enable();
    
    // スリープ前に必要な処理 (電源安定化など) を行う

    sleep_cpu(); // スリープ実行
    sleep_disable(); // ウェイクアップ後、スリープモードを解除
}

// ウォッチドッグタイマー (WDT) で定期的なウェイクアップも設定可能

B. ESPモジュール制御ロジック

ATtiny402のGPIOピンを直接制御して、ESPモジュールをON/OFFします。

C++

const int ESP_RST_PIN = 1; // 例としてPA1

void setup() {
    pinMode(ESP_RST_PIN, OUTPUT);
    digitalWrite(ESP_RST_PIN, LOW); // 初期状態はESPを停止
    // ... その他の初期設定
}

void trigger_esp_now_send(uint8_t sensor_data) {
    // 1. ESPを起動
    digitalWrite(ESP_RST_PIN, HIGH);
    delay(500); // ESPモジュール起動待ち (ファームウェアによる)

    // 2. ESP-NOW送信ロジックをESPモジュールに指示 (ATコマンドまたはカスタムファームウェア)
    //    ここでは、ESPモジュールに書き込んだカスタムファームウェアが、
    //    起動時にデータを送信するように設定されている前提とします。
    
    // 3. 送信完了待ち(適度な待ち時間またはESPから完了信号を受信)
    delay(500); // 送信完了まで待機

    // 4. ESPを停止
    digitalWrite(ESP_RST_PIN, LOW);
}

// 割り込みハンドラ
void door_status_changed() {
    // 割り込み処理を短くし、すぐにtrigger_esp_now_sendを呼び出す
    trigger_esp_now_send(1); // ドアが開いたことを示すデータ
}

void loop() {
    // イベントベースの割り込みを有効化
    // ...
    enter_deep_sleep();
}

5. 重要な注意点と最適化

A. ESPモジュールのカスタムファームウェア化

市販のESP-01/ESP8266モジュールに搭載されている純正のATファームウェアは、起動に時間がかかりすぎるため、省電力化には向きません。

カスタムファームウェア: ESP8266/ESP32をArduino環境でプログラミングし、起動後、すぐにESP-NOW送信を実行し、その後自動でスリープ/停止するロジックを組み込む必要があります。

B. 電源インピーダンスの最小化

電池ホルダーと基板、配線の接続は、できるだけ抵抗値(インピーダンス)が低くなるようにしてください。配線が細すぎたり長すぎたりすると、瞬間的な電流スパイク時に電圧降下が大きくなり、マイコンがリセットする原因となります。

C. センサーステートの維持

イベントトリガーの場合、ATtiny402がスリープからウェイクアップした後に、以前の状態を記憶しておく必要があります。

  • ステート記憶: ATtiny402のEEPROMや、 RTC (Real-Time Clock) レジスタ(リセット後もデータ保持)を活用して、前回のセンサー状態(開/閉)を記録します。
  • 不要な送信の防止: 状態が変化したときのみ送信処理を実行することで、無駄な電力消費を防ぎます。

この徹底した省電力設計と、ATtiny402とESP-NOWの特性を活かすことで、CR2032一つで実用的な期間(数ヶ月〜数年)動作するワイヤレスIoTデバイスの実現が可能になります。

タイトルとURLをコピーしました