このプロジェクトでは、PICマイクロコントローラーを使用して、IRリモコンを使用するだけでいくつかのAC負荷をリモート制御します。同様のプロジェクトIRリモート制御ホームオートメーションはArduinoでもすでに行われていますが、ここではEasyEDAのオンラインPCBデザイナーとシミュレーターを使用してPCBで設計し、PCB設計サービスを使用してPCBボードを注文しました。論文。
このプロジェクトの終わりに、通常のリモートを使用して、椅子/ベッドの快適さからAC負荷を切り替える(オン/オフ)ことができるようになります。このプロジェクトをより面白くするために、トライアックを使用してファンの速度を制御する機能も有効にしました。これらはすべて、IRリモコンをクリックするだけで実行できます。このプロジェクトでは、TV / DVD / MP3リモコンのいずれかを使用できます。リモコンからのさまざまなIR信号はマイクロコントローラーによって受信され、マイクロコントローラーはリレードライバー回路を介してそれぞれのリレーを制御します。これらのリレーは、AC負荷(ライト/ファン)の接続と切断に使用されます。
作業説明:
このプロジェクトの動作は非常に簡単に理解できます。IR Remoteのボタンを押すと、 38Khzの変調周波数を使用してエンコードされたパルスの形式で一連のコードが送信されます。これらのパルスはTSOP1738 センサーによって受信され、コントローラーによって読み取られます。次に、コントローラーは受信したパルス列を16進値にデコードし、プログラムで事前定義された16進値と比較します。
一致が発生した場合、コントローラーはそれぞれのリレー/トライアックをトリガーして相対操作を実行し、対応する結果もオンボードLEDで示されます。このプロジェクトでは、照明負荷として異なる色の4つの電球(小さな電球)を使用し、別の電球(大きな電球)はデモンストレーション目的のファンと見なされます。
キー1を選択してリレー1を切り替え、2を選択してリレー2を切り替え、3を選択してリレー3を切り替え、4を選択してリレー4を切り替え、Vol +を選択してファン速度を上げ、Vol-を選択してファンの速度を下げました。
注:ここでは、ファンの代わりに100ワットの電球を使用しています。
さまざまなデバイスで利用できるIRリモコンにはさまざまな種類がありますが、それらのほとんどは38KHzの周波数で動作します。このプロジェクトでは、IR TVリモコンを使用して家電製品を制御し、IR信号を検出するためにTSOP1738IRレシーバーを使用します。このTSOP1738センサーは、38Khz周波数信号を感知できます。IRリモートとTSOP1738の動作については、この記事で詳しく説明しています:IR送信機と受信機
当社のPICマイクロコントローラーは+ 5Vで動作し、リレーは+ 12Vで動作するため、変圧器を使用して220V ACを降圧し、フルブリッジ整流器を使用して整流します。次に、この整流されたDC電圧は、レギュレータIC7812および7805をそれぞれ使用して+ 12Vおよび+ 5Vに調整されます。
リレーをトリガーするために、PICマイクロコントローラーからの信号に基づいてリレーをオン/オフする電子スイッチとして機能できるBC547のようなトランジスタを使用します。さらに、ファンの速度を制御するために、トライアックを使用しています。トライアックは、出力電圧を制御できるパワー半導体です。この機能は、ファンの速度を制御するために使用されます。
また、PICマイクロコントローラーを使用してトライアックを制御するためにトライアックドライバーを使用しました。このドライバーは、トライアックに発射角度パルスを与えるために使用され、出力電力を制御できます。ここでは、6レベルの速度制御を使用しました。レベルが0の場合、ファンはオフになります。レベルが1になると、速度はフルスピードの1/5になります。レベルが2になると、速度はフルスピードの2/5になり、他の場合はそれぞれになります。速度の現在のレベルは、オンボードの7セグメントディスプレイを使用して監視できます。
プロジェクトのブロック図を以下に示します。
コンポーネント:
このプロジェクトの構築に必要なコンポーネントを以下に示します。
- PIC18f2520マイクロコントローラー-1
- TSOP1738 -1
- IR TV / DVDリモート-1
- トランジスタBC547-4
- リレー12ボルト-4
- ホルダー付き電球-5
- 接続線-
- EasyEda PCB -1
- 16x2 LCD
- 電源12v
- 端子コネクタ2ピン `-8
- 端子コネクタ3ピン-1
- 変圧器12-012-1-1-
- 電圧レギュレータ7805-1
- 電圧レギュレータ7812-1
- コンデンサ1000uf-1
- コンデンサ10uf-1
- コンデンサ0.1uf-1
- コンデンサ0.01uf400V `-1
- 10k -5
- 1k -5
- 100オーム-7
- 共通カソードセグメント-1
- 1n4007ダイオード-10
- BT136トライアック-1
- 男性/女性ヘッダー-
- LED -6
- オプトカプラーmoc3021-1
- オプトカプラーmtc2eまたは4n35-1
- 20Mhzクリスタル-1
- 33pfコンデンサ-2
- 5.1vツェナーダイオード-1
- 47オーム2ワット抵抗-1
これらのコンポーネントはすべて一般的に使用されており、簡単に購入できます。ただし、オンラインでベストバイを探している場合は、LCSCをお勧めします。
LCSCは、あらゆる種類のプロジェクトの電子部品を購入するのに最適なオンラインストアです。約25,000種類の部品が特徴で、小さなプロジェクトでも少量でも販売でき、グローバル配送も可能です。
IRリモートのデコード:
前に述べたように、プロジェクトにはあらゆる種類のリモートを使用できます。しかし、その特定のリモートからどのような種類の信号が生成されるかを知る必要があります。リモート上の個々のキーごとに、そのキーと同等のHEX値があります。このHEX値を使用して、マイクロコントローラー側の各キーを区別できます。したがって、リモートを使用することを決定する前に、その特定のリモートでプリセットされているキーのHEX値を知っておく必要があります。このプロジェクトでは、NECリモコンを使用しました。NECリモコンのキーのHEX値を以下に示します。
HEX値には7文字があり、最後の2文字だけが異なることがわかります。したがって、各キーを区別するために最後の2桁のみを考慮することができます。
回路図:
プロジェクトの概略図を以下に示します。
上記の回路図は、このプロジェクトで使用されるすべてのコンポーネントのレイアウトを提供するため、esayEDA回路図エディターを使用して簡単に作成できました。また、インストールを必要とせず、外出先でオンラインで使用できます。
ピン配置とコンポーネント値は、上の回路図で明確に指定されています。回路図ファイルはこちらからダウンロードすることもできます。
プログラミング:
このプロジェクトのプログラムはMPLABXを使用して実行され、コードも非常にシンプルで理解しやすいものです。完全なコードはこのチュートリアルの最後にあります。プログラムのさらにいくつかの重要なチャンクについて以下で説明します。
コードの最初に、必要なライブラリを含め、ピンを定義し、変数を宣言する必要があります。
#include
その後、「for」ループを使用して単純な遅延関数を作成しました。
void delay(int time){for(int i = 0; i
その後、以下の関数を使用してタイマーを初期化しました
void timer()// 10-> 1us {T0PS0 = 0; T0PS1 = 0; T0PS2 = 0; PSA = 0; //タイマークロックソースはプリスケーラーからのものですT0CS = 0; //プリスケーラはFCPU(5MHz)からクロックを取得しますT08BIT = 0; // 16ビットモードTMR0IE = 1; // TIMER0割り込みを有効にするPEIE = 1; //ペリフェラル割り込みを有効にするGIE = 1; // INTをグローバルに有効にするTMR0ON = 1; //タイマーを開始します!}
これでmain関数で、選択したピンに指示を与え、タイマーと外部割り込みint0を初期化してゼロ交差を検出しました。
ADCON1 = 0b00001111; TRISB1 = 0; TRISB2 = 1; TRISB3 = 0; TRISB4 = 0; TRISB5 = 0; TRISC = 0x00; TRISA = 0x00; PORTA = 0xc0; TRISB6 = 0; RB6 = 1; Relay1 = 0; Relay2 = 0; Relay3 = 0; Relay4 = 0; rly1LED = 0; rly3LED = 0; rly2LED = 0; rly4LED = 0; fanLED = 0; i = 0; ir = 0; tric = 0; タイマー(); INTEDG0 = 0; //立ち下がりエッジで割り込みINT0IE = 1; // INT0外部割り込み(RB0)を有効にしますINT0IF = 0; // INT0外部割り込みフラグビットをクリアしますPEIE = 1; //ペリフェラル割り込みを有効にするGIE = 1; // INTをグローバルに有効にする
ここでは、IR信号を検出するために割り込みまたはキャプチャおよび比較モードを使用していません。ここでは、プッシュボタンを読み取るのと同じように、デジタルピンを使用してデータを読み取りました。信号がハイまたはローになるたびに、デバウンスメソッドを配置してタイマーを実行します。ピンがその状態を別の状態に変更するたびに、時間値が配列に保存されます。
IRリモート送信ロジック0は562.5us、ロジック1は2250usです。タイマーが約562.5usを読み取るときは常に、それを0と見なし、タイマーが約2250usを読み取るときは、それを1と見なします。
リモートからの着信信号には34ビットが含まれています。すべてのバイトを配列に格納してから、使用する最後のバイトをデコードします。
while(ir == 1); INT0IE = 0; while(ir == 0); TMR0 = 0; while(ir == 1); i ++; dat = TMR0; if(dat> 5000 && dat <12000){} else {i = 0; INT0IE = 1; } if(i> = 33){GIE = 0; delay(50); cmd = 0; for(j = 26; j <34; j ++){if(dat> 1000 && dat <2000)cmd << = 1; else if(dat> 3500 && dat <4500){cmd- = 0x01; cmd << = 1; }} cmd >> = 1;
上記のコードは、タイマー割り込みを使用してIR信号を受信およびデコードし、対応するHEX値を変数cmdに格納します。これで、このHEX値(cmd変数)を事前定義されたHEX値と比較し、以下に示すようにリレーを切り替えることができます。
if(cmd == 0xAF){relay1 = 〜relay1; rly1LED = 〜rly1LED; } else if(cmd == 0x27){relay2 = 〜relay2; rly2LED = 〜rly2LED; } else if(cmd == 0x07){relay3 = 〜relay3; rly3LED = 〜rly3LED; } else if(cmd == 0xCF){relay4 = 〜relay4; rly4LED = 〜rly4LED; } else if(cmd == 0x5f){speed ++; if(speed> 5){speed = 5; }} else if(cmd == 0x9f){速度-; if(speed <= 0){speed = 0; }}
現在、どのファンが動作しているかを知るために、7セグメントディスプレイを使用する必要があります。次の行は、7セグメントディスプレイのピンを指示するために使用されます。
if(speed == 5)//オフ5x2 = 10msトリガー// speed 0 {PORTA = 0xC0; // 0を表示RB6 = 1; fanLED = 0; } else if(speed == 4)// 8ミリ秒トリガー//速度1 {PORTA = 0xfc; // 1を表示RB6 = 1; fanLED = 1; } else if(speed == 3)// 6ミリ秒トリガー//速度2 {PORTA = 0xE4; // 2を表示RB6 = 0; fanLED = 1; } else if(speed == 2)// 4msトリガー//速度3 {PORTA = 0xF0; // 3を表示RB6 = 0; fanLED = 1; } else if(speed == 1)// 2msトリガー//速度4 {PORTA = 0xD9; // 4を表示RB6 = 0; fanLED = 1; } else if(speed == 0)// 0msトリガー//速度5フルパワー{PORTA = 0xD2; // 5を表示RB6 = 0; fanLED = 1; }
以下の関数は、外部割り込みと時間オーバーフロー用です。この機能は、ゼロ交差を検出し、トライアックを駆動する役割を果たします。
ボイド割り込みisr(){if(INT0IF){delay(speed); tric = 1; for(int t = 0; t <100; t ++); tric = 0; INT0IF = 0; } if(TMR0IF)// TMR0オーバーフローISRであるかどうかを確認します{TMR0IF = 0; }}
このIRリモートコントロールホームオートメーションの最終的なPCBは、 次のようになります。
EasyEDAを使用した回路およびPCB設計:
このリモートコントロールホームオートメーションを設計 するために、回路とPCBをシームレスに作成するための無料のオンラインEDAツールであるEasyEDAを使用しました。以前、EasyEDAにいくつかのPCBを注文しましたが、回路の描画からPCBの注文までのプロセス全体が、他のPCB製造業者と比較してより便利で効率的であることがわかったため、引き続きサービスを使用しています。 EasyEDAは、回路図、シミュレーション、PCB設計を無料で提供し、高品質でありながら低価格のカスタマイズされたPCBサービスも提供します。 Easy EDAを使用して回路図、PCBレイアウト、回路のシミュレーションなどを作成する方法に関する完全なチュートリアルについては、こちらを確認してください。
EasyEDAは日々改善されています。彼らは多くの新機能を追加し、全体的なユーザーエクスペリエンスを改善しました。これにより、EasyEDAは回路の設計に簡単に使用できるようになります。彼らはまもなくデスクトップバージョンをリリースする予定です。デスクトップバージョンはダウンロードしてコンピュータにインストールし、オフラインで使用できます。
EasyEDAでは、回路とPCBの設計を公開して、他のユーザーがそれらをコピーまたは編集して、そこから利益を得ることができるようにすることができます。また、このリモートコントロールホームオートメーション用に回路とPCBのレイアウト全体を公開しました 。
以下は、EasyEDAからのPCBレイアウトのトップレイヤーのスナップショットです。「レイヤー」ウィンドウからレイヤーを選択することにより、PCBの任意のレイヤー(トップ、ボトム、トップシルク、ボトムシルクなど)を表示できます。
オンラインでのPCBサンプルの計算と注文:
PCBの設計が完了したら、 製造出力 のアイコンをクリック すると、PCB注文ページが表示されます。ここでは、Gerber ViewerでPCBを表示したり、PCBのGerberファイルをダウンロードして任意のメーカーに送信したりできます。また、EasyEDAで直接注文する方がはるかに簡単(かつ安価)です。ここでは、注文するPCBの数、必要な銅層の数、PCBの厚さ、銅の重量、さらにはPCBの色を選択できます。すべてのオプションを選択したら、[カートに保存]をクリックして注文を完了すると、数日以内にPCBが届きます。
このPCBを直接注文するか、このリンクを使用してガーバーファイルをダウンロードできます。
PCBを注文して数日後、PCBを入手しました。いただいたボードは以下のとおりです。
PCBを受け取ったら、必要なすべてのコンポーネントをPCBに取り付け、最後に IRリモート制御ホームオートメーションの 準備ができました。記事の最後にあるデモビデオでこの回路が機能していることを確認してください。