水质监测/zh

来自Microduino Wikipedia
502748957@qq.com讨论 | 贡献2015年10月14日 (三) 10:08的版本 (Created page with "{| style="width: 800px;" |- | ==概述== *项目名称:Microduino水质监测 *目的:检测温湿度和水的浑浊度 *难度:中 *耗时:2小时 *制作者: *简...")
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳转至: 导航搜索

概述

  • 项目名称:Microduino水质监测
  • 目的:检测温湿度和水的浑浊度
  • 难度:中
  • 耗时:2小时
  • 制作者:
  • 简介:

湿地保护模块使用两个传感器获得湿地最主要的三项参数,并通过OLED屏幕显示出来

材料清单

  • Microduino设备
模块 数量 功能
Microduino-Core/zh 1 核心板
Microduino-USBTTL/zh 1 下载程序
Microduino-BM/zh 1 供电
Microduino-Cube-V1/zh 1 连接浊度传感器,加下拉电阻
  • 其他设备
模块 数量 功能
1.27pin 母-母连接线 2 连接传感器
Micro-USB数据线 1 下载程序
外壳套件 1
锂电池 1 供电

实验原理

温湿度传感器连接在Sensorhub上,浊度传感器连接到Microduino Cube S1上分别组成数据采集模块,OLED连接在Sensorhub上组成显示模块。Microduino-core与USB-TTL连接构成了系统的核心模块,在调试中USB-TTL作为供电部件和通信部件使用。系统运行的整体流程为:通过数据采集模块采集温湿度和水的浊度数据,在核心模块中进行处理,之后显示在OLED屏幕上。

  • 主要传感器

浊度传感器

TS浊度传感器是GE公司开发的一种专门用于家电产品的低成本传感器,主要用于洗衣机、洗碗机等产品的水污浊程度的测量。通过测量水的污 浊程度来判断所洗物品洁净程度, 从而确定最佳的洗涤时间。 该传感器的工作原理是:当光线穿过一定量的水时,光线的透过量取决于该水的污浊程度,水越污浊,透过的光就越少。光接收端把透过的光强度转换为对应的电流大小,透过的光多,电流大,反之透过的光少,电流小。通过测量接收端电流的大小,就可以计算出水的污浊程度。TS浊度传感器内部原理如图所示 (虚线框内为浊度传感器内部)

浊度电流信号经过电阻R1转换为0V~5V电压信号,利用A/D转换器进行采样处理,单片机就可以获知当前水的污浊度。TS浊度传感器有3个引脚,按照图中的电路连接就可以实现水浊度的测量

文档

调试过程

  • 下载程序

将Microduino-Core与Microduino-USBTTL叠加(无上下顺序),通过USB数据与电脑连接起来。

Download1.jpg

打开Arduino IDE编程软件,点击【文件】->【打开】

Dl1.jpg

在弹出的窗口中找到例程的Wetland文件夹,选择文件夹内的Wetland.ino文件

点击【工具】,在板选项里面选择板卡(Microduino-Core),在处理器选项里面选择处理器(Atmega328p@16M,5V),再在端口选项里面选择正确的端口号,然后直接烧录程序。

Dl3.jpg
  • 搭建

第一步:将Microduino-Sensorhub,Microduino-USBTTL,Microduino-core,Microduino-Cube-S1按从上到下的顺序拼接好,完成Microduino模块部分的组装。

第二步:将OLED模块用连接线连接在Sensorhub的I2C接口上(右下)

第三步:温湿度传感器AM2321通过导线连接到Microduino-Sensorhub的I2C接口上(右下)

第四步:将浊度传感器通过导线连接到Microduino Cube S1背面的接口上

整体效果

注意事项

浊度传感器的数据输出端口接10KΩ下拉电阻示数才会正确,若不加下拉电阻则示数变化范围会很小

程序说明

#include "U8glib.h"  // OLED的库 
#include <Wire.h>   //I2C总线的库 
#include <AM2321.h>  //温湿度传感器的库 
 
#define PIN_zd A6  //浊度传感器连接在A6接口 
//HW SPI Com: CS = 10, A0 = 9 (Hardware Pins are  SCK = 13 and MOSI = 11) 
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE);  //128x64 OLED 
AM2321 am2321; 
float sensor_vol, temp, tmp; 
int cnt = 0; 
float final; 
 
void setup() 
{ 
    Serial.begin(9600); 
    // 设置默认颜色 
    if ( u8g.getMode() == U8G_MODE_R3G3B2 ) 
        u8g.setColorIndex(255);      //white 
    else if ( u8g.getMode() == U8G_MODE_GRAY2BIT ) 
        u8g.setColorIndex(3);       //max intensity 
    else if ( u8g.getMode() == U8G_MODE_BW ) 
        u8g.setColorIndex(1);         // pixel on 
 
    //zhuodu sensor 
    pinMode(PIN_zd, INPUT);     //浊度传感器I/O口A6设置为输入模式 
} 
 
void loop() 
{ 
    sensor_vol = analogRead(PIN_zd);          //读取A6口的数值 
    Serial.println(sensor_vol);              //串口显示读取的数值,调试用 
    sensor_vol = map(sensor_vol, 0, 225, 0, 100); //将电压值映射为 0%-100%表示浑浊程度 
    temp += sensor_vol;                   //求和 
    cnt++;                                //计数器 
    if(cnt == 10) 
    { 
        final = temp / 10;  //十次数据求均,保证示数稳定 
        cnt = 0;        //计数器清零 
        temp = 0;     //中间值清零 
        final = 100 - final; 
        if(final < 0) 
        { 
            final = 0;   //刨除不稳定数据 
        } 
    } 
 
    am2321.read();      //温湿度传感器读取 
    u8g.firstPage();    //OLED屏幕显示 
    do 
    { 
        draw(); 
    } 
    while( u8g.nextPage() ); 
    delay(500); 
} 
 
void draw(void) 
{ 
    // 用于OLED屏的设置参数写在这里。 
    u8g.setFont(u8g_font_unifont);      //设置字体 
    u8g.drawStr( 0, 20, "Temperature:"); //屏幕显示函数,前两个参数为在OLED屏上的坐标                                 //和固定字符串。每个英文字母和数字,符号占8个像                                 //素 
    u8g.setPrintPos(96, 20);            //设置坐标,与下个显示函数同时使用,用于显示 
    u8g.print(am2321.temperature / 10.0); //参数am2321.temperature/10.0 
    //湿度数据am2321.humidity/10.0 
    u8g.drawStr( 0, 40, "Humidity:"); 
    u8g.setPrintPos(96, 40); 
    u8g.print(am2321.humidity / 10.0); 
    //浊度数据sensor_vol 
    u8g.drawStr( 0, 60, "Turbidity:"); 
    u8g.setPrintPos(80, 60); 
    u8g.print(final); 
    u8g.drawStr(120, 60, "%"); 
} 

视频