IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    Windows 10 IoT开发:土壤湿度传感器的使用(树莓派3)

    汪宇杰发表于 2016-03-28 11:38:14
    love 0

    前几天在淘宝上买了个长得这样的土壤湿度传感器:

    结果搜了一圈,网上似乎还没有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;

    这个会重复输出好多次的。。。

    运行结果



沪ICP备19023445号-2号
友情链接