前几天在淘宝上买了个长得这样的土壤湿度传感器:
结果搜了一圈,网上似乎还没有Windows 10的例子代码,又只能自己爆了。
这个传感器有4个阵脚,意思分别是:
针脚含义
AO模拟信号输出
DO数字信号输出
GND电源负极
VCC电源正极
所以,我们把VCC接到树莓派的DC3.3v输出上,我用的是PIN 01,GND接在任何一个接地端口上,我用的是PIN 09,DO输出接任何一个空闲的GPIO端口,我用的是21。如果不清楚树莓派端口布局的朋友可以参考这张图:
连线完成就像是这样:
电源连通之后,电源灯会亮起:
调节传感器上的旋钮(蓝色的菊花),这个是灵敏度的校准,也是个阈值,直到在干燥空气中不让DO-LED亮起。
倒一杯水,或者没有水的话,舔一下传感器的触角,DO-LED应该会亮起,这时候就校准好了。然后就能爆代码了!!!
这个传感器在干燥时候输出的是高电平,遇到水输出低电平。根据这个原理,把代码爆成这样:
public GpioPin MoistureSensorOutputPin { get; set; }
public DispatcherTimer DispatcherTimer { get; set; }
public MainPage()
{
this.InitializeComponent();
Loaded += OnLoaded;
}
private async void OnLoaded(object sender, RoutedEventArgs routedEventArgs)
{
var ctl = await GpioController.GetDefaultAsync();
MoistureSensorOutputPin = ctl?.OpenPin(21);
if (MoistureSensorOutputPin != null)
{
MoistureSensorOutputPin.SetDriveMode(GpioPinDriveMode.Input);
DispatcherTimer = new DispatcherTimer()
{
Interval = TimeSpan.FromSeconds(1)
};
DispatcherTimer.Tick += (O_O, n_n) =>
{
var pinValue = MoistureSensorOutputPin.Read();
if (pinValue == GpioPinValue.High)
{
Debug.WriteLine("Dry");
}
else
{
Debug.WriteLine("Water Detected!");
}
};
DispatcherTimer.Start();
}
}
注意不要用这个事件:
public event TypedEventHandler<gpiopin, gpiopinvaluechangedeventargs=""> ValueChanged;
这个会重复输出好多次的。。。
运行结果
传真:0755 - 2799 6625
投诉:133-2299-1235
邮箱:sale@inmiga.com