树莓派 --- 疫情防控检测一体化设备

本文介绍了使用树莓派构建的疫情防控检测设备,包括播放音频、LED控制、舵机控制、蜂鸣器控制、人体感应模块(超声波测距)、数据库操作、学生信息获取、体温测量、文本转语音、口罩人脸识别、邮件发送等功能。设备采用多种模块组合,实现了体温记录、人脸识别及异常预警等自动化功能。
摘要由CSDN通过智能技术生成

目录

项目源码地址

项目功能规划

引脚分配图 

1.播放音频模块

封装了一个 playAudio(file_path) 函数,传入一个参数file_path表示音频文件路径

playAudio.py

import os

priority = 0

# 播放音频的函数,传入一个参数file_path表示音频文件路径
def playAudio(file_path):
    global priority
    if priority > 0:
        pass
    else:
        # 给播放的音频设置优先级,提示戴口罩的音频优先级最低
        if file_path == "./audio/temperature.mp3":
            priority = 2
        elif file_path == "./audio/highTemp.mp3":
            priority = 1
        try:
            # omxplayer命令的输出都放进/dev/null中,避免打印到屏幕上
            os.system("omxplayer -o local {path} > /dev/null".format(path=file_path))
            priority = 0
        except:
            print('播放音频文件失败!')

2.控制Led模块

封装了一个 turnOnLed() 函数,用于点亮led,一个 turnOffLed() 函数,用于熄灭led

led.py  

# coding=utf-8
import RPi.GPIO as GPIO

led_pin = 26      # led正极所接引脚
GPIO.setmode(GPIO.BCM)
GPIO.setup(led_pin, GPIO.OUT, initial=GPIO.LOW)    # 将GPIO26设置为输出模式,初始状态为低电平

# 点亮led的函数
def turnOnLed():
    GPIO.output(led_pin, GPIO.HIGH)

# 熄灭led的函数
def turnOffLed():
    GPIO.output(led_pin, GPIO.LOW)

3. 控制舵机模块

参考博客

封装了一个 openGate() 函数,模拟打开闸机,一个 closeGate() 函数,模拟关闭闸机

controlServo.py

import RPi.GPIO as GPIO
from time import sleep
 
servo_pin = 18                # 舵机信号线接树莓派GPIO18

GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(servo_pin, GPIO.OUT, initial=False)
p = GPIO.PWM(servo_pin, 50) # 初始频率为50HZ

# 旋转角度转换到PWM占空比
def angleToDutyCycle(angle):
    return 2.5 + angle / 180.0 * 10

# 舵机转到0度模拟开闸机
def openGate(): 
    p.start(angleToDutyCycle(0))
    sleep(0.5)
    p.ChangeDutyCycle(0)        # 清空占空比,防止舵机抖动

# 舵机转90度模拟关闸机
def closeGate():
    p.start(angleToDutyCycle(90))
    sleep(0.5)
    p.ChangeDutyCycle(0)        # 清空占空比,防止舵机抖动

4. 控制蜂鸣器(有源)模块 

封装了一个 beep() 函数,控制蜂鸣器,发出“滴”的一声(在刷卡的时候发出)

controlBuzzer.py 

# encoding=utf-8
import RPi.GPIO as GPIO
import time

trig_pin=24
vcc_pin = 23 # 用GPIO23当作电源
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(trig_pin,GPIO.OUT,initial=GPIO.HIGH)
GPIO.setup(vcc_pin, GPIO.OUT, initial=GPIO.HIGH)

# 控制蜂鸣器,发出“滴”的一声
def beep():
    GPIO.output(trig_pin,GPIO.LOW)
    time.sleep(0.1)
    GPIO.output(trig_pin,GPIO.HIGH)

5. 检测是否有人接近模块(效果不好,舍弃)

这里我们用到是HC--SR501人体感应模块

我这里
电源 --- 物理引脚02
信号输出 --- 物理引脚12(GPIO18)
接地 --- 物理引脚14

一部分功能: 
①全自动感应:当有人进入其感应范围则输入高电平,人离开感应范围则自动延时关闭高电平,输出低电平
②感应范围:小于120度锥角,7米以内 
③具有感应封锁时间 ( 默认设置 :2.5S 封锁时间 ) :感应模块在每一次感应输出后(高电平变成低电平),可以紧跟着设置一个封锁时间段,在此时间段内感应器不接受任何感应信号 

这个是可以调节的,参考博客
④感应模块通电后有一分钟左右的初始化时间,在此期间模块会间隔地输出0-3 次,一分钟后进入待机状态 

① 这里我封装了一个detectPerson()方法,有人接近返回True,没人返回False
考虑到它的感应封锁时间,用的时候可以每隔3s测一次

detectPerson.py

import RPi.GPIO as GPIO
from time import sleep

signal_pin = 18

GPIO.setmode(GPIO.BCM)
GPIO.setup(signal_pin, GPIO.IN)

# 用于检测有没有人接近,有返回True,没有返回False
def detectPerson():
    signal = GPIO.input(signal_pin)
    if signal == GPIO.HIGH:
        return True
    else:
        return False

② 缺点

  • 容易受各种热源、光源干扰,所以测量精度一般
  • 环境温度和人体温度接近时,探测和灵敏度明显下降,有时造成短时失灵

5. 检测是否有人接近模块(采用)

参考博客

  • 7
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

漂流の少年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值