CoroFence - 热探测器🖖
组件和用品
| × | 1 | ||||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 | |||
![]() |
| × | 1 |
应用和在线服务
![]() |
| |||
![]() |
|
关于这个项目
当前的全球大流行危机
正如世界卫生组织 (WHO) 建议的那样,预防感染传播包括“经常洗手,咳嗽和打喷嚏时捂住口鼻,彻底煮熟肉类和鸡蛋。避免与任何出现咳嗽和打喷嚏等呼吸道疾病症状的人密切接触”。
在机场旅行时安装热扫描仪以发现可能被感染的旅客已成为一种普遍做法。
自制热探测器
虽然我们面临着在当前情况下作为保护层继续远程工作的挑战,但我们应该避免与他人接触,直到情况得到控制。
主要想法是构建一个热像仪探测器,可以轻松部署在您家/实验室/办公室/穿梭机外...这样您就可以在安全区域受到保护。
输入传感器
- 网格眼
“与仅测量某个接触点温度的传统热传感器不同,基于松下 MEMS 技术的 Grid-EYE 可以在没有任何接触的情况下测量整个指定区域的温度;换言之,它是一种“非接触式热电堆阵列传感器”。 64 像素可在硅透镜提供的 60° 视角范围内进行准确的温度测量。 Grid-EYE 使用 I²C 通信接口,能够以 1 或 10 帧/秒的速度进行温度测量。还提供中断功能。”

- 尺寸:11.6 x 4.3 x 8.0 毫米(长 x 高 x 宽)
- 工作电压:3.3V 或 5.0V(取决于 P/N)
- 测量对象的温度范围:-20°C 至 100°C(取决于 P/N)
- 视野 (FoV):60°
- 像素数:64(垂直 8 x 水平 8)
- 外部接口:I²C(快速模式)
- 帧速率:10 帧/秒或 1 帧/秒
是什么让这款传感器非常适合 1.5 米外的人体检测,并且可以检测 5/7 米内的目标。
- 个人信息
我们还需要一个触发器,因为我们还想在检测到移动时激活热像仪。因此PIR传感器是完美的选择。
“PIR 传感器检测到在距离传感器大约 10m 范围内移动的人。这是平均值,因为实际检测范围在 5m 到 12m 之间。PIR 基本上由热释电传感器构成,可以检测红外辐射水平. 对于需要在个人离开或进入该区域时发现的众多基本项目或物品。PIR 传感器令人难以置信,它们是平坦的控制和最小的努力,具有宽广的镜头范围,并且易于连接。”>
如下添加:

连接完成后(见下图)为输入传感器准备盒子,如下所示:

视觉和声音输出
- RGB LEED
我们希望通过基本的 RGB LED 获得即时温度反馈,这些 LED 将被编程为在我们进入热像仪时显示一些颜色。
- 蜂鸣器
当温度超过正常 37'C 时,我们会发出声音警报,以通知您可能存在的危险。


最终测试:
当温度正常并检测到存在时,我们显示绿灯

//可以建立不同的颜色
if (tempC<16) {
setColor(0, 0, 255); // blue
} else if(tempC <15) {
setColor(80, 0, 80); // 青色
} else if(tempC <30) {
setColor(0, 255, 255); // aqua
} else if(tempC <36) {
setColor(0, 255, 0); // 绿色
} else if(tempC <38) {
setColor(255, 255, 0); // 黄色
} else if(tempC <39) {
setColor(255, 20, 20); // 洋红色
}
触发声音警报和红色,使用蒸汽熨斗正确测试它,这是后来在做一些家务时偶然发现的。

长寿和繁荣

或者,您可以在 NodeJS 界面中查看温度,并通过与此终端应用程序的串行连接从 Arduino 获取数据。
进一步的计划是扩展与das平台的数据集成并开始建模。
在@dasData 上关注直播
https://dasdata.co/camera/

希望你在银河系的这个时期无论身在何处都能安全!
代码
- 电晕
coronafenceC/C++
#include#include GridEYE grideye;String heatData;int ledState;unsigned long meettime; uint16_t 秒 =3142; // max ==65535int bluePin =8;int greenPin =9;int redPin =10;int buzzPin =11; // 选择 LEDint inputPin =12 的引脚; // 选择输入引脚(用于 PIR 传感器)int pirState =LOW; // 我们开始,假设没有检测到运动int val =0; // 用于读取 pin statusfloat tempC 的变量;无效设置(){ pinMode(redPin,输出); pinMode(greenPin, OUTPUT); pinMode(bluePin,输出); pinMode(buzzPin,输出); // 声明 LED 为输出 pinMode(inputPin, INPUT); // 将传感器声明为输入 // 启动您首选的 I2C 对象 Wire.begin(); // 库为 I2C 假设“连线”,但如果您喜欢 grideye.begin(),您可以使用 begin() 传递其他内容; Serial.begin(115200); } void loop() { char receiveVal; if(Serial.available()> 0) { receiveVal =Serial.read(); if(receiveVal =='1') { ledState =1; } 否则 ledState =0; val =digitalRead(inputPin); // 读取输入值 if (val ==HIGH) { // 检查输入是否为高 // digitalWrite(ledPin, HIGH); // 打开 LED if (pirState ==LOW) { meettime =millis(); Serial.println("检测到移动!"); // 我们只想打印输出变化,而不是 state pirState =HIGH;获取热图(); if (tempC<16) { setColor(0, 0, 255); // 蓝色 } else if(tempC <16) { setColor(80, 0, 80); // 青色 } else if(tempC <20) { setColor(0, 255, 255); // 浅绿色 } else if(tempC <24) { setColor(0, 255, 0); // 绿色 } else if(tempC <28) { setColor(255, 255, 0); // 黄色 } else if(tempC <37) { setColor(255, 20, 20); // 洋红色 } // 读取从客户端传入的字节: // char thisChar =client.read(); // 将字节回显给客户端: // char msg[10] =""; Serial.println(heatData);延迟(1500); } } else { // digitalWrite(ledPin, LOW); // 关闭 LED if (pirState ==HIGH){ // 我们刚刚关闭了 noTone(buzzPin); // 停止声音... Serial.println("运动结束!");设置颜色(0, 0, 0); // 无会议时间 =0; // 我们只想打印输出变化,而不是 state pirState =LOW; } } }void getHeatmap(){ // 以浮点摄氏度打印每个像素的温度值 // 以逗号分隔 heatData ="";浮动previousVal =0; for (unsigned char i =0; i <64; i++) { if(previousVal>37) { // 我们刚刚开启了Serial.println("高温!"); setColor(255, 0, 0); // 红色调(buzzPin, 1000); // 发送 1KHz 声音信号... } tempC =grideye.getPixelTemperature(i); heatData +=tempC + String(","); previousVal =tempC; } // 以换行符结束每一帧 Serial.println(); // 给处理时间咀嚼}void setColor(int red, int green, int blue){ #ifdef COMMON_ANODE red =255 - red;绿色 =255 - 绿色;蓝色 =255 - 蓝色; #endif analogWrite(redPin, red);模拟写入(greenPin,绿色);模拟写入(bluePin,蓝色); }
电晕
Arduino IDE、Visual Studio 2019、NodeJS 代码 https://github.com/dasdata/coronafence示意图

制造工艺