亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

员工通过 RFID Pass-Through 的非接触式温度控制

组件和用品

Arduino MKR1000
× 1
RFID 阅读器 RC522
× 1
OLED 0.96" 128x32
× 1
MLX90614
× 1

应用和在线服务

Arduino IDE
Fritzing

关于这个项目

当员工使用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; - 如果 uid 在数据库中

脚本内容 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.="";
$rez2=mysqli_query($db,"SELECT name FROM users WHERE id =".$row1['id_user']." ");
$row2=mysqli_fetch_assoc($rez2);
$content1.="";
$content1.="";
if($row1['temp']>37.5)
$content1.="";
else
$content1.="";
$content1.="";
$i++;
}
$content1.="
".$i."".$row2['name']."".mb_substr($row1['day'],10,9)."".$row1['temp']."".$row1['temp']."
";
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 database
0) { $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.="";$query1="SELECT * FROM temp WHERE day>=CURDATE() ";$rez1=mysqli_query($db,$query1); $i=1;while($row1=mysqli_fetch_assoc($rez1)) { $content1.=""; $content1.=""; $rez2=mysqli_query($db,"SELECT name FROM users WHERE id =".$row1['id_user']." "); $row2=mysqli_fetch_assoc($rez2); $content1.=""; $content1.=""; if($row1['temp']>37.5) $content1.=""; else $content1.=""; $content1.=""; $i++; }$content1.="
".$i."".$row2['name']."".mb_substr($row1['day'],10,9)."".$row1['temp']."".$row1['temp']."
";echo $content1;?>

示意图

24_pAT1JQdrD1.fzz 05_ZnJZPiMYsB.fzz 08_RyXONO1VtK.fzz 12_jyWaOQUelW.fzz

制造工艺

  1. 避孕药
  2. 温度计
  3. 带二维码、RFID 和温度验证的访问控制
  4. 温控风扇
  5. Raspberry Pi 上的温度监控
  6. 使用 Raspberry Pi 监测温度
  7. 使用 LM35 的基于温度的设备控制系统
  8. Raspberry Pi 温度传感器
  9. 水池填充控制
  10. 冷却工业控制面板外壳的错误
  11. 压铸过程中的温度控制及影响
  12. 工地温度控制——建筑专业人士的租赁指南