如何使用NodeMCU制作雨量计

电子说

1.3w人已加入

描述

步骤1:组件

NodeMCU

AH180霍尔效应传感器

磁铁

倾卸桶(见下文)

一些连接线

面包板(我们已使用Adafruit Perma-Proto面包板)

外壳和电缆密封套

4 x AA电池座和电池

步骤2:建造一个倾倒桶

倾倒桶是用于测量降雨量的相当普遍的工具。这是一个简单的设备,由一个将水引导到水桶中的漏斗组成。桶装满后,它会提示您启动开关,倾倒水,并开始在另一侧装满桶。 -有关更多信息,请参见Wikipedia

对于您自己的雨量计,最简单的选择是购买一个。像这样或类似的东西将适用于我们的设置。如果您要购买一个,则无需担心霍尔效应传感器或磁铁。如果您正在寻找一些更农业的产品,则可以从本地硬件商店中挑选零件,然后一起购买。从这些人那里检查设计

在我们的案例中,我们已经3D打印了一个。我们基于BulldogLowell撰写的这篇文章。我们已对其进行了少许修改以适合我们的传感器和磁体。

每次在存储桶中都可以在我们的Github存储库中找到STL文件

校准

提示,开关记录一个计数,我们可以将其转换为降雨的高度。降雨的高度可以通过收集的雨水量与收集面积之比来确定:

降雨高度(cm)=收集水量(mL)/收集面积(cm2)

对于我们的收集器,我们的收集区域为5.5厘米x 3.5厘米(19.25平方厘米),每个铲斗尖端的收集量为2.5毫升。

安装

安装单元时的几点注意事项

确保每个提示的降雨高度为0.1298cm或1.298mm。装置完全处于水平状态-否则,铲斗不会为每个吸头收集相同的体积-并且结果将不准确

将其安装在离地面至少一米的地方。这是为了减少任何东西意外倒入的可能性(例如灰尘)。

确保没有超出规格的范围。看起来似乎很明显,但重要的是在它的几英尺内没有任何树枝或树叶,以确保没有任何东西可以干扰雨水。 (记住,树枝会随着时间而增长。)

步骤3:接线

设备的基本接线图。您可以在此说明的最后看到最终版本,以及如何将其连接到小费桶。

不一定需要LED和按钮,但对于发布手册很有用

步骤4:源代码

对于雨量计,我们将每隔30分钟发布一次数据,以备就绪。 io服务。我们将使用readiness.io库来管理wifi和服务连接。我们还在一个单独的.h文件中拆分了所有配置变量。

在RainGauge.ino代码中,我们有三个执行关键功能的中断

Rain中断-检测铲斗何时倾斜,并将其添加到收集的雨高

计时器中断-定期(我们已经使用了30分钟)获取雨高并将其发送到readiness.io服务器,然后重置高度。

按钮中断-手动执行与计时器相同的功能(我们主要用于测试是可选的)

您可以下载完整的源代码此处

《图id =“ rich-embed-files” class =“ ible-files”》

config.h

const 字符串CHANNEL_ID = ” XXXXXXXXXXXXXX “ ; // Readiness.io频道ID

const 字符串SENSOR_ID = ” XXXXXXXXXXXXXXX “ ; //您的AgriWebb或组成的传感器ID

const 字符串主题= ” rain-gauge “ ; //传感器的类型或您发送的数据的名称

const 字符串VERSION = ” 1 “ ;

const 字符串格式= “ ” ;

const char * WIFI_SSID = ” XXXXXXX “ ; //您的WiFi SSID/名称

const char * WIFI_PASS = ” XXXXXXX “ 跨度》 ; //您的WiFi密码

const uint16_t UPDATE_RATE = 120 ; //发送数据之间的等待时间(以秒为单位)

const uint8_t TIMEZONE_OFFSET = 10 ; //传感器所在的时区(例如GMT为10)

const double BUCKETTIP_HEIGHT = 0.1298 ; //不要忘记为您自己的小费桶进行更改。

//单个铲斗尖端收集的雨水高度(以毫米为单位)

//由单个桶尖中的集水量(mL

//除以收集区域

查看GitHub托管于❤的rawconfig.h

rainGauge.ino

# include 《 readiness_io。 ħ》

# include 《 Ticker.h 》

# include ” config.h “

const int LED_PIN = 0 ; //连接LED的引脚(D3)

const int INTERRUPT_PIN = 14 ; //该引脚连接测试按钮(D5)

挥发 double RAIN_HEIGHT = 0 ; //变量,用于存储rain_height

易失性字节中断= 0 ;

readiness_io 客户端(CHANNEL_ID,TOPIC,SENSOR_ID,VERSION,FORMAT);

股票行情计时器;

/* 中断c安装雨量计 */

无效 rainInterrupt (){

RAIN_HEIGHT + = BUCKETTIP_HEIGHT; //取当前的雨高度并添加水桶的数量

序列号。打印( ” 当前雨水收集高度(mm): “ );

串行。 println (RAIN_HEIGHT);

}

void handleInterrupt (){

中断++;

}

/* 中断计时器,用于将数据发送到Readiness.io服务器 */

void writeToServer (){

interrupt ++;

}

void 设置(){

pinMode (LED_PIN,输出);

pinMode (BUILTIN_LED,输出);

digitalWrite (BUILTIN_LED,高); //内部LED处于低电平时会亮起-因此我们必须将其关闭/

串行。开始( 115200 );

串行。 setTimeout ( 2000 );

同时 (!Serial){} //等待序列初始化。

序列号。 println ( ” 设备已启动“ );

序列号。打印( “ 连接到“ );

串行。 println (WIFI_SSID);

客户端。 wifiConnection (WIFI_SSID,WIFI_PASS);

pinMode (INTERRUPT_PIN,INPUT_PULLUP); //设置簧片/霍尔效应的中断引脚

attachInterrupt ( digitalPinToInterrupt (INTERRUPT_PIN),rainInterrupt,RISING); //附加中断。

计时器。附加(UPDATE_RATE,writeToServer);

客户端。 testConnection ();

}

void loop (){

如果(中断》 0 ){

客户端。 publishData (RAIN_HEIGHT);

RAIN_HEIGHT = 0 ;

interrupt = 0 ;

digitalWrite (LED_PIN,高);

delay ( 250 );

digitalWrite (LED_PIN,LOW);

}

}

查看GitHub托管的❤托管的rawrainGauge.ino

步骤5:成品

这是最终的雨量计。 nodeMCU放在外壳中,倾卸桶的电线通过电缆密封套进入,以确保其防水性并可以安全地安装在外部。我们的电线是应该的,但您可以根据需要制作它们。

您还可以看到自卸斗的内部。传感器固定在墙壁上,而磁铁则固定在翻斗的摆臂上,因此每次装满并翻倒时都会记录读数。组装翻斗的最困难的部分是正确放置传感器和磁铁。只需足够接近即可读取读数,而无需工具即可始终保持打开状态。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分