Bluetooth / Android / Arduinoを介して接続する
コンポーネントと消耗品
> |
| × | 1 | |||
| × | 1 |
アプリとオンラインサービス
> |
| |||
|
このプロジェクトについて
<図>
非常に優れたワイヤレスローカルエリア(およびパーソナル)ネットワークは、間違いなくBluetooth(BT)です。今日、私たちの日常生活では、有名な「青い小さな光」の助けを借りて相互接続された携帯電話、ステレオ、カメラなどを使用していることがよくあります。
IoTと自動化の世界では、BTテクノロジーを使用した携帯電話を介してリモコンを見つけることが非常に一般的です。これは2つの基本的なコンポーネントによるものですが、非常に重要です:
- ANDROIDアプリ(MIT AppInventor2など)および 用のシンプルな開発プラットフォーム
- 手頃な価格のBTモジュール(HC-06など)
このチュートリアルでは、ロボットを動かしたり、家のランプをオンにしたりするために、モバイルデバイスを介してArduinoの出力を制御する方法についていくつかのアイデアを開発します。
ステップ1:BluetoothモジュールとArduino <図> <図>
市場では、「マスタースレーブ」BT 3.0モジュールをHC-05として、「スレーブ」モジュールをHC-06として見つけることが非常に一般的です。最近では、テクノロジーBT 4.0またはBLE( "Bluetooth Low Energy")で動作するHC-08およびHC-10が登場しました。残念ながらAppleはBT3.0をサポートしていないため、BLEモジュールだけがiPhoneに接続できます。
ここで説明するプロジェクトでは、非常に人気があり安価なHC-06を使用します(さようなら、iPhone!Androidはここで王様です!)。 BTモジュールは5Vで動作するため、たとえばArduinoUNOに簡単に接続できます。彼の送信(Tx)ピンと受信(Rx)ピンは、ESP8266の場合のように分圧器を必要とせずに、UNOに直接接続できます。通常、HC-06はピン0および1 Arduino(「シリアル0」)に直接接続する必要があります:
- HC06-TxからArduinoピン0(Rx)
- HC06-RxからArduinoピン1(Tx)
「シリアル0」入力(UNOで唯一のHWシリアルポート)を使用する場合、USBポートも使用するため、プログラムのロード中にHC-06がピン0および1に物理的に接続されない可能性があることに注意してください。同じシリアル。この小さな問題を回避する簡単な方法(プロジェクトで多くのGPIO UNOを使用していない場合)は、ライブラリSoftwareSerialを介して「SWシリアルポート」を使用することです。ここでは、UNOのピン10と11(それぞれTx、Rx)を使用します。
ステップ2:HC-06のテストと構成
次のステップは、HC-O6をテスト、プログラム、および初期化するための簡単なコードを作成することです。開始するには、Library Software Serialを含め、「BT」変数を新しいシリアルポートに設定します。
#include SoftwareSerial BT(10、11); // RX、TXStringコマンド=""; // Bluetoothデバイスの応答を保存しますvoidsetup(){Serial.begin(9600); Serial.println( "タイプATコマンド"); BT.begin(9600); // HC-06通常はデフォルトのボーレート}
次に、BTからのデータを待つだけのコード本体があります。到着すると、データはシリアルモニターに書き込まれます。同様に、ATコマンドをシリアルモニターからHC-06モジュールに送信できます。
void loop(){if(BT.available())//利用可能な場合はデータを受信します。 {while(BT.available())//「受信し続ける」。 {遅延(10); //物事を安定させるために遅延が追加されましたcharc =BT.read(); //シリアル読み取りコマンドを実行します+ =c; //文字列を作成します。 } Serial.println(コマンド);コマンド=""; //繰り返しなし} if(Serial.available()){delay(10); BT.write(Serial.read()); }}
プログラムがロードされたら、シリアルモニターを使用して、次のようないくつかの基本的なテストを実行します。
- 「AT」を送信すると、モジュールは「OK」と応答するはずです。
- ファームウェアのバージョンを尋ねる:「T + VERSION」、モジュールは応答する必要があります(例:「linvorV1.8」)。
- HC-06を使用すると、モジュールの名前を定義できます(例:「T + NAMEMJRoBot_BT_HC06」)。ただし、他のモジュールとは異なり、モジュールに設定されている名前を知ることはできません。前のコマンドを送信するとき、HC-06は単に「OKsetname」と答えます。
一般に、HC-O6にはパスワード(またはPIN):1234が標準で付属しています。ATコマンドを使用して新しいパスワードを設定できます:
- AT + PIN xxxxここで、「xxxx」は4つの数字になります。
HC-06テスト用のArduinoコードを以下に示します:
F08H931IL8LGG7U.ino
ステップ3:Androidデバイス <図> <図> <図> <図>
わかった!モジュールがUNOに接続され、実行されています。 Androidデバイスを紹介する時が来ました。
Googleストアには使用できるアプリがたくさんあります。 MIT Application2ツールを使用して開発し、Googleストアで無料で入手できるアプリMJRoBotBTデジタルアナログ音声制御を使用します
アプリは、デジタルコマンド(ボタンまたは音声を介して)とアナログコマンドを送信して、サーボなどのPWMデバイスを制御します(0〜255の範囲のデータを送信します)。
- アプリをダウンロード
- Androidデバイスのセットアップに移動し、BTモジュールを探して接続します(PIN 1234またはユーザーが定義したその他の番号を入力します)。デバイスは接続データを保持するため、これは1回実行する必要があります。
- デバイスとHC-06が通信したら、アプリを起動します。 2回目は、アプリを起動するときに、BTモジュールが自動的に接続される必要があります。
- モジュール名を選択します(私の場合は、最後にHC-06が付いているものです)。
その後、アプリは「CONNECTED」と表示され、HC-06と「ペアリング」されていることを通知します。この時点で、アプリのボタンをテストし、アプリが送信しているデータをPCシリアルモニターで確認します。たとえば、4つのデバイスの[オン]ボタンと[オフ]ボタンを順番に押すと、結果は次のようになります。
dev1ondev1offdev2ondev2offdev3ondev3offdev4ondev4off
BTモジュールと通信するAndroid用アプリができたので、便利なものを作成しましょう!。
ステップ4:Arduino出力を制御する。 <図>
上記のように回路を作りましょう。アイデアは、アプリを使用してLEDのオンとオフを切り替え、LEDの強度を制御することです。
接続:
- デバイス1: "dev1on / dev1off" ==> LED赤==>ピン3UNO
- デバイス2: "dev2on / dev2off" ==> LEDイエロー==>ピン5UNO
- デバイス3: "dev3on / dev3off" ==> LED緑色==>ピン6UNO
- デバイス4: "dev4on / dev4off" ==> LED青==>ピン9UNO
つまり、「デバイス1」ボタンに関連する「オン」をトリガーするために、テキストメッセージ「dev1on」がArduinoに送信されます。このメッセージを受信すると、赤いLEDが点灯します。
4つのピンはPWMを生成できるピンであることに注意してください(すべてのUNOデジタルピンがPWMを生成できるわけではありません。「〜」のある市場を探してください。 」。これは、アプリで「スライダー」を使用して数値データを送信し、PWMを介してLEDの強度を制御するために重要です。
- Dev A0: "r / 0-255" ==> LED赤==>ピン3UNO
- Dev A1: "y / 0-255" ==> LEDイエロー==>ピン5UNO
- Dev A2: "g / 0-255" ==> LED緑色==>ピン6UNO
- Dev A3: "b / 0-255" ==> LEDブルー==>ピン9UNO
スライダーの場合、PWMデータ値(0〜255)の前に、「スライダー」コマンドが来ることを通知する文字がArduinoに送信されます。
以下のビデオでは、プログラムの上の部分(ボタンとスライダー)のデモンストレーション:
完全なArduinoコードの下:
FA44NBUIL8LGGAY.ino
ステップ5:音声コマンドでIoTデバイスを制御する <図>
IoTデバイスの制御では、音声が最近のトレンドです。 Arduino / HC-06 / Androidを使用してこのタイプのコントロールを取得するのは非常に簡単です。 Androidデバイスにはすでに「工場」によるこの機能があります。私が開発したアプリでは、Androidがコマンドを「リッスン」して テキスト形式で送信するボタンが追加されました。 Arduinoに。コードは、来る文字列を「読み取る」役割を果たします。
コードにいくつかの例を追加しました。たとえば、Arduinoが「テレビの接続」コマンドを受信すると、緑色のLED(デバイス3に対応)が点灯します(LEDの代わりに、テレビを接続するリレーを使用できます)。
コードのループ部分にある文字列を、自分の言語のコマンドで変更する必要があります。母国語であるポルトガル語を使用しましたが、英語とのアクセントが異なるため、Googleでの管理が簡単でした。短い文章または単語のみを使用する必要があります。重要なのは、あなたが書いたものとGoogle音声認識アプリが返すものとを完全に一致させることです。
ここでは、MITAppInventor2で直接実行できる.aiaファイルへのリンクを見つけることができます。以下のビデオでは、音声コントロールの簡単なデモンストレーション:
ステップ6:結論 <図>
さて、このチュートリアルでは、BT / Android / Arduinoを使用して「モノ」を制御することの大きな可能性を実感できると思います。いつものように、このプロジェクトが他の人がエキサイティングなエレクトロニクスの世界で自分の道を見つけるのに役立つことを願っています。 、ロボット工学、IoT!その他のプロジェクトについては、私のブログMJRoBot.org
をご覧ください。世界の南からのサルド!
次のチュートリアルでお会いしましょう!
ありがとう
マルセロ
コード
- コードスニペット#1
- コードスニペット#2
- コードスニペット#3
コードスニペット#1 プレーンテキスト
#includeSoftwareSerial BT(10、11); // RX、TXStringコマンド=""; // Bluetoothデバイスの応答を保存しますvoidsetup(){Serial.begin(9600); Serial.println( "タイプATコマンド"); BT.begin(9600); // HC-06通常はデフォルトのボーレート}
コードスニペット#2 プレーンテキスト
void loop(){if(BT.available())//利用可能な場合はデータを受信します。 {while(BT.available())//「受信し続ける」。 {遅延(10); //物事を安定させるために遅延が追加されましたcharc =BT.read(); //シリアル読み取りコマンドを実行します+ =c; //文字列を作成します。 } Serial.println(コマンド);コマンド=""; //繰り返しなし} if(Serial.available()){delay(10); BT.write(Serial.read()); }}
コードスニペット#3 プレーンテキスト
dev1ondev1offdev2ondev2offdev3ondev3offdev4ondev4off
製造プロセス
- Bluetoothで制御されるRaspberryPi Robot
- Arduinoを介したAtmelAT89シリーズのプログラミング
- Arduino、1Sheeld、Androidを使用したユニバーサルリモコン
- ラズベリーモーターシールドを使用したAndroid制御玩具
- LEDを制御するBluetoothを搭載したArduino!
- OKGoogleのBluetooth音声制御アプライアンス
- Arduino-シリアル経由でWebに温度を送信
- IntelCurieによるモーションセンシティブな回路制御
- iOSおよびAndroidのArduinoでLEDが点滅する
- Arduino Uno +電気機器(電球)+ Androidフォン
- AndroidアプリでArduinoロボットアームを制御する