
以前に公開された記事の続き、 最初 、 2番目 。
この記事では、リモートコントロールを備えたプログラム可能なライトスイッチに焦点を当てます。 デバッグとプロトタイピングの以前のプロジェクトと同様に、 Carduino Nano V.7を使用します
必要な機能
家庭用の赤外線リモコンでスイッチを制御する機能。
家庭用赤外線リモコンのいずれかのボタンのスイッチをプログラムするには。
互いに関係なく、スイッチキーとリモコンの両方からライトをオン/オフにします。
スキームとアクセサリー

プロトタイプを構築するには、次のコンポーネントを使用しました。
Carduino Nano V.7コントローラー
リレーモジュール
IRレシーバーTSOP
ブレッドボード
サウンドエミッター
コンポーネント写真

サーキットブレーカーの説明
最初に、コントロールパネルのボタンコードをスイッチのメモリに追加します。 これを行うために、私たちは私たちに最も適したリモコンを取り(エアコンからのリモコンは機能しません)、使用しない無料ボタンを選択します(通常、これらは色付きのテレテキストボタンです)。 スイッチのプログラミングモードに入ります。オン/オフキーを押して5秒間押し続けると、長いビープ音が鳴ります。その後、以前に選択したリモコンボタンを押したままになり、スイッチの操作準備が整います。 これで、ライトスイッチはIRリモートコントロールの追加コマンドを理解します。 ボタンコードはコントローラの不揮発性メモリに保存され、回路の電源をオフにした後でもメモリに保存されます。
プロトタイプスイッチの操作については、ビデオをご覧ください
Arduino Controllerのコード
#include <IRremote.h> #include <avr/delay.h> #include <EEPROM.h> #define button 7 #define speaker 11 #define lamp 6 IRrecv irrecv(2); // decode_results results; unsigned long ir_command; uint8_t swt, count, state = 0; // void setup() { pinMode(speaker, OUTPUT);// pinMode(button, INPUT);// digitalWrite(button,HIGH);// pinMode(lamp, OUTPUT);// irrecv.enableIRIn(); // } void loop() { swt=digitalRead(button); count=0; while(swt==0) { if(count>30) { beep(100,400); for(unsigned long i=0; i<2000000; i++) { if (irrecv.decode(&results)) { SaveEEPROM(results.value); irrecv.resume(); break; } } beep(30,900); break; } count++; swt=digitalRead(button); _delay_ms(100); } ir_command=LoadEEPROM(); if (irrecv.decode(&results)) { if(ir_command==results.value) { state=~state; digitalWrite(lamp, state); beep(10,300); _delay_ms(700); } irrecv.resume(); } else if(count>1) { state=~state; digitalWrite(lamp, state); beep(10,500); _delay_ms(100); } } void SaveEEPROM(unsigned long ir_code) { EEPROM.write(0, ir_code & 0xFF); EEPROM.write(1, (ir_code & 0xFF00) >> 8); EEPROM.write(2, (ir_code & 0xFF0000) >> 16); EEPROM.write(3, (ir_code & 0xFF000000) >> 24); } unsigned long LoadEEPROM() { byte val = EEPROM.read(3); unsigned long ir_code=val; val = EEPROM.read(2); ir_code= (ir_code << 8) | val; val = EEPROM.read(1); ir_code= (ir_code << 8) | val; val = EEPROM.read(0); ir_code= (ir_code << 8) | val; return ir_code; } void beep(byte dur, word frq) { dur=(1000/frq)*dur; for(byte i=0; i<dur; i++) { digitalWrite(speaker, HIGH); _delay_us(frq); digitalWrite(speaker, LOW); _delay_us(frq); } }
コードをコンパイルするには、 IRemoteライブラリを追加する必要があります。 ライブラリは元のライブラリとは異なります。新しいSamsung LED TVプロトコルなど、さらにいくつかのプロトコルを追加したためです。
サーキットブレーカーの回路図
arduinoでデバイスをデバッグした後、将来のスイッチの最終図を描きました。 以前に書いたので、Arduinoはコードのデバッグと作成に便利なツールですが、最終的な回路では機能しません。
Atmega168コントローラーファームウェアのHexファイル
電源は携帯電話の充電器から使用できます。
電源のスキーム 。
ご質問がある場合は、喜んでお答えください。