Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Contrôle de la température sans contact des employés sur RFID Pass-Through

Composants et fournitures

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

Applications et services en ligne

Arduino IDE
Fritzing

À propos de ce projet

Lorsque les employés accèdent à l'entreprise à l'aide d'étiquettes RFID, nous mesurons en outre la température corporelle des employés à l'aide d'un thermomètre infrarouge sans contact. S'il y a une température élevée (l'un des symptômes de COVID19), l'accès est bloqué. De plus, toutes les données (identification de l'employé via RFID) vont sur le site Web de l'entreprise qui surveille l'heure d'arrivée au travail et la température corporelle (identification de l'employé pour UID RFID).

Entrer dans le bureau par RFID avec contrôle de température (test)

Affichage des données envoyées depuis le cloud

Entrer dans le bureau par RFID avec contrôle de la température

vidéo2

Étape 1. Installation du logiciel

Nous utilisons la carte WiFi Arduino MKR 1000 comme contrôleur. Nous allons programmer dans l'IDE Arduino. Par défaut, l'IDE Arduino est configuré uniquement pour les cartes AVR. Pour travailler avec la plate-forme Arduino MK Wi-Fi 1000, vous devez ajouter la prise en charge de l'Arduino SAMD (32 bits ARM Cortex-M0+) dans le gestionnaire de cartes. Dans le gestionnaire de tableaux (Outils > Tableau > Gestionnaire de tableaux ), recherchez l'Arduino SAMD et cliquez sur le bouton Installer.

Après avoir installé le logiciel dans l'IDE Arduino, le menu Outils  Carte prendra en charge les cartes Arduino Zero et MKR, y compris la carte WiFi MKR 1000). Connectez la carte MKR 1000 à votre ordinateur à l'aide d'un câble USB. Le pilote devrait être installé automatiquement.

Étape 2. Connexion d'un capteur de température IR MLX90614 à une carte Wi-Fi Arduino MKR 1000

Le MLX90614 est un capteur infrarouge pour la mesure de température sans contact. Il peut mesurer des températures comprises entre -70 et 380 degrés Celsius avec une précision d'environ 0,5°C. J'avais MLX90614DAA en stock

Le capteur utilise le protocole I2C. Attribuer des contacts

Schéma de connexion à la carte WiFi Arduino MKR

Pour la programmation, nous utilisons la bibliothèque Adafruit_MLX90614.h, qui doit être installée via les bibliothèques du gestionnaire (Sketch> Include library> Manager Libraries ). Téléchargez un croquis sur la carte Arduino (mlx90614_01.ino)

// Connexion des bibliothèques
#include
#include
// Création d'une instance d'un objet
Adafruit_MLX90614 mlx =Adafruit_MLX90614();

void setup() {
Serial.begin(9600);
Serial.println("start");
// démarrage du Capteur MLX90614
mlx.begin();
}

boucle vide() {
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);
}

Et ouvrez le moniteur du port série. La température ambiante et la température de l'objet sont transmises au port série toutes les 3 secondes

Étape 3. Connexion d'un écran OLED à une carte WiFi Arduino MKR 1000

Le projet utilise un écran OLED monochrome 12x32 sous la forme d'un module avec la liaison nécessaire sur la puce SSD1306. Ces modules fonctionnent sur l'interface I2C. Schéma de connexion à la carte Arduino

Lors de la programmation, nous utilisons la bibliothèque Adafruit SSD1306. Chargement d'un croquis de la sortie de température sur l'écran. Nous mesurons la température toutes les 3 secondes (mlx90614_02.ino).

// Connexion des bibliothèques
#include
#include
#include
#include
// Création d'une instance d'un objet
Adafruit_MLX90614 mlx =Adafruit_MLX90614();
Adafruit_SSD1306 display(128, 32, &Wire, -1);

float temp;
unsigned long millis1=0;

void setup() {
Serial.begin(9600);
// démarrage de l'affichage
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.setTextSize(1);
display.setTextColor(WHITE);
// options d'affichage
display.clearDisplay();
display.display();
// démarrage du capteur MLX90614
mlx.begin();
// démarrage
Serial.println("start");
}

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

Étape 4. Connexion du module de lecture RFID rc522 à la carte WiFi Arduino MKR 1000

Il existe une grande variété d'étiquettes RFID. Les tags sont actifs et passifs (sans source d'alimentation intégrée, alimentés par un courant induit dans l'antenne par un signal du lecteur). Les balises fonctionnent à différentes fréquences :LF (125 - 134 kHz), HF (13,56 MHz), UHF (860 - 960 MHz). Les appareils qui lisent les informations des balises et y écrivent des données sont appelés lecteurs. Dans les projets Arduino, le module RFID-RC522 est très souvent utilisé comme lecteur. Le module est fabriqué sur la puce MFRC522 de la société NSP, qui permet de travailler avec les balises RA (à une fréquence de 13,56 MHz).

Connexion à la carte WiFi Arduino MCF 1000 via le protocole SPI

Croquis de détection d'UID pour une carte RFID, mesure de température et messages d'ouverture ou de fermeture de l'entrée avec sortie vers le port série (mlx90614_03.ino).

// Connexion des bibliothèques
#include
#include
#include
#include
#include
#include
// Création d'une instance d'un objet
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 );
// démarrage de l'affichage
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.setTextSize(1);
display.setTextColor(WHITE);
affichage .clearDisplay();
display.display();
// démarrage du capteur MLX90614
mlx.begin();
// апуск SPI
SPI.begin ();
// initialisation du MFRC522
mfrc522.PCD_Init();
Serial.println("start");
Serial.println("Wait RFID ...." );
}

boucle vide() {
switch(res ) {
cas 1 :// en attente de RFID
display.clearDisplay();
display.setCursor(10,10) ;
display.print(F("Wait RFID ...."));
// Vérification si la carte est attachée
if ( mfrc522.PICC_IsNewCardPresent()) {
// Lecture des informations de la carte.
if ( mfrc522.PICC_ReadCardSerial()) {
// enregistrer l'UID
Serial.print(F("Card UID:"));
display.setCursor(10,20);
pour (octet i =0 ; je <4 ; i++) {
cardUID[i]=mfrc522.uid.uidByte[i];
Serial.print(cardUID[i],HEX);
display.print(cardUID[i], HEX);
}
Serial.println();
Serial.println("Attendez temp....");
res=3;
}
mfrc522.PICC_HaltA();
mfrc522.PCD_StopCrypto1();
}
display.display();
break;
cas 2 :// demande vers le serveur UID depuis la base de données
break ;
cas 3 :// attente de mesure de température
delay(2000);
display.clearDisplay();
display .setCursor(10,10);
display.println(F("Attendez 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;
cas 4:// envoi des données de température au serveur
break;
case 5:// ouvrir ou fermer
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("OUVERT"));
Serial.println("OUVERT");
}
else {
display.print(F("FERMER") );
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 ;
break ;
par défaut :
break ;
}
}

Étape 5. Connexion de la carte WiFi Arduino MKR 1000 à Internet

Pour connecter l'Arduino MKR1000 à un réseau Wi-Fi, nous utiliserons la bibliothèque WiFi101, que nous installerons à l'aide du gestionnaire de bibliothèque (Sketch  Include library  Manager Libraries).

Téléchargez un croquis de connexion de la carte Wi-Fi Arduino MK R 1000 au point d'accès nécessaire. Téléchargez un exemple de connectWithWPA.ino bibliothèque au Conseil en saisissant les données de votre point d'accès WiFi dans l'onglet :

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

Après avoir téléchargé le croquis, ouvrez le moniteur du port série, où vous pouvez regarder le processus de connexion de la carte Wi-Fi Arduino MKR1000 au point d'accès.

Si la connexion réussit, continuez.

Étape 6. Création d'une base de données d'employés sur le site Web de l'entreprise et d'une base de données pour collecter les relevés de température quotidiens à l'entrée

Création d'une base de données sur l'hébergement (MySQL) et de deux tables dedans :

  • utilisateurs - les données des employés et leur uid ;
  • temp - pour collecter les données de la température corporelle mesurée à l'entrée.

Maintenant sur l'hébergement nous créons 2 scripts pour traiter les données envoyées par Arduino MKR 1000 WiFi. Script get_uid.php recherche un identifiant dans la base de données et renvoie dans la réponse :

#non – si l'uid n'est pas dans la base de données

#oui ; - si l'uid est dans la base de données

Le contenu du script get_uid.php

//
$location="localhost";
$user="************";
$pass="************";
$db_name="************";
// connecter la base de données
if(! $db=mysqli_connect($location,$user,$pass,$db_name))
{echo "erreur de connexion";}
else
{;}
$query0=" SELECT * FROM utilisateurs WHERE uid='".$_GET['uid']."' ";
$rez0=mysqli_query($db,$query0);
if (mysqli_num_rows($rez0)>0) {
$row0=mysqli_fetch_assoc($rez0);
echo "#yes".";".$row0[name];
}
else {
echo "#no";
}
?>

Vous pouvez tester le script en envoyant des requêtes depuis le navigateur :

Script get_temp.php envoie la température de l'employé à la base de données

Le contenu du script get_temp.php

//
$location="localhost";
$user="************";
$pass="************";
$db_name="************";
// connecter la base de données
if(! $db=mysqli_connect($location,$user,$pass,$db_name))
{echo "erreur de connexion";}
else
{;}
$query0=" SELECT * FROM utilisateurs WHERE uid='".$_GET['uid']."' ";
$rez0=mysqli_query($db,$query0);
if (mysqli_num_rows($rez0)>0) {
$row0=mysqli_fetch_assoc($rez0) ;
$query1=" INSERER DANS LE SET temp
id_user='".$row0['id' ]."',
temp='".$_GET['temp']."',
day='".date('Ymd H:i:s')."' ";
mysqli_query($db,$query1);
echo "#yes";
}
else {
echo "#no";
}
?>

Vous pouvez tester le script en envoyant des requêtes depuis le navigateur :

ÉTAPE 7. Envoi des données de l'Arduino MKR 1000 WiFi vers le site Web de l'entreprise

Écrivons 2 fonctions :

send_uid_to_server () - envoyer l'uid au serveur ;

send_temp_to_server () - envoi de la température au serveur.

Fonction send_uid_to_server()

int send_uid_to_server() {
int ret=3;
long previos non signé;
int x=0;int f=0;
char s;
client.stop();
if (client.connect(server, 80)) {
//// envoi de données au serveur
// formation d'une chaîne
// uid par ligne
String str="/firm/get_uid.php?uid=";
pour (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("Hôte :freeparkovka.ru");
client.println("User-Agent :ArduinoWiFi/1.1");
client.println(" Connection:close");
client.println();
// получение ответа
previos=millis();
for(int i=0;i<40;i++ )
réponse[i]=0;
do {
if(client.available()> 0) {
// obtient les données du serveur
s =client.read();
if(s=='#')
f=1;
if(f==1) {
réponse[x]=s;
x++;
}
Serial.write(s);
}
}
while((millis( ) - previos) <5000);
if(response[0]='#') {
ret=command(response);
}
Serial.println(response);
//client.stop();
return ret;
}
else {
// pas de connexion
Serial.println("la connexion a échoué ");
//client.stop();
return 3;
}
}

Fonction send_temp_to_server()

void send_temp_to_server() {
client.stop();
if (client.connect(server, 80)) {
//// envoi de données au serveur
// formation d'une chaîne
// uid par ligne
String str="/firm/get_temp.php?uid=";
pour (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("Connexion :close");
client.println();
Serial. println(response);
delay(10) ; }
else {
// pas de connexion
Serial.println("la connexion a échoué");
}
}

ÉTAPE 8. Ajout d'un relais pour activer/désactiver l'entrée

Ajout d'un relais pour activer/désactiver l'entrée de l'entreprise, en fonction de la valeur de température. Schéma de connexion :

Et ajouter au code d'activation/désactivation du relais pour ouvrir ou fermer l'entrée, en fonction des données de température.

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

Et le code d'esquisse complet ((mlx90614_07.ino))

// Connexion des bibliothèques
#include
#include
#include
#include
#include
#include
#include
// Création d'instances d'objet
Adafruit_MLX90614 mlx =Adafruit_MLX90614();
Adafruit_SSD1306 display(128, 32, &Wire, -1);
MFRC522 mfrc522(7, 6);
Client WiFiClient;
// votre réseau SSID (nom)
// et mot de passe (WPA)
char ssid[] ="my_DLink" ;
char pass[] ="********";
// nom adresse
char server[] ="www.freeparkovka.ru";
int pinRelay=5;
int status =WL_IDLE_STATUS;
réponse char[40 ];
byte cardUID[4] ={0,0,0,0};
int res=0;
int rr;
float temp;
unsigned long millis1=0;
unsigned long millis2=0;
long non signé millis3=0;

void setup() {
Serial.begin(9600);
// relay
pinMode(pinRelay,OUTPUT);
digitalWrite(pinRelay,LOW);
// d isplay
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.setTextSize(1);
display.setTextColor(WHITE);
display.clearDisplay();
display.display();
// démarrage du capteur MLX90614
mlx.begin();
// запуск SPI
SPI.begin();
// initialisation de MFRC522
mfrc522.PCD_Init();
Serial.println("connect WiFi ....");
display.setCursor(10,10);
display.print (F("Connect WiFi"));
display.display();
// vérifier la présence du shield :
if (WiFi.status() ==WL_NO_SHIELD) {
Serial.println("WiFi shield not present");
// ne continue pas :
while (true);
}
// tente de se connecter au réseau WiFi :
while ( status !=WL_CONNECTED) {
Serial.print("Tentative de connexion au WPA SSID :");
Serial.println(ssid);
// Se connecter au réseau WPA/WPA2 :
status =WiFi.begin(ssid, pass);
// attendre 5 secondes pour la connexion :
delay(5000);
}
display.setCursor( 30,20);
display.print(F("ok"));
display.display();
printWiFiStatus();
delay(2000);
Serial.println("Wait RFID ....");
}

void loop() {
switch(res) {
case 0 ://
send_display("Wait RFID....");
res=1;
break;
case 1 :// en attente de RFID
// Vérifiez si la carte est attachée
if ( mfrc522.PICC_IsNewCardPresent()) {
// Lecture des informations de la carte
if ( mfrc522.PICC_ReadCardSerial()) {
// sauvegarde l'UID
Serial.print(F("Card UID:"));
display.setCursor(10,20);
for (byte i =0; je <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("envoyer l'uid au serveur....");
}
mfrc522.PICC_HaltA();
mfrc522.PCD_StopCrypto1();
}
afficher .display();
break;
case 2 :// demande au serveur UID depuis la base de données
send_display("Envoyer le serveur...");
rr=send_uid_to_server ();
if(rr==1) {
res=3;
display.setCursor(10,0);
display.print(F("uid ok" ));
millis3=millis();
}
else if(rr==2) {
res=0;
display.setCursor(10,0 );
display.print(F("incorrect"));
}
else {
res=0;
display.setCursor(10,0);
display.print(F("error 404"));
}
display.display();
delay(3000);
break;
cas 3 :// en attente de la mesure de température
if(millis()-millis3<10000) {
sen d_display("Attendez 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;
case 4:/ / envoi des données de température au serveur
send_display("Wait temp....");
send_temp_to_server();
res=5;
delay(2000);
break;
case 5:// ouvrir ou fermer
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 { // FERMER
display.print(F("CLOSE"));
display.setCursor(10,0);
afficher. print(F("Temp high!!!"));
Serial.println("CLOSE");
Serial.print ln("Temp high!!!");
digitalWrite(pinRelay,LOW);
}
display.display();
delay(3000);
Serial.println("Attendez RFID ....");
res=0;
break;
default:
break;
}
}

//
void printWiFiStatus() {
// imprime le SSID du réseau auquel vous êtes connecté :
Serial.print("SSID:");
Serial.println(WiFi.SSID());
// imprime l'adresse IP de votre bouclier WiFi :
IPAddress ip =WiFi.localIP();
Serial.print( "Adresse IP : " );
Serial.println(ip);
// imprime la force du signal reçu :
long rssi =WiFi.RSSI();
Serial.print ("force du signal (RSSI):");
Serial.print(rssi);
Serial.println("dBm");
}
//
int send_uid_to_server() {
int ret=3;
long previos non signé;
int x=0;int f=0;
char s;
client.stop ();
if (client.connect(server, 80)) {
//// envoi de données au serveur
// formation d'une chaîne
// uid par ligne
Chaîne chaîne ="/firm/get_uid.php?uid=";
pour (octet i =0; je <4 ; i++) {
str+=String(cardUID[i],HEX);
}
Serial.print("str=");Serial.println(str);
client .println("GET "+str+" HTTP/1.1");
client.println("Hôte :freeparkovka.ru");
client.println("User-Agent :ArduinoWiFi/1.1");
client.println("Connexion :close");
client.println();
// олучение ответа
previos=millis();
for( int i=0;i<40;i++)
réponse[i]=0;
do {
if(client.available()> 0) {
// get données du serveur
s =client.read();
if(s=='#')
f=1;
if(f==1) {
réponse[x]=s;
x++;
}
Serial.write(s);
}
}
while((millis () - previos) <5000);
if(response[0]='#') {
ret=command(response);
}
Serial.println(response );
//client.stop();
return ret;
}
else {
// pas de connexion
Serial.println("connexion échec");
//client.stop();
return 3;
}
}
//
void send_temp_to_server() {
client.stop();
if (client.connect(server, 80)) {
//// envoi de données au serveur
// formation d'une chaîne
// uid par ligne
Chaîne str="/firm/get_temp.php?uid=";
pour (octet i =0; je <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("Connexion :close");
client.println();
Serial.println( réponse);
délai(10) ; }
else {
// pas de connexion
Serial.println("la connexion a échoué");
}
}
// vérifier les commandes provenant de la commande server
int(char* arr) {
String str(arr);
//
if(str.indexOf("yes")!=-1) {
retourne 1;
}
else if(str.indexOf("no")!=-1) {
retourne 2;
}
retourne 3;
}
// afficher la sortie
void send_display(String str) {
display.clearDisplay();
display.setCursor(10,10);
display.print(str);
display.display();
}

ÉTAPE 9. Page de visualisation à distance des données de température des employés

Pour afficher les données envoyées au serveur, ouvrez la page du site. Le contenu du script pour générer un fichier de page 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('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;
?>


Code

  • 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(BLANC); 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(); retard (2000); Serial.println("Wait RFID ...."); }void loop() { switch(res) { case 0:// send_display("Wait RFID...."); res=1; Pause; 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(); retard (2000); Serial.println("send uid to server...."); } mfrc522.PICC_HaltA(); mfrc522.PCD_StopCrypto1(); } display.display(); Pause; 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(); retard (3000); Pause; 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; retard (2000); } } else { res=0; } Pause; case 4:// send_display("Wait temp...."); send_temp_to_server(); res=5; retard (2000); Pause; 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(); retard (3000); Serial.println("Wait RFID ...."); res=0; Pause; par défaut :pause ; }}//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("Connexion :fermer"); 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("Connexion :fermer"); client.println(); Serial.println(response); retard(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(BLANC); // 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(BLANC); 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(); Pause; 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; } Pause; 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(); retard (3000); Serial.println("Wait RFID ...."); res=1; Pause; 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;?>

Schémas

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

Processus de fabrication

  1. Contrôle d'accès avec QR, RFID et vérification de la température
  2. Ventilateur à température contrôlée
  3. Surveillance de la température sur le Raspberry Pi
  4. Contrôle de la température avec Raspberry Pi
  5. Système de contrôle d'appareil basé sur la température utilisant LM35
  6. Capteur de température Raspberry Pi
  7. Contrôle de remplissage de la piscine
  8. Erreurs dans le refroidissement des boîtiers de panneaux de commande industriels
  9. Contrôle et influence de la température pendant le processus de moulage sous pression