赤外線リモコンを使用してLEDの制御を行う際に、Arduino Nanoでは正常に動作するのに、ATtiny85ではLEDがオフにならないという問題に直面することがあります。この問題は、ATtiny85特有の制約や設定によるもので、解決策を理解することでスムーズに動作させることができます。この記事では、ATtiny85での赤外線リモコン受信の問題とその解決策について詳しく解説します。
ATtiny85とArduino Nanoの違い
ATtiny85は、Arduino Nanoとは異なり、リソースが限られている小型のマイクロコントローラーです。ATtiny85のメモリやI/Oピンの数は少なく、ライブラリの対応や処理能力に制約があることがあります。特に、赤外線受信のために必要な処理能力やメモリの割り当てが問題となることがあります。
Arduino IDEでATtiny85を使用する際は、適切なボード設定を行うことが重要です。また、IRremoteライブラリの設定や使い方も、ATtiny85で動作させるためには注意が必要です。
問題の原因:タイミングやメモリ不足
ATtiny85でLEDがオフにならない原因の一つとして、タイミングやメモリの問題があります。ATtiny85の処理速度やメモリは、Arduino Nanoに比べて制限があるため、特にIRremoteライブラリを使用する際に、メモリ不足や処理の遅延が発生することがあります。
例えば、delay()関数の使い方が原因で、処理がブロックされている場合や、IR信号の受信とその後の処理がうまく同期していない場合があります。ATtiny85の処理能力に合った適切なコードの調整が必要です。
解決策:IRremoteライブラリの設定とタイミング調整
ATtiny85で赤外線リモコンを正常に動作させるための解決策として、以下のポイントを確認しましょう。
- ライブラリの設定:ATtiny85に適したIRremoteライブラリのバージョンを使用し、ライブラリがATtiny85に対応していることを確認します。IRremoteの設定で、受信ピンやタイミングを適切に設定することが大切です。
- 処理速度の調整:ATtiny85では、delay()関数を使ったタイミング調整がうまくいかない場合があります。代わりに、millis()を使用して非同期的に処理を行う方法を検討してください。
- メモリの最適化:ATtiny85はメモリが限られているため、メモリ消費を抑えるために、不要な変数や処理を削減します。
ATtiny85向けのコード例と改善点
ATtiny85で赤外線リモコンを正常に受信してLEDを制御するための改善点をコード例で示します。以下の変更を加えることで、処理の遅延を減らし、LEDの状態を正常に切り替えられるようになります。
#include
int receiverPin = 2; //VS1838Bの出力を接続
int RELAYPin =4; //LEDを接続
IRrecv receiver(receiverPin);
decode_results results;
void setup() {
pinMode(receiverPin, INPUT);
pinMode(RELAYPin, OUTPUT);
receiver.enableIRIn();
digitalWrite(RELAYPin, HIGH);
}
void loop() {
if (receiver.decode(&results)) {
if (results.value == 0X01C6B847) {
digitalWrite(RELAYPin, LOW);
delay(3000); // 一時的な停止
digitalWrite(RELAYPin, HIGH);
}
receiver.resume();
}
}
このコードでは、赤外線リモコンのボタンが押されたときにLEDを一時的にオフにし、その後再度オンにする動作を実行しています。ATtiny85の制約に合わせて、処理を最適化するためにdelay()関数を適切に使用するか、millis()で非同期処理を行う方法を試してみてください。
まとめ
ATtiny85で赤外線リモコン受信を使用する際の問題は、主にタイミングやメモリの制約によるものです。Arduino Nanoでは正常に動作していたコードでも、ATtiny85の処理能力に合わせた設定やコードの最適化が必要です。IRremoteライブラリの設定を調整し、処理速度やメモリの最適化を行うことで、ATtiny85でも赤外線リモコンを正しく受信してLEDの制御ができるようになります。


コメント