概述
前言
课程设计报告以及IAR文件和C#上位机在文末。
一、设计内容及要求
ZigBee分为协调器和终端,终端把传感器采集到的数据发送给协调器,协调器把数据发送给上位机,上位机实时显示数据,达到监测水质的目的。
二、系统的硬件设计
- 传输节点为CC2530,一个作为协调器,两个作为终端
-
DS18B20(温度传感器):用于测量水体温度
-
TSW-30(浊度传感器):用于测量水体浑浊度
2.1 CC2530
图2-1 CC2530引脚图
2.2 DS18B20
图2-2 DS18B20硬件接线图
引脚名称 | 功能 |
GND | 地线 |
DQ | 单总线通信接口,寄生模式时供电端口 |
VDD | 电源线(2线通信时接地,以保证芯片内正确识别VDD状态) |
表2-1 DS18B20引脚说明
DS18B20温度读取函数代码段,数字量读取
void Temp_test(void) //温度读取函数
{
uint8 V1,V2;
Ds18b20Initial();
Ds18b20Write(0xcc);
Ds18b20Write(0x44);
Ds18b20Initial();
Ds18b20Write(0xcc);
Ds18b20Write(0xbe);
V1 = Ds18b20Read();
V2 = Ds18b20Read();
temp = ((V1 >> 4)+((V2 & 0x07)*16));
}
2.3 TSW-30
引脚定义 | 功能描述 | 备注 |
VCC | 供电电压正极,5V | 不可使用3.3V |
AO | 模拟信号输出 | 输出电压范围0-5V |
DO | 数字信号输出 | 小于设定值输出高电平;大于设定值输出低电平 |
GND | 供电电压负极 |
表2-2 TSW-30引脚描述
TSW-30温度读取函数代码段,模拟量读取
uint16 ReadData( void )
{
uint16 reading = 0;
P0DIR &= ~0x20; // 设置P0.5为输入方式
//asm("NOP");asm("NOP");
/* Clear ADC interrupt flag */
ADCIF = 0;
ADCCON3 = (0x20 | HAL_ADC_DEC_064 | HAL_ADC_CHANNEL_5);
/* Wait for the conversion to finish */
while ( !ADCIF );
asm("NOP");asm("NOP");
/* Read the result */
reading = ADCL;
reading |= (int16) (ADCH << 8);
reading >>= 8;
return reading;
}
三、系统的软件设计
3.1 系统流程框图
图3-1 系统流程图
4.2 上位机编写
4.2.1 切割数据
由于不同终端节点的数据接收时间无法完全同步,故不能准确区分数据来源,故采用标志位的方式,在终端发送数据时,增加标志位 ’/c’ 和 ’/d’ 后紧接数据,由此可以判断数据的来源。
通过组合发送数据的标志位 ’/c’ 和 ’/d’ 切割数据,详情见如下代码段第14行,分离出想要的数据位。
4.2.2 显示数据
根据不同的标志位得到不同的数据,根据分离得到数据进行具体显示,详情见如下代码段第15-42行。
private void SerialPort1_DataReceived(object sender, System.IO.Ports.SerialDataReceivedEventArgs e)
{
try
{
string data = string.Empty;
this.Invoke((EventHandler)(delegate
{
data = serialPort1.ReadExisting();
byte[] decBytes = System.Text.Encoding.Default.GetBytes(data);
string str1 = System.Text.Encoding.Default.GetString(decBytes);
string[] info = data.Split('/');
try
{
for (int i = 0; i < info.Length; i++)
{
if (info[i] == "c")
{
//浊度
float f1 = Convert.ToSingle(info[i + 1]);
label6.Text = Convert.ToString((int)f1 * 50 / 127);
chart1.Series["浊度"].Points.AddXY(zdx++, (int)f1 * 50 / 127);
if (zdx > 20)
chart1.Series["浊度"].Points.Clear();
this.listBox1.Items.Add(Time_Count.Text + "," + "浊度," + Convert.ToString((int)f1 * 50 / 127));
}
else if (info[i] == "d")
{
//温度
float f1 = Convert.ToSingle(info[i + 1]);
label7.Text = Convert.ToString(f1);
chart1.Series["温度"].Points.AddXY(wdx++, f1);
if (wdx > 20)
chart1.Series["浊度"].Points.Clear();
this.listBox2.Items.Add(Time_Count.Text + "," + "温度," + Convert.ToString(f1));
}
}
}
catch
{
}
})
);
}
catch (Exception ex)
{
//响铃并显示异常给用户
System.Media.SystemSounds.Beep.Play();
MessageBox.Show(ex.Message);
}
}
附录
百度网盘, 提取码:tv6a
最后
以上就是迷人小懒猪为你收集整理的无线传输课程设计,基于ZigBee的水质监测系统设计前言一、设计内容及要求二、系统的硬件设计2.1 CC2530三、系统的软件设计附录 的全部内容,希望文章能够帮你解决无线传输课程设计,基于ZigBee的水质监测系统设计前言一、设计内容及要求二、系统的硬件设计2.1 CC2530三、系统的软件设计附录 所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复