提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 一、红外传感器?
- 二、使用步骤
- 1.确保驱动已经安装
- 2.安装GPIO工具
- 3.安装GPIO的Python支持
- 4.Python3代码
- 5.测试结果
- 总结
前言
最近在做一个项目需要用到红外距离传感器,设备如果检测到有人靠近就亮屏,规定时间检测不到人就自动息屏。也许这个方法通过其它方法也能做到,只不过用红外的话一方面灵敏度高,另一方面功耗低,节省成本。今天的使用在OrangePi上完成,树莓派原理差不多,只需要稍微配置下就行。这篇文章主要以OrangePi来演示,树莓派的话大家可以自行研究,相信不需要改动太多。
一、红外传感器?
红外线传感器是利用红外线来进行数据处理的一种传感器,有灵敏度高等优点,红外线传感器可以控制驱动装置的运行。
红外线传感器常用于无接触温度测量,气体成分分析和无损探伤,在医学、军事、空间技术和环境工程等领域得到广泛应用。例如采用红外线传感器远距离测量人体表面温度的热像图,可以发现温度异常的部位。
我们今天用的红外线传感器的用途是触发式的,本身不能测距,只要有物体靠近到预设距离就会触发信号。
二、使用步骤
不同的设备,像树莓派和OrangePi可能有着不同的GPIO排列,这篇文章是适用于OrangePi的,也是适用于树莓派和其它拥有GPIO接口的设备。代码采用Python3编写,通俗易懂,如果用在单片机上可能要使用C语言编写。
1.确保驱动已经安装
这篇文章不过多地描述驱动,如果驱动没有安装请按照官方提供的方法安装下驱动,如果已经安装请忽略。
2.安装GPIO工具
打开一个shell输入以下命令,如果正常显式,就说明工具已经安装。
#读取所有gpio插口状态
gpio readall+------+-----+----------+------+---+OrangePi 4+---+---+--+----------+-----+------+| GPIO | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | GPIO |+------+-----+----------+------+---+----++----+---+------+----------+-----+------+| | | 3.3V | | | 1 || 2 | | | 5V | | || 64 | 0 | I2C2_SDA | IN | 0 | 3 || 4 | | | 5V | | || 65 | 1 | I2C2_SCL | IN | 0 | 5 || 6 | | | GND | | || 150 | 2 | PWM1 | IN | 0 | 7 || 8 | 1 | IN | I2C3_SCL | 3 | 145 || | | GND | | | 9 || 10 | 1 | ALT2 | I2C3_SDA | 4 | 144 || 33 | 5 | GPIO1_A1 | IN | 0 | 11 || 12 | 1 | IN | GPIO1_C2 | 6 | 50 || 35 | 7 | GPIO1_A3 | IN | 0 | 13 || 14 | | | GND | | || 92 | 8 | GPIO2_D4 | IN | 0 | 15 || 16 | 0 | IN | GPIO1_C6 | 9 | 54 || | | 3.3V | | | 17 || 18 | 0 | IN | GPIO1_C7 | 10 | 55 || 40 | 11 | SPI1_TXD | ALT2 | 1 | 19 || 20 | | | GND | | || 39 | 12 | SPI1_RXD | ALT2 | 1 | 21 || 22 | 0 | IN | GPIO1_D0 | 13 | 56 || 41 | 14 | SPI1_CLK | ALT3 | 1 | 23 || 24 | 1 | ALT3 | SPI1_CS | 15 | 42 || | | GND | | | 25 || 26 | 0 | IN | GPIO4_C5 | 16 | 149 || 64 | 17 | I2C2_SDA | IN | 0 | 27 || 28 | 0 | IN | I2C2_SCL | 18 | 65 || | | I2S0_RX | | | 29 || 30 | | | GND | | || | | I2S0_TX | | | 31 || 32 | | | I2S_CLK | | || | | I2S0_SCK | | | 33 || 34 | | | GND | | || | | I2S0_SI0 | | | 35 || 36 | | | I2S0_SO0 | | || | | I2S0_SI1 | | | 37 || 38 | | | I2S0_SI2 | | || | | GND | | | 39 || 40 | | | I2S0_SI3 | | |+------+-----+----------+------+---+----++----+---+------+----------+-----+------+| GPIO | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | GPIO |+------+-----+----------+------+---+OrangePi 4+---+---+--+----------+-----+------+
如果命令正常出结果说明GPIO工具已经安装,可以进行下一步了,如果没有需要先安装GPIO工具。
sudo apt update
sudo apt install git
git clone https://github.com/orangepi-xunlong/wiringOP
cd wiringOP
./build clean
./build
编译完成输入gpio readall来测试下是否成功了,如果成功了就进入下一步,没有成功就检查错误原因。
3.安装GPIO的Python支持
这篇文章演示代码是在Python3上实现的,所以需要GPIO的Python支持。执行以下命令就可以在OrangePi设备上安装GPIO包了
sudo pip3 install --upgrade OPi.GPIO
安装完成后就可以编写Python代码测试了。
4.Python3代码
# 红外传感器(infrared ray)
import timeimport OPi.GPIO as GPIO
import orangepi.pi4# 默认使用BOARD模式,在我的OrangePi上就是官方描述的物理插针,不同的设备可能不一样,以官方文档为准
BOARD = orangepi.pi4.BOARD
GPIO.setmode(BOARD)# 需要操作的针脚,随便找一个IN针脚就可以了,注意插针的物理排列和序号的对应关系
IN= 15 # in 对应针脚15# 设置输入PIN,模块上是OUT,我们这个地方需要接IN
GPIO.setup(IN, GPIO.IN)# 测试比较简单,直接返回out的值就行了
def start_test():return GPIO.input(IN)try:while True:value = start_test()print("value: " + str(value))time.sleep(0.1)
except KeyboardInterrupt:GPIO.cleanup()
5.测试结果
没有触发感应:
value: 1
value: 1
value: 1
value: 1
value: 1
value: 1
value: 1
value: 1
value: 1
value: 1
value: 1
value: 1
value: 1
value: 1
value: 1
value: 1
将手遮挡住:
value: 0
value: 0
value: 0
value: 0
value: 0
value: 0
value: 0
value: 0
value: 0
value: 0
value: 0
value: 0
默认状态指示灯是灭的,触发距离感应指示灯亮,值变为0.
总结
1、务必先将板子关机掉电再插传感器,防止短路
2、VCC不要插错位置,防止短路烧坏板子或传感器,3.3V和5V都可以。
3、通过电位器旋转来控制触发距离,默认会有一定的距离偏差。