首页 > 其他分享 >51单片机蓝牙遥控小车中遇到的问题及解决方案&步骤心得

51单片机蓝牙遥控小车中遇到的问题及解决方案&步骤心得

时间:2024-11-01 19:46:37浏览次数:5  
标签:定时器 引脚 蓝牙 void 高电平 51 单片机

一、遇到的问题及解决方案

Q1:马达与车盘连接不牢固。

A:可用橡皮筋缠紧连接处(如图)。

50e0789653044189a12e293716af73b7.jpeg

Q2:L298N电机驱动模块无法驱动电机。

A:若是仅仅连接了一个EN引脚则可能需要对ENA(或B)的两个引脚输入同样的电平。

c3b9f6e528bb4c59a7ecd062a2068dac.jpeg

a8e10f56f991457db9d3a7d55f91d68d.png

9d7b599ee9fe461b826104737d9b4584.png

Q3:测试蓝牙时无法将程序烧录到单片机上。

A:蓝牙模块的收发口与单片机的收发口(P3_0 P3_1)不能连接。

Q4:通过蓝牙发送数据小车无法接收。

A:注意是蓝牙的发送端连接单片机的接收端,接收端连接发送端。

Q5:程序无法烧录到单片机。

A:勾选图示绿色打钩项,慎勾,原因未知,本人靠此解决问题,不了解是否存在隐患。也有可能是串口号选择错误。

47e43941a8ea49ffbd50383ec0122106.png

Q6:想将PWM调速、超声波避障、蓝牙通信同时使用在小车上。

A:使用3个定时器,可利用定时器2中断实现PWM调速,定时器1实现串口(蓝牙)通信,定时器0实现超声波避障。

e830e2fbafbb4bc88ab540a337c6aa4a.png

a6843fff071b48e59f8b41061679e077.png

7cf440d2c3474931a702b5613b313cec.png

a314cb2b9d32404faa5ea5011635e391.png

Q7:小车走直线走不直。

A:无法仅仅依靠上述模块完美解决(猜测需要测速然后用PID?控制轮子PWM波以控制转速来使小车走直线。)

此外也可尝试更改左右电机PWM波改善此问题但效果并不理想。

Q8:蓝牙控制有明显延迟。

A:蓝牙模块质量过低或手机蓝牙传输速度慢。前者可更换蓝牙模块,后者可换个手机确认是否是手机问题。

二、步骤心得

1.前备知识

寻迹模块

简介:TCRT5000传感器的红外发射二极管不断发射红外线,当发射出的红外线没有被反射回来或被反射回来但强度不够大时,红外接收管一直处于关断状态,此时模块的输出端为高电平,指示二极管一直处于熄灭状态。

接线

1、VCC:接电源正极(3-5V)

2、GND:接电源负极

3、D0:TTL开关信号输出

4、A0:不接

L289N

767963334cf14a9198bc2c55edc5d4d7.png

引脚:

  • IN1, IN2, IN3, IN4: 输入控制引脚,控制电机的转动方向。
  • ENA, ENB: 使能引脚,用于启动和停止电机。
  • OUT1, OUT2, OUT3, OUT4: 输出引脚,连接到电机端子。
  • VSS: 逻辑电压供应引脚。
  • VS: 电机电压供应引脚。
  • GND: 地引脚。

接线

  • 12V供电接上7-12V电压,供电GND处与单片机共地即可,5V供电处会输出一个5V的电压,可以用于给单片机供电。

控制逻辑:

be627b6cc3a84bb399c02bf5b910a8a5.png

由图可知:

启动电机1:使能引脚ENA设置为高电平 

停止电机1:使能引脚ENA设置为低电平

IN1高电平,IN2低电平:电机1正转

IN1低电平,IN2高电平:电机1反转

若想要控制电机转速则需要PWM调速

PWM

1f0078dfb92d4bb1aa576aaa64d2576b.jpg

 使定时器在0-99循环自增,通过设置一个比较值,若计数值小于比较值则输出高电平,大于情况以此类推。


//前略

void Back()
{	
	CompareA=35;
	CompareB=30;
	Z=0;Y=1;
	IN3=0;IN4=1;

}


void Timer2_Routine() interrupt 5
{
	TF2=0;
	RCAP2L= 0x9C;		
	RCAP2H = 0xFF;		
	CounterA++;
	CounterA%=100;	 
	CounterB++;
	CounterB%=100;	
	if(CounterA<CompareA)	
	{
		ENA1=1;
		ENA2=1;
	}
	else				
	{
		ENA1=0;
		ENA2=0;
	}
	
	if(CounterB<CompareB)	
	{
		ENB1=1;
		ENB2=1;
	}
	else				
	{
		ENB1=0;
		ENB2=0;
	}
	
}

超声波(HC-SR04)

05ea0b6e168e415f9044b7c5b81d65c0.jpeg

HC-SR04参数:

  1. 工作电压:DC5V
  2. 静态电流:小于2mA
  3. 电平信号输出:高5V ,低0V
  4. 感应角度:不大于15度
  5. 探测距离:2cm-450cm

工作原理:

db1bda79eff94056a8a15df09dc53543.png

(1)采用IO触发测距,给至少10us的高电平信号;
(2)模块自动发送8个40khz的方波,自动检测是否有信号返回;
(3)有信号返回,通过IO输出一高电平,高电平持续的时间就是超声波从发射到返回的时间.
(4)单片机将得到的数据进行处理计算,公式如下

测试距离 = (高电平时间 * 声速(340M / S)) /2
 

//前略

void T0_Init()      
{
    TMOD&=0xF0;
	TMOD|=0x01;
    TH0=0;
    TL0=0;
}

void UT_Init()
{
    Echo=0;
    Trig=0;
    T0_Init();
}

void UT_triggr()
{
    Trig=1;
    Delay10us(2);
    Trig=0;    
}

unsigned int measure()
{
    unsigned int a,distance;
    while(Echo==0);
        TR0=1;
    while(Echo);
        TR0=0;
    a=TH0*256+TL0;
       TH0=0;
       TL0=0;
    distance= a*1.7/100;
    return distance;        
}

   蓝牙模块(HC-05):

2ed9e90664e74519b44c7388b2a0ac92.png

接线:

e5191b7076bb4901984a889cd8164d83.png

#include <REGX52.H>


void UART_Init()
{
	SCON=0xD0;
	PCON &= 0x7F;
	TMOD &= 0x0F;		//设置定时器模式
	TMOD |= 0x20;		//设置定时器模式
	TL1 = 0xFD;		//设定定时初值
	TH1 = 0xFD;		//设定定时器重装值
	ET1 = 0;		//禁止定时器1中断
	TR1 = 1;		//启动定时器1
	EA=1;
	ES=1;
}


void UART_SendByte(unsigned char Byte)
{
	SBUF=Byte;
	while(TI==0);
	TI=0;
}


void UART_Routine() interrupt 4
{
	if(RI==1)
	{
		//语句
		RI=0;
	}
}

文末附有参考文章链接,可点击链接详细了解。

2、宏观思路

定义一个“turn”函数将其放入死循环中,motor使用定时器中断确保时刻具有动力,蓝牙通讯使用串口中断确保可以顺利切换模式。

代码如下:

//前引用头文件、配置引脚略

void turn()
{
	if(mode==1)            //超声波避障模式
	{
		UT_triggr();
		dis=measure();
		if(dis<=30) GoRight();
		if(dis>=30) GoForward();
	}
	else if(mode==0)       //寻迹模式
	{	
		if(LeftSersor == 0 && RightSersor == 0) GoForward();   //直行
		//以此类推
	}
	else if(mode==2)        //独立控制前进
	{
		GoForward();
	}
	//中略 独立控制行进方向
      else Stop();          //停止
}


void main()
{
	UART_Init();		    //串口初始化
	Timer2_Init();
	mode=7;                //初始模式为停止模式
	while(1) turn();	
}

void UART_Routine() interrupt 4
{
	if(RI==1)				//如果接收标志位为1,接收到了数据
	{

		switch(SBUF)
		{
			case 0x11:mode=0;break;
			//发送16进制数对应模式略
			default :Stop();
		}

		UART_SendByte(SBUF);	//将受到的数据发回串口
		RI=0;					//接收标志位清0
	}
}

三、视频

<iframe allowfullscreen="true" data-mediaembed="csdn" frameborder="0" id="MVv88AdZ-1730351483540" src="https://live.csdn.net/v/embed/431944"></iframe>

蓝牙小车


                        
参考文章:

基于51单片机的超声波测距_51超声波测距-CSDN博客

电机驱动----L298N-CSDN博客

【超详细】C51单片机与HC-05蓝牙模块实现手机点灯_c51蓝牙hc05-CSDN博客

声明:此文章仅是作者对51蓝牙小车开发经验的分享,若读者使用本人建议后出现任何问题应由读者自己承担。

                                                                                                                                                          

标签:定时器,引脚,蓝牙,void,高电平,51,单片机
From: https://blog.csdn.net/2401_87428048/article/details/143371861

相关文章

  • 51c~C语言~合集1
    一、C语言和C++的区别 C语言虽说经常和C++在一起被大家提起,但可千万不要以为它们是一个东西。现在我们常用的C语言是C89标准,C++是C++99标准的。C89就是在1989年制定的标准,如今最新的是C11和C++11标准。根据不同的标准,它们的功能也会有所不同,但是越新的版本支持的编译器越少,所以本......
  • AP5101C 支持PWM 调光功能 ,可通过DIM脚用 PWM 信号调节 LED 输出电流。
    AP5165B系统上电后通过VIN脚对芯片供电,当VIN电压高于2.5V后,芯片电路开始工作。为了芯片有更好的稳定性,建议VIN最小工作电压在3V以上,VIN脚对芯片地要并接一个1uF旁路电容。PCB布板的时VIN电容需要紧挨着端口布局。PWM调光设置AP5165B芯片可以通过外加PWM脉......
  • AP5165B 系统上电后通过 VIN 脚对芯片供电,当 VIN 电压高于 2.5V 后,芯片电路开始工作。
    产品描述AP5165B是一款外围电路简单的连续电流模式的降压型LED恒流驱动芯片。在输入电压高于LED电压时,可以有效地用于驱动一颗或者多颗串联LED。输出电流可调,大可达1A。适用于3-36V电压范围的非隔离式恒流LED驱动领域。AP5165B内置功率开关和一个高端电流检测电路,可以......
  • AP5165B 系统上电后通过 VIN 脚对芯片供电,当 VIN 电压高于 2.5V 后,芯片电路开始工作。
    产品描述AP5165B是一款外围电路简单的连续电流模式的降压型LED恒流驱动芯片。在输入电压高于LED电压时,可以有效地用于驱动一颗或者多颗串联LED。输出电流可调,最大可达1A。适用于3-36V电压范围的非隔离式恒流LED驱动领域。AP5165B内置功率开关和一个高端电流检测电路,可......
  • 基于python的语音识别与蓝牙通信的温控系统
    基于python的语音识别与蓝牙通信的温控系统大家好我是君君学姐,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于python的语音识别与蓝牙通信的温控系统。项目源码以及部署相关请联系小村学长,文末附上联系信息。......
  • 论文概览 |《Urban Analytics and City Science》2024.09 Vol.51 Issue.7
    本次给大家整理的是《EnvironmentandPlanningB:UrbanAnalyticsandCityScience》杂志2024年9月第51卷第7期的论文的题目和摘要,一共包括20篇SCI论文!论文1Spatialinequalitiesandcities:Areview空间不平等与城市:综述【摘要】ThisspecialissueofEnvironm......
  • SpringBoot社区老人颐养关爱平台05161(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表用户,活动类型,社区活动,志愿活动,健康申报,健康建议,活动报名开题报告内容一、项目名称社区老人颐养关爱平台设计与实现二、研究背景与意义随着老龄化社会......
  • 使用MicroPython开发ESP32系列单片机程序入门
    请参考网络ESP32教程地址:https://www.itprojects.cn/coursecenter-hardware.html以ESP32-S3为例讲述烧录固件过程1、下载Micropython固件。首次使用ESP32时,需要将micropython固件烧录到ESP32内。不同芯片,Micropython固件不同。固件下载地址 为:https://micropython.org/dow......
  • AP5126 是一款 PWM 工作模式,高效率、外围简单、内置功率管,适用于 12-80V 输入的高精
    高性能摩托车灯降压恒流ic全亮/半亮/循环模式短路保护AP5126产品描述AP5126是一款PWM工作模式,高效率、外围简单、内置功率管,适用于12-80V输入的高精度降压LED恒流驱动芯片。输出最大功率可达15W,最大电流1.2A。AP5126可实现全亮/半亮功能切换,通过MODE切换:全亮/半亮/......
  • AP5127 是一款 PWM 工作模式,高效率、外围简单、内置功率管,适用于 12-100V 输入的高精
    产品描述AP5127是一款PWM工作模式,高效率、外围简单、内置功率管,适用于12-100V输入的高精度降压LED恒流驱动芯片。输出最大功率可达25W,最大电流2.5A。AP5127可实现全亮/半亮功能切换,通过MODE切换:全亮/半亮/循环模式。AP5127工作频率固定在140KHZ,同时内置抖频电路,......