51個のシングルチップマイクロコンピュータをベースにしたスマートカー(追跡、障害物回避、Bluetooth制御)

記事ディレクトリ

  • 序文
  • 1.機能
  • 2.主要モジュール
    • 1.L298Nモジュール
    • 2. 追跡モジュール
    • 3.赤外線障害物回避モジュール
    • 4.超音波障害物回避モジュール
    • 5.Bluetoothモジュール
    • コード
  • 3. その他のモジュール
  • 4.まとめ

 


序文

このプロジェクトは、車の赤外線追跡、L298Nモーター駆動、赤外線障害物回避、超音波障害物回避、Bluetooth制御およびその他の機能の切り替えを実現できます。

 

1.機能

赤外線追跡、L298N モーター駆動、PWM モーター速度調整、赤外線障害物回避、超音波障害物回避、Bluetooth 制御、

2. モジュールの紹介

1.L298N

L298Nは一般的に使用されるDCモータードライバーボードで、OUT1~4に4つのモーターが接続されており、ブロガーは2つのモーターを並列に接続する方法を使用しています。

左右の 2 つのモーターは並列に接続されており、IN1 ~ 4 はマイコンの I/O ポートに接続されており、IN1 ~ 4 の両側には PWM 速度変更用のイネーブル ENA および ENB インターフェイスがあります。

 コード:

#include <REGX52.H>

sbit M1A=P0^6;                            //定义左侧电机驱动A端
sbit M1B=P0^5;                            //定义左侧电机驱动B端

sbit M2A=P0^4;                            //定义右侧电机驱动A端
sbit M2B=P0^3;                            //定义右侧电机驱动B端

sbit M3A=P3^6;                            //定义后左侧电机驱动A端
sbit M3B=P3^5;                            //定义后左侧电机驱动B端

sbit M4A=P3^4;                            //定义后右侧电机驱动A端
sbit M4B=P3^3;                             //定义后右侧电机驱动B端

sbit EN1A = P0^7;
sbit EN1B = P0^2;

sbit EN2A = P3^7;
sbit EN2B = P3^2;

unsigned char coutern,compare;

void yundong()  //  
{
    M1A = 0;
    M1B = 1;
    M2A = 0;
    M2B = 1;
    
    M3A = 1;
    M3B = 0;
    M4A = 1;
    M4B = 0;
    
}

void Timer0_Init(void)        //100微秒@11.0592MHz
{
//    AUXR &= 0x7F;            //定时器时钟12T模式
    TMOD &= 0xF0;            //设置定时器模式
    TMOD |= 0x01;            //设置定时器模式
    TL0 = 0xA4;                //设置定时初始值
    TH0 = 0xFF;                //设置定时初始值
    TF0 = 0;                //清除TF0标志
    TR0 = 1;            //定时器0开始计时
    ET0 = 1;
    EA = 1;    
    PT0=0;
}


void Timer0_Serve() interrupt 1
{
    TL0 = 0xA4;                //设置定时初始值
    TH0 = 0xFF;           //设置定时初始值 
    compare = 10;
    coutern ++;
    if(coutern > 100)
    {
        coutern = 0;
    
    }
    if(coutern < compare)
    {
        EN1A = 1;
        EN1B = 1;
        EN2A = 1;
        EN2B = 1;
    }
    else
    {
        EN1A = 0;
        EN1B = 0;
        EN2A = 0;
        EN2B = 0;
        
    }
}

void main()
{
    
    Timer0_Init();
    while(1)
    {
        yundong();
    }        
}

 

2. 追跡モジュール

 ここで使用される 4 方向追跡モジュール

ポートの紹介: マザーボードの OUT1 ~ 4 ポートは出力レベル検出用の MCU の IO ポートにそれぞれ接続され、マザーボードのもう一方の側の VCC GND IN1 ~ 4 ポートはプローブの IN ポートにそれぞれ接続されます。 OUTポートに接続します。

モジュール原理:探査機の赤外線発光管が発光すると、地面で反射して受光管に入ります。出力端子はローレベルを出力し、メインボード上の対応する LED ライトは点灯しません。地面に光を吸収する黒い部分がある場合、受信管は光を受信できないとハイレベル 、メイン基板上のLEDが点灯します。

 

 

コード: 

#include <REGX52.H>
#include <intrins.H>
#include <Delay.h>
#include <xingshi.h>

sbit  D1 = P2^7;  //D1,D2为右边循迹模块                    
sbit  D2 = P2^6; 
sbit  D3 = P2^5;  //D3,D4为左边循迹模块
sbit  D4 = P2^4; 

void xunji()         //高电平检测到,低电平为检测
{
    if(D1==1&&D2==1&&D3==1&&D4==1)  //检测到黑线,无返回
    {
        qianji();
    }
//*****************************************
    
    if(D1==0&&D2==1&&D3==0&&D4==0)   //右边检测到黑线,小车偏左,让车向右移动
    {        
        youzhuan();
            if(D1==0&&D2==0&&D3==0&&D4==0)   //无黑线,检测到白线
            {            
                    qianji();
            }
    }
    
//******************************************
    
    if(D1==0&&D2==0&&D3==1&&D4==0)   //左边检测到黑线,小车偏右,让车向左移动
    {        
        zuozhuan();
            if(D1==0&&D2==0&&D3==0&&D4==0)   //无黑线,检测到白线
            {            
                    qianji();
            }
    }    
    
//***********************************************
    
  if(D1==0&&D2==0&&D3==1&&D4==1)    //左边检测到黑线,直角左拐
    {        
        qianji();
        Delay(50);   //直角左拐前延时50ms
            if(D1==0&&D2==0&&D3==0&&D4==0)   //无黑线,检测到白线
            {            
                    tingzhi();
                    Delay(50);
                  zuozhuan();
            }
    }    

//*********************************************
     if(D1==0&&D2==0&&D3==1&&D4==1)   //右边检测到黑线,直角右拐
    {        
        qianji();
        Delay(50);   //直角右拐前延时50ms
            if(D1==0&&D2==0&&D3==0&&D4==0)   //无黑线,检测到白线
            {            
                    tingzhi();
                    Delay(50);
                  youzhuan();
            }
    }    
    
//***************************************************    
}

 

3. 赤外線障害物回避モジュール

センサーモジュールは外光への適応力が高く、一対の赤外線発光管と受光管を備えており、発光管からは特定の周波数の赤外線が放射され、検出方向が障害物(反射面)に当たると赤外線が照射されます。反射されて受信管で受信され、コンパレータ回路で処理された後、緑色のインジケータライトが点灯し、信号出力が出力デジタル信号(低レベル信号)に接続されます。ポテンショメータノブで調整でき、有効距離範囲は2~30cm、動作電圧は3.3v~5vです。センサーの検出距離はポテンショメータによって調整可能で、干渉が少なく、組み立てが簡単で使いやすいという特徴があり、ロボットの障害物回避、障害物回避車、組立ラインのカウント、黒と白の線の追跡。\n\nモジュールパラメータ\nモジュールが前方の障害物信号を検出すると、回路基板の緑色のインジケータライトが点灯し、OUTポートは継続的に低レベル信号を出力します\n\nモジュールは2~の距離を測定します~30cm、検出角度は35°、検出距離はポテンショメータによって調整でき、ポテンショメータを時計回りに調整すると検出距離は増加し、ポテンショメータを反時計回りに調整すると検出距離は減少します。\n\nセンサーはアクティブ赤外線反射検出であるため、ターゲットの反射率と形状が検出距離の鍵となります。このうち黒の検出距離は小さく、白の検出距離は長く、面積の小さい物体の距離は小さく、面積の大きな物体の距離は大きくなります。\n\nセンサー モジュールの出力ポート OUT は、マイクロコントローラーの IO ポートに直接接続することも、5V リレーを直接駆動することもできます\n\nコンパレーターは安定して動作する LM393 を採用しています。\n\nA 3-5v DC 電源を使用してモジュールに電力を供給できます。電源がオンになると、赤い電源インジケーターライトが点灯します。\n\n3mm のネジ穴があるため、固定と取り付けが簡単です。\n\n回路基板のサイズ: 3.2CM*1.4CM\n\nそれぞれモジュールがリリースされました。 製品はポテンショメータを介してしきい値比較電圧を調整済みです。特別な場合を除き、ポテンショメータを任意に調整しないでください。\n\nインターフェイスの説明\n1. VCC は 3.3v ~ 5v の電圧に外部接続されます (5v シングルチップ マイクロコンピュータおよび 3.3v シングルチップ マイクロコンピュータに直接接続可能)\n\n2. GND は外部 GND に接続されます\n \n3、OUT 小型ボード デジタル出力インターフェイス (0 および 1)。

 

 コード:

 

#include <REGX52.H>
#include <Delay.H>
#include <xingshi.H>


sbit out1 = P1^1;  //左边的红外探头
sbit out2 = P1^2;  //右边的红外探头
   

void HWbizhang()
{
    if(out1 == 0)     //左边检测到障碍物
    {
        tingzhi() ;     //小车停止
        Delay(500);            //停止500ms
    houtui();              //小车后退
        Delay(1000);    //后退1000ms
        youzhuan();     //小车右转
        Delay(2000);
    qianji();         
    }
    
    if(out2 == 0)     //右边检测到障碍物
    {
        tingzhi() ;     //小车停止
        Delay(500);            //停止500ms
    houtui();              //小车后退
        Delay(1000);    //后退1000ms
        zuozhuan();     //小车左转
        Delay(2000);
    qianji();         
    }
    
    if((out1 == 1)&&(out2 == 1))
    {
        qianji();     
    }
    
    if((out1 == 0)&&(out1 == 0))
    {
        tingzhi() ;     //小车停止
        Delay(500);            //停止500ms
    houtui();              //小车后退
        Delay(1000);    //后退1000ms
        youzhuan();     //小车右转
        Delay(2000);
    qianji();         
    }
}

 4.超音波障害物回避モジュール

(1) 超音波モジュールに電源とアースを接続します。

(2) パルストリガー端子(trig)に20usのハイレベル方形波を入力します。

(3) 方形波が入力されると、モジュールは自動的に 8 つの 40KHz 音波を放射し、同時にエコー ピンのエコーのレベルが 0 から 1 に変化します (この時点でタイマーを開始する必要があります)。

(4) 超音波反射がモジュールで受信されると、エコー ピンのレベルが 1 から 0 に変化し (この時点でタイマーのカウントを停止する必要があります)、タイマーによって記録された時間は、の合計持続時間を返す放出

空気中の音速は 344 m/s であるため、測定距離を計算できます。

 

 

コード 

#include <REGX52.H>
#include <intrins.H>
#include <xingshi.H>
#include <Timer.H>
sbit Trig = P2^1;
sbit Echo = P2^2;


unsigned char sum; //超声波测距
unsigned char stence; //与障碍物的限制距离

//***************************************************
void Delay1000ms()		//@11.0592MHz 延时一秒
{
	unsigned char i, j, k;

	_nop_();
	i = 8;
	j = 1;
	k = 243;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}

//**********************************************
void Delay20us()		//@11.0592MHz  延时20us
{
	unsigned char i;

	_nop_();
	i = 6;
	while (--i);
}

//******************************************

void chaoshengbo()
{
	
	TMOD &= 0x0F;			//设置定时器模式
	TL1 = 0;				//设置定时初始值
	TH1 = 0;				//设置定时初始值
				

	Trig = 1; //发射20US的脉冲
	Delay20us();
	Trig = 0;  //关闭
	
	while(!Echo);//等待返回脉冲
		TR1 = 1;							//打开定时器1
	while(!Echo);//返回脉冲结束
		TR1 = 0;							//关闭定时器1
	
	sum = ((TH1*256+TL1)*0.034)/2+1;					//计算距离公式
	
	if( stence > sum)
	{
		tingzhi();
		Delay1000ms();
	}
	
}






 

5.Bluetoothモジュール

Bluetoothモジュールの紹介:

        Bluetoothモジュールはシングルチップマイコンのシリアルポートに接続することができ、パソコンや携帯電話のBluetoothを利用してシングルチップマイコンとの非同期全二重通信を実現します。一般的な Bluetooth モジュールには、HC-05 マスター/スレーブ統合 Bluetooth モジュール、HC-06 スレーブ Bluetooth モジュール、および低電力 BLE Bluetooth モジュール (cc2540 または cc2541) が含まれます。さまざまな Bluetooth モジュールの AT コマンド セットは、まったく同じではありません。

        動作モード: AT モード。この時点では、AT コマンドをモジュールに送信できるため、モジュールのパラメータを照会したり、モジュールを設定したりできます。このとき、インジケーターライトはゆっくり点滅します。\nトランスペアレント モード、つまり Bluetooth モジュールが接続されている場合、データを Bluetooth モジュールに直接送信でき、何を送信しても Bluetooth モジュールは相手にデータを直接送信します。(この時点でATコマンドを送信することは無効です。)

        Bluetooth モジュールの使用: Bluetooth モジュールをセットアップして使用する最初のステップは、ボー レートなどのパラメータを設定することです。この方法は、USB-to-TTL モジュールを Bluetooth モジュールに接続することです。接続方法は\n\n USB-to-TTL モジュールをコンピュータに挿入し、デバイス マネージャにシリアル ポートが表示されるかどうかを確認します。 。次に、シリアル ポート デバッグ アシスタントを使用して、コマンドをクエリまたは操作するための AT コマンドを作成します。Bluetooth モジュールの応答は、シリアル デバッグ アシスタントの受信領域に表示されます。

 

 

 

コード: 

#include <REGX52.H>
#include <intrins.H>
#include <xingshi.H>


#define left     'C'
#define right    'D'
#define up       'A'
#define down     'B'
#define stop     'F'

unsigned char U_data;     //接受数据存放
unsigned char Way; 


void UartInit(void)        //[email protected]
{
    PCON &= 0x7F;            //波特率不倍速
    SCON = 0x50;            //8位数据,可变波特率
//AUXR &= 0xBF;            //定时器时钟12T模式
//AUXR &= 0xFE;            //串口1选择定时器1为波特率发生器
    TMOD &= 0x0F;             //设置定时器模式
    TMOD |= 0x20;             //设置定时器模式
    TL1 = 0xFD;                //设置定时初始值
    TH1 = 0xFD;                //设置定时重载值
    ET1 = 0;                     //禁止定时器中断
    TR1 = 1;                  //定时器1开始计时
    EA  = 1;
    ES  = 1;
}

void receive(unsigned char m)
{
    
    switch(m)
    {
        
        case  'A':      //前进
            qianji();
        break;
        
        case  'C':
            zuozhuan();    // 左转
        break;
        
        case  'D':
            youzhuan();     // 右转
        break;
        
        case 'B':
            houtui();   //  后退
        break;
        
        case 'F':      // 停止
             tingzhi();
        break;
        
    }
        
}
//***************************************************************************
    
void UartInit_seve() interrupt 4
{
    
    tingzhi();
    RI = 0;                  //清除接受中断标志位
    U_data = SBUF;                    //接受数据
    receive(U_data);
    
}

 

3. その他のモジュール 

1. sg90ステアリングギア

SG90サーボの紹介

       SG90 ステアリング ギアは位置 (角度) サーボ ドライブで、角度を一定に変更する必要があり、維持できる制御システムに適しています。ロボットの電気機械制御システムにおいて、ステアリングギアの制御効果は性能に影響を与える重要な要素です。ステアリング ギアは、マイクロ電気機械システムや航空機モデルの基本的な出力アクチュエータとして使用でき、そのシンプルな制御と出力により、シングルチップ マイクロコンピュータ システムとのインターフェースが非常に簡単になります。

SG90サーボアプリケーション

      SG90ステアリングギアは現在、飛行機模型、潜水艦模型、遠隔操作ロボットなどの航空機模型などの高級遠隔操作玩具に広く使用されています。

SG90サーボワイヤー

      SG90サーボにはGND(茶色の線)、VCC(赤色の線)、SIG(黄色の線)の3本の線があり、それぞれアース線、電源線、信号線となっています。

SG90サーボの動作原理

      制御信号は受信機のチャネルから信号変調チップに入り、DC バイアス電圧を取得します。内部に基準回路を内蔵しており、周期20ms、幅1.5msの基準信号を生成し、得られたDCバイアス電圧とポテンショメータの電圧を比較して電圧差出力を取得します。最後に、電圧差の正と負の出力がモーター ドライバー チップに送信され、モーターの正と負の回転が決定されます。モーターの速度が一定の場合、カスケード減速機を介してポテンショメータが回転駆動され、電圧差が 0 になり、モーターの回転が停止します。もちろん、その特定の動作原理を理解する必要はありません。その制御原理を知っていれば十分です。トランジスタと同じように、スイッチ管や増幅管として使えることだけ知っていればよく、管の中の電子がどのように流れるかについては、まったく考える必要はありません。
 

 

#include <REGX52.H>
#include <intrins.H>
#include <Delay.h>
#include <xingshi.h>
#include  <Timer1.h>

sbit PWM = P1^0;   //型号输入点

unsigned char counter,angle;       //计数值和旋转角度


void Timer1_Init()		//500微秒@11.0592MHz
{
//	AUXR &= 0xBF;			//定时器时钟12T模式
	TMOD &= 0x0F;			//设置定时器模式
	TL1 = 0x33;				//设置定时初始值
	TH1 = 0xFE;				//设置定时初始值
	TF1 = 0;				//清除TF1标志
	TR1 = 1;	
	ET1 = 1;
	EA  = 1;
  PT1 = 1;	
	
}

//**************************************************
void Timer1_Sever() interrupt 3
{
	
	TL1 = 0x33;				//设置定时初始值
	TH1 = 0xFE;				//设置定时初始值
	counter++;
	
	if(counter >= 40)  //设置周期为2毫秒
	{
	  counter=0;
	}
	
	if(counter < angle)
	{
	  PWM = 1;	
	}
	else
	{
		PWM = 0;
	}
}

//************************************************************

void Duoji()    //定时器定时500微妙
{

	counter = 0; 
	angle = 1;     //   0度
	Delay(500);

	counter = 0;     
	angle = 2;     //   45度  (-45)
	Delay(500);
	
	counter = 0;
	angle = 3;     //  90度(正)归中
	Delay(500);
	Delay(500);
	
	counter = 0;   //  135度  (+45)
	angle = 4;
	Delay(500);
	
	counter = 0;
	angle = 5;      //  180度
	Delay(500);

	
	
}












2. 電圧調整モジュール

LM2596 は、最大入力電圧 40V、最大出力電圧 37V の一般的に使用されるスイッチング電源チップです。LM2596 には 4 つのバージョン、3 つの固定出力バージョン (3.3V、5V、12V)、および最大値の ADJ 調整可能なバージョンがあります。出力電流が 3A の場合、変換効率は約 80% ~ 90% に達します。DCDC モジュール 1205 モジュールを使用して 12V から 5V 出力を実現すると、1205 モジュールを使用した電圧変換の原理も簡単です。もう 1 つの利点は、入力と出力は絶縁されており、チップの出力電力は 2W、最大出力電流は 400mA です。

 4. まとめ

51個のシングルチップマイコンをベースにしたスマートカーは数多くの種類があり、ブロガーも初心者ですので、記事に間違いがあればご指摘ください、この記事が皆さんのお役に立てれば幸いです、皆さんも一緒に頑張っていきましょう!

おすすめ

転載: blog.csdn.net/dxt258013/article/details/129900598