Node.js Webページ制御のロボットカー(ワイヤレス)
コンポーネントと消耗品
> |
| × | 1 | |||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 2 | ||||
| × | 2 |
このプロジェクトについて
プロジェクトのアイデア
Node.jsは、リアルタイムアプリケーションに最適なオプションの1つです。以前、Socketsを使用していくつかのリアルタイムアプリに取り組んだことがあるので、同じ概念で、Node.jsサーバーを使用して自己学習用のIoTプロジェクトを作成することにしました。
このローバーは、Bluetoothを使用してNode.jsサーバーと通信し、フロントエンドでは、ソケットを使用してサーバーにコマンドを送信します。
プロジェクトの目的
ノードサーバーとハードウェア(この場合はローバー)間のワイヤレス通信を調査および実装し、ソケットを使用してノードサーバーが提供するモバイルWebページでローバーをリモート制御します。
前提条件
ノード、ソケットプログラミング、およびL298モータードライバーの動作に関する基本的な知識が必要です。
要件
- 1 Arduino Uno
- 1L298モータードライバー
- HC-05Bluetoothモジュール
- ジャンパー線
- 2バッテリー-各9ボルト
- 2ギアモーター(6〜9ボルト)
- 2つの互換性のあるホイール
- シャーシ
- サーバーにNode.jsがインストールされているコンピューター。
ステップ1-ローバーを構築する <図>
ローバーの構築はそれほど複雑ではありません。オンラインで簡単に入手でき、すべての組み立てユニットに付属している「2輪シャーシキット」を購入できます。
Arduino UnoとL298モータードライバーはローバーの上に埋め込まれており、どちらも2つの9ボルトバッテリーで別々に電力を供給されます。
Arduino Unoは、サーバーと通信するHC-05Bluetoothモジュールに電力を供給します。
回路図 <図>
回路図の上に示されているように、L298モータードライバーは9Vバッテリーで駆動され、2つのモーター制御出力はモーターAとモーターBに接続されています。モーターには極性がないため、どの端子も接続できます。両方のモーターが同じ方向に回転します。 5Vレギュレータジャンパを取り外さないでください。
注 : 12ボルトを超える電圧でL298に電力を供給すると、オンボードの5V電圧レギュレーターが損傷します。
Arduino Unoは、正の端子がArduinoのVinピンに接続され、負の端子が共通のアースに接続された9Vバッテリーからも電力を供給されます。次にArduinoがBluetoothモジュールに電力を供給するため、HC-05のVccピンをArduinoの5Vに接続し、GNDをグランドに接続します。
HC-05とArduino間のシリアル通信では、HC-05のTXDピンをArduinoのRXピンに接続し、HC-05のRXDピンをArduinoのTXピンに接続します。
これで、L298モジュールを制御するために、EN1ピンとEN2ピンをArduinoの任意のPWMピンに接続できます。次に、L298の入力ピン-1、2、3、4をArduinoの任意のデジタルピンに接続します。
データ送信 <図>
上に示したように、は信号の送信を示す図です。
1.ユーザーは、ノードサーバーが提供するWebページにアクセスします。 URLは、使用されるポート番号を含むIPアドレスになります(例:「192.XXX.XXX.129:8080」)。
2.ユーザーがWebページのボタンをクリックすると、サーバーが必要な機能を実行するようにトリガーされます。この通信はソケットが原因で発生します。
3. Bluetooth経由でHC-05モジュールに接続されているノードサーバーは、必要なデータをHC-05モジュールに送信します。
4. HC-05は、シリアル通信を使用してArduinoUNOにデータを送信します。
5. ArduinoUNOはL298モジュールを制御します。
ステップ2-サーバーのセットアップ
サーバーの場合、Node.jsをインストールする必要があります。ノードの安定バージョンをインストールします。私のバージョンは11.15です。次のパッケージをインストールする必要があります-
- node-gyp
- エクスプレス
- node-bluetooth
- socket.io
- ejs
注-「node-gyp」のインストールは、最新バージョンのNodeをサポートしていないため、注意が必要な場合があります。そのため、Nodeのバージョン11.15をインストールすることをお勧めします。
ここで、Webページからイベントをリッスンする必要があります。Webページとの対話中にイベントがトリガーされるとすぐに、ページはノードサーバーに実行する必要のある必要な関数を発行します。次に、サーバーはそのメッセージをリッスンし、目的の機能を実行します(この場合、Bluetoothにデータを送信します)。
したがって、「express」や「EJS」などのパッケージを使用してサーバーとWebページを作成します。必要なコントロールを使用してWebページを設計し、ソケットサーバーを作成してソケット接続を設定します。このドキュメントを参照してください。
Bluetoothのセットアップについては、このドキュメントを参照してください。コントロールボタンがクリックされるたびに、メッセージがHC-05モジュールに送信されます。
これが私の簡単なウェブページです-
<図>
ステップ3-Arduinoコード
Bluetoothはシリアル通信を使用してArduino-Unoと通信するため、コマンドとして「文字列」と、文字列を終了してキャプチャするように指示する追加の文字を送信します。
例-:前進するために、Bluetoothは「forwardT」を送信し、Arduinoの終わりでは、文字「T」に遭遇するとすぐに、シリアル通信が完了したことがわかります。
そして、その着信文字列コマンドを使用して、L298ドライバーを前後左右に移動したり、速度を変更したりするように構成します。
添付されているArduinoコードを見つけます。
ステップ4-最終結果
機能強化と将来の範囲
後の段階で、音声コマンドと障害物回避機能を使用してローバーを制御することを計画しています。また、移動距離、最高速度、平均速度などの統計記録を保持するデータベースを維持することもできます。また、温度、光、湿度などの複数のセンサーを追加し、定期的に追跡します。 DBに保存されます。
次のバージョン
次のプロジェクト「モバイルを使用した音声制御ローバー」を確認してください
コード
- ノードローバーArduinoコード
ノードローバーArduinoコード Arduino
const int en1 =9; const int en2 =3; const int inp1 =2; const int inp2 =4; const int inp3 =7; const int inp4 =8; char charRead; String inputString =""; void setup (){Serial.begin(9600); pinMode(en1、OUTPUT); pinMode(en2、OUTPUT); pinMode(inp1、OUTPUT); pinMode(inp2、OUTPUT); pinMode(inp3、OUTPUT); pinMode(inp4、OUTPUT);} void loop(){//メインコードをここに配置して繰り返し実行します:if(Serial.available()){charRead =Serial.read(); if(charRead!='T'){inputString + =charRead; } else {if(inputString =="forward"){//前方に移動するにはdigitalWrite(inp1、HIGH); digitalWrite(inp2、LOW); digitalWrite(inp3、HIGH); digitalWrite(inp4、LOW); } else if(inputString =="backward"){//後方に移動するにはdigitalWrite(inp1、LOW); digitalWrite(inp2、HIGH); digitalWrite(inp3、LOW); digitalWrite(inp4、HIGH); } else if(inputString =="fleft"){//左に移動するdigitalWrite(inp1、HIGH); digitalWrite(inp2、LOW); digitalWrite(inp3、LOW); digitalWrite(inp4、LOW); } else if(inputString =="fright"){//右に移動するにはdigitalWrite(inp1、LOW); digitalWrite(inp2、LOW); digitalWrite(inp3、HIGH); digitalWrite(inp4、LOW); } else if(inputString =="bleft"){//左に戻るdigitalWrite(inp1、LOW); digitalWrite(inp2、LOW); digitalWrite(inp3、LOW); digitalWrite(inp4、HIGH); } else if(inputString =="bright"){//右に戻るにはdigitalWrite(inp1、LOW); digitalWrite(inp2、HIGH); digitalWrite(inp3、LOW); digitalWrite(inp4、LOW); } else if(inputString =="break"){// analogWrite(en1、50);を停止するanalogWrite(en2、50); delay(550); digitalWrite(inp1、LOW); digitalWrite(inp2、LOW); digitalWrite(inp3、LOW); digitalWrite(inp4、LOW); analogWrite(en1、150); analogWrite(en2、150); } else if(inputString =="maxspeed"){//最大速度analogWrite(en1、250); analogWrite(en2、250); } else if(inputString =="medspeed"){//中速analogWrite(en1、180); analogWrite(en2、180); } else if(inputString =="lowspeed"){//低速analogWrite(en1、90); analogWrite(en2、90); } else {// digitalWrite(inp1、LOW);を停止しますdigitalWrite(inp2、LOW); digitalWrite(inp3、LOW); digitalWrite(inp4、LOW); } inputString =""; }}}
回路図
製造プロセス