Windows IoT借助树莓派C#做接近开关传感器试验

举报
神龙居市 发表于 2021/12/13 23:32:49 2021/12/13
【摘要】 接近传感器,是代替限位开关等接触式检测方式,以无需接触检测对象进行检测为目的的传感器的总称。能检测对象的移动信息和存在信息转换为电气信号。在换为电气信号的检测方式中,包括利用电磁感应引起的检测对象的金属体中产生的涡电流的方式、捕测体的接近引起的电气信号的容量变化的方式、利石和引导开关的方式。感应型接近传感器的检测原理:通过外部磁场影响,检测在导体表面产生的涡电流引起的磁性损耗。在检测线圈内使...

接近传感器,是代替限位开关等接触式检测方式,以无需接触检测对象进行检测为目的的传感器的总称。能检测对象的移动信息和存在信息转换为电气信号。在换为电气信号的检测方式中,包括利用电磁感应引起的检测对象的金属体中产生的涡电流的方式、捕测体的接近引起的电气信号的容量变化的方式、利石和引导开关的方式。

感应型接近传感器的检测原理:
通过外部磁场影响,检测在导体表面产生的涡电流引起的磁性损耗。在检测线圈内使其产生交流磁场,并检测体的金属体产生的涡电流引起的阻抗变化进行检测的方式。
此外,作为另外一种方式,还包括检测频率相位成分的铝检测传感器,和通过工作线圈仅检测阻抗变化成分的金属传感器。
在检测体一侧和传感器一侧的表面上,发生编译器的状态。
试验准备:
1、树莓派3B,接近开关一个,发光三极管一个。
2、安装了Windows IoT 系统,Windows 10 + Visual Studio 2022开发环境
接线图
试验要完成的任务:
当接近开关靠近金属物体时,主动通知,亮起三极管的灯。
当接近开关远离金属物,随即三极管熄灭。
1、创建一个类ProximitySwitch,用来实现对接近开关引脚监听,引脚电平变化时做出反应,这里用一个回调方法实现。定义一个GpioPin的控制监听对象。一个回调方法。
        /// <summary>
        /// 监听控制
        /// </summary>
        private GpioPin _ListenPin;
        /// <summary>
        /// 监听结果回调
        /// </summary>
        private Action<GpioPinValue> _PinValueChanged;

初始化接近开关的引脚对象,并设定回调方法

        /// <summary>
        /// 初始化引脚
        /// </summary>
        /// <param name="pin">引脚编号</param>
        /// <param name="mode">工作模式</param>
        /// <param name="value">初始值</param>
        void Init(int pin, GpioPinDriveMode mode, GpioPinValue value)
        {
            var gpio = GpioController.GetDefault();

            _ListenPin = gpio.OpenPin(pin);

            _ListenPin.SetDriveMode(mode);
            _ListenPin.Write(value);
            _ListenPin.ValueChanged += Pin_ValueChanged;
        }
        private void Pin_ValueChanged(GpioPin sender, GpioPinValueChangedEventArgs args)
        {
            _PinValueChanged(sender.Read());

        }

2、再创建一个控制引脚输出的类PinSetting,类负责初始化一个引脚,并提供写入高低电平

    public class PinSetting
    {
        GpioPin _Pin;
        public PinSetting(int pin)
        {
            var gpio = GpioController.GetDefault();
            _Pin = gpio.OpenPin(pin);
            _Pin.SetDriveMode(GpioPinDriveMode.Output);
        }
        /// <summary>
        /// 执行写入
        /// </summary>
        /// <param name="value"></param>
        public void WritePin(GpioPinValue value)
        {
            _Pin.Write(value);
        }
    }

3、测试一下,这里是通过一个uwp点page上button出发

        PinSetting pin;
        ProximitySwitch proximity;
        private async void Button_Click(object sender, RoutedEventArgs e)
        {
            pin = new PinSetting(27);
            proximity = new ProximitySwitch(6);
            proximity.StartListen(v => {
                pin.WritePin(v);//通过监听结果回调触发
            });
        }

最终效果

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。