传感器
生活中我们经常会养一些花花草草,但是因为平常工作忙碌或者其他事情往往把家里的这些花花草草给忘记了浇水。导致自己喜欢的花草就这样枯萎了,又或者在农业生产环境中对新生的培育发芽的种子对湿度要求比较高的情况。那么有没有一款可以自动浇水的的方案了。这里玩树莓派的极客朋友可能会想到用土壤湿度传感器来判断什么时候浇水,没错今天我们牛人技术就为大家讲讲用树莓派采集土壤湿度的方法。
市面上有两种原理的传感器,分别是电阻式土壤湿度传感器和电容式土壤湿度传感器。这里我们建议大家使用电容式土壤湿度传感器因为除了其精度高些之外,电阻式土壤传感器因为其设计的原理会使得长期放入土壤里的传感脚极容易被电解和腐蚀,从而大大降低了传感器的使用寿命而且也影响精度。
一般电容式土壤湿度传感器都是支持3.3伏特至5.5伏特的电压,这个区间的电压在树莓派的GPIO接口上还是非常容易取得的,连接到树莓派的5V电压脚上之后接上ADC模拟信号转数字信号转换模块板上。这里土壤传感器模块和树莓派相连接的一方有四个针脚他们分别是AO模拟信号输出,DO数字信号输出,GND电源负极,VCC电源正极(采用3.3V或者5V电压)这里我们把VCC连接到树莓派的PIN2针脚上面,把GND连接到树莓派的PIN6针脚上面,然后再把数字信号输出脚DO连接到树莓派的GPIO_GEN1的GPIO18端口上面。然后再把传感器模块的另一端两个针脚连到土壤接触插销板上面,这样土壤湿度传感器的连接就基本完毕了。
代码中通过获取GPIO的电平高低来判断土壤中的水分含量
publicGpioPinMoistureSensorOutputPin{get;set;}
publicDispatcherTimerDispatcherTimer{get;set;}
publicMainPage(){
this.InitializeComponent();Loaded+=OnLoaded;
}
privateasyncvoidOnLoaded(objectsender,RoutedEventArgsroutedEventArgs){
varctl=awaitGpioController.GetDefaultAsync();MoistureSensorOutputPin=ctl?.OpenPin(21);
if(MoistureSensorOutputPin!=null){
MoistureSensorOutputPin.SetDriveMode(GpioPinDriveMode.Input);
DispatcherTimer=newDispatcherTimer(){
Interval=TimeSpan.FromSeconds(1)
};
DispatcherTimer.Tick+=(O_O,n_n)=》{
varpinv=MoistureSensorOutputPin.Read();
if(pinv==GpioPinValue.High){
Debug.WriteLine(“IsDry”);
}
else{
Debug.WriteLine(“OkWaterDetected!”);
}
};
DispatcherTimer.Start();
}
}
前几天在淘宝上买了个长得这样的土壤湿度传感器:
结果搜了一圈,网上似乎还没有Windows10的例子代码,又只能自己爆了。这个传感器有4个阵脚,意思分别是:
所以,我们把VCC接到树莓派的DC3.3v输出上,我用的是PIN01,GND接在任何一个接地端口上,我用的是PIN09,DO输出接任何一个空闲的GPIO端口,我用的是21。如果不清楚树莓派端口布局的朋友可以参考这张图:
连线完成就像是这样:
电源连通之后,电源灯会亮起:
调节传感器上的旋钮(蓝色的菊花),这个是灵敏度的校准,也是个阈值,直到在干燥空气中不让DO-LED亮起。
倒一杯水,或者没有水的话,舔一下传感器的触角,DO-LED应该会亮起,这时候就校准好了。然后就能爆代码了!
这个传感器在干燥时候输出的是高电平,遇到水输出低电平。根据这个原理,把代码爆成这样:
注意不要用这个事件:
这个会重复输出好多次的。
运行结果
全部0条评论
快来发表一下你的评论吧 !