无线遥控数据采集小车报告.

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

无线遥控
数据采集小车
申报人:蒋松
队员1:蒋松男2010级51100218
电子科学与工程学院电子信息科学与技术专业队员2:辛晓华男2010级51100223
电子科学与工程学院电子信息科学与技术专业队员3:俞彬男2010级51100205
电子科学与工程学院电子信息科学与技术专业作品类别:基本电子技术应用类
引言
传感器是科技领域的一个重要课题。

“勇气号”是远程传感测控的一大经典和前沿典范。

传感器主要用于防火防水,湿度温度等。

但是这些都是固定的传感设施,如若遇到恶劣的环境,操作人员无法进入如此恶劣的环境进行操作安装,这时,如果能够有机器小车等协助,通过无线传输,就能又快又准的测量出各个所需要的科学数据了。

本设计就是基于这样的想法,设计一辆无线遥控小车,在车上安装各类传感设施,由于因素限制,本设计以温度,超声波测控为例,进行遥控数据采集小车的模拟。

本设计以51系列单片机STC89C54RD+为核心,实现无线按键遥控,温度数据,物体方位数据采集,数据反馈显示等基本功能。

在系统设计时,为了更好采用模块化设计法,分步设计了各个单元模块,系统硬件部分可分为最小系统模块,L298N电机驱动模块,18B20温度测控模块,nrf2401无线遥控模块,1602液晶模块,遥控按键模块,超声波模块。

如若需要,还可以加上各种所需的传感器以达到数据采集的目的,拓展其应用。

一:方案设计
1.1方案选择与确定
1.1.1遥控方案的选择
方案一:声音遥控控制
声控就是用声音去控制对象动作,一般采用驻极体话筒或压电陶瓷片作为传感元件来拾取声音,通过电路放大驱动后级电子开关动作。

为防止外界音频干扰,可以采用超声波控制,但也有故意选用声频来进行控制的,比如用小孩发出的声音频率去控制声控玩具娃娃的哭笑动作等。

但声音控制有空间范围的局限性,而且要求有很高的声音辨识率。

对于小车的控制不是很方便,使小车的行进范围大大缩小。

方案二:红外遥控控制
红外线遥控是利用近红外光传送遥控指令的,波长为
0.76um~1.5um。

用近红外作为遥控光源,是因为目前红外发射器件(红外发光管)与红外接收器件(光敏二极管、三极管及光电池)的发光
与受光峰值波长一般为0.8um~0.94um,在近红外光波段内,二者的光谱正好重合,能够很好地匹配,可以获得较高的传输效率及较高的可靠性。

但由于红外线遥控不具有像无线电遥控那样穿过障碍物去控制被控对象的能力,使小车的灵敏度降低,限制了小车的测量范围,从而影响了小车的预置功能的实现。

方案三:无线遥控控制
无线遥控是利用无线电信号对远方的各种机构进行控制的技术。

这些信号被远方的接收设备接收后,可以指令或驱动其它各种相应的机械,去完成各种操作,如闭合电路、移动手柄、开动电机,之
后,再由这些机械进行需要的操作。

所以,各个控制的信号在频率和延续的时间上都彼此不同,对于控制船舶、飞机、导弹等海空行体的应用上极为广泛。

由于无线电遥控具有传输距离远、抗干扰能力强、无方向性等优点,广泛的应用于很多领域。

如图1所示为无线模块的硬件框图和软件流程。

方案确定:
综合以上三种方案,声音控制有空间范围的局限性,而且要求
有很高的声音辨识率。

对于小车的控制不是很方便,使小车的行进范围大大缩小。

由于红外线遥控不具有像无线电遥控那样穿过障碍物去控制被控对象的能力,使小车的灵敏度降低,限制了小车的测量范围,从而影响了小车的预置功能的实现。

无线电遥控具有传输距离远、抗干扰能力强、无方向性等优点,广泛的应用于很多领域。

方案三的特点更符合我们设计小车实现相关功能所需的条件,因此我们选择无线遥控系统,作为小车的控制部分。

1.1.2温度测量模块的选择
方案一:铂热电阻。

铂热电阻是利用铂丝的电阻值随着温度的变化而变化这一基本原理设计和制作的,按0℃时的电阻值R(℃)的大小分为10欧姆(分度号为Pt10)和100欧姆(分度号为Pt100)等,测温范围均为-200~850℃.10欧姆铂热电阻的感温原件是用较粗的铂丝绕制而成,耐温性能明显优于100欧姆的铂热电阻,只要用于650℃以上的温区:100欧姆铂热电阻主要用于650℃以下的温区,虽也可用于650℃以上温区,但在650℃以上温区不允许有A级误差。

100
欧姆铂热电阻的的分辨率比10欧姆铂热电阻的分辨率大10倍,对二次仪表的要求相应地一个数量级,因此在650℃以下温区测温应尽量选用100欧姆铂热电阻。

铂热电阻具有精度高,稳定性好,温度线性好,性能可靠,测温范围大(-200~800℃)等优点。

但是铂热电阻价格昂贵,不适合普通实验使用。

方案二:模拟温度传感器
模拟温度传感器有多种输出形式(绝对温度、摄氏温度和华氏温度)以及电压偏移值。

后者让组件在使用单电源的情形下就能对负温度值进行监测。

模拟温度传感器的输出还可以送到比较器来产生超温指示信号,或直接送到模拟数字转换器的输入,用来现实实时温度
数据。

模拟温度传感器适合需要低成本、小体积和低功耗的应用。

方案三:数字温度传感器
数字式温度传感器就是能把温度物理量,通过温度敏感元件和相应电路转换成方便计算机、plc、智能仪表等数据采集设备直接读取得数字量的传感器。

DS18B20是DALLAS公司专利产品,在-55℃~+125℃范围内精度为0.5℃,由于是实验用,所以灵敏度不需要太高,耐磨耐碰,体积小,使用方便。

方案确定:环














LED


综合以上三种方案,铂热电阻具有精度高,稳定性好,温度线性好,性能可靠,测温范围大(-200~800℃)等优点。

但是铂热电阻价格昂贵,不适合普通实验使用。

模拟温度传感器具有低成本、小体积和低功耗的特点,但是模拟温度传感器应用时,要经过A/D转换等步骤,过程过于繁琐。

数字温度传感器具有体积小、测量精度高、无需A/D转换、直接输出数字信号等特点,与我们设计功能更贴切,因此,我们决定选用方案三。

1.1.3电机模块选择:
方案一:直流电机
直流电机的控制方法比较简单,只需给电机的两根控制线加上适当的电压即可使电机转动起来,电压越高则电机转速越高。

对于直流电机的速度调节,可以采用改变电压的方法,也可采用PWM调速方法。

PWM调速就是使加在直流电机两端的电压为方波形式,通过改变方波的占空比实现对电机转速的调节。

方案二:舵机舵机的控制信号是PWM信号,利用占空比的变化改变舵机的位置,引脚为三端VCC,CTRL,GND,使用单片机可直接驱动。

可配一字型、圆型转盘,标准脉冲输入。

但使用起来不够方便。

方案三:步进电机
采用步进电机作为该系统的驱动电机。

由于其转过的角度可以精
确的定位,可以实现小车前进路程和位置的精确定位。

虽然采用步进电机有诸多优点,步进电机的输出力矩较低,随转速的升高而下降,且在较高转速时会急剧下降,其转速较低,不适用于小车等有一定速度要求的系统。

经综合比较考虑,我们放弃了此方案。

方案确定:基于以上分析,我们选择了方案一,使用直流电机作为电动车的驱动电机。

1.1.4.电机驱动模块
方案 1:采用SM6135W电机遥控驱动模块。

SM6135W是专为遥控车设计的大规模集成电路。

能实现前进、后退、向右、向左、加速五个功能,但是其采用的是编码输入控制,而不是电平控制,这样在程序中实现比较麻烦,而且该电机模块价格比较高。

方案2:KC-105 电机驱动模块集成了多种常用电机,包括步进电机,直流电机,舵机三种类型,每种电机均有2个。

板子硬件结构紧凑,各自独立,硬件驱动电路设计合理,驱动接口简单明了,是开发电机控制程序不错的选择。

但是,该电机模块成本高,对于我们的设计而言,利用率不高。

方案 3:采用电机驱动芯片L298N。

L298N为单块集成电路,高电压,高电流,四通道驱动,可直接的对电机进行控制,无须隔离电路。

通过单片机的I/O输入改变芯片控制端的电平,即可以对电机进行正反转,停止的操作,非常方便,亦能满足直流减速电机的大电流要求。

调试时在依照上表,用程序输入对应的码值,能够实现对应的动作。

表1是其使能、输入引脚和输出引脚的逻辑关系。

表1 L298N的引脚和输出引脚的逻辑关系
EN A(B)IN1(IN3)IN2(IN4)电机运行情况
H H L 正转
H L H 反转
H 同IN2(IN4)同IN2(IN4)快速停止
L X X 停止
方案确定:基于以上分析,我们选择了方案二,用L298N来做为电机的驱动芯片。

3:理论分析与方案论证:
当按下遥控器上的上下左右按键时,方向信号经过单片机处理,通过nrf2401传输到遥控小车的 nrf2401,接收后再经过小车单片机的处理,将运行信号传输给L298N,实现小车前进,后退,左转,右转的运行。

小车上的18B20感应小车周围的温度后,依次通过单片机,nrf2401的处理,将温度传输到遥控器上液晶显示屏上显示。


理,小车上的超声波模块将感应到的前方障碍物距离小车的距离也通过单片机和nrf2401的处理显示在液晶显示屏上。

经过理论分析,本设计能够实现远程数据的采集,能够达到预期的功能。

二:总体设计

下 左 右
Stop
按键 电机驱动模块
单 片 机
单 片 机
单 片 机
单 片 机
无线
无线
温度
其他
液晶显示
无 线 模 块
无 线 模 块
开 始
按 下 按 键
选择方向键
上 下 左 右 STOP 无线发送信号
无线接收信号
液晶显示
到目的地 未到
END
上 下
左 右
STOP 小 小 小 小 小 车 车 车 车 车 前 后 向 向 停 进 退 左 右 止
温 其 度 他 测 量 系 统
关闭电源 开 始
无线接收
哪个信号?
无线发送
END
三:单元电路设计
本设计分为两部分,分别是小车部分和遥控器部分。

下面先介绍小车部分:
小车部分由1:最小系统;2:电机;3:L298N电机驱动模块;4:NRF2401无线模块;5:18B20温控模块;6:车身;7:超声波模块七部分组成
1:最小系统:
最小系统是控制的核心,各个外围模块都是以它为核心展开的,如图:
2:电机:
本设计小车用的是9V的两个电机做动力驱动,带动四个轮子共同组成驱动,附两个从动轮。

电机与L298N电机驱动模块相连,当单片机发出指令时,电机可以进行向前,向后,静止三种状态。

来进行小车的运动。

(注:电机两条引线之间最好加一个电容,达到保护电机的作用,因为启动的瞬时电流会很大,很容易造成电机烧坏)
3:L298N电机驱动模块:
1:L298N引脚图
2:L298N电机驱动模块电路图:
4:NRF2401无线模块: 1:NRF2401简图:
说明:
1) VCC脚接电压范围为1.9V~3.6V之间,不能在这个区间之外,超过3.6V将会烧毁模块。

推荐电压3.3V左右。

2) 除电源VCC和接地端,其余脚都可以直接和普通的5V单片机IO 口直接相连,无需电平转换。

当然对3V左右的单片机更加适用了。

3) 硬件上面没有SPI的单片机也可以控制本模块,用普通单片机IO口模拟SPI不需要单片机真正的串口介入,只需要普通的单片机IO 口就可以了,当然用串口也可以了。

(a:与51系列单片机P0口连接时候,需要加10K的上拉电阻,与其余口连接不需要。

b:其他系列的单片机,如果是5V的,请参考该系列单片机IO口输出电流大小,如果超过10mA,需要串联电阻分压,否则容易烧毁模块! 如果是3.3V的,可以直接和RF24l01模块的IO口线连接。

比如AVR系列单片机)
2:nrf2401与单片机连接示意图:
5:18B20温控模块:
1:示意图:
引脚图:GND接地,VDD接电源,DQ接单片机端口,DQ和VDD之间加一个200欧的电阻。

18b20与单片机的连接图:
传感器DS18B20DS18B20数字温度计使用1.DS18B20基本知识
DS18B20数字温度计是DALLAS公司生产的1-Wire,即单总线器件,具有线路简单,体积小的特点。

因此用它来组成一个测温系统,具有线路简单,在一根通信线,可以挂很多这样的数字温度计,十分方便。

1、DS18B20产品的特点
(1)、只要求一个端口即可实现通信。

(2)在DS18B20中的每个器件上都有独一无二的序列号。

(3)实际应用中不需要外部任何元器件即可实现测温。

(4)测量温度范围在-55。

C到+125。

C之间。

(5)数字温度计的分辨率用户可以从9位到12位选择。

(6)内部有温度上、下限告警设置。

下面介绍遥控器部分:
遥控器由1:最小系统;2:nrf2401无线模块;3:1602液晶模块;4:按键模块;四部分组成;
由于在介绍小车部分中已经介绍了最小系统和nrf2401无线模块,所以这里不作介绍了。

四:单元电路测试
1:最小系统模块测试:
连接完电路后,在单片机中写入一组流水灯程序,,上电后发现led灯按程序所设置一样运行,确定单片机最小系统能正常工作。

2:L298N电机驱动模块测试:
在单片机中写入左电机前进,右电机后退的程序,上电后,发现小车做旋转运动。

确认电机驱动模块运行正常。

3:1602液晶模块测试:
在单片机内导入液晶附带的一组源程序,上电后,液晶正常显示。

4:18B20温度测控模块:
将18B20与液晶相连,导入程序后,上电,用手握住18B20,能看到液晶上温度缓慢上升,达到35度后出现动态稳定,确定18B20模块正常。

5:遥控按键模块测试:
用万用表测得按键无损坏,接入电路后,在单片机内写入一个按下按键后小灯亮的程序,上电后经过测试,确认遥控部分正常。

6:nrf2401无线遥控模块:
在单片机中写入遥控模块自带源程序,将其与电脑串口相连,分别按下上下左右按键后,在串口调试助手中发现收到信息与所按下按键后发送的字符串相同,无线模块正常。

五:整体测试:
组装各个模块后,按键按下上下左右,小车能灵活的进行前后左右的运行。

并与所对小车所发出的指令相吻合。

并且液晶上正确显示了小车周围的温度。

六:结论
本设计不足
1;电源功率不足,遇到斜坡时可能会出现动力不足的现象,并且续航能力不够.
2:无线模块会受到外界电磁波的干扰,比如蓝牙等等。

回导致无线传输效果不好。

3:该设计的总体稳定性较差,比如各个杜邦线头会有松动等现象出现从而导致数据采集失败甚至小车停止工作。

改进措施:
将各个电路做成PCB板,提高稳定性,进一步研究nrf2401的功能,简化电路,用一对单片机和无线模块就能实现上述功能,不仅能提高稳定性,还能降低成本。

七:附录
元件清单:
遥控部分:
stc89c52单片机 1
40脚插座 2
软按键 5
1602液晶 1
电位器 1
Nrf24l01 2
杜邦线若干
插座插针若干
铜柱若干
万用板若干
小车部分:
stc89c52单片机 1
40脚插座 2
Nrf24l01 1
12V电源 1
18B20 1
L298N 1
LM7805 LM7809 各1
电容电阻若干
按键若干
LED小灯若干
杜邦线若干
插座插针若干
铜柱若干
万用板若干
参考文献
谭浩强《C程序设计》北京清华大学出版社
曾一江《单片微机原理与接口技术》北京科学出版社
林涛·《数字电子技术基础》·北京:清华大学出版社·2006
林涛·《模拟电子技术基础》·重庆大学出版社·2003
罗杰、谢自美·《电子线路设计·实验·测试》·电子工业出版社·2008 黄智伟·《全国大学生电子设计竞赛电路设计》·北京航天航空大学出版社·2007
柯亨玉·《电子设计教程》·电子工业出版社·2007
杨刚、周群·《电子系统设计与实践》·电子工业出版社·2003
康华光·《电子技术基础—模拟部分( 第五版)》·高等教育出版社·2005
刘建清《AVR单片机C语言》北京航天航空出版社
陈小钟《单片机接口技术》人民邮电出版社
求是科技《8051单片机C语言程序设计》人民邮电出版社
附录:
1、遥控器部分程序代码
#include <reg52.h>
#include <intrins.h>
#include <stdio.h>
#include "delay.h"
#include "nrf24l01.h"
#include "lcd1602.h"
sbit KEY1 =P3^4; //按键S1
sbit KEY2 =P3^5; //按键S2
sbit KEY3 =P3^6; //按键S3
sbit KEY4 =P3^7; //按键S4
char displaytemp[16];//定义显示区域临时存储数组
void main(void)
{
float temperature,b;
int temp,a;
unsigned char tf =0;
init_NRF24L01() ; //模块初始化
LCD1602_init();
LCD1602_clear() ;
LCD1602_write_str(0,0,"Smart Car");
LCD1602_write_char(13,1,0x01);//写入温度右上角点
LCD1602_write_char(14,1,'C'); //写入字符C
Delay(1000);
while(1)
{
if(KEY1 ==0 ) //按键1 按下
{
Delayms(10);
if(KEY1 ==0)
{
TxBuf[1] = 1 ; //赋值
tf = 1
}
}
if(KEY2 ==0 ) //按键2 按下
{
Delayms(10);
if(KEY2 ==0)
{
TxBuf[2] =1 ; //赋值
tf = 1
}
}
if(KEY3 ==0 ) //按键3 按下
{
Delayms(10);
if(KEY3 ==0)
{
TxBuf[3] =1 ; //赋值
tf = 1 ;
}
}
if(KEY4 ==0 ) //按键4 按下
{
Delayms(10);
if(KEY4 ==0)
{
TxBuf[4] =1 ; //赋值
tf = 1
}
}
if (tf==1) //有键按下
{
nRF24L01_TxPacket(TxBuf); //发送数据Transmit Tx buffer data
TxBuf[1] = 0x00; //清零
TxBuf[2] = 0x00;
TxBuf[3] = 0x00; //清零
TxBuf[4] = 0x00;
tf=0;
Delay(50);
}
SetRX_Mode(); //设置成接受模?
Delay(50);
nRF24L01_RxPacket(RxBuf); //接收数据
if( nRF24L01_RxPacket(RxBuf))
{
a= RxBuf[1] ; b=RxBuf[2];
a<<=8;
temp=a+b;
temperature=(float)temp*0.0625;
sprintf(displaytemp,"Temp % 7.1f",temperature);//打印温度值
LCD1602_write_str(0,1,displaytemp);//显示第二行
Delay(1000); //old is '1000'
}
}
}
2、小车端部分程序代码
#include <reg52.h>
#include <intrins.h
#include "18b20.h"
#include "nrf24l01.h"
#include "moto.h"
sbit KEY1=P2^5; //按键S1
sbit KEY2=P2^6; //按键S2
//**************函数声明************************************** void Init_Timer0(void);//定时器初始化
void main(void)
{
unsigned char tf =0;
int temp_H,temp_L,num;
int temp;
init_NRF24L01() ; //模块初始?
Delay(1000);
while(1)
{
num++;
// if(ReadTempFlag==1)
if(num==10)
{
num=0;
// ReadTempFlag=0;
temp=ReadTemperature();
temp_H=temp/0xff;
temp_L=temp%0xff;
TxBuf[1] =temp_H; //赋值
TxBuf[2] =temp_L; //赋值
Delay(5);
nRF24L01_TxPacket(TxBuf); //发送数据Transmit Tx buffer data }
Delay(10);
SetRX_Mode(); //设置成接受模式
RxBuf[1] = 0x00; //接收的数组相应位清零
RxBuf[2] = 0x00;
RxBuf[3] = 0x00;
RxBuf[4] = 0x00;
Delay(20);
nRF24L01_RxPacket(RxBuf); //接收数据
// STOP
if(RxBuf[1]|RxBuf[2]|RxBuf[3]|RxBuf[4])
{
if( RxBuf[1]==1)
GO
}
if( RxBuf[2]==1)
{
BACK
}
if( RxBuf[3]==1)
{
LEFT
}
if( RxBuf[4]==1)
{
RIGHT
}
RxBuf[1] = 0x00; //清零
RxBuf[2] = 0x00;
RxBuf[3] = 0x00; //清零
RxBuf[4] = 0x00;
RxBuf[5] = 0x00;
Delay(1000); //old is '1000' }
else
STOP
}
}。

相关文档
最新文档