Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Manufacturing Technology >> Proceso de manufactura

Control de temperatura sin contacto de empleados en transferencia RFID

Componentes y suministros

Arduino MKR1000
× 1
Lector RFID RC522
× 1
OLED 0.96 "128x32
× 1
MLX90614
× 1

Aplicaciones y servicios en línea

Arduino IDE
Fritzing

Acerca de este proyecto

Cuando los empleados acceden a la empresa mediante etiquetas RFID, también medimos la temperatura corporal de los empleados con un termómetro infrarrojo sin contacto. Si hay una temperatura elevada (uno de los síntomas de COVID19), el acceso está bloqueado. Además, todos los datos (identificación del empleado a través de RFID) van al sitio web de la empresa que monitorea el tiempo de llegada al trabajo y las etiquetas de temperatura corporal (identificación del empleado para UID RFID).

Ingresar a la oficina usando RFID con control de temperatura (prueba)

Ver datos enviados desde la nube

Ingresar a la oficina usando RFID con control de temperatura

video2

Paso 1. Instalación del software

Usamos la placa WiFi Arduino MKR 1000 como controlador. Programaremos en el IDE de Arduino. De forma predeterminada, el IDE de Arduino está configurado solo para placas AVR. Para trabajar con la plataforma Arduino MK Wi-Fi 1000, necesita agregar soporte para Arduino SAMD (32bit ARM Cortex-M0 +) en el Administrador de tarjetas. En el Administrador de tableros ( Herramientas> Tablero> Administrador de tableros ), busque Arduino SAMD y haga clic en el botón Instalar.

Después de instalar el software en el IDE de Arduino, el menú Herramientas  Placa admitirá las placas Arduino Zero y MKR, incluida la placa WiFi MKR 1000). Conecte la tarjeta MKR 1000 a su computadora con un cable USB. El controlador debe instalarse automáticamente.

Paso 2. Conexión de un sensor de temperatura IR MLX90614 a una placa Wi Fi Arduino MKR 1000

El MLX90614 es un sensor de infrarrojos para la medición de temperatura sin contacto. Puede medir temperaturas en el rango de -70 a 380 grados Celsius con una precisión de aproximadamente 0,5 ° C. Tenía MLX90614DAA en stock

El sensor utiliza el protocolo I2C. Asignar contactos

Diagrama de conexión a la placa WiFi Arduino MKR

Para la programación, utilizamos la biblioteca Adafruit_MLX90614.h, que debe instalarse a través de las bibliotecas del administrador ( Sketch> Incluir biblioteca> Bibliotecas del administrador ). Cargue un boceto en la placa Arduino (mlx90614_01.ino)

  // Conectando bibliotecas 
#include
#include
// Creando una instancia de un objeto
Adafruit_MLX90614 mlx =Adafruit_MLX90614 ();

void setup () {
Serial.begin (9600);
Serial.println ("start");
// iniciando el Sensor MLX90614
mlx.begin ();
}

bucle vacío () {
Serial.print ("Ambiente ="); 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");
retraso (3000);
}

Y abra el monitor del puerto serie. La temperatura ambiente y la temperatura del objeto se envían al puerto serie cada 3 segundos

Paso 3. Conexión de una pantalla OLED a una placa WiFi Arduino MKR 1000

El proyecto utiliza una pantalla OLED monocromática de 12x32 en forma de módulo con el enlace necesario en el chip SSD1306. Estos módulos se ejecutan en la interfaz I2C. Diagrama de conexión a la placa Arduino

Al programar, usamos la biblioteca Adafruit SSD1306. Carga de un boceto de la salida de temperatura en la pantalla. Medimos la temperatura cada 3 segundos (mlx90614_02.ino).

  // Conectando bibliotecas 
#include
#include
#include
#include
// Creando una instancia de un objeto
Adafruit_MLX90614 mlx =Adafruit_MLX90614 ();
Adafruit_SSD1306 display (128, 32, &Wire, -1);

float temp;
unsigned long millis1 =0;

void setup () {
Serial.begin (9600);
// visualización inicial
display.begin (SSD1306_SWITCHCAPVCC, 0x3C);
display.setTextSize (1);
display.setTextColor (WHITE);
// visualización de opciones
display.clearDisplay ();
display.display ();
// iniciando el sensor MLX90614
mlx.begin ();
// inicio
Serial.println ("inicio");
}

void loop () {
if (millis () - millis1> =3000) {
display.clearDisplay ();
display. setCursor (10,10);
display.println (F ("Temp. de espera ...."));
temp =mlx.readObjectTempC ();
display.setCursor (10, 20);
display.print (temp);
display.print (F ("* C"));
display.display ();
//
millis1 =millis ();
}
}

Paso 4. Conexión del módulo lector RFID rc522 a la placa WiFi Arduino MKR 1000

Existe una amplia variedad de etiquetas RFID. Las etiquetas son activas y pasivas (sin una fuente de alimentación incorporada, alimentadas por una corriente inducida en la antena por una señal del lector). Las etiquetas funcionan en diferentes frecuencias:LF (125 - 134 kHz), HF (13,56 MHz), UHF (860 - 960 MHz). Los dispositivos que leen información de las etiquetas y les escriben datos se denominan lectores. En proyectos Arduino, el módulo RFID-RC522 se usa muy a menudo como lector. El módulo se realiza en el chip MFRC522 de la empresa NSP, que proporciona trabajo con etiquetas RA (a una frecuencia de 13,56 MHz).

Conexión a la tarjeta WiFi Arduino MCF 1000 a través del protocolo SPI

Esquema de detección de UID para una tarjeta RFID, medición de temperatura y mensajes sobre la apertura o cierre de la entrada con salida al puerto serie (mlx90614_03.ino).

  // Conectando bibliotecas 
#include
#include
#include
#include
#include
#include
// Creando una instancia de un objeto
Adafruit_MLX90614 mlx =Adafruit_MLX90614 ();
Pantalla Adafruit_SSD1306 (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 );
// visualización inicial
display.begin (SSD1306_SWITCHCAPVCC, 0x3C);
display.setTextSize (1);
display.setTextColor (WHITE);
display .clearDisplay ();
display.display ();
// iniciando el sensor MLX90614
mlx.begin ();
// запуск SPI
SPI.begin ();
// inicializando MFRC522
mfrc522.PCD_Init ();
Serial.println ("inicio");
Serial.println ("Espere RFID ...." );
}

bucle vacío () {
cambiar (res ) {
caso 1:// esperando RFID
display.clearDisplay ();
display.setCursor (10,10);
display.print (F ("Espere RFID .... "));
// Comprobando si la tarjeta está adjunta
if (mfrc522.PICC_IsNewCardPresent ()) {
// Leyendo la información del mapa.
if ( mfrc522.PICC_ReadCardSerial ()) {
// guardar UID
Serial.print (F ("Tarjeta UID:"));
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 ("Temp. De espera ....");
res =3;
}
mfrc522.PICC_HaltA ();
mfrc522.PCD_StopCrypto1 ();
}
display.display ();
break;
caso 2:// solicitud al servidor UID desde la base de datos
break;
caso 3:// esperando la medición de temperatura
delay (2000);
display.clearDisplay ();
display .setCursor (10,10);
display.println (F ("Temp. de espera ...."));
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 datos de temperatura al servidor
break;
caso 5:// abrir o cerrar
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 ();
delay (3000);
Serial.println ("Espere RFID .... ");
res =1;
descanso;
predeterminado:
descanso;
}
}

Paso 5. Conexión de la placa WiFi Arduino MKR 1000 a Internet

Para conectar el Arduino MKR1000 a una red Wi-Fi, usaremos la biblioteca WiFi101, que instalaremos usando el Administrador de bibliotecas (Sketch  Incluir biblioteca  Bibliotecas del administrador).

Descargue un boceto de cómo conectar la placa Wi-Fi Arduino MK R 1000 al punto de acceso necesario. Sube un ejemplo de connectWithWPA.ino biblioteca al tablero ingresando los datos de su punto de acceso WiFi en la pestaña:

  #define SECRET_SID "my_D Link" 
#define SECRET_PASS "********"

Después de descargar el boceto, abra el monitor del puerto serie, donde puede ver el proceso de conexión de la placa Wi-Fi Arduino MKR1000 al punto de acceso.

Si la conexión es exitosa, continúe.

Paso 6. Crear una base de datos de empleados en el sitio web de la empresa y una base de datos para recopilar lecturas diarias de temperatura en la entrada

Creando una base de datos en hosting (MySQL) y dos tablas en ella:

  • usuarios - datos de los empleados y su uid;
  • temp. - para recopilar datos de la temperatura corporal medida en la entrada.

Ahora en el hosting creamos 2 scripts para procesar los datos enviados por Arduino MKR 1000 WiFi. Secuencia de comandos get_uid.php busca una identificación en la base de datos y devuelve la respuesta:

#no - si el uid no está en la base de datos

#sí; - si el uid está en la base de datos

El contenido del script get_uid.php

   // 
$ location ="localhost";
$ user ="************";
$ pass ="************";
$ db_name ="************";
// conecta la base de datos
if (! $ db =mysqli_connect ($ location, $ user, $ pass, $ db_name))
{echo "error de conexión";}
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 [nombre];
}
else {
echo "#no";
}
?>

Puede probar el script enviando solicitudes desde el navegador:

Secuencia de comandos get_temp.php envía la temperatura del empleado a la base de datos

El contenido del script get_temp.php

   // 
$ location ="localhost";
$ user ="************";
$ pass ="************";
$ db_name ="************";
// conecta la base de datos
if (! $ db =mysqli_connect ($ location, $ user, $ pass, $ db_name))
{echo "error de conexión";}
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']. "',
día ='". date ('Ymd H:i:s'). "'";
mysqli_query ($ db, $ consulta1);
echo "#sí";
}
else {
echo "#no";
}
?>

Puede probar el script enviando solicitudes desde el navegador:

PASO 7. Envío de datos desde el Arduino MKR 1000 WiFi al sitio web de la empresa

Escribamos 2 funciones:

send_uid_to_server () - enviando el uid al servidor;

send_temp_to_server () - enviando la temperatura al servidor.

Función 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)) {
//// enviando datos al servidor
// formando una cadena
// uid por línea
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 (" Conexión:cerrar ");
client.println ();
// получение ответа
previos =millis ();
for (int i =0; i <40; i ++ )
respuesta [i] =0;
hacer {
if (client.available ()> 0) {
// obtener datos del servidor
s =client.read ();
if (s =='#')
f =1;
if (f ==1) {
respuesta [x] =s;
x ++;
}
Serial.write (s);
}
}
while ((millis ( ) - previos) <5000);
if (respuesta [0] ='#') {
ret =comando (respuesta);
}
Serial.println (respuesta);
//client.stop ();
return ret;
}
else {
// no hay conexión
Serial.println ("la conexión falló ");
//client.stop ();
return 3;
}
}

Función send_temp_to_server ()

  void send_temp_to_server () {
client.stop ();
if (client.connect (server, 80)) {
//// enviando datos al servidor
// formando una cadena
// uid por línea
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 ("Usuario-Agente:ArduinoWiFi / 1.1");
client.println ("Conexión:cerrar");
client.println ();
Serial. println (respuesta);
delay (10); }
else {
// sin conexión
Serial.println ("conexión fallida");
}
}

PASO 8. Agregar un relé para habilitar / deshabilitar la entrada

Agregar un relé para habilitar / deshabilitar la entrada a la empresa, según el valor de temperatura. Diagrama de conexión:

Y agregue al código habilitar / deshabilitar el relé para abrir o cerrar la entrada, según los datos de temperatura.

  if (temp <37.5) {// OPEN 
display.setCursor (10,0);
display.print (F ("OPEN"));
Serial .println ("ABRIR");
digitalWrite (pinRelay, HIGH);
}
else {// CLOSE
display.print (F ("CLOSE"));
display.setCursor (10,0);
display.print (F ("Temp alta !!!"));
Serial.println ("CLOSE");
Serial .println ("¡Temp alta!");
digitalWrite (pinRelay, LOW);
}

Y el código de boceto completo ((mlx90614_07.ino))

  // Conectando bibliotecas 
#include
#include
#include
#include
#include
#include
#include
// Creando instancias de objeto
Adafruit_MLX90614 mlx =Adafruit_MLX90614 ();
Pantalla Adafruit_SSD1306 (128, 32, &Wire, -1);
MFRC522 mfrc522 (7, 6);
Cliente WiFiClient;
// su SSID de red (nombre)
// y contraseña (WPA)
char ssid [] ="my_DLink";
char pass [] ="********";
// nombre dirección
char server [] ="www.freeparkovka.ru";
int pinRelay =5;
int status =WL_IDLE_STATUS;
respuesta char [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);
// relé
pinMode (pinRelay, SALIDA);
digitalWrite (pinRelay, LOW);
// d isplay
display.begin (SSD1306_SWITCHCAPVCC, 0x3C);
display.setTextSize (1);
display.setTextColor (WHITE);
display.clearDisplay ();
display.display ();
// iniciando el 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 ();
// comprobar la presencia del escudo:
if (WiFi.status () ==WL_NO_SHIELD) {
Serial.println ("WiFi shield not present");
// no continúe:
while (true);
}
// intente conectarse a la red WiFi:
while (status! =WL_CONNECTED) {
Serial.print ("Intentando conectarse a WPA SSID:");
Serial.println (ssid);
// Conéctese a la red WPA / WPA2:
status =WiFi.begin (ssid, pass);
// espere 5 segundos para la conexión:
delay (5000);
}
display.setCursor ( 30,20);
display.print (F ("ok"));
display.display ();
printWiFiStatus ();
retraso (2000);
Serial.println ("Espere RFID ....");
}

bucle vacío () {
switch (res) {
caso 0://
send_display ("Wait RFID ....");
res =1;
break;
case 1:// esperando RFID
// Compruebe si la tarjeta está adjunta
if (mfrc522.PICC_IsNewCardPresent ()) {
// Leyendo la información del mapa
if (mfrc522.PICC_ReadCardSerial ()) {
// guardar UID
Serial.print (F ("Tarjeta 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 ();
delay (2000);
Serial .println ("enviar uid al servidor ....");
}
mfrc522.PICC_HaltA ();
mfrc522.PCD_StopCrypto1 ();
}
mostrar .display ();
break;
caso 2:// solicitud al servidor UID desde la base de datos
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 ("incorrecto"));
}
else {
res =0;
display.setCursor (10,0);
display.print (F ("error 404"));
}
display.display ();
delay (3000);
break;
caso 3:// esperando la medición de temperatura
if (millis () - millis3 <10000) {
sen d_display ("Esperar 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;
delay (2000);
}
}
else {
res =0;
}
break;
caso 4:/ / enviando datos de temperatura al servidor
send_display ("Wait temp ....");
send_temp_to_server ();
res =5;
delay (2000);
romper;
caso 5:// abrir o cerrar
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 ();
delay (3000);
Serial.println ("Wait RFID ....");
res =0;
break;
predeterminado:
break;
}
}

//
void printWiFiStatus () {
// imprime el SSID de la red a la que estás conectado:
Serial.print ("SSID:");
Serial.println (WiFi.SSID ());
// imprime la dirección IP de tu escudo WiFi:
IPAddress ip =WiFi.localIP ();
Serial.print ( "IP Address:");
Serial.println (ip);
// imprime la intensidad de la señal recibida:
long rssi =WiFi.RSSI ();
Serial.print ("intensidad de la señal (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)) {
//// enviando datos al servidor
// formando una cadena
// uid por línea
Cadena 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 ("Conexión:cerrar");
client.println ();
// получение ответа
previos =millis ();
for ( int i =0; i <40; i ++)
respuesta [i] =0;
do {
if (client.available ()> 0) {
// get datos del servidor
s =client.read ();
if (s =='#')
f =1;
if (f ==1) {
respuesta [x] =s;
x ++;
}
Serial.write (s);
}
}
while ((millis () - previos) <5000);
if (respuesta [0] ='#') {
ret =comando (respuesta);
}
Serial.println (respuesta );
//client.stop ();
return ret;
}
else {
// sin conexión
Serial.println ("conexión fallido ");
//client.stop ();
return 3;
}
}
//
void send_temp_to_server () {
client.stop ();
if (client.connect (server, 80)) {
//// enviando datos al servidor
// formando una cadena
// uid por línea
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 ("Usuario-Agente:ArduinoWiFi / 1.1");
client.println ("Conexión:cerrar");
client.println ();
Serial.println ( respuesta);
retraso (10); }
else {
// sin conexión
Serial.println ("conexión fallida");
}
}
// comprobando comandos que vinieron de el servidor
int command (char * arr) {
String str (arr);
//
if (str.indexOf ("yes")! =- 1) {
return 1;
}
else if (str.indexOf ("no")! =- 1) {
return 2;
}
return 3;
}
// mostrar salida
void send_display (String str) {
display.clearDisplay ();
display.setCursor (10,10);
display.print (str);
display.display ();
}

PASO 9. Página para la visualización remota de los datos de temperatura de los empleados

Para ver los datos enviados al servidor, abra la página del sitio. El contenido del script para generar un archivo de página view_temp.php

   // 
$ location ="localhost";
$ user ="********";
$ pass ="********";
$ db_name ="********";
// conecta la base de datos
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('Ym-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;
?>


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"); // no continúe:while (verdadero); } // 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(); retraso (2000); Serial.println("Wait RFID ...."); }void loop() { switch(res) { case 0:// send_display("Wait RFID...."); res=1; descanso; 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 (); retraso (2000); Serial.println("send uid to server...."); } mfrc522.PICC_HaltA(); mfrc522.PCD_StopCrypto1(); } display.display(); descanso; 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(); retraso (3000); descanso; 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; retraso (2000); } } else { res=0; } descanso; case 4:// send_display("Wait temp...."); send_temp_to_server(); res=5; retraso (2000); descanso; 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(); retraso (3000); Serial.println("Wait RFID ...."); res=0; descanso; predeterminado:descanso; }}//void printWiFiStatus() { // print the SSID of the network you're attached to:Serial.print("SSID:"); Serial.println (WiFi.SSID ()); // imprime la dirección IP de tu escudo WiFi:IPAddress ip =WiFi.localIP (); Serial.print ("Dirección IP:"); Serial.println (ip); // imprime la intensidad de la señal recibida:long rssi =WiFi.RSSI (); Serial.print ("intensidad de la señal (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 ("Conexión:cerrar"); 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 ("Conexión:cerrar"); client.println(); Serial.println(response); retraso (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(); descanso; 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; } descanso; 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(); retraso (3000); Serial.println("Wait RFID ...."); res=1; descanso; 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;?>

Esquemas

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

Proceso de manufactura

  1. Píldora anticonceptiva
  2. Control de acceso con QR, RFID y verificación de temperatura
  3. Ventilador de temperatura controlada
  4. Monitoreo de temperatura en Raspberry Pi
  5. Supervisión de la temperatura con Raspberry Pi
  6. Sistema de control de dispositivo basado en temperatura usando LM35
  7. Sensor de temperatura Raspberry Pi
  8. Control de llenado de piscinas
  9. Errores en el enfriamiento de gabinetes de paneles de control industrial
  10. Control de temperatura e influencia durante el proceso de fundición a presión
  11. Control de temperatura en el lugar de trabajo:una guía de alquiler para profesionales de la construcción