基于arduino 两栖小鱼缸温湿度、水位、震动,三合一测量小用具

  • 前言
  • 一、硬件要求
  • 二、参数基础
  • 三、原理剖析
  • 四、思路整合
  • 五.程序概要
  • 六.成品展示
  • 总结



前言

随着夏日的暑气褪去,秋天的两栖动物又将迎来新的活力。环境温湿度、水位不好把握,还有小动物躲着不想见你,如果因这些困扰着你,希望本文的电子作品能带给你灵感。(优信小科技,电子生活更省力)

一、硬件要求

测试水位,本次使用这款Water Sensor传感器,通过平行的导线线迹就可以测出水位的变化,输出已经作为一个模拟量,没有冗杂的规格要求,使用起来简单又容易理解。

Android 读取鱼缸温度 鱼缸温度检测_Android 读取鱼缸温度


测试震动,使用的是这款Shock Sensor高灵敏震动传感器,上面专有的电平和模拟量两种输出,也是将模块的使用简单化。震动的作用也在于将鱼缸内一些小动物隐藏,便于寻找。以及包括水缸受周围高音波、支撑晃动干扰,可以将潜在风险排除。

Android 读取鱼缸温度 鱼缸温度检测_arduino_02


测试温湿度,这款主带sht30芯片的GY-SHT30-D模块,就是非常适合的了。以其使用i2c协议的传输功能,进行数据传出。带给鱼缸或者室内的温湿度测试,要是有盆栽的也是可以同理使用。

Android 读取鱼缸温度 鱼缸温度检测_Android 读取鱼缸温度_03

二、参数基础

Water Sensor
工作电压:DC3-5V
工作电流:小于20mA
传感器类型:模拟
检测面积:40mm x 16mm
制作工艺:FR4双面喷锡+电子元件
工作温度:10℃-30℃
工作湿度:10%-90%无凝结
尺寸(LWH): 62.0mm20.0mm8.1mm

Shock Sensor高灵敏震动
工作电压:5V
制作工艺:焊接/贴片
端口:PH2.0
尺寸(LW): 40mm22.5mm

GY-SHT30-D模块
工作电压:DC2.4-5.5V推荐3.3v
工作温度:-40℃-125℃
储存温度:-40℃-150℃
测温范围:5℃-60℃
湿度范围:20%RH-80%RH
温度精度:±2%RH
湿度精度:±0.3℃
测试时间:<2s
RH响应时间:<2s
温度分辨率:0.015℃
通讯接口:i2c(最高达1MHz)

三、原理剖析

Water Sensor其平行暴露的导线,分为A,B两组,同组的导线均是相连的,电流由B经过液体的导通流到A,暴露的导线可以感知是否有液体以及所接触液体量的大小,量越大,则经过导线并终到达回路的电流加大,并由三极管转化为相应变化的模拟信号输出。通过外部系统读取输出的模拟信号,则可以得知相应液位的变化。

Android 读取鱼缸温度 鱼缸温度检测_arduino_04


Shock Sensor高灵敏震动传感器模块实质是一个开关,其内部是一个金属片和一个弹簧, 产品不震动时,震动开关呈断开状态,输出端输出高电平;产品震动时,震动开关由于弹簧和金属片瞬间导通,输出端输出低电平;输出端可以与单片机直接相连,通过单片机来检测高低电平,由此来检测环境是否有震动,起到报警作用。

Android 读取鱼缸温度 鱼缸温度检测_Android 读取鱼缸温度_05


GY-SHT30-D以模块通过传感探头感知的数据,经过i2c协议进行编译、转化为能读取的数据,进而引用到整个程序中。由原理图中可以清晰的看到SDA和SCL的串行数据线以及串行时钟线,其中ADDR更是可以直接地址输入,还有ALERT可以作为报警指示点设置。

Android 读取鱼缸温度 鱼缸温度检测_数据_06

四、思路整合


Created with Raphaël 2.3.0 开始 arduino编程 传感器指示亮起 串口数据显示 数值核对 结束


根据程序

五.程序概要

代码如下(示例):

#include <Arduino.h>
#include <Wire.h>
#include "Adafruit_SHT31.h" //库引用

int cg = A1;  //传感定义
int zd = 4;//震动定义
int g = 5;  //因arduino供电口不足,专属震动传感器的电压输入
int link = 0;  //空定义变量,方便赋值并显示出来
unsigned waterHigh = 0;  //水深定义
Adafruit_SHT31 sht31 = Adafruit_SHT31();       //sht31库赋值定义

#if defined(ARDUINO_ARCH_SAMD)
// for Zero, output on USB Serial console, remove line below if using programming port to program the Zero!
   #define Serial SerialUSB
#endif                                      //sht31库文件调用

void setup() {
  Serial.begin(115200);           //波特率刷新
  // put your setup code here, to run once:
pinMode(zd,INPUT);
pinMode(g,OUTPUT);            //震动值是传感器传输到开发板是输入,电平口是电压输出
Serial.println("SHT31 test"); // 串口打印值
  if (! sht31.begin(0x44)) {   // 写到0x45 是用i2c的协议
    Serial.println("Couldn't find SHT31"); // 串口打印值
    while (1) delay(1);
}
}

void loop() {
  // put your main code here, to run repeatedly:
  digitalWrite(g,1);         //先给震动传感器供电
 waterHigh = analogRead(cg);//读水深值赋予到变量
 link = digitalRead(zd);   //读震动值赋予到变量
if(waterHigh>200){
  Serial.println(waterHigh);   
  }
else{
  Serial.println("水太浅");
  }          //if语句判断是否符合条件,然后决定串口显示水深的形式。
Serial.println(link);//读出震动值
delay(200);
 float t = sht31.readTemperature(); //温度定义变量
  float h = sht31.readHumidity(); //湿度定义变量
  if (! isnan(t)) {  // 检查t的值是否是数值
    Serial.print("Temp *C = "); Serial.println(t=t-10);//是数值的情况下,温度值输出。这里因为实测是有29度,存在漂移,人为的用t-10来消除漂移值
  } else { 
    Serial.println("Failed to read temperature");//不是数值的情况下,说明读取失败
  }
  
  if (! isnan(h)) {  // check if 'is not a number'
    Serial.print("Hum. % = "); Serial.println(h);
  } else { 
    Serial.println("Failed to read humidity");//与温度同理
  }
  Serial.println();
  delay(1000);

}

注意:该部分的库文件无法完全展示,若有需要完整库文件支持的,请在下方留言。

六.成品展示

Android 读取鱼缸温度 鱼缸温度检测_Android 读取鱼缸温度_07


Android 读取鱼缸温度 鱼缸温度检测_物联网_08

总结

1、实用性:主要程序导入后,只要配合笔记本电脑,就能方便随处的使用、查看。
易学性:关于该程序的简单借助arduino的普通函数,就能实现传感器的功能,适合每一个程序的初学者理解。
2、本次的数值精度方面,水位能够很好的精确到三位数值,并且误差在5%的样子。至于温湿度,精确到小数点后一位,但是相对而言存在零点漂移,需要个人根据实际情况编程设置调零,且稳定数值时间需要约一分钟左右,建议家庭使用。
3、最后要提到的就是传感器的灵活应用,您可以看完这篇文章后突发奇想,借助程序移植,将传感器搭载到别的成品上配合使用。

(优信小科技,电子生活更省力)