智能小车系统开发_第1页
智能小车系统开发_第2页
智能小车系统开发_第3页
智能小车系统开发_第4页
智能小车系统开发_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于AT89s52单片机的语音提示的四则运算器的设计基于AT89s52单片机的语音提示的四则运算器的设计,该设计主要包括硬件设计部分和软件设计部分。硬件设计部分主要是对单片机,数据输入的4*4键盘,语音提示模块,数据显示模块的选择和设计。软件设计部分主要是对两个4位整数,1位小数进行四则运算,并将其运算结果通过数据显示模块显示出来,并有相应的语音提示。在计算器主体的表面上配设有电源接通、全清除健、数字健、小数点健、四则运算健、等号健与下载线共同形成双电源方式用语音提示的计算器,其中,在计算器主体的表面上还配设有显示从数字键、小数点健输入的数值的主显示器、按加法存储器(转换健)时将显示在主显示器中的数值进行转换后显示该数值的存储显示器、将主显示器和存储显示器的两个画面并列地配设并做成T通过从各种转换健输入来同时或者交替地显示两个画面显示的结构的二选行显示器、按下时将显示在主显示器中的数值转换至存储显示器的加法存储(转换键)、按下时将显示在主显示器中的数值从正向负或从负向正进行变更的减法存储(转换健)、按下两次时将显示在存储显示器中的数值清除的存储·清除健、按下时将显示在存储显示器中的数值转换至主显示器而按两次时则再次显示出在进行转换之前显示在主显示器中的数值的转换键。本设计是基于AT89S52单片机的语音提示的四则运算器,去除两画面变更显示。该设计总共有6个模块:电源模块、AT89S52最小系统模块、1602液晶显示模块、4*4键盘模块、语音提示模块和实时温度检测模块。

智能小车系统开发基于51单片机的手机蓝牙遥控(带重力感应)小车设计智能小车系统开发主要知识有电机的使用、舵机的使用、遥控小车设计、循迹小车设计、蓝牙小车设计、两轮平衡及机机械手。但是本次小车设计主要有电机的使用、遥控小车设计、蓝牙小车设计三部分。其余的部分暂时没有完成,后期继续改进,争取做到完美。图1图2智能车主要功能图3图4基于Android手机蓝牙遥控(带重力感应)小车设计随着物联网的兴起,Android手机以其独有的开放性优势正在为我们提供更多优质便捷的技术成果。而基于安卓手机蓝牙控制的智能小车DIY也越来越多的受到了电子爱好者的青睐。这里我们会带领大家设计一款基于安卓手机和以四驱小车为基础平台的蓝牙小车。1主要功能(1)(2)2实现原理本系统主由手机制端蓝牙收模块小车分三个部组组操手机端相应按键时手机会通蓝牙的形向单片发出相应指令单片机据相应指令就可2.1图1中的控制端界面又称为上位机软件,如图2所示,此软件可以通过Android开源eclipse开发环境和java语言开发而成。目前网上络有多种免费的小车蓝牙控制软件,对Android系统发不熟可在网下载一免费的制端软件从上面手机图可以看,ASCII码的形式发一个相的字符具体的符因上机操作面程序不同而同实验室前采用的软相应的是前进发的ASCII“A,后退时为字符“D”,左转时,为字符“C”,右转时,手为字符“B;当使用重力感应模式时,也是根据手机的平衡状态来发送这几个字符的。HC-06为蓝接收模通过与手端的蓝进行连接对从而收从机端发送过来的动作令使用蓝牙接到手机过来的令需转换串口的式通过单机的串图2 智能小车分主要单片机控器电机动和机等组蓝牙块接到手机端的信号将指令给单片单片机过分传递过来指令不执行不的程3硬件设计(1)蓝牙模块小车的硬件主要包括蓝牙模块部分和小车部分。蓝牙模块目前市面上出售的有主机模当于主机送模所只需使用机接收块然后把接到的信通过串口形式传给通常蓝牙机模块买回来在使时需要进蓝牙对和相该波特的设置具RXD接上51单片机的RXD源TXD不用接因为们只用它收手机牙信号不发数据它出默认设置波特率9600,不重新设置它的波特率的话,在写单片机串口程序时,也要将波特率设置为9600。(2)小车模块的程序即如图所小车上自控制器L298动模块单片机端口P1-P8接两个98的个控制端用于控四个机的正反转P30蓝牙模4软件设计蓝牙的序主要括手机控端程序小车下机程序对于机控制的界面相查询Android在写车的控程序时需要了上机发送的什指令在前的内容中们已ASCII时会发送个字符OF;按下后退ASCII一个字符OF;按下左转ASCII一个字符“F;按下右转ASCII一个字符ON;当使用重感应模时,也是据手机平衡状来发送这个字符,前进为ON、后退OD左转OC右转OB(注意重感应时有前进后退左转和右转咱状态没有释放态。有了这些,我们对单片机编程的思路就出来了—我们可以使用使用51单片机的串口通信来接收发送过来的ASCII码。打开串口中断,我们可以在串口中断服务函数中接收到字符用 if()语句来判断接收到的字符。例如if(a=='A')qingj();表示接收到的字符是A,也就是按前进时发送过来的,这时就可以在break前写上小车前进的代码;左转,右转,后退停止也是一样的。注意本来每种状态发送的是字符串,此时我们只需要使用其中的字符,按键控制时,前进为字符“A”、后退为字符“D”、左转为字符“C”、右转为字符“B”、停止为字符“F”,重力感应时,前进为字符“A”、后退为字符“D”、左转为字符“C”、右转为字符“B”、无停止状态,可关闭重力感模式即可).至于小车前进后退左转右转停止的代码,要根据你自己的电机机驱动来写。下面给出程序例子: /**************************************************************************** 硬件连接P2_0接驱动模块ENA 使能端,输入PWM信号调节速度P2_1接驱动模块ENB 使能端,输入PWM信号调节速度P1_0P1_1接IN1IN2当P1_0=1,P1_1=0;时左电机正转 驱动蓝色输出端OUT1OUT2接右电机P1_0P1_1接IN1IN2当P1_0=0,P1_1=1;时左电机反转P1_2P1_3接IN3IN4当P1_2=1,P1_3=0;时右电机正转 驱动蓝色输出端OUT3OUT4接左电机P1_2P1_3接IN3IN4当P1_2=0,P1_3=1;时右电机反转 P2_2接驱动模块ENA 使能端,输入PWM信号调节速度P2_3接驱动模块ENB 使能端,输入PWM信号调节速度P1_4P1_5接IN1IN2当P1_4=1,P1_5=0;时左电机正转 驱动蓝色输出端OUT1OUT2接右电机P1_4P1_5接IN1IN2当P1_4=0,P1_5=1;时左电机反转P1_6P1_7接IN3IN4当P1_6=1,P1_7=0;时右电机正转 驱动蓝色输出端OUT3OUT4接左电机P1_6P1_7接IN3IN4当P1_6=0,P1_7=1;时右电机反转关于单片机电源:本店驱动模块内带LDO稳压芯片,当电池输入最低的电压6V时候可以输出稳定的5V 分别在针脚标+5与GND。这个电源可以作为单片机系统的供电电源。 ****************************************************************************/#include<AT89x51.H>#defineLeft_moto_pwmP2_0 //接驱动模块ENA 使能端,输入PWM信号调节速度#defineRight_moto_pwmP2_1 //接驱动模块ENB#defineLeft_moto_go{P1_0=1,P1_1=0;}//P1_0P1_1接IN1IN2当P1_0=1,P1_1=0;时左电机正转 #defineLeft_moto_back{P1_0=0,P1_1=1;}//P1_0P1_1接IN1IN2当P1_0=0,P1_1=1;时左电机反转#defineRight_moto_go{P1_2=1,P1_3=0;}//P1_2P1_3接IN3IN4当P1_2=1,P1_3=0;时右电机正转 #defineRight_moto_back{P1_2=0,P1_3=1;}//P1_2P1_3接IN3IN4当P1_2=0,P1_3=1;时右电机反转unsignedcharpwm_val_left=0;//变量定义unsignedcharpush_val_left=0;//左电机占空比N/10unsignedcharpwm_val_right=0;unsignedcharpush_val_right=0;//右电机占空比N/10bitRight_moto_stop=1;bitLeft_moto_stop=1;#defineLeft_moto1_pwmP2_2 //接驱动模块ENA 使能端,输入PWM信号调节速度#defineRight_moto1_pwmP2_3 //接驱动模块ENB#defineLeft_moto1_go{P1_4=1,P1_5=0;}//P1_4P1_5接IN1IN2当P1_4=1,P1_5=0;时左电机正转 #defineLeft_moto1_back{P1_4=0,P1_5=1;}//P1_4P1_5接IN1IN2当P1_4=0,P1_5=1;时左电机反转#defineRight_moto1_go{P1_6=1,P1_7=0;}//P1_6P1_7接IN3IN4当P1_6=1,P1_7=0;时右电机正转 #defineRight_moto1_back{P1_6=0,P1_7=1;}//P1_6P1_7接IN3IN4当P1_6=0,P1_7=1;时右电机反转unsignedcharpwm_val1_left=0;//变量定义unsignedcharpush_val1_left=0;//左电机占空比N/10unsignedcharpwm_val1_right=0;unsignedcharpush_val1_right=0;//右电机占空比N/10bitRight_moto1_stop=1;bitLeft_moto1_stop=1;unsignedinttime=0;unsignedchara;/************************************************************************/voidqingj(void) //前进函数{push_val_left=5;//PWM调节参数1-101为最慢,10是最快改这个值可以改变其速度 //0无PWM输出即是停车push_val_right=5;//PWM调节参数1-101为最慢,10是最快 改这个值可以改变其速度 //0无PWM输出即是停车Left_moto_go; //左电机前进 Right_moto_go; //右电机前进push_val1_left=5;//PWM调节参数1-101为最慢,10是最快改这个值可以改变其速度 //0无PWM输出即是停车push_val1_right=5;//PWM调节参数1-101为最慢,10是最快改这个值可以改变其速度 //0无PWM输出即是停车Left_moto1_go; //左电机前进Right_moto1_go; //右电机前进}voidhout(void)//后退函数{push_val_left=5;//PWM调节参数1-101为最慢,10是最快改这个值可以改变其速度 //0无PWM输出即是停车push_val_right=5;//PWM调节参数1-101为最慢,10是最快 改这个值可以改变其速度 //0无PWM输出即是停车Left_moto_back; //左电机前进Right_moto_back; //右电机前进push_val1_left=5;//PWM调节参数1-101为最慢,10是最快改这个值可以改变其速度 //0无PWM输出即是停车push_val1_right=5;//PWM调节参数1-101为最慢,10是最快改这个值可以改变其速度 //0无PWM输出即是停车Left_moto1_back; //左电机前进 Right_moto1_back; //右电机前进}voidzuoz(void)//左转函数{push_val_left=5;//PWM调节参数1-101为最慢,10是最快改这个值可以改变其速度 //0无PWM输出即是停车push_val_right=5;//PWM调节参数1-101为最慢,10是最快 改这个值可以改变其速度 //0无PWM输出即是停车Left_moto_back; //左电机前进 Right_moto_go; //右电机前进push_val1_left=5;//PWM调节参数1-101为最慢,10是最快改这个值可以改变其速度 //0无PWM输出即是停车push_val1_right=5;//PWM调节参数1-101为最慢,10是最快改这个值可以改变其速度 //0无PWM输出即是停车Left_moto1_back; //左电机前进 Right_moto1_go; //右电机前进}voidyouz(void)//左转函数{push_val_left=5;//PWM调节参数1-101为最慢,10是最快改这个值可以改变其速度 //0无PWM输出即是停车push_val_right=5;//PWM调节参数1-101为最慢,10是最快 改这个值可以改变其速度 //0无PWM输出即是停车Left_moto_go; //左电机前进 Right_moto_back; //右电机前进push_val1_left=5;//PWM调节参数1-101为最慢,10是最快改这个值可以改变其速度 //0无PWM输出即是停车push_val1_right=5;//PWM调节参数1-101为最慢,10是最快改这个值可以改变其速度 //0无PWM输出即是停车Left_moto1_go; //左电机前进 Right_moto1_back; //右电机前进}voidtingz(void)//左转函数{push_val_left=0;//PWM调节参数1-101为最慢,10是最快改这个值可以改变其速度 //0无PWM输出即是停车push_val_right=0;//PWM调节参数1-101为最慢,10是最快 改这个值可以改变其速度 //0无PWM输出即是停车push_val1_left=0;//PWM调节参数1-101为最慢,10是最快改这个值可以改变其速度 //0无PWM输出即是停车push_val1_right=0;//PWM调节参数1-101为最慢,10是最快改这个值可以改变其速度 //0无PWM输出即是停车}/************************************************************************//*PWM调制电机转速*//************************************************************************//*左电机调速*//*调节push_val_left的值改变电机转速,占空比*/voidpwm_out_left_moto(void){if(Left_moto_stop){if(pwm_val_left<=push_val_left)Left_moto_pwm=1; elseLeft_moto_pwm=0; if(pwm_val_left>=10)pwm_val_left=0;}elseLeft_moto_pwm=0;}/******************************************************************//*右电机调速*/voidpwm_out_right_moto(void){if(Right_moto_stop){if(pwm_val_right<=push_val_right)Right_moto_pwm=1; elseRight_moto_pwm=0; if(pwm_val_right>=10)pwm_val_right=0;}elseRight_moto_pwm=0;}/*左电机调速*//*调节push_val_left的值改变电机转速,占空比*/voidpwm_out_left_moto1(void){if(Left_moto1_stop){if(pwm_val1_left<=push_val1_left)Left_moto1_pwm=1; elseLeft_moto1_pwm=0; if(pwm_val1_left>=10)pwm_val1_left=0;}elseLeft_moto_pwm=0;}/******************************************************************//*右电机调速*/voidpwm_out_right_moto1(void){if(Right_moto1_stop){if(pwm_val1_right<=push_val1_right)Right_moto1_pwm=1; elseRight_moto1_pwm=0; if(pwm_val1_right>=10)pwm_val1_right=0;}elseRight_moto1_pwm=0;}/***************************************************////*TIMER0中断服务子函数产生PWM信号*/voidtimer0()interrupt1using2{TH0=0XF8; //1Ms定时 TL0=0X30; time++; pwm_val_left++; pwm_val_right++; pwm_out_left_moto(); pwm_out_right_moto(); pwm_val1_left++; pwm_val1_right++; pwm_out_left_moto1(); pwm_out_right_moto1();} voidlanya_int(void){//TMOD=0x20;//定时器1工作方式2,8位自动重装TH1=0xFd;//11.0592M晶振,9600波特率TL1=0xFd;SCON=0x50;//串口方式1SM0SM101允许接收PCON=0x00;//SMOD=016分频

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论