みなさん、こんにちは。今日このプロジェクトでは、RFレシーバーおよびトランスミッターモジュールをPICマイクロコントローラーとインターフェースし、2つの異なるPICマイクロコントローラー間でワイヤレスで通信します。
このプロジェクトでは、次のことを行います。-
- 送信機にはPIC16F877Aを、受信機にはPIC18F4520を使用します。
- キーパッドとLCDをPICマイクロコントローラーと接続します。
- 送信機側では、キーパッドをPICと接続し、データを送信します。受信側では、ワイヤレスでデータを受信し、LCDでどのキーが押されたかを示します。
- エンコーダとデコーダICを使用して4ビットデータを送信します。
- 市場で入手可能な安価なRFTX-RXモジュールを使用すると、受信周波数は433Mhzになります。
回路図とコードに入る前に、エンコーダーデコーダーICを備えたRFモジュールの動作を理解しましょう。また、LCDとキーパッドをPICマイクロコントローラーとインターフェースする方法については、以下の2つの記事を参照してください。
- MPLABXとXC8を使用したPICマイクロコントローラとのLCDインターフェース
- PICマイクロコントローラーとインターフェースする4x4マトリックスキーパッド
433MHz RF送信機および受信機モジュール:
これらは、プロジェクトで使用している送信機モジュールと受信機モジュールです。これは、433 MHzで利用可能な最も安価なモジュールです。これらのモジュールは、1つのチャネルでシリアルデータを受け入れます。
モジュールの仕様を見ると、送信機の定格は入力電圧として3.5〜12V で、送信距離は20〜200メートルです。AM(Audio Modulation)プロトコルで433MHzの周波数で送信します。10mWの電力で4KB / Sの速度でデータを転送できます。
上の画像では、送信機モジュールのピン配列を見ることができます。左から右に、ピンはVCC、DATA、およびGNDです。アンテナを追加して、上の画像に示されているポイントにはんだ付けすることもできます。
以下のためにレシーバー仕様で、レシーバはの評価がある現在の5V DCおよび4MA静止入力としてを。受信周波数は433.92 MHzで有する-105DBの感度。
上の画像では、レシーバーモジュールのピン配列を確認できます。4つのピンは、左から右、VCC、DATA、DATA、およびGNDです。これらの真ん中の2つのピンは内部で接続されています。どちらか一方または両方を使用できます。ただし、ノイズ結合を下げるために両方を使用することをお勧めします。
また、データシートに記載されていないことが1つあります。モジュールの中央にある可変インダクタまたはPOTは、周波数校正に使用されます。送信データを受信できなかった場合は、送信周波数と受信周波数が一致していない可能性があります。これはRF回路であり、送信機を完全な送信周波数ポイントに調整する必要があります。また、送信機と同じように、このモジュールにもアンテナポートがあります。ワイヤーをコイル状にはんだ付けして、より長く受信することができます。
送信範囲は、送信機に供給される電圧と両側のアンテナの長さに依存します。この特定のプロジェクトでは、外部アンテナを使用せず、送信機側で5Vを使用しました。私たちは5メートルの距離でチェックしました、そしてそれは完全に働きました。
RFモジュールは、長距離無線通信に非常に役立ちます。基本的なRF送信機と受信機の回路をここに示します。RFモジュールを使用して多くのプロジェクトを作成しました。
- RF制御家電
- Arduinoを使用したBluetooth制御のおもちゃの車
- RaspberryPiを使用したRFリモート制御LED
エンコーダーとデコーダーの必要性:
このRFセンサーにはいくつかの欠点があります:-
- 一方向のコミュニケーション。
- 1つのチャネルのみ
- 非常にノイズの干渉。
この欠点のため、エンコーダーおよびデコーダーIC、HT12DおよびHT12Eを使用しました。Dは受信機側で使用されるデコーダーを表し、Eは送信機側で使用されるエンコーダーを表します。このICは4つのチャネルを提供します。また、エンコードとデコードにより、ノイズレベルは非常に低くなります。
上の画像では、左側がデコーダーのHT12Dで、右側がエンコーダーのHT12Eです。両方のICは同一です。A0からA7は、特別なエンコードに使用されます。マイクロコントローラーのピンを使用して、これらのピンを制御し、構成を設定できます。同じ構成を反対側で一致させる必要があります。両方の構成が正確で一致している場合、データを受信できます。これらの8ピンは、GndまたはVCCに接続するか、開いたままにすることができます。エンコーダーでどのような構成を行う場合でも、デコーダーの接続を一致させる必要があります。このプロジェクトでは、エンコーダーとデコーダーの両方でこれらの8ピンを開いたままにします。 9ピンと18ピンはそれぞれVSSとVDDです。VTピンはで使用できます通知目的としてのHT12D。このプロジェクトでは使用しませんでした。TEピンは、送信イネーブルまたはディセーブルピンのためのものです。
重要な部分は、抵抗を接続する必要があるOSCピンであり、エンコーダとデコーダに発振を提供することです。デコーダーはデコーダーよりも高い発振を必要とします。通常、エンコーダ抵抗値は1Megで、デコーダ値は33kです。これらの抵抗をプロジェクトに使用します。
DOUTのピンにRFトランスミッタ・データ・ピンでHT12E及びDINにピンHT12Dは、 RFモジュールのデータ端子を接続するために使用されます。
HT12E、 AD8にAD11は、変換及び直列RFモジュールを介して送信され、正確な逆の事がで起こるなる4つのチャネル入力さHT12D、受信され復号シリアルデータ、及び我々が取得D11〜4本のピンD8を横切る4ビットパラレル出力を。
必要なコンポーネント:
- 2-ブレッドボード
- 1-LCD 16x2
- 1 –キーパッド
- HT12DとHT12Eのペア
- RX-TXRFモジュール
- 1〜10Kプリセット
- 2 –4.7k抵抗
- 1〜1M抵抗
- 1-33k抵抗
- 2-33pFセラミックコンデンサ
- 1〜20Mhzクリスタル
- バーグスティック
- 一本鎖線はほとんどありません。
- PIC16F877A MCU
- PIC18F4520 MCU
- 周波数ポットを制御するためのドライバーは、人体から絶縁する必要があります。
回路図:
送信機側の回路図(PIC16F877A):
送信にはPIC16F877Aを使用しました。六角キーパッドの両端に接続されPORTBと4つのチャネルの最後の4ビットの両端に接続されPORTD。4x4 Matrixキーパッドの接続について詳しくは、こちらをご覧ください。
次のようにピン留めします-
1. AD11 = RD7
2. AD10 = RD6
3. AD9 = RD5
4. AD8 = RD4
受信機側の回路図(PIC18F4520):
上の画像では、レシーバー回路が示されています。LCDを横切って接続されているPORTB。このプロジェクトでは、PIC18F4520の内部発振器を使用しました。4つのチャネルは、我々が送信回路に以前と同じように接続されています。16x2 LCDとPICマイクロコントローラーの接続について詳しくは、こちらをご覧ください。
これは送信機側です-
そして、別のブレッドボードのレシーバー側-
コードの説明:
コードには2つの部分があります。1つは送信機用で、もう1つは受信機用です。ここから完全なコードをダウンロードできます。
RF送信機のPIC16F877Aコード:
いつものように、最初に、PICマイクロコントローラーで構成ビットを設定し、ライブラリや水晶周波数を含むいくつかのマクロを定義する必要があります。AD8-AD11のエンコーダICのポートは次のように定義されRF_TXでPORTD。最後に示した完全なコードで、それらすべてのコードを確認できます。
void system_init( void) と void encode_rf_sender(char data)の 2つの関数を使用しました 。
system_initは、 ピンの初期化とキーボードの初期化のために使用されます。キーボードの初期化は、キーパッドライブラリから呼び出されます。
キーパッドポートは、keypad.hでも定義されています。私たちは作っPORTDを使用して、出力としてTRISD = 0x00のを、と作っRF_TX用としてポートを0x00のデフォルトの状態として。
void system_init(void){ TRISD = 0x00; RF_TX = 0x00; Keyboard_initialization(); }
encode_rf_sender では、 押されたボタンに応じて4ピンの状態を変更しました。(4x4)16の異なるボタンが押されたことに応じて、16の異なる 16進値または PORTD状態 を作成しました 。void encode_rf_sender(char data){ if(data == '1') RF_TX = 0x10; if(data == '2') RF_TX = 0x20; if(data == '3') ……………。.. …。…。
主 機能は、まずキーボードボタンを使用してデータを押下受信 switch_press_scan() 関数とにデータを格納鍵変数。その後、私たちは使用してデータをエンコードしている encode_rf_sender() 関数と変更PORTDの状態を。
RF受信機のPIC18F4520コード:
いつものように、最初にPIC18f4520の構成ビットを設定します。PIC16F877Aとは少し異なり、添付のzipファイルでコードを確認できます。
LCDヘッダーファイルをインクルードしました。定義されたD8-D11の両端のデコーダICのポート接続PORTD使用の#define RF_RX PORTDのラインを接続は、エンコーダ部で使用したものと同じです。LCDポートの宣言もlcd.cファイルで行われます。
#include
18F4520に内部発振器を使用する前に述べたように、 system _ init 関数を使用して、18F4520のOSCONレジスタを構成して内部発振器を8MHzに設定しました。また、LCDピンとデコーダーピンの両方のTRISビットを設定します。ようHT - 12Dはで出力を提供D8-D11のポート、我々が設定する必要がPORTDの出力を受け取るための入力として。
void system_init (void){ OSCCON = 0b01111110; // 8Mhz 、、 intosc // OSCTUNE = 0b01001111; // PLLイネーブル、最大プリスケーラー8x4 = 32Mhz TRISB = 0x00; TRISD = 0xFF; //入力ビットとして最後の4ビット。 }
我々は、設定OSCONのでレジスタを8 メガヘルツ、また作らポートBとして出力し、ポートDとして入力。
以下の機能は、前の送信機セクションで使用された正確な逆ロジックを使用して作成されています。ここでは、ポートDから同じ16進値を取得し、その16進値によって、送信機セクションで押されたスイッチを識別します。キーを押すたびに識別し、対応する文字をLCDに送信できます。
void rf_analysis(unsigned char recived_byte){ if(recived_byte == 0x10) lcd_data( '1'); if(recived_byte == 0x20) lcd_data( '2'); if(recived_byte == 0x30) ……。….. ………………..
lcd_dataはから呼び出されlcd.cのファイル。
では メインの 機能は、まずシステムとLCDを初期化します。可変バイトを取得し、ポートDから受信した16進値を格納しました。次に、関数 rf_analysis により、文字をLCDに出力できます。
void main(void){ unsigned char byte = 0; system_init(); lcd_init(); while(1){ lcd_com(0x80); lcd_puts( "CircuitDigest"); lcd_com(0xC0); バイト= RF_RX; rf_analysis(byte); lcd_com(0xC0); } return; }
実行する前に、回路を調整しました。まず、キーパッドの「D」ボタンを押しました。したがって、0xF0はRF送信機によって継続的に送信されています。次に、LCDに文字「D」が表示されるまで受信回路を調整しました。モジュールがメーカーから適切に調整されている場合もあれば、そうでない場合もあります。すべてが正しく接続されていて、LCDでボタンが押された値を取得していない場合は、RFレシーバーが調整されていない可能性があります。ボディのインダクタンスによる誤ったチューニングの可能性を減らすために、絶縁ドライバーを使用しました。
これは、RFモジュールをPICマイクロコントローラーに接続し、RFセンサーを使用して2つのPICマイクロコントローラー間でワイヤレスで通信する方法です。
送信機と受信機の完全なコードはここからダウンロードできます。また、以下のデモビデオも確認してください。