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

前言

课程设计报告以及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

  • 6
    点赞
  • 65
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sumzeek丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值