一発撃って寝るやつ

電子工作

ボタンを押すと赤外線リモコンのコマンドを一発だけ売ってスリープするガジェットです。別にコマンドは複数でもできますがあえての一発屋です(笑)

CPUは、Arduinoとかで使われている Atmel ATmega328P/ 16MHz / 8bitです。回路もほぼ Arduinoシリーズと同じ。クリスタルはセラロック、USBインターフェースとか動作に不要な余計なものは全部無しです。書き込み機は Arduino Unoでシリアルで書き込みます。ブートローダーも Arduinoのものでこれも Unoから書き込みます。

電源は、みんな大好き 18650リチウムイオン電池で 3.7Vから 5Vに昇圧モジュールを使ってあげています。このモジュールは無負荷時に、0.1mA程度を消費します。(モジュール上のLEDは外しました)

プログラムは、IRremote ライブラリの読み込みと書き込みを流用。
読み込みは、シリアル端末にでデータを書き出す必要があるので、普通の Arduino nanoを使用。
IR送出には余計な周辺は不要なので、 生 ATmega328P と最低限必要な部品を使います。
低消費電力になる部分は、ChatGPTに聞きました。(笑)ほんと便利だわ。
復帰は、単純にリセット入力です。

配線はやっつけなので汚いなあ。

#include <avr/sleep.h>
#include <avr/power.h>
#include <IRremote.h>

unsigned int rawData[] = {
    8900, 4450, 550, 600, 550, 1700, 500, 600, 500, 1700, 550, 1700, 500, 1700, 550, 550, 550, 600,
    ,,,ここに送りたいIRコマンド(irreadで読み取ったもの)
};

unsigned int rawDataLength = sizeof(rawData) / sizeof(rawData[0]);

IRsend irsend;

void setup() {
    pinMode(LED_BUILTIN, OUTPUT);
    digitalWrite(LED_BUILTIN, HIGH);

    delay(500);

    irsend.sendRaw(rawData, rawDataLength, 38); // 38kHzで送信
    delay(200);
    irsend.sendRaw(rawData, rawDataLength, 38); // 38kHzで送信
    delay(800);
    digitalWrite(LED_BUILTIN, LOW);

    // スリープ前の準備
    set_sleep_mode(SLEEP_MODE_PWR_DOWN); // 最低消費電力モード
    noInterrupts(); // 割り込み無効
    sleep_enable(); // スリープ許可

    // すべての周辺機能を停止
    ADCSRA &= ~(1 << ADEN);  // ADC停止
    power_all_disable();     // 全周辺(ADC, Timer, SPI, TWI, etc.)停止

    // BOD(ブラウンアウト検出)も無効化してさらに省電力化
    MCUCR |= (1 << BODS) | (1 << BODSE);
    MCUCR = (MCUCR & ~(1 << BODSE)) | (1 << BODS);

    interrupts(); // 割り込み再開(※ここで有効にしないとsleep_cpuで止まらない場合あり)

    sleep_cpu();  // スリープ突入

}

void loop() {

}

で、消費電流ですがスリープ時、3.7Vで 0.1mA以下といったところで、今のところ3週間くらいは電池で動いています。

ケースは、電池ボックス含めて 3Dプリンターで作製しました。

コメント

  1. う~ より:

    ワンアクションなら、電源スイッチ自体をボタンにすれば、待機電力の問題は無くなりますね。
    一般のリモコンもそういう作りが多いと思います。

  2. かとうぴ かとうぴ より:

    その案もあったんですが、オン状態を一定時間確保しないといけないのと CPUのスリープを使ってみたかったという事もありあえて今回の方法に。

  3. かとうぴ かとうぴ より:

    とりあえず、1ヶ月は電池持っています

  4. かとうぴ かとうぴ より:

    3か月たちました。毎日使っていますがまだ電池持っていますね。

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