水质监测/zh
概述
湿地保护模块使用两个传感器获得湿地最主要的三项参数,并通过OLED屏幕显示出来 材料清单
实验原理温湿度传感器连接在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数据与电脑连接起来。 打开Arduino IDE编程软件,点击【文件】->【打开】 在弹出的窗口中找到例程的Wetland文件夹,选择文件夹内的Wetland.ino文件 点击【工具】,在板选项里面选择板卡(Microduino-Core),在处理器选项里面选择处理器(Atmega328p@16M,5V),再在端口选项里面选择正确的端口号,然后直接烧录程序。
第一步:将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, "%");
}
视频 |