员工通过 RFID Pass-Through 的非接触式温度控制
组件和用品
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
应用和在线服务
| ||||
|
关于这个项目
当员工使用RFID标签进入企业时,我们额外使用非接触式红外测温仪测量员工的体温。如果温度升高(COVID19 的症状之一),则会阻止访问。此外,所有数据(通过RFID进行员工识别)都转到公司网站,监控数据到工作时间和体温(UID RFID的员工识别)标签。
带温控RFID进办公室(测试)
查看云端发送的数据
使用带温控的RFID进入办公室
视频2
步骤一、软件安装
我们使用 Arduino MKR 1000 WiFi 板作为控制器。我们将在 Arduino IDE 中编程。默认情况下,Arduino IDE 仅为 AVR 板配置。要使用 Arduino MK Wi-Fi 1000 平台,您需要在卡管理器中添加对 Arduino SAMD(32 位 ARM Cortex-M0+)的支持。在董事会经理(工具>董事会>董事会经理 ),找到Arduino SAMD并点击安装按钮。
在 Arduino IDE 中安装软件后,Tools Board 菜单将支持 Arduino Zero 和 MKR 板,包括 MKR 1000 WiFi 板)。使用 USB 电缆将 MKR 1000 卡连接到您的计算机。应该会自动安装驱动。
步骤 2. 将 IR 温度传感器 MLX90614 连接到 Arduino MKR 1000 Wi Fi 板
MLX90614 是一款用于非接触式温度测量的红外传感器。它可以测量-70至380摄氏度范围内的温度,精度约为0.5°C。我有货 MLX90614DAA
传感器使用 I2C 协议。分配联系人
Arduino MKR WiFi板连接图
对于编程,我们使用 Adafruit_MLX90614.h 库,该库必须通过 Manager Libraries 安装(Sketch> Include library> Manager Libraries )。将草图上传到 Arduino 板 (mlx90614_01.ino)
// 连接库
#include
#include
// 创建对象的实例
Adafruit_MLX90614 mlx =Adafruit_MLX90614();
void setup() {
Serial.begin(9600);
Serial.println("start");
// 启动MLX90614 传感器
mlx.begin();
}
void loop() {
Serial.print("Ambient ="); Serial.print(mlx.readAmbientTempC());
Serial.print("*C");
Serial.print("\tObject ="); Serial.print(mlx.readObjectTempC());
Serial.print("*C");
Serial.print("\tObject ="); Serial.print(mlx.readObjectTempF());
Serial.println("*F");
延迟(3000);
}
并打开串口监视器。每3秒向串口输出一次环境温度和物体温度
步骤 3. 将 OLED 显示器连接到 Arduino MKR 1000 WiFi 板
该项目使用模块形式的 12x32 单色 OLED 显示器,在 SSD1306 芯片上进行必要的绑定。这些模块在 I2C 接口上运行。 Arduino板连接图
编程时,我们使用 Adafruit SSD1306 库。将温度输出的草图加载到显示器。我们每 3 秒测量一次温度 (mlx90614_02.ino)。
// 连接库
#include
#include
#include
#include
// 创建对象实例
Adafruit_MLX90614 mlx =Adafruit_MLX90614();
Adafruit_SSD1306 display(128, 32, &Wire, -1);
float temp;
unsigned long millis1=0;
void setup() {
Serial.begin(9600);
// 开始显示
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.setTextSize(1);
display.setTextColor(WHITE);
// 选项显示
display.clearDisplay();
display.display();
// 启动 MLX90614 传感器
mlx.begin();
// 启动
Serial.println("start");
}
void loop() {
if(millis()-millis1>=3000) {
display.clearDisplay();
display. setCursor(10,10);
display.println(F("Wait temp...."));
temp=mlx.readObjectTempC();
display.setCursor(10, 20);
display.print(temp);
display.print(F(" *C"));
display.display();
//
millis1=millis();
}
}
步骤 4. 将 rc522 RFID 阅读器模块连接到 Arduino MKR 1000 WiFi 板
RFID 标签种类繁多。标签是有源和无源的(没有内置电源,由来自阅读器的信号在天线中感应出的电流供电)。标签在不同频率下工作:LF (125 - 134 kHz)、HF (13.56 MHz)、UHF (860 - 960 MHz)。从标签读取信息并将数据写入标签的设备称为阅读器。在 Arduino 项目中,RFID-RC522 模块经常用作阅读器。该模块采用NSP公司MFRC522芯片制作,提供RA标签工作(频率13.56MHz)。
通过SPI协议连接Arduino MCF 1000 WiFi卡
RFID 卡的 UID 检测示意图、温度测量以及有关打开或关闭输入和输出到串行端口的消息 (mlx90614_03.ino)。
// 连接库
#include
#include
#include
#include
#include
#include
// 创建对象的实例
Adafruit_MLX90614 mlx =Adafruit_MLX90614();
Adafruit_SSD1306 display(128, 32, &Wire, -1);
MFRC522 mfrc522(7, 6);
byte cardUID[4] ={0,0,0,0 };
int res=1;
float temp;
unsigned long millis1=0;
void setup() {
Serial.begin(9600) );
// 开始显示
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.setTextSize(1);
display.setTextColor(WHITE);
display .clearDisplay();
display.display();
// 启动 MLX90614 传感器
mlx.begin();
// запуск SPI
SPI.begin ();
// 初始化 MFRC522
mfrc522.PCD_Init();
Serial.println("start");
Serial.println("Wait RFID ...." );
}
void loop() {
switch(res ) {
case 1:// 等待RFID
display.clearDisplay();
display.setCursor(10,10);
display.print(F("Wait RFID) ...."));
// 检查卡是否连接
if ( mfrc522.PICC_IsNewCardPresent()) {
// 读取地图信息。
if ( mfrc522.PICC_ReadCardSerial()) {
// 保存 UID
Serial.print(F("Card UID:"));
display.setCursor(10,20);
对于(字节 i =0;我 <4; i++) {
cardUID[i]=mfrc522.uid.uidByte[i];
Serial.print(cardUID[i],HEX);
display.print(cardUID[i], HEX);
}
Serial.println();
Serial.println("Wait temp....");
res=3;
}
mfrc522.PICC_HaltA();
mfrc522.PCD_StopCrypto1();
}
display.display();
break;
case 2:// 请求从数据库到UID服务器
break;
case 3:// 等待测温
delay(2000);
display.clearDisplay();
display .setCursor(10,10);
display.println(F("Wait temp...."));
temp=mlx.readObjectTempC();
display.setCursor(10 ,20);
display.print(temp);
display.print(F(" *C"));
display.display();
if(temp>
34.0 &&temp<42.0) {
res=5;
}
break;
case 4:// 向服务器发送温度数据
break;
case 5:// 打开或关闭
display.clearDisplay();
display.setCursor(10,10);
display.print(F("Temp="));
display.pr int(temp);
display.print(F("*C"));
display.setCursor(10,20);
if(temp<37.5) {
display.print(F("OPEN"));
Serial.println("OPEN");
}
else {
display.print(F("CLOSE") );
display.setCursor(10,0);
display.print(F("Temp high!!!"));
Serial.println("CLOSE");
/> Serial.println("Temp high!!!");
}
display.display();
delay(3000);
Serial.println("等待RFID ....");
res=1;
break;
默认:
break;
}
}
步骤 5. 将 Arduino MKR 1000 WiFi 板连接到互联网
要将 Arduino MKR1000 连接到 Wi-Fi 网络,我们将使用 WiFi101 库,我们将使用库管理器(Sketch Include library Manager Libraries)安装该库。
下载将 Arduino MK R 1000 Wi-Fi 板连接到必要接入点的草图。从 connectWithWPA.ino 上传示例 通过在选项卡中输入您的 WiFi 热点的数据到董事会:
#define SECRET_SID "my_D Link"
#define SECRET_PASS "********"
下载草图后,打开串口监视器,可以看到Arduino MKR1000 Wi-Fi板与接入点的连接过程。
如果连接成功,请继续。
第六步,在公司网站上建立员工数据库和入口处每日温度读数采集数据库
在托管 (MySQL) 上创建数据库和其中的两个表:
- 用户 - 员工数据及其 uid;
- 温度 - 用于收集输入处测量的体温数据。
现在在托管上,我们创建了 2 个脚本来处理 Arduino MKR 1000 WiFi 发送的数据。脚本 get_uid.php 检查数据库中的 ID 并在响应中返回:
• #no – 如果 uid 不在数据库中
• #yes;
脚本内容 get_uid.php
//
$location="localhost";
$user="************";
$pass="************";
$db_name="************";
// 连接数据库
if(!$db=mysqli_connect($location,$user,$pass,$db_name))
{echo "connect error";}
else
{;}
$query0=" SELECT * FROM users WHERE uid='".$_GET['uid']."' ";
$rez0=mysqli_query($db,$query0);
if (mysqli_num_rows($rez0)>0) {
$row0=mysqli_fetch_assoc($rez0);
echo "#yes".";".$row0[name];
}
else {
echo "#no";
}
?>
您可以通过从浏览器发送请求来测试脚本:
脚本 get_temp.php 将员工的体温发送到数据库
脚本内容 get_temp.php
//
$location="localhost";
$user="************";
$pass="************";
$db_name="************";
// 连接数据库
if(!$db=mysqli_connect($location,$user,$pass,$db_name))
{echo "connect error";}
else
{;}
$query0=" SELECT * FROM users WHERE uid='".$_GET['uid']."' ";
$rez0=mysqli_query($db,$query0);
if (mysqli_num_rows($rez0)>0) {
$row0=mysqli_fetch_assoc($rez0);
$query1=" INSERT INTO temp SET
id_user='".$row0['id' ]."',
temp='".$_GET['temp']."',
day='".date('Ymd H:i:s')."' ";
mysqli_query($db,$query1);
echo "#yes";
}
else {
echo "#no";
}
?>
您可以通过从浏览器发送请求来测试脚本:
STEP 7. 将数据从 Arduino MKR 1000 WiFi 发送到公司网站
让我们写2个函数:
• send_uid_to_server () - 将 uid 发送到服务器;
• send_temp_to_server () - 将温度发送到服务器。
函数 send_uid_to_server()
int send_uid_to_server() {
int ret=3;
unsigned long previos;
int x=0;int f=0;
char s;
client.stop();
if (client.connect(server, 80)) {
//// 向服务器发送数据
// 形成字符串
// 每行 uid
String str="/firm/get_uid.php?uid=";
for (byte i =0; i <4; i++) {
str+=String (cardUID[i],HEX);
}
Serial.print("str=");Serial.println(str);
client.println("GET "+str+" HTTP /1.1");
client.println("Host:freeparkovka.ru");
client.println("User-Agent:ArduinoWiFi/1.1");
client.println(" Connection:close");
client.println();
// получение ответа
previos=millis();
for(int i=0;i<40;i++ )
response[i]=0;
do {
if(client.available()> 0) {
// 从服务器获取数据
s =client.read();
if(s=='#')
f=1;
if(f==1) {
response[x]=s;
x++;
}
Serial.write(s);
}
}
while((millis( ) - previos) <5000);
if(response[0]='#') {
ret=command(response);
}
Serial.println(response);
//client.stop();
return ret;
}
else {
// 无连接
Serial.println("连接失败");
//client.stop();
return 3;
}
}
函数 send_temp_to_server()
void send_temp_to_server() {
client.stop();
if (client.connect(server, 80)) {
//// 向服务器发送数据
// 形成一个字符串
// 每行一个uid
String str="/firm/get_temp.php?uid=";
for (byte i =0; i <4; i++) {
str+=String(cardUID[i],HEX);
}
str+="&temp="+String(temp);
Serial.print( "str=");Serial.println(str);
client.println("GET "+str+" HTTP/1.1");
client.println("Host:freeparkovka.ru");
client.println("User-Agent:ArduinoWiFi/1.1");
client.println("Connection:close");
client.println();
串口。 println(响应);
延迟(10); }
else {
// 无连接
Serial.println("连接失败");
}
}
STEP 8. 添加一个继电器来启用/禁用输入
添加继电器以启用/禁用企业入口,具体取决于温度值。接线图:
并根据温度数据添加启用/禁用继电器以打开或关闭输入的代码。
if(temp<37.5) { // OPEN
display.setCursor(10,0);
display.print(F("OPEN"));
串行.println("OPEN");
digitalWrite(pinRelay,HIGH);
}
else { // CLOSE
display.print(F("CLOSE"));
display.setCursor(10,0);
display.print(F("Temp high!!!"));
Serial.println("CLOSE");
Serial .println("Temp high!!!");
digitalWrite(pinRelay,LOW);
}
以及整个草图代码 ((mlx90614_07.ino))
// 连接库
#include
#include
#include
#include
#include
#include
#include
// 创建对象实例
Adafruit_MLX90614 mlx =Adafruit_MLX90614();
Adafruit_SSD1306 display(128, 32, &Wire, -1);
MFRC522 mfrc522(7, 6);
WiFiClient 客户端;
// 你的网络SSID(名称)
//和密码(WPA)
char ssid[] ="my_DLink";
char pass[] ="********";
// 名称地址
char server[] ="www.freeparkovka.ru";
int pinRelay=5;
int status =WL_IDLE_STATUS;
char response[40 ];
byte cardUID[4] ={0,0,0,0};
int res=0;
int rr;
float temp;
unsigned long millis1=0;
unsigned long millis2=0;
unsigned long millis3=0;
void setup() {
Serial.begin(9600);
// 继电器
pinMode(pinRelay,OUTPUT);
digitalWrite(pinRelay,LOW);
// d isplay
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.setTextSize(1);
display.setTextColor(WHITE);
display.clearDisplay();
display.display();
// 启动传感器 MLX90614
mlx.begin();
// запуск SPI
SPI.begin();
//初始化MFRC522
mfrc522.PCD_Init();
Serial.println("connect WiFi ....");
display.setCursor(10,10);
display.print (F("Connect WiFi"));
display.display();
// 检查屏蔽是否存在:
if (WiFi.status() ==WL_NO_SHIELD) {
Serial.println("WiFi shield not present");
// 不继续:
while (true);
}
// 尝试连接到 WiFi 网络:
while ( status !=WL_CONNECTED) {
Serial.print("Attempting to connect to WPA SSID:");
Serial.println(ssid);
// 连接 WPA/WPA2 网络:
status =WiFi.begin(ssid, pass);
// 等待 5 秒连接:
delay(5000);
}
display.setCursor( 30,20);
display.print(F("ok"));
display.display();
printWiFiStatus();
delay(2000);
Serial.println("Wait RFID ....");
}
void loop() {
switch(res) {
case 0://
send_display("Wait RFID....");
res=1;
break;
case 1:// 等待RFID
//检查卡是否连接
if ( mfrc522.PICC_IsNewCardPresent()) {
// 读取地图信息
if ( mfrc522.PICC_ReadCardSerial()) {
// 保存UID
Serial.print(F("Card UID:"));
display.setCursor(10,20);
for (byte i =0;我 <4; i++) {
cardUID[i]=mfrc522.uid.uidByte[i];
Serial.print(cardUID[i],HEX);
display.print(cardUID[i], HEX);
}
Serial.println();
res=2;
display.display();
delay(2000);
Serial .println("send uid to server....");
}
mfrc522.PICC_HaltA();
mfrc522.PCD_StopCrypto1();
}
display .display();
break;
case 2:// 从数据库向UID服务器请求
send_display("Send server...");
rr=send_uid_to_server ();
if(rr==1) {
res=3;
display.setCursor(10,0);
display.print(F("uid ok" ));
millis3=millis();
}
else if(rr==2) {
res=0;
display.setCursor(10,0 );
display.print(F("incorrect"));
}
else {
res=0;
display.setCursor(10,0);
display.print(F("error 404"));
}
display.display();
delay(3000);
break;
case 3:// 等待测温
if(millis()-millis3<10000) {
sen d_display("等待温度....");
temp=mlx.readObjectTempC();
display.setCursor(10,20);
display.print(temp);
display.print(F(" *C"));
display.display();
if(temp>
34.0 &&temp<42.0) {
res=4;
delay(2000);
}
}
else {
res=0;
}
break;
case 4:/ / 向服务器发送温度数据
send_display("Wait temp....");
send_temp_to_server();
res=5;
delay(2000);
break;
case 5:// 打开或关闭
display.clearDisplay();
display.setCursor(10,10);
display.print(F(" Temp="));
display.print(temp);
display.print(F("*C"));
display.setCursor(10,20);
if(temp<37.5) { // OPEN
display.print(F("OPEN"));
Serial.println("OPEN");
digitalWrite(pinRelay,HIGH);
}
else { // CLOSE
display.print(F("CLOSE"));
display.setCursor(10,0);
display. print(F("Temp high!!!"));
Serial.println("CLOSE");
Serial.print ln("Temp high!!!");
digitalWrite(pinRelay,LOW);
}
display.display();
delay(3000);
Serial.println("Wait RFID ....");
res=0;
break;
默认:
break;
}
}
//
void printWiFiStatus() {
// 打印你连接的网络的 SSID:
Serial.print("SSID:");
Serial.println(WiFi.SSID());
// 打印你的 WiFi shield 的 IP 地址:
IPAddress ip =WiFi.localIP();
Serial.print( "IP 地址:");
Serial.println(ip);
// 打印接收到的信号强度:
long rssi =WiFi.RSSI();
Serial.print ("信号强度 (RSSI):");
Serial.print(rssi);
Serial.println(" dBm");
}
//
int send_uid_to_server() {
int ret=3;
unsigned long previos;
int x=0;int f=0;
char s;
client.stop ();
if (client.connect(server, 80)) {
//// 向服务器发送数据
// 形成一个字符串
// 每行的uid
字符串str ="/firm/get_uid.php?uid=";
for (byte i =0;我 <4; i++) {
str+=String(cardUID[i],HEX);
}
Serial.print("str=");Serial.println(str);
client .println("GET "+str+" HTTP/1.1");
client.println("Host:freeparkovka.ru");
client.println("User-Agent:ArduinoWiFi/1.1");
client.println("Connection:close");
client.println();
// получение ответа
previos=millis();
for( int i=0;i<40;i++)
response[i]=0;
do {
if(client.available()> 0) {
// 得到来自服务器的数据
s =client.read();
if(s=='#')
f=1;
if(f==1) {
response[x]=s;
x++;
}
Serial.write(s);
}
}
while((millis () - previos) <5000);
if(response[0]='#') {
ret=command(response);
}
Serial.println(response );
//client.stop();
return ret;
}
else {
// 无连接
Serial.println("connection failed");
//client.stop();
return 3;
}
}
//
void send_temp_to_server() {
client.stop();
if (client.connect(server, 80)) {
//// 向服务器发送数据
// 形成一个字符串
// 每行 uid
String str="/firm/get_temp.php?uid=";
for (byte i =0;我 <4; i++) {
str+=String(cardUID[i],HEX);
}
str+="&temp="+String(temp);
Serial.print("str =");Serial.println(str);
client.println("GET "+str+" HTTP/1.1");
client.println("Host:freeparkovka.ru");
client.println("User-Agent:ArduinoWiFi/1.1");
client.println("Connection:close");
client.println();
Serial.println( response);
延迟(10); }
else {
// 无连接
Serial.println("connection failed");
}
}
// 检查来自服务器
int command(char* arr) {
String str(arr);
//
if(str.indexOf("yes")!=-1) {
return 1;
}
else if(str.indexOf("no")!=-1) {
return 2;
}
return 3;
}
// 显示输出
void send_display(String str) {
display.clearDisplay();
display.setCursor(10,10);
display.print(str);
display.display();
}
STEP 9. 员工体温数据远程查看页面
要查看发送到服务器的数据,请打开站点页面。 The contents of the script to output a page file view_temp.php
//
$location="localhost";
$user="********";
$pass="********";
$db_name="********";
// connect db
if(! $db=mysqli_connect($location,$user,$pass,$db_name))
{echo "connect error";}
else
{;}
$query0=" SELECT * FROM temp WHERE uid='".$_GET['uid']."' ";
$rez0=mysqli_query($db,$query0);
$content1.=date('Y-m-d')."
";
$content1.="";
$query1="SELECT * FROM temp WHERE day>=CURDATE() ";
$rez1=mysqli_query($db,$query1); $i=1;
while($row1=mysqli_fetch_assoc($rez1)) {
$content1.="";
$content1.="".$i." ";
$rez2=mysqli_query($db,"SELECT name FROM users WHERE id =".$row1['id_user']." ");
$row2=mysqli_fetch_assoc($rez2);
$content1.="".$row2['name']." ";
$content1.="".mb_substr($row1['day'],10,9)." ";
if($row1['temp']>37.5)
$content1.="".$row1['temp']." ";
else
$content1.="".$row1['temp']." ";
$content1.=" ";
$i++;
}
$content1.="
";
echo $content1;
?>
代码
- Scetch Arduino
- Step 2. Connecting an IR temperature sensor MLX90614 to an Arduino MKR 1000 Wi Fi Board
- Step 3. Connecting an OLED display to an Arduino MKR 1000 WiFi Board
- Step 4. Connecting the rc522 RFID reader module to the Arduino MKR 1000 WiFi Board
- Step 6. Creating a database of employees on the company's website and a database for collecting dail
- Step 6. Creating a database of employees on the company's website and a database for collecting dail
- Step 9. Page for remote viewing of employee temperature data
Scetch ArduinoArduino
// #include#include #include #include #include #include #include // Adafruit_MLX90614 mlx =Adafruit_MLX90614();Adafruit_SSD1306 display(128, 32, &Wire, -1);MFRC522 mfrc522(7, 6);WiFiClient client;// your network SSID (name)// and password (WPA)char ssid[] ="my_DLink"; char pass[] ="marina11"; // name address char server[] ="www.freeparkovka.ru"; int pinRelay=5;int status =WL_IDLE_STATUS; char response[40];byte cardUID[4] ={0,0,0,0};int res=0;int rr;float temp;unsigned long millis1=0;unsigned long millis2=0;unsigned long millis3=0;void setup() { Serial.begin(9600); // relay pinMode(pinRelay,OUTPUT); digitalWrite(pinRelay,LOW); // display.begin(SSD1306_SWITCHCAPVCC, 0x3C); display.setTextSize(1); display.setTextColor(WHITE); display.clearDisplay(); display.display(); // MLX90614 mlx.begin(); // SPI SPI.begin(); // MFRC522 mfrc522.PCD_Init(); Serial.println("connect WiFi ...."); display.setCursor(10,10); display.print(F("Connect WiFi")); display.display(); // check for the presence of the shield:if (WiFi.status() ==WL_NO_SHIELD) { Serial.println("WiFi shield not present"); // don't continue:while (true); } // attempt to connect to WiFi network:while ( status !=WL_CONNECTED) { Serial.print("Attempting to connect to WPA SSID:"); Serial.println(ssid); // Connect to WPA/WPA2 network:status =WiFi.begin(ssid, pass); // wait 10 seconds for connection:delay(5000); } display.setCursor(30,20); display.print(F("ok")); display.display(); printWiFiStatus();延迟(2000); Serial.println("Wait RFID ...."); }void loop() { switch(res) { case 0:// send_display("Wait RFID...."); res=1;休息; case 1:// RFID // if ( mfrc522.PICC_IsNewCardPresent()) { // . if ( mfrc522.PICC_ReadCardSerial()) { // UID Serial.print(F("Card UID:")); display.setCursor(10,20); for (byte i =0; i <4; i++) { cardUID[i]=mfrc522.uid.uidByte[i]; Serial.print(cardUID[i],HEX); display.print(cardUID[i],HEX); } Serial.println(); res=2; display.display();延迟(2000); Serial.println("send uid to server...."); } mfrc522.PICC_HaltA(); mfrc522.PCD_StopCrypto1(); } display.display();休息; case 2:// UID send_display("Send server..."); rr=send_uid_to_server(); if(rr==1) { res=3; display.setCursor(10,0); display.print(F("uid ok")); millis3=millis(); } else if(rr==2) { res=0; display.setCursor(10,0); display.print(F("incorrect")); } else { res=0; display.setCursor(10,0); display.print(F("error 404")); } display.display(); delay(3000);休息; case 3:// if(millis()-millis3<10000) { send_display("Wait temp...."); temp=mlx.readObjectTempC(); display.setCursor(10,20); display.print(temp); display.print(F(" *C")); display.display(); if(temp> 34.0 &&temp<42.0) { res=4;延迟(2000); } } else { res=0; } 休息; case 4:// send_display("Wait temp...."); send_temp_to_server(); res=5;延迟(2000);休息; case 5:// display.clearDisplay(); display.setCursor(10,10); display.print(F("Temp=")); display.print(temp); display.print(F("*C")); display.setCursor(10,20); if(temp<37.5) { // OPEN display.print(F("OPEN")); Serial.println("OPEN"); digitalWrite(pinRelay,HIGH); } else { // CLOSE display.print(F("CLOSE")); display.setCursor(10,0); display.print(F("Temp high!!!")); Serial.println("CLOSE"); Serial.println("Temp high!!!"); digitalWrite(pinRelay,LOW); } display.display(); delay(3000); Serial.println("Wait RFID ...."); res=0;休息; default:break; }}//void printWiFiStatus() { // print the SSID of the network you're attached to:Serial.print("SSID:"); Serial.println(WiFi.SSID()); // print your WiFi shield's IP address:IPAddress ip =WiFi.localIP(); Serial.print("IP Address:"); Serial.println(ip); // print the received signal strength:long rssi =WiFi.RSSI(); Serial.print("signal strength (RSSI):"); Serial.print(rssi); Serial.println(" dBm");}// int send_uid_to_server() { int ret=3; unsigned long previos; int x=0;int f=0; char s; client.stop(); if (client.connect(server, 80)) { //// narodmon.ru // // uid String str="/firm/get_uid.php?uid="; for (byte i =0; i <4; i++) { str+=String(cardUID[i],HEX); } Serial.print("str=");Serial.println(str); client.println("GET "+str+" HTTP/1.1"); client.println("Host:freeparkovka.ru"); client.println("User-Agent:ArduinoWiFi/1.1"); client.println("Connection:close"); client.println(); // previos=millis(); for(int i=0;i<40;i++) response[i]=0; do{ if(client.available()> 0) { // s =client.read(); if(s=='#') f=1; if(f==1) { response[x]=s; //Serial.print(response[x]); x++; } Serial.write(s); } } while((millis() - previos) <5000); if(response[0]='#') { ret=command(response); } Serial.println(response); //client.stop(); return ret; } else { // Serial.println("connection failed"); //client.stop(); return 3; }}//void send_temp_to_server() { client.stop(); if (client.connect(server, 80)) { //// narodmon.ru // // uid String str="/firm/get_temp.php?uid="; for (byte i =0; i <4; i++) { str+=String(cardUID[i],HEX); } str+="&temp="+String(temp); Serial.print("str=");Serial.println(str); client.println("GET "+str+" HTTP/1.1"); client.println("Host:freeparkovka.ru"); client.println("User-Agent:ArduinoWiFi/1.1"); client.println("Connection:close"); client.println(); Serial.println(response); delay(10); //client.stop(); } else { // Serial.println("connection failed"); //client.stop(); }}// int command(char* arr) { String str(arr); // if(str.indexOf("yes")!=-1) { return 1; } else if(str.indexOf("no")!=-1) { return 2; } return 3;}// void send_display(String str) { display.clearDisplay(); display.setCursor(10,10); display.print(str); display.display();}
Step 2. Connecting an IR temperature sensor MLX90614 to an Arduino MKR 1000 Wi Fi BoardArduino
#include#include Adafruit_MLX90614 mlx =Adafruit_MLX90614();void setup() { Serial.begin(9600); Serial.println("start"); mlx.begin(); }void loop() { Serial.print("Ambient ="); Serial.print(mlx.readAmbientTempC()); Serial.print("*C"); Serial.print("\tObject ="); Serial.print(mlx.readObjectTempC()); Serial.print("*C"); Serial.print("\tObject ="); Serial.print(mlx.readObjectTempF()); Serial.println("*F"); delay(3000);}
Step 3. Connecting an OLED display to an Arduino MKR 1000 WiFi BoardArduino
#include#include #include #include Adafruit_MLX90614 mlx =Adafruit_MLX90614();Adafruit_SSD1306 display(128, 32, &Wire, -1);float temp;unsigned long millis1=0;void setup() { Serial.begin(9600); // display.begin(SSD1306_SWITCHCAPVCC, 0x3C); display.setTextSize(1); display.setTextColor(WHITE); // display.clearDisplay(); display.display(); // mlx.begin(); // Serial.println("start");}void loop() { if(millis()-millis1>=3000) { display.clearDisplay(); display.setCursor(10,10); display.println(F("Wait temp....")); temp=mlx.readObjectTempC(); display.setCursor(10,20); display.print(temp); display.print(F(" *C")); display.display(); // millis1=millis(); }}
Step 4. Connecting the rc522 RFID reader module to the Arduino MKR 1000 WiFi BoardArduino
// #include#include #include #include #include #include // Adafruit_MLX90614 mlx =Adafruit_MLX90614();Adafruit_SSD1306 display(128, 32, &Wire, -1);MFRC522 mfrc522(7, 6);byte cardUID[4] ={0,0,0,0};int res=1;float temp;unsigned long millis1=0;void setup() { Serial.begin(9600); // display.begin(SSD1306_SWITCHCAPVCC, 0x3C); display.setTextSize(1); display.setTextColor(WHITE); display.clearDisplay(); display.display(); // MLX90614 mlx.begin(); // SPI SPI.begin(); // MFRC522 mfrc522.PCD_Init(); Serial.println("start"); Serial.println("Wait RFID ....");}void loop() { switch(res) { case 1:// RFID display.clearDisplay(); display.setCursor(10,10); display.print(F("Wait RFID....")); // if ( mfrc522.PICC_IsNewCardPresent()) { // . if ( mfrc522.PICC_ReadCardSerial()) { // UID Serial.print(F("Card UID:")); display.setCursor(10,20); for (byte i =0; i <4; i++) { cardUID[i]=mfrc522.uid.uidByte[i]; Serial.print(cardUID[i],HEX); display.print(cardUID[i],HEX); } Serial.println(); Serial.println("Wait temp...."); res=3; } mfrc522.PICC_HaltA(); mfrc522.PCD_StopCrypto1(); } display.display();休息; case 2:// UID break; case 3:// delay(2000); display.clearDisplay(); display.setCursor(10,10); display.println(F("Wait temp....")); temp=mlx.readObjectTempC(); display.setCursor(10,20); display.print(temp); display.print(F(" *C")); display.display(); if(temp> 34.0 &&temp<42.0) { res=5; } 休息; case 4:// break; case 5:// display.clearDisplay(); display.setCursor(10,10); display.print(F("Temp=")); display.print(temp); display.print(F("*C")); display.setCursor(10,20); if(temp<37.5) { display.print(F("OPEN")); Serial.println("OPEN"); } else { display.print(F("CLOSE")); display.setCursor(10,0); display.print(F("Temp high!!!")); Serial.println("CLOSE"); Serial.println("Temp high!!!"); } display.display(); delay(3000); Serial.println("Wait RFID ...."); res=1;休息; default:break; }}
Step 6. Creating a database of employees on the company's website and a database for collecting dailPHP
get_uid.php checks for an ID in the database and returns in the response:0) { $row0=mysqli_fetch_assoc($rez0); echo "#yes".";".$row0['name']."$";}else { echo "#no"."$";} ?>
Step 6. Creating a database of employees on the company's website and a database for collecting dailPHP
get_temp.php sends the employee's temperature to the database0) { $row0=mysqli_fetch_assoc($rez0); $query1=" INSERT INTO temp SET id_user='".$row0['id']."', temp='".$_GET['temp']."', day='".date('Y-m-d H:i:s')."' "; mysqli_query($db,$query1); echo "#yes";}else { echo "#no";} ?>
Step 9. Page for remote viewing of employee temperature dataPHP
view_temp.php
";$content1.="
".$i." | "; $rez2=mysqli_query($db,"SELECT name FROM users WHERE id =".$row1['id_user']." "); $row2=mysqli_fetch_assoc($rez2); $content1.="".$row2['name']." | "; $content1.="".mb_substr($row1['day'],10,9)." | "; if($row1['temp']>37.5) $content1.="".$row1['temp']." | "; else $content1.="".$row1['temp']." | "; $content1.="
示意图
24_pAT1JQdrD1.fzz 05_ZnJZPiMYsB.fzz 08_RyXONO1VtK.fzz 12_jyWaOQUelW.fzz制造工艺