安全设备/系统
自电晕爆发以来,很难确定哪些人受到了病毒的影响。为了解决这个问题,通常使用温度设备来测量体温。这些设备具有非接触式红外温度传感器,无需任何物理接触即可测量体温。
市场上有许多测温枪,但没有一个会在温度超过特定限制时向上级部门发出任何警报或电子邮件通知以采取适当的行动。在这个项目中,如果任何特定人的温度超过设定值,我们将连接一个IR温度传感器并发送带有该人图像的电子邮件警报。
在这个项目中,我们将利用物联网的力量,我们将使用RaspberryPi、MLX90614和PiCamera构建一个带有电子邮件警报的温度监控设备。
所需组件
这里我们使用的是Raspberry Pi 3 Raspbian OS。所有基本的硬件和软件要求都在前面讨论过,您可以在Raspberry Pi Introduction和Raspberry PI LED Blinking中查找入门,除了我们需要:
Raspberry Pi 3(任何版本都可以)。
派相机。
MLX90614 - 红外温度传感器。
连接电线。
面包板。
电源 (5V,2A/3A)
如果我们将项目分成几部分,这个项目很简单。
理解和连接 MLX90614 与 Raspberry pi。
开始使用 Pi 相机。
使用 Raspberry pi 设置 SMTP 电子邮件。
最终代码开发和理解。
Raspberry Pi: Raspberry Pi 是一种信用卡大小的计算机,专为教育目的而设计。由于其价格和惊人的规格(如板载 wifi、蓝牙和可编程 GPIO 接头)以及创建应用程序的可能选项数量,它被开发人员和电子爱好者采用。您可以在Raspberry Pi Introduction和Raspberry PI LED Blinking中查找它以开始启动过程。
MLX90614 IR 温度传感器:市场上有许多传感器可以为我们提供温度和湿度。该传感器与所有其他传感器的不同之处在于它可以为我们提供物体温度,而其他传感器则提供环境温度。我们已将 DHT11 传感器和LM35广泛用于许多必须测量大气湿度或温度的应用。
但是这里为了制作不需要物理接触并且可以测量物体温度而不是环境温度的温度枪,我们使用基于 IR 的MLX90614。要了解有关红外线和红外线传感器电路的更多信息,请点击链接。
MLX90614 传感器由迈来芯微电子集成系统制造,它利用红外热电堆传感器的原理进行温度测量。这些传感器由两个内部嵌入的单元组成,以提供温度输出。第一个单元是具有红外探测器的传感单元,其后是第二个单元,它使用数字信号处理 (DSP) 执行数据计算。该传感器根据Stefan-Boltzmann 定律工作,该定律根据温度解释黑体辐射的功率。简单来说,任何物体都会发射红外能量,其强度将与该物体的温度成正比。MLX90614 传感器将计算值转换为17 位 ADC并且可以使用I2C 通信协议进行访问。这些传感器测量环境温度以及物体温度,分辨率校准为 0.02°C。要了解有关 MLX90614 传感器特性的更多信息,请参阅MLX90614 数据表。
MLX90614的特点:
工作电压:3.6V 至 5V
环境温度范围:-40°C 至 125°C
物体温度范围:-70°C 至 -382.2°C
分辨率/校准:0.02°C
17 位 ADC。
I2C 通信。
MLX90614 与树莓派的接口
首先,我们将下载成功连接 MLX90614 所需的库和包。
第1 步:从 Raspberry Pi 设置启用 I2C。
键入sudo raspi-config然后转到接口选项。
转到 I2C 选项并启用它。
Step2:到https://pypi.org/project/PyMLX90614/#files下载MLX90614的包/库,然后右键复制链接地址。
转到 RPI 终端并键入 wget 并粘贴复制的链接,如下所示。
wget https://files.pythonhosted.org/packages/67/8a/443af31ff99cca1e30304dba28a60d3f07d247c8d410822411054e170c9c/PyMLX90614-0.0.3.tar.gz
它将以 zip 文件名‘PyMLX90614-0.0.3.tar.gz’下载库。然后提取扩展名为tar -xf文件名的文件夹或使用以下命令执行相同操作。
tar -xf PyMLX90614-0.0.3.tar.gz
然后我们需要使用以下命令安装一些必需的软件包。
sudo apt-get install python-setuptools
sudo apt-get install -y i2c-tools
然后使用cd PyMLX90614-0.0.3/转到提取的文件夹 并运行命令。
须藤 python setup.py 安装
完成这些步骤后,只需使用下面给出的电路将 MLX90614 传感器与 Raspberry pi连接起来。下面的Raspberry Pi MLX90614 电路是使用 Fritzing 设计的。
如果连接和安装正确完成,我们可以使用命令 i2cdetect -y 1检查是否在 I2C 总线上获取传感器地址值。
如果一切正常,我们可以在终端上看到以下输出。
0x5A代表数据表中提到的传感器地址。下面给出了相同的数据表片段。
现在,我们将运行一个新的文件名mlxread.py并编写一个示例程序来检查来自传感器的数据。下面给出了相同的代码。
从 smbus2 导入 SMBus
从 mlx90614 导入 MLX90614 总线 = SMBus(1) 传感器 = MLX90614(总线,地址 = 0x5A) 打印“环境温度:”,sensor.get_ambient() 打印“物体温度:”,sensor.get_object_1() 总线.close()
创建文件后,我们将使用 python 扩展名python mlxread.py 运行它。 我收到的输出如下所示。我多次运行该程序以检查当我将手移到它上面时值是否发生变化。
哇,我们已经成功地将 MLX90614 与我们的 Raspberry Pi 连接起来,您可以从上图中确认。
Pi 相机与 Raspberry Pi 的接口
第1 步:从 Raspberry Pi 设置启用相机。
键入sudo raspi-config然后转到接口选项。
转到相机并启用相机。
现在,如下图所示连接摄像头模块。
Step2:为了检查相机是否连接正确,我们拍摄一张测试图像并将其保存在我们的桌面(我们使用的是全 GUI Raspbian OS 版本)
raspistill -o 桌面/image.jpg
这将使您的相机能够单击名称为 image 的图片并将其存储在桌面上。
使用 Raspberry Pi 设置 SMTP 电子邮件
在本节中,我们将了解如何设置 GMAIL 帐户以在温度超过预定义的设置值时发送警报邮件。
SMTP 是一种简单邮件传输协议,它是一种应用层协议,负责使用 TCP/IP 进行电子邮件服务。它提供发送和接收电子邮件消息的能力,由Internet 工程任务组(IETF) 管理。
本教程仅适用于GMAIL 帐户,为避免任何可能的错误,建议您使用新的 Gmail 帐户。
默认情况下,Google 不允许用户使用 python 脚本发送电子邮件。为了使这项工作,我们必须通过进入帐户设置来启用一些不太安全的应用程序。
步骤1:转到右上角并点击我的管理您的谷歌帐户。
步骤2:点击安全并向下滚动到“不太安全的应用程序访问”。
步骤 3:启用不太安全的应用程序。
第4 步:重复使用其他电子邮件 ID 以从 python 脚本发送/接收电子邮件。
Step5:下载所需的包。
sudo apt-get install ssmtp
sudo apt-get install mailutils
如果您在通过复制粘贴运行命令时遇到错误,请手动键入它。
Step6:所有库安装完成后,我们需要在ssmtp.conf 文件中进行更改,我们必须在其中输入发件人的电子邮件详细信息
转到sudo nano /etc/ssmtp/ssmtp.conf
向下滚动到最后并粘贴这个,
mailhub=smtp.gmail.com:587
AuthUser=你的电子邮件地址
AuthPass=YourEmailPassword
使用STARTTLS=YES
使用TLS=YES
我还分享了我的终端截图供您参考。
我只是使用面包板进行连接,当 MLX90614 和相机连接时,我的硬件设置看起来像他的。
用于 Pi 的 Python 代码从 MLX90614 读取温度并发送带图片的电子邮件
python 程序执行所有必要的操作来读取传感器数据,将其与阈值进行比较,授权电子邮件,然后发送附有图像的电子邮件。首先,我们需要库、发件人和收件人电子邮件声明。电子邮件可以通过 smtplib 发送,但我们只想用主题、正文和其他附件来组织电子邮件,这是在多用途 Internet 邮件扩展 (MIME) 的帮助下完成的。完整的代码可以在本页底部找到。
将 RPi.GPIO 导入为 gpio 导入相机 进口时间 导入 smtplib 从 email.MIMEMultipart 导入 MIMEMultipart 从 email.MIMEText 导入 MIMEText 从 email.MIMEBase 导入 MIMEBase 从电子邮件导入编码器 从 email.mime.image 导入 MIMEImage 从 smbus2 导入 SMBus 从 mlx90614 导入 MLX90614
之后,我们定义发件人电子邮件地址、收件人电子邮件地址、电子邮件主题、正文和附件消息。
fromaddr = "test2718test@gmail.com" # 相应地更改电子邮件地址 toaddr = "electrofunedu@gmail.com" 邮件 = MIMEMultipart() 邮件['发件人'] = fromaddr 邮件['收件人'] = toaddr mail['Subject'] = "温度值超出警报" body = "请查找附件图片"
然后,我们创建一个函数,我们可以使用它发送电子邮件。
定义发送邮件(数据): mail.attach(MIMEText(body, 'plain')) 打印数据 dat='%s.jpg'%data 打印数据 附件=打开(dat,'rb') 图像=MIMEImage(附件。读取()) 附件.close() 邮件附件(图片) 服务器 = smtplib.SMTP('smtp.gmail.com', 587) server.starttls() server.login(fromaddr, "test12345@") 文本 = mail.as_string() server.sendmail(fromaddr, toaddr, text) server.quit()
然后,我们创建一个函数来捕获通过电子邮件发送的图像,并将图像与数据和时间一起存储。
定义捕获图像(): 数据= time.strftime("%d_%b_%Y|%H:%M:%S") camera.start_preview() 时间.sleep(5) 打印数据 camera.capture('%s.jpg'%data) camera.stop_preview() 时间.sleep(1) 发送邮件(数据)
然后,我们使用 PiCamera 进行一些设置。
相机 = picamera.PiCamera() camera.rotation=0 camera.awb_mode = '自动' 相机.亮度=55
最后,我们有一个 while(1) 循环,它将无限运行。它将从 MLX90614 温度传感器读取数据,如果温度超过设定值,则调用capture_image()函数,然后调用sendMail(data)函数通过电子邮件发送图像捕获。
使用 PI 测量温度和发送邮件警报
硬件和软件准备好后,只需在您的 pi 上运行 python 代码(如下所示)。它将打印从传感器读取的温度值,如下所示。
如果物体温度超过阈值温度,那么我们的 python 程序将从相机中获取图像,将其保存在树莓派上,并通过电子邮件共享。从树莓派发送的电子邮件示例如下所示。
将 RPi.GPIO 导入为 gpio
导入相机
进口时间
导入 smtplib
从 email.MIMEMultipart 导入 MIMEMultipart
从 email.MIMEText 导入 MIMEText
从 email.MIMEBase 导入 MIMEBase
从电子邮件导入编码器
从 email.mime.image 导入 MIMEImage
从 smbus2 导入 SMBus
从 mlx90614 导入 MLX90614
fromaddr = "test2718test@gmail.com" # 相应地更改电子邮件地址
toaddr = "electrofunedu@gmail.com"
邮件 = MIMEMultipart()
邮件['发件人'] = fromaddr
邮件['收件人'] = toaddr
mail['Subject'] = "温度值超出警报"
body = "请查找附件图片"
数据=""
定义发送邮件(数据):
mail.attach(MIMEText(body, 'plain'))
打印数据
dat='%s.jpg'%data
打印数据
附件=打开(dat,'rb')
图像=MIMEImage(附件。读取())
附件.close()
邮件附件(图片)
服务器 = smtplib.SMTP('smtp.gmail.com', 587)
server.starttls()
server.login(fromaddr, "test12345@")
文本 = mail.as_string()
server.sendmail(fromaddr, toaddr, text)
server.quit()
定义捕获图像():
数据= time.strftime("%d_%b_%Y|%H:%M:%S")
camera.start_preview()
时间.sleep(5)
打印数据
camera.capture('%s.jpg'%data)
camera.stop_preview()
时间.sleep(1)
发送邮件(数据)
相机 = picamera.PiCamera()
camera.rotation=0
camera.awb_mode = '自动'
相机.亮度=55
而1:
总线 = SMBus(1)
传感器 = MLX90614(总线,地址 = 0x5A)
打印“环境温度:”,sensor.get_ambient()
打印“物体温度:”,sensor.get_object_1()
温度 = sensor.get_object_1()
总线.close()
如果温度> 34:
捕获图像()
时间.睡眠(0.1)
别的:
time.sleep(0.01)
全部0条评论
快来发表一下你的评论吧 !