《手机蓝牙遥控智能小车》由会员分享,可在线阅读,更多相关《手机蓝牙遥控智能小车(13页珍藏版)》请在金锄头文库上搜索。
1、1模块化手机蓝牙遥控、 超声波避障及人体检 测智能小车说明书实用发明协会:徐鹏 王鹏2一小车说明1 小车采用传统 51 单片机控制,能实现手机蓝牙遥控超声波避障及人体检测功能,各种状态能在 LCD1602 液晶屏上直观的显示出来。2 小车地盘采用四个直流电机驱动,装有蓝牙模块一个超声波模块一个单片机系统板一块STC89C52RC 单片机一块电池一块LCD1602 液晶屏一块L9110 电机驱动模块两块稳压模块一块人体红外传感器模块两块及装饰 LED。二模块说明1 蓝牙模块:核心模块使用 HC-06 从模块,接口电平 3.3V,可以直接连接各种单片机,配对以后当全双工串口使用,仅支持 8 位数据
2、位、1 位停止位、无奇偶校验的通信格式,自身的TXD 直接连接到单片机 RXD,RXD 接单片机 TXD。 2 超声波模块:使用电压 5V,静态电流小于 2mA,电平输出高 5V 低 0V,感应角度不大于 15 度,探测距离 2cm-450cm。3 STC89C52RC:STC89C52RC 是 STC 公司生产的一种低功耗、高性能 CMOS8 位微控制器,具有以下标准功能: 8k 字节Flash,512 字节 RAM,32 位 I/O 口线,看门狗定时器,内置4KB EEPROM, MAX810 复位电路,3 个 16 位定时器/计数器,4 个外部中断,一个 7 向量 4 级中断结构(兼容传
3、统 51 的 5 向量 2 级中断结构) ,全双工串行口。另外 STC89X52 可降至30Hz 静态逻辑操作,支持 2 种软件可选择节电模式。空闲模式下,CPU 停止工作,允许 RAM、定时器/计数器、串口、中断继续工作。掉电保护方式下,RAM 内容被保存,振荡器被冻结,单片机一切工作停止,直到下一个中断或硬件复位为止。最高运作频率 35MHz,6T/12T 可选。4 L9110 电机驱动模块: 模块供电电压 2.5-12V,电机工作电压 2.5v-12V 之间,最大工作电流 0.8A,可以同时驱动 2 个直流电机,或者 1 个 4 线 2 相式步进电机。通过单片机给逻辑电压从而控制直流电机
4、的正反转。5 LM2596S 稳压模块:输入直流电压 3V 至 40V,输出直流电压 1.5V 至 35V 电压连续可调,高效率最大输出电流为3A。使用 SANYO 固态电容,高 Q 值大功率电感。6 单片机系统板:全部引出 P0 P1 P2 及 P3 接口, P0带上拉电阻,有 5V 电源接口,12MHz 晶振,有 RXD TXD GND 接口方便 STC 单片机的串口下载,有 ATMEL ISP 下载端口,方便AT89S 系列单片机下载,单片机紧锁座方便更换单片机。7 人体红外传感器模块:HC-SR50 热释电红外传感器是一种能检测人或动物发射的红外线而输出电信号的传感器,工作电压 5v-
5、20v 之间,它由陶瓷氧化物或压电晶体元件组成在元件两个表面做成电极,在传感器监测范围内温度有 T 的变化时,热4释电效应会在两个电极上会产生电荷 Q,即在两电极之间产生一微弱的电压 V。三功能说明1 超声波避障:利用单片机从控制口发一个 10US 以上的高电平,就可以在接收口等待高电平输出,一有输出就可以开定时器计时,当此口变为低电平时就可以读定时器的值,此时就为此次测距的时间,方可算出距离,如果距离小于设定的值小车采取转弯避障。2 蓝牙遥控:手机连接小车,通过上位机发送命令控制小车。四操作说明1 接通电源,打开单片机系统板开关,程序初始化开始。2 打开手机蓝牙,打开遥控软件界面如图 1-1
6、,等待和小车连接成功(蓝牙红色指示灯不再闪烁) 。3 等待 LCD1602 界面显示 select a function 字样,第一次按键小车开启手机蓝牙遥控功能,按下操作界面(图 1-1)对应按键小车即执行相应动作。第一次按键小车开启超声波避障功能此时小车自动前进,并遇到障碍物自动躲开,在执行避障过程中按键小车停止避障停在原地,再一次按键小车继续执行避障功能。5图 1-1五注意事项1 电池正负极严禁接反。2 严禁乱改动线路。3 严禁卡死轮胎以免烧毁电机。4 严禁小车从高处掉下。5 两个功能之间切换需要复位单片机。6 小车严禁沾到水。7 手机软件在附带 U 盘中。6附源程序一份: #inclu
7、de #define uchar unsigned char #define uint unsigned int #define GPIO P2/液晶数据输入口uchar a,bai,shi,ge,int0,int1; uint time,dist;sbit LCDE=P35;/液晶使能端 sbit RW=P36;/写入数据与命令选择端 sbit RS=P37;/读写选择端 sbit FLMA=P00;/电机逻辑电压接口 sbit FLMB=P01; sbit FRMA=P02; sbit FRMB=P03; sbit BLMA=P04; sbit BLMB=P05; sbit BRMA=P0
8、6; sbit BRMB=P07; sbit trig=P10; /触发控制信号输入 sbit echo=P11; /回响信号输出 uchar code wel=“Welcome you to“; /14 欢迎 uchar code exp=“experience!“; /13 体验 uchar code ini=“Initialize. “; /16 初始化 uchar code xup=“ XuPeng Made“; /16 徐鹏制作 uchar code sel=“Select function“; /15 选择功能 uchar code bul=“BluetoothControl“;
9、/16 蓝牙控制 uchar code avo=“Avoid obstacle “; /16 避障 uchar code dis=“Dist :“; /6 距离 uchar code fow=“Forward “; /14 前进 uchar code bac=“Back “; /14 后退 uchar code tul=“Turnleft “; /14 左转 uchar code tur=“Turnright “; /14 右转 uchar code sto=“Stop “; /14 停止void delay_20us() /延时 20us uchar a; for(a=0;a0;i-) fo
10、r(j=110;j0;j-); void LCDCom(unsigned char com) /LCD 写入命令函数 RW=0; RS=0; GPIO=com; Delay1ms(10); LCDE=1; Delay1ms(10); LCDE=0; void LCDwriteDate(unsigned char dat)/LCD 写入数据函数 RS=1; RW=0; GPIO=dat; Delay1ms(10); LCDE=1; Delay1ms(10); LCDE=0; void LCDInit()/LCD 初始化函数 LCDCom(0x38); LCDCom(0x0c); LCDCom(0
11、x06); LCDCom(0x01); void main()/主函数 uchar i; PCON=0x00; /波特率不加倍 SCON=0x50; /设置串口工作方式为 1 TMOD=0x21; /定时器 T1 工作方式 2,定时器 T0 工作 方式 1 TH1=0xfd; /定时器初值:9600 波特率 TL1=0xfd; TH0=0; /付初值 TL0=0; trig=0; TR1=1; /启动定时器 1 IT0=1; /外部中断 0 下降沿触发 IT1=1; /外部中断 1 下降沿触发 EX0=1; /开外部中断 010EX1=1; /开外部中断 1 EA=1; /开中断 ES=1;
12、/允许串口中断 PT0=1; /定时器 0 中断优先级最高LCDInit(); LCDCom(0x80); for(i=0;i14;i+) LCDwriteDate(weli); LCDCom(0x80+0x40); for(i=0;i13;i+) LCDwriteDate(expi); Delay1ms(2000); LCDCom(0x01); LCDCom(0x80); for(i=0;i16;i+) LCDwriteDate(inii); LCDCom(0x80+0x40); for(i=0;i16;i+) LCDwriteDate(xupi); Delay1ms(2000); LCDC
13、om(0x80); for(i=0;i15;i+) LCDwriteDate(seli); while(1) if(a=0x0e) LCDCom(0x80); for(i=0;i16;i+) LCDwriteDate(buli); while(1) switch(a) case 0x0e: forward(); Delay1ms(70);11LCDCom(0x80+0x40); for(i=0;i14;i+) LCDwriteDate(fowi); break;/前case 0x0c: back(); Delay1ms(70); LCDCom(0x80+0x40); for(i=0;i14;i
14、+) LCDwriteDate(baci); break;/后case 0x0b: turnleft(); Delay1ms(70); LCDCom(0x80+0x40); for(i=0;i14;i+) LCDwriteDate(tuli); break;/左case 0x09: turnright(); Delay1ms(70); LCDCom(0x80+0x40); for(i=0;i14;i+) LCDwriteDate(turi); break; /右case 0x04: stop(); Delay1ms(70); LCDCom(0x80+0x40); for(i=0;i14;i+)
15、 LCDwriteDate(stoi); break; /停default:break; if(int0=1)|(int1=1)|(int0=1) int1=0; LCDCom(0x80+0x40+0x0E); LCDwriteDate(N); LCDCom(0x80+0x40+0x0F);12LCDwriteDate(P); else if(int0=0) LCDwriteDate(H); LCDCom(0x80+0x40+0x0F); LCDwriteDate(P); else if(a=0x0c) LCDCom(0x80); for(i=0;i16;i+) LCDwriteDate(avoi); LCDCom(0x80+0x40); for(i=0;i6;i+) LCDwriteDate(disi); while(1) check(); if(dist=40) stop(); Del