- 必要なコンポーネント:
- 回路図:
- 8051マイクロコントローラー:
- HC-05 Bluetoothモジュール:
- L293DモータードライバーIC:
- Androidフォン制御ロボットの動作:
- コードの説明:
このプロジェクトでは、8051マイクロコントローラーとBluetoothモジュールを使用してAndroidPhone制御ロボットを構築します。ロボットはDCモーターを使用して設計されており、DCモーターの方向は、Androidアプリケーションから受信したコマンドによって制御されます。ロボットのステータスがAndroidアプリに返送されます。このプロジェクトは、HC-05Bluetoothモジュールと8051マイクロコントローラーのインターフェースにも役立ちます。すでにBluetoothモジュールを使用して8051で家電製品を制御しました。
必要なコンポーネント:
- 8051マイクロコントローラー(AT89S52)
- HC-05Bluetoothモジュール
- L293Dモータードライバー
- ロボットシャーシ
- DCモーター(2)
- ホイール(2)
- キャスターホイール
- ジャンパー線
- Bluetooth端末のAndroidアプリ
回路図:
8051マイクロコントローラー:
8051マイクロコントローラーは8ビットマイクロコントローラーで、128バイトのオンチップRAM、4KバイトのオンチップROM、2つのタイマー、1つのシリアルポートと4つの8ビットポートを備えています。8052マイクロコントローラーは8051マイクロコントローラーの拡張です。このプロジェクトでは、AT89S52マイクロコントローラーを使用しています。以下の表は、8051ファミリーメンバーの比較を示しています。
特徴 |
8051 |
8052 |
ROM(バイト単位) |
4K |
8K |
RAM(バイト) |
128 |
256 |
タイマー |
2 |
3 |
I / Oピン |
32 |
32 |
シリアルポート |
1 |
1 |
割り込みソース |
6 |
8 |
HC-05 Bluetoothモジュール:
HC-05はシリアルBluetoothモジュールです。ATコマンドを使用して構成できます。3つの異なる構成(マスター、スレーブ、ループバック)で動作します。私たちのプロジェクトでは、それをスレーブとして使用します。HC-05モジュールの機能は次のとおりです。
- 典型的な-80dBmの感度。
- デフォルトのボーレート:9600bps、8データビット、1ストップビット、パリティなし。
- 自動ペアリングピンコード:「1234」のデフォルトピンコード
- 6本のピンがあります。
- VccピンとGndピンは、HC-05への電力供給に使用されます。
- TxピンとRxピンは、マイクロコントローラーとの通信に使用されます。
- HC-05モジュールをアクティブにするためのピンを有効にします。低い場合、モジュールは無効になります
- 状態ピンはステータスインジケータとして機能します。他のBluetoothデバイスとペアリング/接続されていない場合、LEDは継続的に点滅します。他のBluetoothデバイスと接続/ペアリングされると、LEDは2秒の一定の遅延で点滅します。
L293DモータードライバーIC:
L293DはデュアルHブリッジモータードライバーICです。これは電流増幅器として機能し、L293Dの出力がDCモーターを駆動します。これには、2つのHブリッジ回路が組み込まれています。コモン動作モードでは、2つのDCモーターを両方向に同時に駆動できます。以下の表は、L293DICのピンの説明を示しています。L293Dモータードライバーを使用したいくつかのプロジェクトがあります。
ピンの説明
ピン番号 |
名前 |
関数 |
1 |
1,2を有効にする |
モーター1のイネーブルピン |
2 |
入力1 |
モーター1の入力1 |
3 |
出力1 |
モーター1の出力1 |
4 |
Gnd |
グラウンド(0V) |
5 |
Gnd |
グラウンド(0V) |
6 |
出力2 |
モーター1の出力2 |
7 |
入力2 |
モーター1の入力2 |
8 |
Vcc 2 |
モーターの供給電圧(5V) |
9 |
3,4を有効にする |
モーター1のイネーブルピン |
10 |
入力3 |
モーター2の入力1 |
11 |
出力4 |
モーター2の出力1 |
12 |
Gnd |
グラウンド(0V) |
13 |
Gnd |
グラウンド(0V) |
14 |
出力4 |
モーター2の出力2 |
15 |
入力4 |
モーター2の入力2 |
16 |
Vcc 1 |
供給電圧(5V) |
Androidフォン制御ロボットの動作:
このスマートフォン制御ロボットでは、AndroidアプリのユーザーがHC-05モジュールを介して8051マイクロコントローラーにデータを送信します。受信したデータは8051マイクロコントローラーで比較され、それに応じて決定されます。次の表は、受信したさまざまなキャラクターのモーターの方向とロボットのステータスを示しています。
受け取ったキャラクター |
モーター1 |
モーター2 |
ロボットの状態 |
f |
フォワード |
フォワード |
前進する |
b |
後方 |
後方 |
後方に移動します |
r |
フォワード |
後方 |
右に移動 |
l |
後方 |
フォワード |
左に移動 |
s |
オフ |
オフ |
停止 |
Bluetooth対応の端末アプリは、私たちは、Bluetooth端末をエミュレートすることができます。このアプリは双方向通信をサポートしており、このアプリはほとんどのデバイスと互換性があります。
以下の手順は、このアプリをインストールして使用する方法を示しています。
1.AndroidフォンにBluetoothターミナルアプリをダウンロードしてインストールします。アプリは以下のリンクからダウンロードできます。
play.google.com/store/apps/details?id=ptah.apps.bluetoothterminal
2.アプリをインストールした後、アプリを開いてBluetoothをオンにします。
3.デバイスを選択し、接続オプションをクリックします。接続に成功したら、HC-05モジュールへのデータ送信を開始できます。
以下のコードの説明をチェックして、8051マイクロコントローラーが文字を送受信して必要なモーターを回転させる方法を確認してください。
コードの説明:
このプロジェクトの完全なCプログラムとデモンストレーションビデオは、このプロジェクトの最後にあります。コードは意味のある小さなチャンクに分割され、以下で説明されています。
L293Dが8051マイクロコントローラとインターフェイスする場合、L293Dが8051マイクロコントローラに接続されるピンを定義する必要があります。モーター1のIn1ピンはP2.0に接続され、モーター1のIn2ピンはP2.1に接続され、モーター2のIn1ピンはP2.2に接続され、モーター2のIn2ピンはP2.3に接続されます。
sbit m1f = P2 ^ 0; // motor1sbitのin1ピンm1b = P2 ^ 1; // motor1のin2ピンsbitm2f = P2 ^ 2; // motor2のin1ピンsbitm2b = P2 ^ 3; // motor2のin2ピン
次に、プログラムで使用されるいくつかの関数を定義する必要があります。 遅延 機能は、指定された時間遅延を作成するために使用されます。 Txdata 関数は、シリアルポートを介してデータを送信するために使用されます。 Rxdata 関数は、シリアルポートからデータを受信するために使用されます。
void delay(unsigned int); //遅延を作成するための関数charrxdata(void); // 8051のシリアルポートを介して文字を受信するための関数voidtxdata(unsigned char); // 8051のシリアルポートを介して文字を送信するための関数
コードのこの部分では、シリアル通信用に8051マイクロコントローラーを構成します。TMODレジスタには、タイマー1、モード2(自動リロード)の0x20がロードされます。SCONレジスタには、8データビット、1ストップビットの0x50がロードされ、受信が有効になっています。TH1レジスタには、9600ビット/秒のボーレートで0xfdがロードされます。TR1 = 1は、タイマーを開始するために使用されます。
TMOD = 0x20; SCON = 0x50; TH1 = 0xfd; TR1 = 1; コードのこの部分では、 rxdata 関数の返された文字が、 後で 使用できるように変数「s」に格納されます。
s = rxdata(); // hc-05bluetoothモジュールからシリアルデータを受信します
コードのこの部分では、受信した文字を、さまざまな方向に事前に割り当てられた文字と比較する必要があります。受信した文字が「f」の場合、ロボットは前進方向に移動する必要があります。これは、 m1f、m2f ピンをハイにし、 m1b、m2b ピンをローにすることで実現されます。これが完了したら、次にロボットのステータスをAndroidアプリに送信する必要があります。これは、 txdata 関数の助けを借りて行われます。受信したさまざまな文字に対して同じプロセスが繰り返され、それに応じて決定が行われます。表1は、ロボットのさまざまな移動方向に対するm1f、m1b、m2f、m2bのさまざまな値を示しています。
if(s == 'f')//両方のモーターを順方向に移動{m1f = 1; delay(1); m1b = 0; delay(1); m2f = 1; delay(1); m2b = 0; delay(1); for(i = 0; msg1!= '\ 0'; i ++)// Bluetoothを介してロボットのステータスをAndroidアプリに送信します{txdata(msg1); }}
m1f |
m1b |
m2f |
m2b |
モーター1回転 |
モーター2回転 |
ロボットの状態 |
1 |
0 |
1 |
0 |
フォワード |
フォワード |
前進する |
0 |
1 |
0 |
1 |
逆行する |
逆行する |
後退する |
1 |
0 |
0 |
1 |
フォワード |
逆行する |
右に移動 |
0 |
1 |
1 |
0 |
逆行する |
フォワード |
左に移動 |
0 |
0 |
0 |
0 |
停止 |
停止 |
停止 |
これは、8051マイクロコントローラーを使用して4つのモーターを制御することにより、ロボットカーを任意の方向に回転させることができるということです。このロボットは、Androidフォンがない場合は8051のDTMFを使用して制御することもできます。
また、ここですべてのロボティクスプロジェクトを確認してください。