一起玩转树莓派(12)——U型光电传感器

简介: 本篇博客,我们将使用U型光电传感器实现一个简单的测速工具。本实使用的元件简单,实验的原理也非常简单。

一起玩转树莓派(12)——U型光电传感器

    本篇博客,我们将使用U型光电传感器实现一个简单的测速工具。本实使用的元件简单,实验的原理也非常简单。

一、关于U型光电传感器

    U型光电传感器由于其有一个U型的凹槽而得名。其凹槽的一侧会发射红外光,凹槽的另一侧装有接收装置。通过对红外光的遮挡与导通,从而改变元件信号源引脚的电平高低。基于这种特性,我们很容易使用U型光电传感器来测量是否有物体遮挡光线。在测速领域,运用广泛。

    本实验使用的传感器模块如下图所示:

可以看到,此元件有3个引脚,GND引脚为接地引脚,VCC引脚为电源引脚,OUT引脚是输出引脚,当接收器能够接收到从发射源发出的光线时,输出引脚为低电平,当光线被阻断时,输出引脚为高电平。

二、计数器 OR 测速器

    U型光电传感器有着非常广泛的应用,试想一下,如果一个车间流水线在不停的生产商品,如何方便的对生产的商品数量进行自动计数?这时我们就可以将一个U型光电传感器安装到商品的传送带上,只要有商品从传送带上通过,即会挡住传感器发射源发出的红外光,从而触发电平的跳变,实现计数功能。除此之外,U型光电传感器也可以方便的实现测速,我们只要知道了物体的长度和物体通过U型传感器的时间,就可以使用公式v = s / t从而计算出物体运动的速度。下面我们就来编写代码实现这两个功能。

    首先,元件与树莓派连线如下:

U型光电传感器 树莓派
VCC 3.3V电源
GND GND
OUT GPIO17(BCM编码)

编写如下代码:

#coding:utf-8

import RPi.GPIO as GPIO
import time
# 采用物理编码
GPIO.setmode(GPIO.BOARD)
# BCM GPIO17的物理编码是11
out_pin = 11
# 0 计数模式 1 测速模式
MODE = 0
count = 0
# 测速模式下,需要初始化长度S 单位为毫米
S = 10
t1 = 0
t2 = 0

# 进行引脚的初始化,不被遮挡时为低电平,使用低电平的下拉电阻
GPIO.setup(out_pin, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)

# 定义回调函数
def switch_state(pin):
    global count,t1,t2
    # 如果是高电平
    if GPIO.input(pin):
        print("物体遮挡")
        if MODE == 0:
            count += 1
        else:
            t1 = time.time()
    else:
        print("物体遮挡消失")
        if MODE == 0:
            print('计数器-数量:%d'%(count))
        else:
            t2 = time.time()
            t = t2 - t1
            v = S / t
            print('测速器-速度%fmm/s'%(v))

GPIO.add_event_detect(out_pin, GPIO.BOTH, callback=switch_state)

while True:
    pass

如上代码所示,我们可以设置MODE变量来让元件工作在计数模式下或者测速模式下。在树莓派上运行此代码,尝试下计数和测速的功能吧。

专注技术,懂的热爱,愿意分享,做个朋友
目录
相关文章
|
存储 关系型数据库 MySQL
【分布式和微服务1】一篇文章详细了解分布式和微服务的基本概念
【分布式和微服务1】一篇文章详细了解分布式和微服务的基本概念
1406 0
|
Linux
CentOS8设置网络镜像安装源
CentOS8设置网络镜像安装源
1896 0
|
6月前
|
消息中间件 存储 数据采集
4步实现状态机驱动的MQTT客户端,快速接入OneNet (1)
本文介绍了基于状态机驱动的MQTT客户端快速接入OneNet平台的实现方法,通过4步完成模块设计。文章以开源项目`Sparrow`为基础,引入`OneNetMqtt`业务模块,采用事件驱动模型和双层状态机设计,实现设备状态管理、消息处理及定时任务等功能。模块分为三层:`OneNetManager`负责核心逻辑,`OneNetDevice`管理设备信息,`OneNetDriver`处理Socket与MQTT通信。验证结果显示设备连接、数据上报及下线功能正常,稳定性良好。该设计简化了复杂条件判断,增强了系统灵活性与可扩展性,适用于实际项目参考。文末提供源码获取方式,助力读者实践与学习。
347 107
|
10月前
|
安全 测试技术 数据安全/隐私保护
猫头虎分享:鸿蒙生态带给开发者的全新机遇!轻松实现按需加载与多端适配,开发效率翻倍
猫头虎分享:鸿蒙生态带来的全新机遇!华为在原生鸿蒙之夜发布会上,推出了全新的鸿蒙系统和焕新升级的应用市场。此次升级在用户体验和隐私保护方面实现了重大突破,提供了自动化检测前移、按需加载和多端适配等服务,帮助开发者提高开发效率和应用质量。
357 6
|
11月前
threeJs绘制曲线
这篇文章讲解了如何使用Three.js中的CatmullRomCurve3来绘制平滑的曲线,并提供了实现的代码示例。
156 3
threeJs绘制曲线
|
11月前
|
人工智能 文件存储 计算机视觉
YOLO系列模型发展史
YOLO系列模型从YOLOv3到YOLOv10,不断优化实时目标检测性能和速度。最新版本YOLOv8增加了实例分割、姿态估计等功能。此外,还包括Segment Anything Model(SAM)、MobileSAM、FastSAM、YOLO-NAS、RT-DETR和YOLO-World等模型,分别在不同场景下提供高效的目标检测和分割能力。
421 0
|
Ubuntu NoSQL Linux
一文讲明Docker的基本使用,常见Docker命令使用 、Docker的安装使用等【详细说明+图解+概念+实践】
这篇文章详细介绍了Docker的基本使用,包括Docker的安装、常用命令、架构概念等,并通过图解和实践帮助读者快速掌握Docker的使用方法。
一文讲明Docker的基本使用,常见Docker命令使用 、Docker的安装使用等【详细说明+图解+概念+实践】
|
JSON 监控 Java
Elasticsearch 入门:搭建高性能搜索集群
【9月更文第2天】Elasticsearch 是一个分布式的、RESTful 风格的搜索和分析引擎,基于 Apache Lucene 构建。它能够处理大量的数据,提供快速的搜索响应。本教程将指导你如何从零开始搭建一个基本的 Elasticsearch 集群,并演示如何进行简单的索引和查询操作。
578 3
|
机器学习/深度学习 BI
机器学习模型评估指标总结
机器学习模型评估指标总结
540 2