プロジェクトの小戦闘:51シングルチップコンピューターで制御される携帯電話Bluetoothリモートコントロール車の設計(プログラムコンポーネントリストの物理的な画像)

ここ数日、携帯電話で制御できるBluetoothリモコンカーを作る時間があって、ようやく今日実現しました。そのプロセスと経験を共有してください。
手間をかけずに、
ここに画像の説明を挿入
ここに画像の説明を挿入
ここに画像の説明を挿入
最初に物理的な地図に移動します。プロジェクトコンポーネントリスト
1.宝物がスマートカーシャーシを購入します(私の車は4輪駆動なので、4つのモーター、2つのアクリルプレート、およびいくつかの付属ネジがあります)
2. L298nモジュール2つ(1つは2つのモーターを制御する298)
3. HC-06 Bluetoothモジュール
4、バッテリーボックスおよび18650バッテリー3
5、シングルチップコンピューターの最小システム
6、Dupontラインは少なくとも12、もちろん、より良い
7、いくつかのワイヤー(モーターを接続し、バッテリーボックスはL298Nとマイクロコントローラーに接続されています)

第二に、製造工程
まず第一に、L298Nの配線をまず理解しましょう、とにかく長い間無理矢理強制されました、とにかく手探りになります、雑貨屋さんに情報があります。次にBluetoothモジュールを使用します。Bluetoothモジュールを入手した後、開発ボードがある場合(ない場合は、マイクロコントローラーのバーナーを使用)、まずTXDをTXDに、RXDをRXDに接続し、コンピューターのシリアルアシスタントを開いてBluetoothとの通信を確立し、ATを開きます。 、送信ボーレートの設定、名前の変更、ペアリングパスワードの変更などのATコマンドセットを送信します。ただし、Bluetooth経由でマイクロコントローラーに接続する場合、RXDに接続されたTXDです。最後の1つは、配線中に壁によくぶつかることです。たとえば、接続されているケーブルが実際には接続されていないと思われる場合、ケーブルはまったく機能しませんが、マルチメータBを知っておく必要があります。
バッテリーボックスを購入するのを忘れていたので、DC12Vに接続してしまい、リモコンカーが引きずってしまいました。
3番目に、物理的な写真
(ワイヤーと充電用の宝物で動力を供給された車を牽引していますが、電力がありませんでした)

この情報には、L298Nのいくつかの情報、Bluetoothマニュアル(AT命令セットを参照)、およびソースプログラムが含まれます。

/ 携帯電話のBluetoothリモートコントロールカーAPPは、アプリケーション市場のBluetoothシリアルポートのアシスタントで見つけることができる
90度程度Zuozhuanyouzhuanその後、ベルトを入れて、それが唯一のL298Nであれば、私の4輪駆動される2削除
PWMを10スピードを持っています
/

#include <reg52.h>

#define Left_moto2_pwm P0_4 //ドライブモジュールENAイネーブル端子に接続し、PWM信号を入力して左後輪の速度を調整
#define Right_moto2_pwm P0_5 //ドライブモジュールENB右後輪に
接続#define Left_moto_pwm P1_4 //ドライブモジュールENA有効端子に接続PWM信号調整速度左前輪
#define Right_moto_pwm P1_5 //ドライブモジュールに接続ENB右前輪
#define uchar unsigned char
#define uint unsigned int

sbit P0_4 = P0 ^ 4; // P0_4を定義
sbit P0_5 = P0 ^ 5; // P0_5を定義
sbit P1_4 = P1 ^ 4; // P1_4を定義
sbit P1_5 = P1 ^ 5; // P1_5を定義

/ モータードライブIO定義 /
sbit IN1 = P1 ^ 2; //は1左モーター逆回転前輪
sbit IN2 = P1 ^ 3; //は1左モーター正回転前輪
sbit IN3 = P1 ^ 6; // is 1右モーターが前輪を回転させる
sbit IN4 = P1 ^ 7; // is 1右モーターが前輪を回転させる
/ * sbit EN1 = P1 ^ 4; // is 1左モーターが
sbit EN2 = P1 ^ 5; //を有効にする1つの右モーターを有効にする* /

sbit IN5 = P0 ^ 2; //は1つの左モーター正転です
sbit IN6 = P0 ^ 3; //は1つの左モーター正転です
sbit IN7 = P0 ^ 6; // 1つの右モーター正転ですホイール
SBIT IN8 = P0 ^ 7; // 1は、右後輪モータの逆転である
/ * SBIT EN3 = P0 ^ 4 ; // 左後輪に電動機をイネーブル
右モータれる// 1; SBIT EN4 = P0 ^ 5後輪を有効にする* /

ビットRight_moto_stop = 1;
ビットLeft_moto_stop = 1;
unsigned int time = 0;
int pwm = 1;

#define left_motor_en EN1 = 1 //左モーター有効
#define left_motor_stops EN1 = 0 //左モーター停止
#define right_motor_en EN2 = 1 //右モーター有効
#define right_motor_stops EN2 = 0 //右モーター停止

#define left_motor2_en EN3 = 1 //左モーターが有効になった後
#define left_motor2_stops EN3 = 0 //左モーターが停止した後
#define right_motor2_en EN4 = 1 //右モーターが有効になった後
#define right_motor2_stops EN4 = 0 //右モーターが停止した後

#define left_motor_go IN1 = 0、IN2 = 1 //左モーター前方
#define left_motor_back IN1 = 1、IN2 = 0 //左モーター逆方向
#define right_motor_go IN3 = 1、IN4 = 0 //右モーター前方
#define right_motor_back IN3 = 0、IN4 = 1 //右モーター逆転

#define left_motor2_go IN5 = 0、IN6 = 1 //左モーター前方
#define left_motor2_back IN5 = 1、IN6 = 0 //左モーター逆方向
#define right_motor2_go IN7 = 1、IN8 = 0 //右モーター前方
#define right_motor2_back IN7 = 0、IN8 = 1 //右モーター逆転

unsigned char pwm_val_left = 0; //変数定義
unsigned char push_val_left = 0; //左モーターデューティサイクルN / 10
unsigned char pwm_val_right = 0;
unsigned char push_val_right = 0; //右モーターデューティサイクルN / 10

void delay(uint z)
{
uint x、y;
for(x = z; x> 0; x–)
for(y = 114; y> 0; y–);
}

// Bluetooth初期化
void UART_INIT()
{
SM0 = 0;
SM1 = 1; //シリアルポート動作モード1
REN = 1; //シリアルポートが
EA = 1 を受信できるようにする//合計割り込みを開く
ES = 1; //シリアルポート割り込みを開く
TMOD = 0x20; /// 8ビットオートリロードモード
TH1 = 0xfd;
TL1 = 0xfd; // 9600ボーレート
TR1 = 1; //タイマー1を開始
}

/ ************************************************* *********************** /
void run(void)// PWM速度調整関数
{
push_val_left = pwm; // PWM調整パラメータ1-10 1は最も遅い、10が最も速いです。この値を変更すると速度が変わる可能性があります
push_val_right = pwm; // PWM調整パラメーター1-10 1が最も遅く、10が最も速いです。この値を変更すると速度が変わる可能性があります
(pwm10)pwm = 0;
if(pwm
0 && pwm <0)pwm = 0;

}

/ ************************************************* ************************************************************ /
/
PWM変調し、モータ速度/
/
********************************************************* ************************************************** * /

/ *左側のモーター速度調整* /
/ *モーター速度、デューティサイクルを変更するには、push_val_leftの値を調整します* /
void pwm_out_left_moto(void)
{
if(Left_moto_stop)
{
if(pwm_val_left <= push_val_left)
{Left_moto_pwm = 1;
Left_moto2_pwm = 1 ;}
else
{Left_moto_pwm = 0; Left_moto2_pwm = 0;}

if(pwm_val_left> = 10)
pwm_val_left = 0;
}
else {Left_moto_pwm = 0; Left_moto2_pwm = 0; }
}
/ *********************************************** ****************** /
/
右侧电机调速/
void pwm_out_right_moto(void)
{
if(Right_moto_stop)
{
if(pwm_val_right <= push_val_right)
{Right_moto_pwm = 1;
Right_moto2_pwm = 1; }
その他
{Right_moto_pwm = 0;
Right_moto2_pwm = 0;}
if(pwm_val_right> = 10)
pwm_val_right = 0;
}
else {Right_moto_pwm = 0; Right_moto2_pwm = 0; }
}
/
*********************************************** *** /
///TIMER0割り込みサービスサブファンクションはPWM信号を生成します /
void timer0()割り込み1を使用して2
{
TH0 = 0XF8; // 1Msタイミング
TL0 = 0X30 ;
時間++;
pwm_val_left ++;
pwm_val_right ++;
pwm_out_left_moto();
pwm_out_right_moto();
}

//車の前方
void void forward()
{
ET0 = 1;
run(); // pwm program
left_motor_go; //左モーター前方
right_motor_go; //右モーター前方
left_motor2_go; //左モーター前方後輪
right_motor2_go; //右モーターフォワードリアホイール
}

void left_go()//左折
{
ET0 = 1;
run();
left_motor_back;
right_motor_go;
left_motor2_back;
right_motor2_go;
delay(700);
forward();
}
//右折
void right_go()
{
ET0 = 1;
run( );
delay(50);
right_motor_back;
left_motor_go;
right_motor2_back;
left_motor2_go;
delay(700);
forward();
}
//車の左のサークル
void left()
{
ET0 = 1;
run();
delay(50);
right_motor_go ; //右モーター前方
left_motor_back; //左モーター後方
right_motor2_go; //右モーター前方
left_motor2_back; //左モーターバック
}

//車の右折を
無効にするvoid()
{
ET0 = 1;
run();
left_motor_go;
right_motor_back;
left_motor2_go;
right_motor2_back;
}

//小车后退
void back()
{
ET0 = 1;
run();
left_motor_back;
right_motor_back;
left_motor2_back;
right_motor2_back;
}

//車止め
void stop()
{
ET0 = 0;
P1 = 0;
P0 = 0;
}

//シリアルポート割り込み
void UART_SER()割り込み4
{
if(RI)
{
RI = 0; //受信フラグ
スイッチをクリア(SBUF)
{
case 'g':forward(); break; //
ケース 'b'を転送する:戻る(); break; //後方
ケース 'l':left(); break; //左折円
ケース 'r':right(); break; //右折円
ケース 's':stop(); break ; //停止
ケース 'z':left_go(); break; //運転
ケースを左折する'y':right_go(); break; //運転
ケースを右折する'p':pwm ++; break; //
ケースを加速する' c ':pwm–; break; //スローダウン
}

    }

}

void main()
{
TMOD =
0X01 ; TH0 = 0XF8; // 1msタイミング
TL0 = 0X30;
TR0 = 1;
ET0 = 1;
EA = 1;
UART_INIT(); //
(1);の間のシリアルポート初期化(1);
}

最後に、コメントや提案があれば、私にメッセージを残してください。一緒に学び、一緒に進めましょう。
完全なコードまたはデザインファイルが必要な場合は、メッセージまたはプライベートメッセージを下に残してください。表示され次第、返信します。

ありがとう!

97件の元の記事を公開 200件の賞賛 80,000回以上の閲覧

おすすめ

転載: blog.csdn.net/weixin_44212493/article/details/104335444