项目9 游园人数统计
一、概述
在去景区游玩的时候我们常能看到门口会有个计数器,上面写着“今日游客数量 XXXX”用于告知大家今日在园内游玩的人数,那这个计数功能是如何实现的呢?接下来跟我们一起来学习吧。
二、项目实施
(1)使用红外光电开关检测是否有人经过
硬件准备:
主控:Arduino UNO、IO 传感器扩展板 V7.1
模块:红外光电开关
连接线:TypeAtoB方口USB连接线
将红外光电开关接入8号数字接口
程序编写:
红外光电开关是通过检测指定距离内(3~80cm,可以调节)是否有物体经过,当检测到有人通过的话,会输出低电平,当没人经过的时候会输出高电平。看起来功能和我们之前用过的按钮的功能类似,是数字输入,所以我们以官方文档基础库示例中的“数字输入”为基础进行修改。
原程序是摁下按键时L灯亮起,但是红外光电开关是触发时输出低电平,未触发时输出高电平,所以将条件置反,就可以当传感器触发时灯亮,未触发时灯灭的功能。
import time
from pinpong.board import Board,Pin
Board("uno").begin()
btn = Pin(Pin.D8, Pin.IN)
led = Pin(Pin.D13, Pin.OUT)
while True:
v = btn.read_digital()
print(v)
led.write_digital(not v)
time.sleep(0.1)
(2)让屏幕显示人数
硬件准备:
主控:Arduino UNO、IO 传感器扩展板 V7.1
模块:1602LCD显示屏、红外光电开关
连接线:TypeAtoB方口USB连接线
将1602LCD显示屏接入IIC接口
将红外光电开关接入8号数字接口
程序编写
import time
from pinpong.board import Board,Pin
from pinpong.libs.lcd1602 import LCD1602_I2C
Board("uno").begin()#初始化,选择板型(uno、leonardo、xugu)和端口号,不输入端口号则进行自动识别
sw = Pin(Pin.D8, Pin.IN) #初始化红外开关引脚在D8
lcd = LCD1602_I2C(i2c_addr=0x20)#初始化LCD的I2C地址
lcd.backlight(True) #打开背光
lcd.clear()#清屏
v=0
lcd.set_cursor(2,0)#设置光标位置
lcd.print('Visitors')#显示标题
while True:
if sw.read_digital() == 0:
v = v+1
led.write_digital(1)
time.sleep(0.5)
print(v)
lcd.set_cursor(7,1)#设置光标位置
lcd.print(v)#显示人数
三、代码分析
导入必要库和模块,参考之前使用过的LCD屏所需的部分和pin部分。
import time
from pinpong.board import Board,Pin
from pinpong.libs.lcd1602 import LCD1602_I2C
然后对需要用到的功能进行初始化设置。
Board("uno").begin()#初始化,选择板型(uno、leonardo、xugu)和端口号,不输入端口号则进行自动识别
sw = Pin(Pin.D8, Pin.IN) #初始化红外开关引脚在D8
lcd = LCD1602_I2C(i2c_addr=0x20)#初始化LCD的I2C地址
lcd.backlight(True) #打开背光
lcd.clear()#清屏
v=0
lcd.set_cursor(2,0)#设置光标位置
lcd.print('Visitors')#显示标题
每当有人经过就将变量v增加1并用显示屏显示人数。
while True:
if sw.read_digital() == 0:
v = v+1
led.write_digital(1)
time.sleep(0.5)
print(v)
lcd.set_cursor(7,1)#设置光标位置
lcd.print(v)#显示人数
四、硬件分析
红外光电开关
红外接近开关是一种集发射与接收于一体的光电开关传感器。数字信号的输出伴随传感器后侧指示灯亮的亮灭,检测距离可以根据要求进行调节,可调范围3-80cm。该传感器具有探测距离远、受可见光干扰小、价格便宜、易于装配、使用方便等特点,可以广泛应用于机器人避障、互动媒体、工业自动化流水线等众多场合。