工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

古いリモコンを再利用する

コンポーネントと消耗品

>
Arduino Nano R3
× 1
5 mm LED:赤
ステータスLED用に1つの赤い色、その後は色はそれほど重要ではありません。どちらがアクティブかを識別できます。
× 3
5 mm LED:緑
色はそれほど重要ではありません。アクティブな色を識別できる必要があります
× 1
5 mm LED:黄色
色はそれほど重要ではありません。アクティブな色を識別できる必要があります
× 1
青色LED
色はそれほど重要ではありません。アクティブな色を識別できる必要があります
× 2
無はんだブレッドボードフルサイズ
× 1
ジャンパー線(汎用)
× 1
スイッチの切り替え、(オフ)-オン
どのSPSTトグルスイッチでも機能します
× 1
SparkFunブレッドボード電源スティック5V / 3.3V
別のソースから5ボルトを供給できる場合、またはコンピューターのUSB接続から使用している場合はオプション、
× 1
IRレシーバー(汎用)
Amazonから入手したKY-02237.9KHz赤外線センサーレシーバーを使用しました
× 1

このプロジェクトについて

このプロジェクトでは、古いVCR、テレビ、DVDプレーヤーなどの余ったリモコンを再利用できます。

<図>

リモートを使用して、リレー、パワートランジスタ、または5ボルトの信号で制御できるその他のものを備えたランプやヒーターなどのデバイスをオンにすることができます。ここに示すように、最大​​6つのLEDを切り替えるだけです。アイデアは、LEDに送信される信号をユーザーが想像するものと並行して送信できるように、スケッチとブレッドボードのレイアウトを提供することです。

<図>

設計どおり、リモコンから6つのIRコードを読み取り、それらを「記憶」します。私はdights1、2、3、4、5、6を使用するのが好きですが、6つのキーならどれでも機能します。 6つの既知のコード以外のIRコードを持つ他のキーはリセットとして機能し、すべての出力をオフに設定することに注意してください。これは、コードを長整数としてArdunioボードのEEPROMメモリに書き込むことで実現します。それぞれ4バイトかかりますが、UNOとNANOにはそれぞれ1024バイトのEEPROMメモリがあるため、十分なスペースがあります。このメモリは、予想どおり、リセットと電源オフの間保持されます。トグルスイッチを除いて、すべてが1つのブレッドボードに収まります。このスイッチにピンをはんだ付けして、ブレッドボードに含めることができます。私は怠惰で、開発中はテープを使って机の上に置いていました。

私は5つの異なる古い余剰のものでそれを試しました、そしてそれらはすべて同じように機能します。私が苦労した「落とし穴」は、いくつかのリモコンからの迷光または弱い信号でした。これを解決するために、レシーバー「LED」を慎重に約45度下に曲げ、その上に小さな自家製の段ボールとテープボックスを置き、一方の端を開きました。それは一貫してそして5-8フィート以上離れたところからコードを捕らえるようです。プログラムのテストと調整を5日間以上行っても、見逃すことはありません。

<図>

<図>

それをプログラムするには、「学習」位置を使用します。トグルスイッチを押すと、「実行」モードから「学習」モードに移行します。このトグルは、聞く準備ができていることを示す赤いモードインジケーターLEDをオンにします。 LED 1が点滅し、リモコンのキーを押します。点滅するLED1は、そのコードに反応するようにプログラムされています。コードを認識するとすぐに、モードインジケータLEDが1〜2秒間すばやく点滅し(振動しているように見えます!)、次のLEDに進みます。これは、6つすべてがプログラムされるまで続きます。次に、モードインジケータLEDが1秒間隔でゆっくり点滅し、システムを実行モードに切り替える必要があることを示します。

それをプログラミングしたとき、最も一般的な間違いは、リモートの次の桁に指を移動するのを忘れることであることがわかりました。したがって、同じコードで2つの出力をプログラムするのは簡単です。起動するたびに、そのような重複を探します。それらが見つかると、「問題のある」LEDが数回点滅して、再プログラミングが必要な可能性があることを示します。ただし、複数のキーで同じことを実行したい場合があるため、再プログラミングを強制することはありません。

モードステータス、エラーなどは、REDステータスLEDの点滅速度で示されます。 LEDの点滅などで示された情報はすべてシリアルモニターに送信されます。ユーザーがコンピューターなしでセットアップできるように、フラッシュのLEDシーケンスを使用するようにセットアップしました。シリアルモニターに送信されるメッセージは、さまざまな速度でLEDが点滅することの意味を覚えるよりも簡単です。これは通常、数回しかプログラムされないため、PCに接続して、シリアルモニターでテキストを見る方が自然です。

スケッチコードには多くのチェックとバランスがあります。それらは十分に文書化されているので(私は願っています!)、ここでは詳細を説明しません。 C、C ++、およびArduino IDEに精通しているユーザーは、コードを簡単にたどり、必要に応じて変更を加えることができるはずです。

補遺: 私はこれをLED1から5と並列の5つのリレーでテストしましたが、期待どおりに機能します。それらはすべて120VACテーブルランプを切り替えるので、回路は期待どおりに機能します。リレーが足りなくなったので、6番目の信号も機能すると想定する必要があります。これは概念実証にすぎないことに注意してください。最初の4つの出力の信号は、5ボルトではなく0ボルトで閉じるため、CD4011クワッドNANDゲートで反転する必要がありました。単一のリレーは+5ボルトの信号で動作するため、信号の反転は必要ありませんでした。 主電源電圧の切り替えには注意してください。それらは高電圧であり、ひどい衝撃を与えたり、殺したりする可能性があります!

これは単なる例であることを忘れないでください。 6つの出力に接続するデバイスについて想像力を働かせてください。お楽しみください!

<図>

<図>

<図>

コード

  • IRリモート転用スケッチ
IRリモート転用スケッチ Arduino
 / * IRリモコンを使用して6つのLEDを切り替えて、ほとんどすべてのデバイスの制御に使用できるように、surpulusリモコンを再利用する方法を示します。このスケッチは、トグルスイッチが「学習」またはプログラム位置にあるときに、任意のIRリモコンの1、2、3、4、5、6、および0ボタンの製造元のコードを学習します。これらの値は、ArduinoNanoのEEPROMに保存されます。トグルスイッチが「実行」モードになっている場合、これらの値は、どのキーが押されたかを判別するために使用されます。次に、6つの関連するLEDがリモコンによってオンとオフに切り替えられます。これは、IRリモコンのタイプに関係なく、コードを学習して使用する方法を示すためのものです。 LEDに加えて、出力を拡張して、リレー、高出力トランジスタなどを備えたデバイスをオンまたはオフにすることができます。 Paul M Dunphy VE1DX 2020年3月* / // Ken Shirriffによって開発されたIRリモートライブラリを含める#include  // 1024バイトのEEPROM#include  long unsignedintの読み取り/書き込み機能を提供しますintIRCode; long unsigned int savedIRCodes [6]; long unsigned int dupeCheck [6]; // IRセンサーのピンを定義しますconstint Recv_Pin =2; //ピン定数を定義してLEDを切り替えますconstint PinOne =12; const int PinTwo =11; const int PinThree =10; const int PinFour =9; const int PinFive =8; const int PinSix =7; //実行/学習トグルスイッチのステータスを読み取り、示すピン定数を定義します。constintswitchPin =4; const int statusPin =5; const unsigned long int repeatKeyPress =0xFFFFFFFF; boolean learnMode; //トグルスイッチに従って//どのモードにあるかを追跡するために使用されます。booleanfirst_iteration; //各LEDのトグル状態を記憶する整数を定義します。 // IRレシーバーと結果オブジェクトを定義IRrecvirrecv(Recv_Pin); decode_results results; void EEPROMWritelong(int address、long value)// 4バイト(32ビット)長整数をEEPROMに書き込みます//これらは4バイト長なので、 //アドレスからアドレス+3に格納{//ビットシフトを使用して長整数を4バイトに分解します。 // 1 =最上位-> 4 =最下位バイトバイト4 =(value&0xFF);バイト3 =((値>> 8)&0xFF);バイト2 =((値>> 16)&0xFF);バイト1 =((値>> 24)&0xFF); EEPROM.write(アドレス、4); EEPROM.write(アドレス+ 1、3); EEPROM.write(アドレス+ 2、2); EEPROM.write(アドレス+ 3、1); } long EEPROMReadlong(long address)// EEPROMから4バイト(32ビット)の長整数を読み取ります。//これらは4バイト長であるため、//アドレスからアドレス+ 3 {long four =EEPROM.read(住所); long three =EEPROM.read(address + 1); long two =EEPROM.read(address + 2);長いもの=EEPROM.read(address + 3); //バイトを長整数にアセンブルし、return((four <<0)&0xFF)+((three <<8)&0xFFFF)+((two <<16)&0xFFFFFF)+((one <<24)&repeatKeyPress); } int Flip_LED(int led、int toggle_state){if(toggle_state ==0){digitalWrite(led、HIGH); toggle_state =1; } else {digitalWrite(led、LOW); toggle_state =0; } return toggle_state; } void Reset(){//すべてのLEDをオフにし、トグルフラグを//オフに設定します(0)digitalWrite(PinOne、LOW); digitalWrite(PinTwo、LOW); digitalWrite(PinThree、LOW); digitalWrite(PinFour、LOW); digitalWrite(PinFive、LOW); digitalWrite(PinSix、LOW);トグルステート1 =0;トグルステート2 =0;トグルステート3 =0;トグルステート4 =0;トグルステート5 =0;トグルステート6 =0; } voidguessType(){Serial.print( "リモートは"); switch(results.decode_type){case NEC:Serial.println( "NEC");壊す;ケースSONY:Serial.println( "SONY");壊す;ケースRC5:Serial.println( "RC5");壊す;ケースRC6:Serial.println( "RC6");壊す;ケースDISH:Serial.println( "DISH");壊す;ケースSHARP:Serial.println( "SHARP");壊す;ケースJVC:Serial.println( "JVC");壊す;ケースSANYO:Serial.println( "SANYO");壊す;ケースMITSUBISHI:Serial.println( "MITSUBISHI");壊す;ケースSAMSUNG:Serial.println( "SAMSUNG");壊す;ケースLG:Serial.println( "LG");壊す;ケースWHYNTER:Serial.println( "WHYNTER");壊す;ケースAIWA_RC_T501:Serial.println( "AIWA_RC_T501");壊す;ケースPANASONIC:Serial.println( "PANASONIC");壊す;ケースDENON:Serial.println( "DENON");壊す;デフォルト:case UNKNOWN:Serial.println( "UNKNOWN");壊す; }} int learnCodeRead(int pinCode){if(irrecv.decode(&results)){pinCode =results.value; } return pinCode; } void Confirm(){int i; for(i =0; i <=20; i ++){digitalWrite(statusPin、HIGH); delay(50); digitalWrite(statusPin、LOW); delay(50); } digitalWrite(statusPin、HIGH); //「Learn」LEDをハイのままにします} void learn_Mode(){boolean goodCode; int i、j; intの場所; intピン[6] ={12,11,10,9,8,7}; //それぞれを順番にリッスンし始めますif(first_iteration){Serial.println(); Serial.println( "学習モードに入る"); Serial.println(); } intIRCode =0;場所=0; goodCode =true; j =0; while((goodCode =true)and(j <=5)){for(i =0; i <=25; i ++){digitalWrite(pins [j]、HIGH); delay(200); intIRCode =learnCodeRead(intIRCode); digitalWrite(pins [j]、LOW); delay(200); intIRCode =learnCodeRead(intIRCode); goodCode =((intIRCode!=repeatKeyPress)and(intIRCode!=0)); if(goodCode){i =30; // 'break'は//ループでは機能しないため、ループから抜け出すためのトリック} irrecv.resume(); //リッスンを再開します} goodCode =(intIRCode!=repeatKeyPress and intIRCode!=0); if(goodCode){if(j ==0){guessType(); } Serial.print( "EEPROMの場所への書き込み"); Serial.print(location); Serial.print( "IR code ="); Serial.println(intIRCode、HEX); EEPROMWritelong(location、intIRCode);場所=場所+4; j ++;確認(); intIRCode =0; irrecv.resume(); //リッスンを再開します}} Serial.println(); Serial.println( "Arduinoを実行モードに戻します。"); while(digitalRead(switchPin)==HIGH){digitalWrite(statusPin、HIGH); delay(1000); digitalWrite(statusPin、LOW); delay(1000); } Serial.println(); Serial.println( "実行モードに戻ります。"); //ここではおそらくそれほど大胆である必要はありませんが、//これは「リセット」であり、//学習モードから抜け出して適切に再起動します。 //次の4行を削除しても問題ありません。 delay(50); Serial.flush(); delay(50); asm volatile( "jmp 0"); } void run_Mode(){if(first_iteration){Serial.println( "実行モードに入る"); } if(irrecv.decode(&results)){if(results.value!=repeatKeyPress){current_remote_code =results.value; Serial.print( "キーの押下が検出されました、IRコード="); Serial.println(current_remote_code、HEX); if(current_remote_code ==remote_code_1){togglestate1 =Flip_LED(PinOne、togglestate1); } else if(current_remote_code ==remote_code_2){togglestate2 =Flip_LED(PinTwo、togglestate2); } else if(current_remote_code ==remote_code_3){togglestate3 =Flip_LED(PinThree、togglestate3); } else if(current_remote_code ==remote_code_4){togglestate4 =Flip_LED(PinFour、togglestate4); } else if(current_remote_code ==remote_code_5){togglestate5 =Flip_LED(PinFive、togglestate5); } else if(current_remote_code ==remote_code_6){togglestate6 =Flip_LED(PinSix、togglestate6); } else {Reset(); }} delay(500); //ボタンが押されている場合に//データの高速文字列を回避するために使用されます。 //ループにラグを導入することにより、応答時間を遅くします。 irrecv.resume(); //リッスンを再開します}} void setup(){first_iteration =true; int i、j、k; intの場所; int dupeFlash [6] ={12,11,10,9,8,7}; //ピン番号を点滅させる//重複が見つかった場合Serial.begin(9600); irrecv.enableIRIn(); // IRレシーバーを有効にする/ *コードの次のセクションでEEPROMをリセットする必要はありません。 *ただし、一部の新しい既製のNANOは、EEPROMがFFFFFFFFに設定された状態で表示されます。これは、キーが押されたときに*多くのIRリモコンによって送信されるコードです。このスケッチは、いくつかの場所でそのコードをチェックします*。「キー」に16進数のFFFFFFFFが割り当てられていると、正しく機能しません。 *この落とし穴を防ぐために、FFFFFFFFをチェックし、見つかった場合は、* 6つの主要な場所をSonyRM-YD104コードに設定します。これが発生した場合、その特定のリモートを使用していない限り、スケッチを「学習」モードで実行して初期化する必要があります。 * /// =============新しいArduinoを開始==================ブール値defaultToSony =false; long unsigned int IRCode =0;場所=0; for(i =0; i <=5; i ++){IRCode =EEPROMReadlong(location); if(IRCode ==repeatKeyPress){defaultToSony =true; }場所=場所+4; } if(defaultToSony){Serial.println( "HEX FFFFFFFFがEEPROMメモリで見つかりました。設定コード"); Serial.println( "Sony RM-YD104リモートの場合。「学習」モードを今すぐ実行中"); Serial.println( "お持ちのリモートでない限り、お勧めします。"); EEPROMWritelong(0、0x10); delay(50); EEPROMWritelong(4、0x810); delay(50); EEPROMWritelong(8、0x410); delay(50); EEPROMWritelong(12、0xC10); delay(50); EEPROMWritelong(16、0x210); delay(50); EEPROMWritelong(20、0xA10); delay(50); } // =============End New Arduino ==================// LEDピンを出力として設定pinMode(PinOne、OUTPUT); pinMode(PinTwo、OUTPUT); pinMode(PinThree、OUTPUT); pinMode(PinFour、OUTPUT); pinMode(PinFive、OUTPUT); pinMode(PinSix、OUTPUT); Reset(); //すべてオフで開始しますpinMode(statusPin、OUTPUT); pinMode(switchPin、INPUT); //最後に使用されたリモートSerial.println();からコードを取得しますSerial.println( "保存されたIRリモートコードの読み取り...");場所=0; for(j =0; j <=5; j ++){savedIRCodes [j] =EEPROMReadlong(location); Serial.print( "EEPROMの場所からの読み取り"); Serial.print(location); Serial.print( "IR code ="); Serial.println(savedIRCodes [j]、HEX);場所=場所+4; dupeCheck [j] =savedIRCodes [j]; //重複チェックのためにコピーを保存します} //出力に割り当てられた//連続した重複コードを探します。 //発生する可能性が低いため、全体的な重複は検索しません。経験によれば、//プログラミング中に、最も可能性の高い間違いは、// bacl-to-backLEDで同じキーを2回押すことです。 //重複が見つかった場合は、疑わしいLEDを点滅させてこれを示します。 // LEDは6つしかないため、重複を見つけるのに// 21回の比較しか必要ありません(6 + 5 + 4 + 3 + 2 + 1 =21)。このセクションは、//配列を最初にソートするなどして、重複を探すように拡張できます。for(i =0; i <5-1; i ++){for(j =i + 1; j <6; j ++ ){if(dupeCheck [i] ==dupeCheck [j]){Serial.println( "重複するコードが見つかりました。学習モードの再実行を提案してください"); for(k =0; k <=5; k ++){digitalWrite(dupeFlash [i]、HIGH); digitalWrite(dupeFlash [j]、HIGH); delay(1000); digitalWrite(dupeFlash [i]、LOW); digitalWrite(dupeFlash [j]、LOW); delay(1000); }}}} remote_code_1 =savedIRCodes [0]; remote_code_2 =savedIRCodes [1]; remote_code_3 =savedIRCodes [2]; remote_code_4 =savedIRCodes [3]; remote_code_5 =savedIRCodes [4]; remote_code_6 =savedIRCodes [5]; delay(1000); Serial.println( "保存されたコードが読み取られました。"); Serial.println(); } void loop(){//トグルがオンかオフかを確認します。オンの場合(学習モード)// switchPinはHIGHです:learnMode =(digitalRead(switchPin)==HIGH); if(learnMode){first_iteration =true; Reset(); digitalWrite(statusPin、HIGH); //学習モードLEDをオンにします:learn_Mode(); Reset(); first_iteration =false; } else {digitalWrite(statusPin、LOW); //学習モードLEDをオフにします:run_Mode(); first_iteration =false; }} 

回路図


製造プロセス

  1. 発光ダイオード(LED)
  2. RaspberryPiを使用した天気のリモートモニタリング
  3. ラズベリーパイユニバーサルリモコン
  4. リモート心拍数モニター
  5. 棺ダンスメロディー
  6. 古い電話をリモートスイッチに変換する
  7. 1つのLEDを使用して画像を作成する
  8. 音による8倍のLED照明
  9. Arduino Quadruped
  10. コントロールプラットフォームを選択するための上位5つの要素
  11. 古い機械を安全に処分する方法