Controle temporário sem contato de funcionários na passagem RFID
Componentes e suprimentos
![]() |
| × | 1 | |||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Aplicativos e serviços online
![]() |
| |||
|
Sobre este projeto
Quando os funcionários acessam a empresa usando etiquetas RFID, também medimos a temperatura corporal dos funcionários com um termômetro infravermelho sem contato. Se houver temperatura elevada (um dos sintomas de COVID19), o acesso é bloqueado. Além disso, todos os dados (identificação do funcionário via RFID) vão para o site da empresa que monitora os dados de hora de chegada ao trabalho e temperatura corporal (identificação do funcionário por RFID UID).


Entrando no escritório usando RFID com controle de temperatura (teste)
Visualização de dados enviados da nuvem

Entrando no escritório usando RFID com controle de temperatura
video2
Etapa 1. Instalação do software
Usamos a placa Arduino MKR 1000 WiFi como o controlador. Vamos programar no IDE do Arduino. Por padrão, o Arduino IDE é configurado apenas para placas AVR. Para trabalhar com a plataforma Arduino MK Wi-Fi 1000, você precisa adicionar suporte para o Arduino SAMD (32 bits ARM Cortex-M0 +) no gerenciador de placa. No Gerenciador de Conselho ( Ferramentas> Conselho> Gerente de Conselho ), encontre o Arduino SAMD e clique no botão Instalar.

Depois de instalar o software no IDE do Arduino, o menu Tools Board suportará as placas Arduino Zero e MKR, incluindo a placa MKR 1000 WiFi). Conecte a placa MKR 1000 ao computador usando um cabo USB. O driver deve ser instalado automaticamente.

Etapa 2. Conectando um sensor de temperatura IR MLX90614 a uma placa Wi Fi Arduino MKR 1000
O MLX90614 é um sensor infravermelho para medição de temperatura sem contato. Ele pode medir temperaturas na faixa de -70 a 380 graus Celsius com uma precisão de cerca de 0,5 ° C. Eu tinha MLX90614DAA em estoque

O sensor usa o protocolo I2C. Atribuir contatos

Diagrama de conexão com a placa Arduino MKR WiFi


Para programação, usamos a biblioteca Adafruit_MLX90614.h, que deve ser instalada por meio das Bibliotecas do gerenciador ( Sketch> Incluir biblioteca> Bibliotecas do gerenciador ) Faça upload de um esboço para a placa Arduino (mlx90614_01.ino)
// Conectando bibliotecas
#include
#include
// Criando uma instância de um objeto
Adafruit_MLX90614 mlx =Adafruit_MLX90614 ();
void setup () {
Serial.begin (9600);
Serial.println ("start");
// iniciando o Sensor 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");
atraso (3000);
}
E abra o monitor da porta serial. A temperatura ambiente e a temperatura do objeto são enviadas para a porta serial a cada 3 segundos

Etapa 3. Conectando um display OLED a uma placa Arduino MKR 1000 WiFi
O projeto usa um display OLED monocromático 12x32 na forma de um módulo com a ligação necessária no chip SSD1306. Esses módulos são executados na interface I2C. Diagrama de conexão com a placa Arduino

Ao programar, usamos a biblioteca Adafruit SSD1306. Carregando um esboço da saída de temperatura no display. Medimos a temperatura a cada 3 segundos (mlx90614_02.ino).
// Conectando bibliotecas
#include
#include
#include
#include
// Criando uma instância de um objeto
Adafruit_MLX90614 mlx =Adafruit_MLX90614 ();
Adafruit_SSD1306 display (128, 32, &Wire, -1);
float temp;
unsigned long millis1 =0;
void setup () {
Serial.begin (9600);
// exibição inicial
display.begin (SSD1306_SWITCHCAPVCC, 0x3C);
display.setTextSize (1);
display.setTextColor (WHITE);
// display de opções
display.clearDisplay ();
display.display ();
// iniciar o sensor MLX90614
mlx.begin ();
// iniciar
Serial.println ("iniciar");
}
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 ();
}
}

Etapa 4. Conectando o módulo leitor RFID rc522 à placa Arduino MKR 1000 WiFi
Existe uma grande variedade de etiquetas RFID. Os tags são ativos e passivos (sem fonte de alimentação embutida, alimentados por uma corrente induzida na antena por um sinal do leitor). As etiquetas funcionam em frequências diferentes:LF (125 - 134 kHz), HF (13,56 MHz), UHF (860 - 960 MHz). Dispositivos que leem informações de tags e gravam dados neles são chamados de leitores. Em projetos Arduino, o módulo RFID-RC522 é frequentemente usado como um leitor. O módulo é feito no chip MFRC522 da empresa NSP, que fornece trabalho com tags RA (na frequência de 13,56 MHz).

Conectando-se ao cartão Arduino MCF 1000 WiFi via protocolo SPI

Esboço de detecção de UID para um cartão RFID, medição de temperatura e mensagens sobre como abrir ou fechar a entrada com saída para a porta serial (mlx90614_03.ino).
// Conectando bibliotecas
#include
#include
#include
#include
#include
#include
// Criação de uma instância de um objeto
Adafruit_MLX90614 mlx =Adafruit_MLX90614 (); br /> Adafruit_SSD1306 display (128, 32, &Wire, -1);
MFRC522 mfrc522 (7, 6);
byte cardUID [4] ={0,0,0,0 };
int res =1;
temperatura flutuante;
milis1 longo sem sinal =0;
configuração de void () {
Serial.begin (9600 );
// iniciando a exibição
display.begin (SSD1306_SWITCHCAPVCC, 0x3C);
display.setTextSize (1);
display.setTextColor (WHITE);
display .clearDisplay ();
display.display ();
// iniciando o sensor MLX90614
mlx.begin ();
// запуск SPI
SPI.begin ();
// inicializando MFRC522
mfrc522.PCD_Init ();
Serial.println ("iniciar");
Serial.println ("Aguarde RFID ...." );
}
void loop () {
switch (res ) {
caso 1:// aguardando RFID
display.clearDisplay ();
display.setCursor (10,10);
display.print (F ("Aguarde RFID .... "));
// Verificar se o cartão está anexado
if (mfrc522.PICC_IsNewCardPresent ()) {
// Lendo as informações do mapa.
if ( mfrc522.PICC_ReadCardSerial ()) {
// salvar UID
Serial.print (F ("UID do cartão:"));
display.setCursor (10,20);
para (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 ();
break;
caso 2:// solicitação para o servidor UID do banco de dados
break;
caso 3:// aguardando medição de temperatura
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;
caso 4:// enviando dados de temperatura para o servidor
break;
caso 5:// abre ou fecha
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 alta !!!"));
Serial.println ("CLOSE");
Serial.println ("Temp alta !!!");
}
display.display ();
atraso (3000);
Serial.println ("Aguarde RFID .... ");
res =1;
break;
padrão:
break;
}
}


Etapa 5. Conectando a placa Arduino MKR 1000 WiFi à Internet
Para conectar o Arduino MKR1000 a uma rede Wi-Fi, usaremos a biblioteca WiFi101, que instalaremos usando o gerenciador de bibliotecas (Sketch Incluir biblioteca Bibliotecas gerenciadoras).

Baixe um esboço de conexão da placa Arduino MK R 1000 Wi-Fi ao ponto de acesso necessário. Faça upload de um exemplo de connectWithWPA.ino biblioteca para a placa inserindo os dados do seu ponto de acesso WiFi na guia:
#define SECRET_SID "my_D Link"
#define SECRET_PASS "********"
Após fazer o download do sketch, abra o monitor da porta serial, onde você pode assistir o processo de conexão da placa Arduino MKR1000 Wi-Fi ao ponto de acesso.

Se a conexão for bem-sucedida, vá em frente.
Etapa 6. Criação de um banco de dados de funcionários no site da empresa e um banco de dados para coleta de leituras diárias de temperatura na entrada
Criação de um banco de dados na hospedagem (MySQL) e duas tabelas nele:
- usuários - dados do funcionário e seu uid;
- temp - para coletar dados da temperatura corporal medida na entrada.


Agora no hosting criamos 2 scripts para processamento de dados enviados pelo Arduino MKR 1000 WiFi. Script get_uid.php verifica se há um ID no banco de dados e retorna na resposta:
• # não - se o uid não estiver no banco de dados
• # sim;
O conteúdo do script get_uid.php
php
//
$ location ="localhost";
$ user ="************";
$ pass ="************";
$ db_name ="************";
// conectar banco de dados
if (! $ db =mysqli_connect ($ location, $ user, $ pass, $ db_name))
{echo "erro de conexão";}
else
{;}
$ query0 ="SELECT * FROM users WHERE uid ='". $ _ GET [' uid ']. "'";
$ rez0 =mysqli_query ($ db, $ query0);
se (mysqli_num_rows ($ rez0)> 0) {
$ row0 =mysqli_fetch_assoc ($ rez0);
echo "#yes". ";". $ row0 [nome];
}
else {
echo "#no";
}
?>
Você pode testar o script enviando solicitações do navegador:



Script get_temp.php envia a temperatura do funcionário para o banco de dados
O conteúdo do script get_temp.php
php
//
$ location ="localhost";
$ user ="************";
$ pass ="************";
$ db_name ="************";
// conectar banco de dados
if (! $ db =mysqli_connect ($ location, $ user, $ pass, $ db_name))
{echo "erro de conexão";}
else
{;}
$ query0 ="SELECT * FROM users WHERE uid ='". $ _ GET [' uid ']. "'";
$ rez0 =mysqli_query ($ db, $ query0);
se (mysqli_num_rows ($ rez0)> 0) {
$ row0 =mysqli_fetch_assoc ($ rez0);
$ query1 ="INSERT INTO TEMP SET
id_user ='". $ row0 [' id ' ]. "',
temp ='". $ _ GET ['temp']. "',
dia ='". data ('Ymd H:i:s'). "'";
mysqli_query ($ db, $ query1);
echo "#yes";
}
else {
echo "#no";
}
?>
Você pode testar o script enviando solicitações do navegador:


ETAPA 7. Envio de dados do Arduino MKR 1000 WiFi para o site da empresa
Vamos escrever 2 funções:
• send_uid_to_server () - enviar o uid para o servidor;
• send_temp_to_server () - enviando a temperatura para o servidor.
Função send_uid_to_server ()
int send_uid_to_server () {
int ret =3;
anteriores longos sem sinal;
int x =0; int f =0;
char s;
client.stop ();
if (client.connect (server, 80)) {
//// enviando dados para o servidor
// formando uma string
// uid por linha
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 (" Conexão:fechar ");
client.println ();
// получение ответа
previos =millis ();
para (int i =0; i <40; i ++ )
resposta [i] =0;
fazer {
if (client.available ()> 0) {
// obter dados do servidor
s =client.read ();
if (s =='#')
f =1;
if (f ==1) {
resposta [x] =s;
x ++;
}
Serial.write (s);
}
}
while ((millis ( ) - anteriores) <5000);
if (resposta [0] ='#') {
ret =comando (resposta);
}
Serial.println (resposta);
//client.stop ();
return ret;
}
else {
// sem conexão
Serial.println ("conexão falhou ");
//client.stop ();
return 3;
}
}
Função send_temp_to_server ()
void send_temp_to_server () {
client.stop ();
if (client.connect (server, 80)) {
//// enviando dados para o servidor
// formando uma string
// uid por linha
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 (resposta);
atraso (10); }
else {
// sem conexão
Serial.println ("conexão falhou");
}
}
ETAPA 8. Adicionar um relé para habilitar / desabilitar a entrada
Adicionar relé para habilitar / desabilitar a entrada do empreendimento, dependendo do valor da temperatura. Diagrama de ligação:

E adicionar ao código habilitando / desabilitando o relé para abrir ou fechar a entrada, dependendo dos dados de temperatura.
if (temp <37.5) {// OPEN
display.setCursor (10,0);
display.print (F ("OPEN"));
Serial .println ("OPEN");
digitalWrite (pinRelay, HIGH);
}
else {// CLOSE
display.print (F ("CLOSE"));
display.setCursor (10,0);
display.print (F ("Temp alta !!!"));
Serial.println ("FECHAR");
Serial .println ("Temp alta !!!");
digitalWrite (pinRelay, LOW);
}
E todo o código do esboço ((mlx90614_07.ino))
// Conectando bibliotecas
#include
#include
#include
#include
#include
#include
#include
// Criando instâncias de objeto
Adafruit_MLX90614 mlx =Adafruit_MLX90614 ();
Adafruit_SSD1306 display (128, 32, &Wire, -1);
MFRC522 mfrc522 (7, 6);
Cliente WiFiClient;
// seu rede SSID (nome)
// e senha (WPA)
char ssid [] ="my_DLink";
char pass [] ="********";
// endereço de nome
servidor de char [] ="www.freeparkovka.ru";
int pinRelay =5;
int status =WL_IDLE_STATUS;
resposta de char [40 ];
byte cardUID [4] ={0,0,0,0};
int res =0;
int rr;
temperatura flutuante;
sem sinal long millis1 =0;
long long millis2 =0;
unigned long millis3 =0;
void setup () {
Serial.begin (9600);
// relé
pinMode (pinRelay, OUTPUT);
digitalWrite (pinRelay, LOW);
// d isplay
display.begin (SSD1306_SWITCHCAPVCC, 0x3C);
display.setTextSize (1);
display.setTextColor (WHITE);
display.clearDisplay ();
display.display ();
// iniciando o sensor MLX90614
mlx.begin ();
// запуск SPI
SPI.begin ();
// inicializando MFRC522
mfrc522.PCD_Init ();
Serial.println ("conectar WiFi ....");
display.setCursor (10,10);
display.print (F ("Conectar WiFi"));
display.display ();
// verificar a presença do escudo:
if (WiFi.status () ==WL_NO_SHIELD) {
Serial.println ("WiFi shield not present");
// não continuar:
while (true);
}
// tentar conectar para a rede WiFi:
while (status! =WL_CONNECTED) {
Serial.print ("Tentando conectar ao WPA SSID:");
Serial.println (ssid);
// Conecte-se à rede WPA / WPA2:
status =WiFi.begin (ssid, pass);
// aguarde 5 segundos pela conexão:
atraso (5000);
}
display.setCursor ( 30,20);
display.print (F ("ok"));
display.display ();
printWiFiStatus ();
delay (2000);
Serial.println ("Wait RFID ....");
}
void loop () {
switch (res) {
caso 0://
send_display ("Aguarde RFID ....");
res =1;
break;
caso 1:// aguardando RFID
// Verifique se o cartão está anexado
if (mfrc522.PICC_IsNewCardPresent ()) {
// Lendo as informações do mapa
if (mfrc522.PICC_ReadCardSerial ()) {
// salvar UID
Serial.print (F ("UID do cartão:"));
display.setCursor (10,20);
para (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 ();
atraso (2000);
Serial .println ("enviar uid para o servidor ....");
}
mfrc522.PICC_HaltA ();
mfrc522.PCD_StopCrypto1 ();
}
exibir .display ();
break;
caso 2:// solicitação ao servidor UID do banco de dados
send_display ("Enviar servidor ...");
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 ("incorreto"));
}
else {
res =0;
display.setCursor (10,0);
display.print (F ("erro 404"));
}
display.display ();
atraso (3000);
pausa;
caso 3:// aguardando medição de temperatura
if (millis () - millis3 <10000) {
sen d_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;
atraso (2000);
}
}
else {
res =0;
}
pausa;
caso 4:/ / enviando dados de temperatura para o servidor
send_display ("Wait temp ....");
send_temp_to_server ();
res =5;
delay (2000);
break;
case 5:// abre ou fecha
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 alta !!!"));
Serial.println ("CLOSE");
Serial.print ln ("Temp alta !!!");
digitalWrite (pinRelay, LOW);
}
display.display ();
atraso (3000);
Serial.println ("Wait RFID ....");
res =0;
break;
padrão:
break;
}
}
//
void printWiFiStatus () {
// imprime o SSID da rede à qual você está conectado:
Serial.print ("SSID:");
Serial.println (WiFi.SSID ());
// imprimir o endereço IP do seu escudo WiFi:
IPAddress ip =WiFi.localIP ();
Serial.print ( "Endereço IP:");
Serial.println (ip);
// imprimir a intensidade do sinal recebido:
long rssi =WiFi.RSSI ();
Serial.print ("intensidade do sinal (RSSI):");
Serial.print (rssi);
Serial.println ("dBm");
}
//
int send_uid_to_server () {
int ret =3;
antecedentes longos sem sinal;
int x =0; int f =0;
char s;
client.stop ();
if (client.connect (server, 80)) {
//// enviando dados para o servidor
// formando uma string
// uid por linha
String str ="/ firm / get_uid.php? uid =";
para (byte i =0; i <4; i ++) {
str + =String (cardUID [i], HEX);
}
Serial.print ("str ="); Serial.println (str);
cliente .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 ();
para ( int i =0; i <40; i ++)
resposta [i] =0;
fazer {
if (client.available ()> 0) {
// get dados do servidor
s =client.read ();
if (s =='#')
f =1;
if (f ==1) {
resposta [x] =s;
x ++;
}
Serial.write (s);
}
}
while ((milis) () - anteriores) <5000);
if (resposta [0] ='#') {
ret =comando (resposta);
}
Serial.println (resposta );
//client.stop ();
return ret;
}
else {
// sem conexão
Serial.println ("connection falhou ");
//client.stop ();
return 3;
}
}
//
void send_temp_to_server () {
client.stop ();
if (client.connect (server, 80)) {
//// enviando dados para o servidor
// formando uma string
// uid por linha
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 ( resposta);
atraso (10); }
else {
// sem conexão
Serial.println ("conexão falhou");
}
}
// verificação de comandos vindos de o servidor
comando int (char * arr) {
String str (arr);
//
if (str.indexOf ("yes")! =- 1) {
return 1;
}
else if (str.indexOf ("no")! =- 1) {
return 2;
}
return 3;
}
// exibir saída
void send_display (String str) {
display.clearDisplay ();
display.setCursor (10,10);
display.print (str);
display.display ();
}
ETAPA 9. Página para visualização remota dos dados de temperatura do funcionário
Para visualizar os dados enviados ao servidor, abra a página do site. O conteúdo do script para gerar um arquivo de página 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;
?>

Código
- 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(); atraso (2000); Serial.println("Wait RFID ...."); }void loop() { switch(res) { case 0:// send_display("Wait RFID...."); res=1; pausa; 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 (); atraso (2000); Serial.println("send uid to server...."); } mfrc522.PICC_HaltA(); mfrc522.PCD_StopCrypto1(); } display.display(); pausa; 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); pausa; 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; atraso (2000); } } else { res=0; } pausa; case 4:// send_display("Wait temp...."); send_temp_to_server(); res=5; atraso (2000); pausa; 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; pausa; 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 ("iniciar"); 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 ("iniciar"); 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(); pausa; 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; } pausa; 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; pausa; 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.="
Esquemas
24_pAT1JQdrD1.fzz 05_ZnJZPiMYsB.fzz 08_RyXONO1VtK.fzz 12_jyWaOQUelW.fzzProcesso de manufatura
- Controle de acesso com QR, RFID e verificação de temperatura
- Ventilador com temperatura controlada
- Monitoramento de temperatura no Raspberry Pi
- Monitorando a temperatura com Raspberry Pi
- Sistema de controle de dispositivo baseado em temperatura usando LM35
- Sensor de temperatura Raspberry Pi
- Controle de enchimento da piscina
- Erros em gabinetes de painéis de controle industriais de resfriamento
- Controle de temperatura e influência durante o processo de fundição
- Controle de temperatura do local de trabalho — um guia de aluguel para profissionais da construção