Control de temperatura sin contacto de empleados en transferencia RFID
Componentes y suministros
| × | 1 | ||||
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Aplicaciones y servicios en línea
| ||||
|
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í;
El contenido del script get_uid.php
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
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
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.="".$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"); // 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 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.fzzProceso de manufactura
- Píldora anticonceptiva
- Control de acceso con QR, RFID y verificación de temperatura
- Ventilador de temperatura controlada
- Monitoreo de temperatura en Raspberry Pi
- Supervisión de la temperatura con Raspberry Pi
- Sistema de control de dispositivo basado en temperatura usando LM35
- Sensor de temperatura Raspberry Pi
- Control de llenado de piscinas
- Errores en el enfriamiento de gabinetes de paneles de control industrial
- Control de temperatura e influencia durante el proceso de fundición a presión
- Control de temperatura en el lugar de trabajo:una guía de alquiler para profesionales de la construcción