700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 无线传输课程设计 基于ZigBee的水质监测系统设计

无线传输课程设计 基于ZigBee的水质监测系统设计

时间:2019-01-25 08:32:44

相关推荐

无线传输课程设计 基于ZigBee的水质监测系统设计

前言

课程设计报告以及IAR文件和C#上位机在文末。

一、设计内容及要求

ZigBee分为协调器和终端,终端把传感器采集到的数据发送给协调器,协调器把数据发送给上位机,上位机实时显示数据,达到监测水质的目的。

二、系统的硬件设计

传输节点为CC2530,一个作为协调器,两个作为终端

DS18B20(温度传感器):用于测量水体温度

TSW-30(浊度传感器):用于测量水体浑浊度

2.1 CC2530

图2-1 CC2530引脚图

2.2 DS18B20

图2-2 DS18B20硬件接线图

表2-1 DS18B20引脚说明

DS18B20温度读取函数代码段,数字量读取

voidTemp_test(void)//温度读取函数{uint8V1,V2;Ds18b20Initial();Ds18b20Write(0xcc);Ds18b20Write(0x44);Ds18b20Initial();Ds18b20Write(0xcc);Ds18b20Write(0xbe);V1=Ds18b20Read();V2=Ds18b20Read();temp=((V1>>4)+((V2&0x07)*16));}

2.3TSW-30

表2-2 TSW-30引脚描述

TSW-30温度读取函数代码段,模拟量读取

uint16ReadData(void){uint16reading=0;P0DIR&=~0x20;//设置P0.5为输入方式//asm("NOP");asm("NOP");/*ClearADCinterruptflag*/ADCIF=0;ADCCON3=(0x20|HAL_ADC_DEC_064|HAL_ADC_CHANNEL_5);/*Waitfortheconversiontofinish*/while(!ADCIF);asm("NOP");asm("NOP");/*Readtheresult*/reading=ADCL;reading|=(int16)(ADCH<<8);reading>>=8;returnreading;}

三、系统的软件设计

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。