基于51单片机的蓝牙循迹小车.pdf
- 文档编号:18633370
- 上传时间:2023-08-23
- 格式:PDF
- 页数:12
- 大小:531.11KB
基于51单片机的蓝牙循迹小车.pdf
《基于51单片机的蓝牙循迹小车.pdf》由会员分享,可在线阅读,更多相关《基于51单片机的蓝牙循迹小车.pdf(12页珍藏版)》请在冰点文库上搜索。
基于51单机的蓝循迹车51单机课程设计做了辆蓝车,下是对课程设计内容的些总结基于51单机的蓝循迹车硬件模块L298N具体如图所:
作原理简介:
可以直接驱动两路3-16V直流电机,并提供了5V输出接(输最低只要6V),可以给5V单机电路系统供电。
输电压最好是7v以上,输电压低了会导致系列问题,在后有具体实践总结具体应:
可以便的控制直流电机速度和向,也可以控制2相步进电机,5线4相步进电机。
管脚应可以参考如图所:
板载5V输出使能:
如果跳线帽接上,则5v端可以输出电压,若跳线帽没有街上,则12v输端没有作,只能5v输输(如果不接上直接废了,5v输基本不能使电机模块正常作)AB通道使能:
端接在上表AB通道直保持电平,处于使能状态,并且电压和5v输端电压相同;若处于没有使能状态,直接影响到输端,让其法作!
单机IO控制输+马达AB输出:
顾名思义,四个IO输端和单机四个IO相连,然后通过电机驱动模块(双H桥电路)马达AB输出,以获得更的驱动直流减速电机的能,带动电机转动!
B站直接搜L298N电机驱动模块,有视频详情介绍问题以及解决案下是些使L298N驱动电机的些问题以及解决法总结问题:
1.直流减速电机不能正常转动,个轮只能单向转动2.使能端帽摘下来后,pwm信号输问题3.供电问题解决:
1.起初4节南孚电池供电,万表测电压于4.8v(电池快没啥电了),更换四节电池后万表测得4.9v+,上出现的问题解决了2.输端电压于7v(得四节南孚电池6v不到供电),使能电压和5v输端的电压相同,经测量5v端电压只有3.8v左右,故使能电压就只有3.8v左右了,对PWM输出使能有定影响3.L298N电机驱动中有稳压降压模块,如果供电够(于7v),那么稳压降压模块会发挥作,使得5v输端、使能端、马达电机都能有稳定的5v电平输出。
红外对管作原理具体如图所:
些注意事项如下:
VCC:
外接3.3-5v(可以直接接L298N的5v端)GND:
外接GND;OUT:
外接开发板或者单机的IO(有遮挡输出低电平,遮挡输出电平)距离较远/未感应到障碍物:
输出指灯灭,OUT引脚输出电平距离较近,感应到障碍物时,输出指灯亮,OUT输出低电平距离较近,感应到物体时候,管接收不到,输出指灯灭,OUT引脚输出电平检测距离230mm,可以通过电位器进调节;顺时针调节,检测距离增加;逆时针调节,检测距离减少HC-05蓝模块模块介绍主要于短距离的数据线传输领域。
可以便的和PC机的蓝设备相连,也可以两个模块之间的数据互通。
避免繁琐的线缆连接,能直接替代串线。
作原理如图所,核模块使蓝模块从模块,引出接包括VCC,GND,TXD,RXD(TX、RX和串通讯有关)具体使事项:
led指蓝连接状态,闪烁表没有蓝连接,需要进配对;常亮表蓝已连接并打开了端配对以后当全双串使,需了解任何蓝协议,但仅持8位数据位、1位停位、奇偶校验的通信格式。
在未建蓝连接时持通过AT指令设置波特率、名称、配对密码,设置的参数掉电保存。
蓝连接以后动切换到透传模式蓝的使AT指令HC-05进AT命令:
按住按键或EN脚拉,此时灯是慢闪,HC-05进AT命令模式,默认波特率是38400(原始模式),原始模式下直处于AT命令模式状态。
测试通讯发送:
AT(返回OK,秒左右发次)返回:
OK改蓝串通讯波特率发送:
AT+BAUDx其中x代表0-C字符x字符x波特率(bauds)波特率(bauds)11200224003480049600(常)5192006384007576008115200(常)9230400A460800B921600C1382400返回:
BAUD(波特率)改蓝名称发送:
AT+NAMEname返回:
OK参数name:
所要设置的当前名称,即蓝被搜索到的名称。
20个字符以内改蓝配对密码发送:
AT+PSWDxxxx返回:
+PSWD=xxxx例如设置密码888888AT+PSWD123456返回密码123456更改模块的主从模式发送:
AT+ROLE=1(设置模块为主模式Master)返回:
+ROLE=1发送:
AT+ROLE=0(设置模块为从模式Slave)返回:
+ROLE=0TT电机下为些电机注意事项不带编码器,不能测速,测速的话需要添加测速模块;性能也没有编码器电机好。
两个电阻端,通过导线和AB马达输出端连接,输出电平相反,电机实现前后转动;输出电平均为0,电机停转动;硬件接线具体参考简图所:
软件部分电机车轮chelun.c#include#includeCheLun.h#include/*/*相关端定义*/*/sbitENA=P10;sbitLeft_IN1=P11;sbitLeft_IN2=P12;sbitRight_IN3=P13;sbitRight_IN4=P14;sbitENB=P15;/左右轮PWM当前值左右轮PWM较值unsignedcharpwm_val_left;unsignedcharpwm_val_right;unsignedcharpush_val_left;unsignedcharpush_val_right;/改变这的值就是改变左右轮的占空,实现调转速unsignedcharLeft_Speed_Ratio=15;/左电机转速设定unsignedcharRight_Speed_Ratio=15;/右电机转速设定/左右电机标志位bitLeft_moto_flag=1;bitRight_moto_flag=1;voidDelay1000ms()/11.0592MHzunsignedchari,j,k;_nop_();i=8;j=1;k=243;dodowhile(-k);while(-j);while(-i);/*左边电机调速函数*/voidpwm_out_left_moto()if(Left_moto_flag)if(pwm_val_left20)/PWM当前值增到20之后变为0,相当于个周期pwm_val_left=0;elseENA=0;/*右边电机调速函数*/voidpwm_out_right_moto()if(Left_moto_flag)if(pwm_val_right20)pwm_val_right=0;elseENB=0;/左右轮前进后退停,根据车视情况测voidLeft_moto_Go()Left_IN1=0,Left_IN2=1;voidLeft_moto_Back()Left_IN1=1,Left_IN2=0;voidLeft_moto_Stop()Left_IN1=1,Left_IN2=1;voidRight_moto_Go()Right_IN3=1,Right_IN4=0;voidRight_moto_Back()Right_IN3=0;Right_IN4=1;voidRight_moto_Stop()Right_IN3=1;Right_IN4=1;voidGoStright()/车前进/*设置较值,左右轮各前转*/push_val_left=Left_Speed_Ratio;push_val_right=Right_Speed_Ratio;Left_moto_Go();Right_moto_Go();voidGoBack()/车后退push_val_left=Left_Speed_Ratio;push_val_right=Right_Speed_Ratio;voidTurnLeft()/车左转push_val_right=10;/把右轮速度降低Right_moto_Go();Left_moto_Stop();voidTurnRight()/车右转push_val_left=10;/把左轮速度降低Right_moto_Stop();Left_moto_Go();voidStop()/车停Left_moto_Stop();Right_moto_Stop();voidRotate()/车原地转圈push_val_left=Left_Speed_Ratio;push_val_right=Right_Speed_Ratio;Left_moto_Back();Right_moto_Go();chelun.h#ifndef_CHELUN_H_#define_CHELUN_H_/预编译,防头件重复定义voidDelay1000ms();/1000ms延时函数/关于轮电机voidLeft_moto_Go(void);voidLeft_moto_Back(void);voidLeft_moto_Stop(void);/左轮前进后退停函数voidRight_moto_Go(void);voidRight_moto_Back(void);voidRight_moto_Stop(void);/右轮前进后退停函数voidpwm_out_left_moto(void);/左边电机调速函数voidpwm_out_right_moto(void);/右边电机调速函数voidRotate();/车原地转圈voidStop();/车停voidTurnRight();/车右转voidTurnLeft();/车左转voidGoBack();/车后退voidGoStright();/车前进#endif红外对管RED.c/*红外对管的使输出端接单机的io,有遮挡输出0,遮挡输出1*/#include#includeRED.H/红外对管,感应到线不亮指灯且输出电平,未感应到就亮指灯且输出低电平sbitRED_LEFT=P26;sbitRED_RIGHT=P27;/定义两个红外对管输出端接的io/检测灯sbitLeft_led=P21;sbitRight_led=P20;voidRED_test()RED_RIGHT=1;if(RED_RIGHT=0)/没感应到线LED1=1;elseLED1=0;/感应到线/感应到线指灯灭输出1没感应到线指灯亮输出0voidxj_Run()/碰到线为1,没碰到线为0if(Left_led=0&Right_led=1)/右边碰到线TurnLeft();/左转if(Left_led=1&Right_led=0)/左边碰到线TurnRight();/右转if(Left_led=0&Right_led=0)/没有碰到GoStright();/前进RED.h#ifndef_RED_H_#define_RED_H_voidRED_test();voidxj_Run();#endif蓝模块HR_SC.c#include#includeHR_SC.Hunsignedcharflag;/*蓝控制车前进后腿左转右转通过按键实现*/voidInit_UART()TMOD&=0X00;TMOD|=0X21;/开启定时器1,采作式2,8位动重装载/开启定时器0,采作式1SCON=0X50;/串通信采取作式1,REN位打开PCON=0X80;/波特率加倍TH1=0XFA;TL1=0XFA;/9600蓝配置好了也是这个波特率ET1=0;ES=1;EA=1;/开启定时器中断TR1=1;voidInit_Timer0()TH0=(65535-1000)/256;TL0=(65535-1000)%256;ET0=1;EA=1;TR0=1;voidSendByte(unsignedchartemp)/串发送数据SBUF=temp;while(TI=0);TI=0;voidHR_SC_INPUT()flag=SBUF;/接收机发来的数据while(RI=0);/等待接收完成RI=0;SendByte(flag);HR_SC.h#ifndef_HR_SC_H_#define_HR_SC_H_voidInit_UART();/初始化串voidHR_SC_INPUT();voidInit_Timer0();voidSendByte(unsignedchartemp);#endif循迹车main.c/*循迹的main函数,主要实现循迹功能*/#include#includeCheLun.h#includeRED.hexternunsignedcharpwm_val_left;externunsignedcharpwm_val_right;voidInit_Timer0()TMOD=0X01;TH0=(65535-1000)/256;TL0=(65535-1000)%256;ET0=1;EA=1;TR0=1;intmain()Init_Timer0();while
(1)xj_Run();voidTimer0_ser()interrupt1TH0=(65535-1000)/256;TL0=(65535-1000)%256;pwm_val_left+;pwm_val_right+;pwm_out_left_moto();pwm_out_right_moto();蓝车main.c/*蓝控制车*/#include#includeHR_SC.H#includeRED.H#includeCHELUN.HsbitBEEP=P16;externunsignedcharflag;externunsignedcharLeft_Speed_Ratio;/电机转速设定externunsignedcharRight_Speed_Ratio;externunsignedcharpwm_val_left;externunsignedcharpwm_val_right;voidAdd_Speed_Ratio()/调速函数Left_Speed_Ratio+;Right_Speed_Ratio+;voidRemine_Speed_Ratio()/调速函数Left_Speed_Ratio-;Right_Speed_Ratio-;voidbeep_ring()BEEP=0;Delay1000ms();BEEP=1;intmain()Init_UART();Init_Timer0();while
(1)switch(flag)caseA:
Add_Speed_Ratio();break;/加速caseB:
Remine_Speed_Ratio();break;/减速caseG:
GoStright();break;/前进caseK:
GoBack();break;/后退caseH:
TurnLeft();break;/左转caseJ:
TurnRight();break;/右转caseI:
beep_ring();Stop();break;/停voidUART_ser()interrupt4HR_SC_INPUT();voidTimer0_ser()interrupt1TH0=(65535-1000)/256;TL0=(65535-1000)%256;pwm_val_left+;pwm_val_right+;pwm_out_left_moto();pwm_out_right_moto();/switch(flag)/蓝发送按键测试/caseG:
P2=0XFE;break;/前进/caseK:
P2=0XFD;break;/后退/caseH:
P2=0XFB;break;/左转/caseJ:
P2=0XF7;break;/右转/caseI:
P2=0XEF;break;/停总结实现过程+问题.拼装车模:
对车的总体构架有能有很好的理解.L298N电机驱动模块的测试+代码测试车轮运动情况:
了解到L298N的作原理,测试电机运动情况可以增强代码调试能,中间遇到过些列不正常情况经过总结部分都和供电有关(L298N供电最好12v锂电池供电,我的四节南孚电池只有6v左右,电机驱动模块不稳)建议12v供电三.红外对管模块的测试实际情况下红外对管的识别度不是很好,很容易受到外界的扰,两个红外对管循迹有很误差,循迹可以采三路循迹模块或者更好好的案!
在循迹转弯时候讲车速降低点,不然车容易跑飞,脱离循迹轨道,当然可以加PID控制算法根据具体情况来控制车速(不建议51两轮车,万向轮不好操作)四.蓝模块的测试蓝可以理解为个机上的串调试助,通过机发送或接收指令,平时的UART都是ch340电平转化芯来实现单机和电脑串的通讯!
1.简单理解为不赚差价的中间商!
主机发数据,通过蓝模块的透传模式到从机,从机接收到对应的响应信号
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 51 单片机 蓝牙 小车