CoroFence 热成像检测器:Panasonic GridEye + PIR + IoT 集成
组件与物料
| 组件 | 数量 |
|---|---|
| Panasonic GridEye AMG8833 (8x8 热成像) | 1 |
| PIR 人体红外传感器 (7米) | 1 |
| 蜂鸣器 | 1 |
| RGB LED | 1 |
| Arduino Nano 33 IoT | 1 |
| 3.7V 锂电池 | 1 |
| 塑料接线盒外壳 | 1 |
应用与在线服务
- Arduino IDE
- DasData Maker 数据存储通道
项目背景
疫情期间需非接触测温。GridEye 8x8 热电堆阵列可在 1.5-5 米范围测人体表面温度,视场角 60°,I²C 接口,1/10 fps。配合 PIR 触发测温,降低功耗。RGB LED 指示温度区间,蜂鸣器超温报警,数据上传 DasData 云平台。
传感器特性
- GridEye:64 像素,-20°C~100°C,I²C 快速模式,3.3V/5V 供电
- PIR:检测距离 5-12m,低功耗,数字输出
温度-颜色映射
if (tempC < 16) setColor(0, 0, 255); // 蓝
else if (tempC < 20) setColor(80, 0, 80); // 青
else if (tempC < 24) setColor(0, 255, 255); // 湖蓝
else if (tempC < 28) setColor(0, 255, 0); // 绿
else if (tempC < 37) setColor(255, 255, 0); // 黄
else if (tempC < 38) setColor(255, 20, 20); // 品红
else { setColor(255, 0, 0); tone(buzzPin, 1000); } // 红+报警
核心代码
#include <Wire.h>
#include <SparkFun_GridEYE_Arduino_Library.h>
GridEYE grideye;
String heatData;
int ledState = 0;
unsigned long meetime;
uint16_t seconds = 3142;
int bluePin = 8, greenPin = 9, redPin = 10, buzzPin = 11;
int inputPin = 12; // PIR
int pirState = LOW, val = 0;
float tempC;
void setup() {
pinMode(redPin, OUTPUT); pinMode(greenPin, OUTPUT);
pinMode(bluePin, OUTPUT); pinMode(buzzPin, OUTPUT);
pinMode(inputPin, INPUT);
Wire.begin();
grideye.begin();
Serial.begin(115200);
}
void loop() {
// 串口指令控制 LED 显示开关
if (Serial.available() > 0) {
char c = Serial.read();
ledState = (c == '1') ? 1 : 0;
}
val = digitalRead(inputPin);
if (val == HIGH) {
if (pirState == LOW) {
meetime = millis();
Serial.println("Motion detected!");
pirState = HIGH;
getHeatmap();
// LED 颜色指示 (同上映射)
delay(1500);
}
} else {
if (pirState == HIGH) {
noTone(buzzPin);
Serial.println("Motion ended!");
setColor(0, 0, 0);
meetime = 0;
pirState = LOW;
}
}
}
void getHeatmap() {
heatData = "";
float previousVal = 0;
for (unsigned char i = 0; i < 64; i++) {
tempC = grideye.getPixelTemperature(i);
heatData += String(tempC) + ",";
if (previousVal > 37) {
Serial.println("High temperature!");
setColor(255, 0, 0);
tone(buzzPin, 1000);
}
previousVal = tempC;
}
Serial.println();
Serial.println(heatData);
}
void setColor(int r, int g, int b) {
#ifdef COMMON_ANODE
r = 255 - r; g = 255 - g; b = 255 - b;
#endif
analogWrite(redPin, r);
analogWrite(greenPin, g);
analogWrite(bluePin, b);
}
扩展与演示
- Node.js 串口终端实时显示热力图
- DasData 云平台数据建模分析:https://dasdata.co/camera/
- 蒸汽熨斗测试超温报警(视频演示)
原理图

制造工艺
- 定制 4×4 井字棋名片 PCB – 设计、制作与代码指南
- 多位置温度传感器系统,助力智能家居集成
- 862D+ 电烙铁 DIY 智能温控器:精准可靠,低成本替代方案
- MotionSense:基于 Arduino 与 ESP8266 的智能入侵检测系统
- 3D 打印机防火卫士:智能传感器安全系统
- 基于 Arduino、Yaler 与 IFTTT 构建 Web 化 IoT 仪表盘
- Arduino 简易排斥式磁悬浮:电路与 DIY 指南
- 进阶遥控夹爪机器人:精密抓取 DIY 指南
- 高性能 Arduino 气象气球数据记录器
- ArduFarmBot 第二部分:构建远程 IoT 控制站
- Arduino 8×8 LED 矩阵翻页时钟 - DIY 实时时钟项目
- 进阶微控制器实验平台:ESP32、Arduino、PIC 与多传感器模块集成