Li-Fi(Light Fidelity)は、可視光などの光通信を使用してデータを転送できる高度なテクノロジーです。Li-Fiデータは、光の中を移動し、LDRやフォトダイオードなどの感光性デバイスを使用して受信側で解釈できます。Li-Fi通信はWi-Fiより100倍高速です。
このプロジェクトでは、2つのArduinoを使用したLi-Fi通信のデモを行います。ここでは、テキストデータはLEDと4x4キーパッドを使用して送信されます。そして、LDRを使用して受信側でデコードされます。以前、Li-Fiについて詳しく説明し、Li-Fiを使用してオーディオ信号を転送しました。
必要なコンポーネント
- Arduino UNO
- LDRセンサー
- 4 * 4キーパッド
- 16 * 2英数字LCD
- LCD用I2Cインターフェースモジュール
- ブレッドボード
- ジャンパーの接続
- 5 mm LED
Li-Fiの簡単な紹介
前述のように、Li-Fiは、Wi-Fi通信よりも100倍高速な高度な通信技術です。この技術を使用すると、可視光源を使用してデータを転送できます。光源を使用するだけで高速インターネットにアクセスできると想像してみてください。とても面白そうですね。
Li-Fiは、データ送信用の通信媒体として可視光を使用します。LEDは光源として機能し、フォトダイオードは光信号を受信して送り返すトランシーバーとして機能します。送信機側の光パルスを制御することで、独自のデータパターンを送信できます。この現象は非常に高速で発生し、人間の目では見ることができません。次に、受信側で、フォトダイオードまたは光依存抵抗(LDR)がデータを有用な情報に変換します。
Arduinoを使用したLi-Fi送信機セクション
上図のように、Li-Fi通信の送信機部分では、ここで入力としてキーパッドを使用しています。つまり、キーパッドを使用して送信するテキストを選択します。次に、情報は、この場合はArduinoに他ならないコントロールユニットによって処理されます。Arduinoは情報をバイナリパルスに変換し、LEDソースに供給して送信することができます。次に、これらのデータは、可視光パルスを受信機側に送信するLEDライトに送られます。
送信機セクションの回路図:
送信機側のハードウェア設定:
Arduinoを使用したLi-Fiレシーバーセクション
受信機セクションでは、LDRセンサーが送信機側から可視光パルスを受信し、それを解釈可能な電気パルスに変換して、Arduino(コントロールユニット)に供給します。Arduinoはこのパルスを受信して実際のデータに変換し、16x2LCDディスプレイに表示します。
受信機セクションの回路図:
受信側のハードウェア設定:
Li-Fi用のArduinoコーディング
上に示したように、Li-Fi送信機と受信機には2つのセクションがあります。各セクションの完全なコードはチュートリアルの下部にあり、コードの段階的な説明は以下にあります。
Arduino Li-Fi送信機コード:
送信機側では、ArduinoNanoは4x4キーパッドとLEDとともに使用されます。まず、すべての依存ライブラリファイルがダウンロードされ、ArduinoIDEを介してArduinoにインストールされます。ここで、キーパッドライブラリは、このリンクからダウンロードできる4 * 4キーパッドを使用するために使用されます。4x4キーパッドとArduinoのインターフェースについて詳しくは、こちらをご覧ください。
#include
ライブラリファイルが正常にインストールされたら、番号を定義します。ここでは4 * 4キーパッドを使用しているため、行と列の値は両方とも4です。
constバイトROW = 4; constバイトCOL = 4; char keyscode = { {'1'、 '2'、 '3'、 'A'}、 {'4'、 '5'、 '6'、 'B'}、 {'7'、 '8'、 ' 9 '、' C '}、 {' * '、' 0 '、'# '、' D '} };
次に、4 * 4キーパッドとのインターフェースに使用されるArduinoピンが定義されます。この例では、R1、R2、R3、R4にそれぞれA5、A4、A3、およびA2を使用し、C1、C2、C3、およびC4にそれぞれA1、A0、12、11を使用しました。
バイトrowPin = {A5、A4、A3、A2}; バイトcolPin = {A1、A0、12、11}; キーパッドcustomKeypad = Keypad(makeKeymap(keyscode)、rowPin、colPin、ROW、COL);
セットアップ()の 内部では、LEDソースが接続されている出力ピンが定義されています。また、デバイスの電源を入れている間はオフのままです。
void setup() { pinMode(8、OUTPUT); digitalWrite(8、LOW); }
内部 ながら ループ、キーパッドから受信した値を使用して読み取られる customKeypad.getKey()を 、で比較される 場合、他の 各キーの押下で一意のパルスを生成するために、ループ。コードでは、タイマー間隔がすべてのキー値に対して一意に保たれていることがわかります。
char customKey = customKeypad.getKey(); if(customKey){ if(customKey == '1') { digitalWrite(8、HIGH); delay(10); digitalWrite(8、LOW); }
Arduino Li-Fiレシーバーコード:
Li-Fiレシーバー側では、回路図に示すように、ArduinoUNOはLDRセンサーとインターフェースします。ここでは、LDRセンサーが抵抗と直列に接続されて分圧回路を形成し、センサーから出力されたアナログ電圧が入力信号としてArduinoに供給されます。ここでは、LCD付きのI2Cモジュールを使用してnoを減らしています。このモジュールは2つのデータピンSCL / SDAと2つの電源ピンのみを必要とするためArduinoとの接続の。
以下のようなコードのすべての必要なライブラリファイルを含めて、コードを起動 Wire.h 、I2C通信用 LiquidCrystal_I2C.h ので、それらをダウンロードする必要はありません、これらのライブラリは、アルドゥイーノにプリインストールされるだろうなど、LCD用。
#include
16 * 2英数字LCD用のI2Cモジュールを使用するには、 LiquidCrystal_I2C クラスを使用して構成します。ここでは、アドレス、行、および列番号を渡す必要があります。この場合、それぞれ0x3f、16、および2です。
LiquidCrystal_I2C lcd(0x3f、16、2);
セットアップ() 内で、信号を受信するためのパルス入力ピンを宣言します。次に、プロジェクトの初期化中に表示されるウェルカムメッセージをLCDに印刷します。
void setup() { pinMode(8、INPUT); Serial.begin(9600); lcd.init(); lcd.backlight(); lcd.setCursor(0、0); lcd.print( "ようこそ"); lcd.setCursor(0、1); lcd.print( "CIRCUIT DIGEST"); delay(2000); lcd.clear(); }
while ループ内では、LDRからのパルス入力期間が pulseIn 関数を使用して計算され、この場合はLOWであるパルスのタイプが定義されます。値は、デバッグの目的でシリアルモニターに出力されます。設定によって異なる場合があるため、期間を確認することをお勧めします。
符号なしの長い期間= pulseIn(8、HIGH); Serial.println(duration);
すべての送信機パルスの持続時間をチェックした後、16のパルス持続範囲ができました。これは参照用に書き留められています。次に、 IF-ELSE ループを使用してそれらを比較し、送信された正確なデータを取得します。キー1の1つのサンプルループを以下に示します。
if(duration> 10000 && duration <17000) { lcd.setCursor(0、0); lcd.print( "Received:1"); }
Arduinoを使用したLi-Fi送信機と受信機
両方のArduinoに完全なコードをアップロードした後、レシーバー側のキーパッドのいずれかのボタンを押すと、レシーバー側の16x2LCDに同じ数字が表示されます。
これは、Li-Fiを使用して光を介してデータを送信する方法です。この記事を楽しんで、そこから何か新しいことを学んだことを願っています。疑問がある場合は、コメントセクションを使用するか、フォーラムで質問してください。