Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Kontaktlose Zeitsteuerung von Mitarbeitern mit RFID-Pass-Through

Komponenten und Verbrauchsmaterialien

Arduino MKR1000
× 1
RFID-Lesegerät RC522
× 1
OLED 0,96" 128x32
× 1
MLX90614
× 1

Apps und Onlinedienste

Arduino-IDE
Fritzing

Über dieses Projekt

Wenn Mitarbeiter mit RFID-Tags auf das Unternehmen zugreifen, messen wir zusätzlich die Körpertemperatur der Mitarbeiter mit einem berührungslosen Infrarot-Thermometer. Bei erhöhter Temperatur (eines der Symptome von COVID19) wird der Zugang gesperrt. Darüber hinaus gehen alle Daten (Mitarbeiteridentifikation über RFID) auf die Website des Unternehmens, das die Daten Ankunftszeit am Arbeitsplatz und Körpertemperatur (Mitarbeiteridentifikation für UID RFID) Tags überwacht.

Betreten des Büros per RFID mit Temperaturkontrolle (Test)

Anzeigen gesendeter Daten aus der Cloud

Betreten des Büros per RFID mit Temperaturkontrolle

video2

Schritt 1. Softwareinstallation

Als Controller verwenden wir das Arduino MKR 1000 WiFi Board. Wir werden in der Arduino IDE programmieren. Standardmäßig ist die Arduino IDE nur für AVR-Boards konfiguriert. Um mit der Arduino MK Wi-Fi 1000-Plattform zu arbeiten, müssen Sie im Kartenmanager Unterstützung für Arduino SAMD (32bit ARM Cortex-M0+) hinzufügen. Im Board-Manager (Tools> Board> Board-Manager ), suchen Sie das Arduino SAMD und klicken Sie auf die Schaltfläche Installieren.

Nach der Installation der Software in der Arduino IDE unterstützt das Menü Tools  Board die Arduino Zero- und MKR-Boards, einschließlich des MKR 1000 WiFi Board). Verbinden Sie die MKR 1000-Karte über ein USB-Kabel mit Ihrem Computer. Der Treiber sollte automatisch installiert werden.

Schritt 2. Anschließen eines IR-Temperatursensors MLX90614 an ein Arduino MKR 1000 Wi-Fi-Board

Der MLX90614 ist ein Infrarotsensor zur berührungslosen Temperaturmessung. Es kann Temperaturen im Bereich von -70 bis 380 Grad Celsius mit einer Genauigkeit von etwa 0,5 °C messen. Ich hatte MLX90614DAA auf Lager

Der Sensor verwendet das I2C-Protokoll. Kontakte zuweisen

Anschlussplan zum Arduino MKR WiFi Board

Zur Programmierung verwenden wir die Bibliothek Adafruit_MLX90614.h, die über Manager-Bibliotheken installiert werden muss (Skizze> Bibliothek einschließen> Manager-Bibliotheken ). Laden Sie eine Skizze zum Arduino-Board hoch (mlx90614_01.ino)

// Verbinden von Bibliotheken
#include
#include
// Erstellen einer Instanz eines Objekts
Adafruit_MLX90614 mlx =Adafruit_MLX90614();

void setup() {
Serial.begin(9600);
Serial.println("start");
// Starten des MLX90614 Sensor
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);
}

Und öffnen Sie den Monitor für die serielle Schnittstelle. Die Umgebungstemperatur und die Objekttemperatur werden alle 3 Sekunden an die serielle Schnittstelle ausgegeben

Schritt 3. Anschließen eines OLED-Displays an ein Arduino MKR 1000 WiFi Board

Das Projekt verwendet ein 12x32 monochromes OLED-Display in Form eines Moduls mit der notwendigen Anbindung auf dem SSD1306-Chip. Diese Module laufen auf der I2C-Schnittstelle. Anschlussplan zum Arduino Board

Bei der Programmierung verwenden wir die Bibliothek Adafruit SSD1306. Laden einer Skizze der Temperaturausgabe auf das Display. Wir messen die Temperatur alle 3 Sekunden (mlx90614_02.ino).

// Verbinden von Bibliotheken
#include
#include
#include
#include
// Erstellen einer Objektinstanz
Adafruit_MLX90614 mlx =Adafruit_MLX90614();
Adafruit_SSD1306 display(128, 32, &Wire, -1);

float temp;
unsigned long millis1=0;

void setup() {
Serial.begin(9600);
// Anzeige starten
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.setTextSize(1);
display.setTextColor(WHITE);
// Optionen display
display.clearDisplay();
display.display();
// Starten des MLX90614 Sensors
mlx.begin();
// start
Serial.println("start");
}

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

Schritt 4. Anschließen des rc522 RFID-Lesemoduls an das Arduino MKR 1000 WiFi Board

Es gibt eine Vielzahl von RFID-Tags. Tags sind aktiv und passiv (ohne eingebaute Stromquelle, die durch einen Strom gespeist wird, der in der Antenne durch ein Signal vom Lesegerät induziert wird). Tags arbeiten auf verschiedenen Frequenzen:LF (125 - 134 kHz), HF (13,56 MHz), UHF (860 - 960 MHz). Geräte, die Informationen von Tags lesen und Daten darauf schreiben, werden als Reader bezeichnet. In Arduino-Projekten wird das RFID-RC522-Modul sehr häufig als Lesegerät verwendet. Das Modul wird auf dem MFRC522-Chip der Firma NSP hergestellt, der die Arbeit mit RA-Tags (mit einer Frequenz von 13,56 MHz) ermöglicht.

Verbinden mit der Arduino MCF 1000 WiFi-Karte über das SPI-Protokoll

Skizze der UID-Erkennung für eine RFID-Karte, Temperaturmessung und Meldungen zum Öffnen oder Schließen des Eingangs mit Ausgang zum seriellen Port (mlx90614_03.ino).

// Verbinden von Bibliotheken
#include
#include
#include
#include
#include
#include
// Erstellen einer Objektinstanz
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 );
// Anzeige starten
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.setTextSize(1);
display.setTextColor(WHITE);
display .clearDisplay();
display.display();
// Starten des MLX90614 Sensors
mlx.begin();
// апуск SPI
SPI.begin ();
// MFRC522 initialisieren
mfrc522.PCD_Init();
Serial.println("start");
Serial.println("Wait RFID ...." );
}

void loop() {
switch(res ) {
Fall 1:// Warten auf RFID
display.clearDisplay();
display.setCursor(10,10);
display.print(F("Wait RFID ...."));
// Prüfen, ob die Karte angeschlossen ist
if ( mfrc522.PICC_IsNewCardPresent()) {
// Karteninfo lesen.
if ( mfrc522.PICC_ReadCardSerial()) {
// UID speichern
Serial.print(F("Karten-UID:"));
display.setCursor(10,20);
für (Byte i =0; ich <4; i++) {
cardUID[i]=mfrc522.uid.uidByte[i];
Serial.print(cardUID[i],HEX);
display.print(cardUID[i], HEX);
}
Serial.println();
Serial.println("Wartetemperatur....");
res=3;
}
mfrc522.PICC_HaltA();
mfrc522.PCD_StopCrypto1();
}
display.display();
break;
Fall 2:// Anfrage von der Datenbank zum UID-Server
break;
Fall 3:// Warten auf Temperaturmessung
delay(2000);
display.clearDisplay();
display .setCursor(10,10);
display.println(F("Wartetemp...."));
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;
Fall 4:// Temperaturdaten an den Server senden
break;
Fall 5:// öffnen oder schließen
display.clearDisplay();
display.setCursor(10,10);
display.print(F("Temp="));
display.pr int(temp);
display.print(F("*C"));
display.setCursor(10,20);
if(temp<37.5) {
display.print (F("OPEN"));
Serial.println("OPEN");
}
else {
display.print(F("CLOSE") );
display.setCursor(10,0);
display.print(F("Temp high!!!"));
Serial.println("CLOSE");
Serial.println("Temp high!!!");
}
display.display();
delay(3000);
Serial.println("Wait RFID ....");
res=1;
Pause;
Standard:
Pause;
}
}

Schritt 5. Verbinden des Arduino MKR 1000 WiFi Boards mit dem Internet

Um den Arduino MKR1000 mit einem Wi-Fi-Netzwerk zu verbinden, verwenden wir die WiFi101-Bibliothek, die wir mit dem Bibliotheksmanager installieren (Skizze  Bibliothek einschließen  Managerbibliotheken).

Laden Sie eine Skizze zum Verbinden des Arduino MK R 1000 Wi-Fi Boards mit dem erforderlichen Access Point herunter. Laden Sie ein Beispiel von connectWithWPA.ino hoch Bibliothek an das Board, indem Sie die Daten für Ihren WLAN-Hotspot in die Registerkarte eingeben:

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

Öffnen Sie nach dem Herunterladen der Skizze den Monitor für die serielle Schnittstelle, wo Sie den Prozess der Verbindung des Arduino MKR1000 Wi-Fi Boards mit dem Zugangspunkt beobachten können.

Wenn die Verbindung erfolgreich ist, fahren Sie fort.

Schritt 6. Erstellen einer Mitarbeiterdatenbank auf der Unternehmenswebsite und einer Datenbank zum Erfassen der täglichen Temperaturmesswerte am Eingang

Erstellen einer Datenbank auf dem Hosting (MySQL) und zwei Tabellen darin:

  • Nutzer - Mitarbeiterdaten und deren UID;
  • temp - zum Sammeln von Daten der am Eingang gemessenen Körpertemperatur.

Jetzt erstellen wir auf dem Hosting 2 Skripte zur Verarbeitung von Daten, die von Arduino MKR 1000 WiFi gesendet werden. Skript get_uid.php sucht nach einer ID in der Datenbank und gibt in der Antwort zurück:

#nein – wenn die UID nicht in der Datenbank ist

#ja; - wenn die UID in der Datenbank ist

Der Inhalt des Skripts get_uid.php

//
$location="localhost";
$user="************";
$pass="************";
$db_name="************";
// db verbinden
if(! $db=mysqli_connect($location,$user,$pass,$db_name))
{echo "connect error";}
else
{;}
$query0=" SELECT * FROM Benutzer WHERE uid='".$_GET['uid']."' ";
$rez0=mysqli_query($db,$query0);
if (mysqli_num_rows($rez0)>0) {
$row0=mysqli_fetch_assoc($rez0);
echo "#yes".";".$row0[name];
}
sonst {
echo "#no";
}
?>

Sie können das Skript testen, indem Sie Anfragen vom Browser senden:

Skript get_temp.php sendet die Temperatur des Mitarbeiters an die Datenbank

Der Inhalt des Skripts get_temp.php

//
$location="localhost";
$user="************";
$pass="************";
$db_name="************";
// db verbinden
if(! $db=mysqli_connect($location,$user,$pass,$db_name))
{echo "connect error";}
else
{;}
$query0=" SELECT * FROM Benutzer WHERE uid='".$_GET['uid']."' ";
$rez0=mysqli_query($db,$query0);
if (mysqli_num_rows($rez0)>0) {
$row0=mysqli_fetch_assoc($rez0);
$query1=" IN TEMP-SET EINFÜGEN
id_user='".$row0['id' ]."',
temp='".$_GET['temp']."',
day='".date('Ymd H:i:s')."' ";
mysqli_query($db,$query1);
echo "#yes";
}
else {
echo "#no";
}

Sie können das Skript testen, indem Sie Anfragen vom Browser senden:

SCHRITT 7. Senden von Daten vom Arduino MKR 1000 WiFi an die Website des Unternehmens

Schreiben wir 2 Funktionen:

send_uid_to_server() - Senden der UID an den Server;

send_temp_to_server() - Senden der Temperatur an den Server.

Funktion 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)) {
//// Senden von Daten an den Server
// Bilden eines Strings
// uid pro Zeile
String str="/firm/get_uid.php?uid=";
for (byte i =0; i <4; i++) {
str+=String (cardUID[i],HEX);
}
Serial.print("str=");Serial.println(str);
client.println("GET "+str+" HTTP /1.1");
client.println("Host:freeparkovka.ru");
client.println("User-Agent:ArduinoWiFi/1.1");
client.println(" Connection:close");
client.println();
// олучение ответа
previos=millis();
for(int i=0;i<40;i++ )
response[i]=0;
do {
if(client.available()> 0) {
// Daten vom Server holen
s =client.read();
if(s=='#')
f=1;
if(f==1) {
response[x]=s;
x++;
}
Serial.write(s);
}
}
while((millis( ) - previos) <5000);
if(response[0]='#') {
ret=command(response);
}
Serial.println(response);
//client.stop();
return ret;
}
else {
// keine Verbindung
Serial.println("Verbindung fehlgeschlagen ");
//client.stop();
return 3;
}
}

Funktion send_temp_to_server()

void send_temp_to_server() {
client.stop();
if (client.connect(server, 80)) {
//// Daten an den Server senden
// String bilden
// uid pro Zeile
String str="/firm/get_temp.php?uid=";
for (byte i =0; i <4; i++) {
str+=String(cardUID[i],HEX);
}
str+="&temp="+String(temp);
Serial.print( "str=");Serial.println(str);
client.println("GET "+str+" HTTP/1.1");
client.println("Host:freeparkovka.ru");
client.println("User-Agent:ArduinoWiFi/1.1");
client.println("Connection:close");
client.println();
Serial. println(Antwort);
Verzögerung(10); }
else {
// keine Verbindung
Serial.println("Verbindung fehlgeschlagen");
}
}

SCHRITT 8. Hinzufügen eines Relais zum Aktivieren / Deaktivieren des Eingangs

Hinzufügen eines Relais zum Aktivieren / Deaktivieren des Eingangs zum Unternehmen, abhängig vom Temperaturwert. Anschlussplan:

Und fügen Sie dem Code zum Aktivieren/Deaktivieren des Relais hinzu, um den Eingang abhängig von den Temperaturdaten zu öffnen oder zu schließen.

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

Und der gesamte Sketch-Code ((mlx90614_07.ino))

// Verbinden von Bibliotheken
#include
#include
#include
#include
#include
#include
#include
// Erstellen von Objektinstanzen
Adafruit_MLX90614 mlx =Adafruit_MLX90614();
Adafruit_SSD1306 display(128, 32, &Wire, -1);
MFRC522 mfrc522(7, 6);
WiFiClient-Client;
// dein Netzwerk-SSID (Name)
// und Passwort (WPA)
char ssid[] ="my_DLink";
char pass[] ="********";
// 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);
// Relais
pinMode(pinRelay,OUTPUT);
digitalWrite(pinRelay,LOW);
// d isplay
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.setTextSize(1);
display.setTextColor(WHITE);
display.clearDisplay();
display.display();
// Starten des Sensors MLX90614
mlx.begin();
// апуск SPI
SPI.begin();
// MFRC522 initialisieren
mfrc522.PCD_Init();
Serial.println("connect WiFi ....");
display.setCursor(10,10);
display.print (F("WiFi verbinden"));
display.display();
// auf Vorhandensein des Schildes prüfen:
if (WiFi.status() ==WL_NO_SHIELD) {
Serial.println("WiFi-Schild nicht vorhanden");
// nicht fortfahren:
while (true);
}
// Verbindung herstellen zum WLAN-Netzwerk:
while ( status !=WL_CONNECTED) {
Serial.print("Versuch, eine Verbindung zur WPA-SSID herzustellen:");
Serial.println(ssid);
// Verbindung zum WPA/WPA2-Netzwerk herstellen:
status =WiFi.begin(ssid, pass);
// 5 Sekunden auf Verbindung warten:
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;
Fall 1:// Warten auf RFID
// Überprüfen Sie, ob die Karte angeschlossen ist
if ( mfrc522.PICC_IsNewCardPresent()) {
// Auslesen der Karteninfo
if ( mfrc522.PICC_ReadCardSerial()) {
// UID speichern
Serial.print(F("Card UID:"));
display.setCursor(10,20);
for (byte i =0; ich <4; i++) {
cardUID[i]=mfrc522.uid.uidByte[i];
Serial.print(cardUID[i],HEX);
display.print(cardUID[i], HEX);
}
Serial.println();
res=2;
display.display();
delay(2000);
Serial .println("send Uid to server....");
}
mfrc522.PICC_HaltA();
mfrc522.PCD_StopCrypto1();
}
display .display();
break;
Fall 2:// Anfrage an den UID-Server aus der Datenbank
send_display("Server senden...");
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("falsch"));
}
else {
res=0;
display.setCursor(10,0);
display.print(F("error 404"));
}
display.display();
delay(3000);
break;
Fall 3:// Warten auf Temperaturmessung
if(millis()-millis3<10000) {
sen d_display("Warte 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;
Verzögerung(2000);
}
}
else {
res=0;
}
Pause;
Fall 4:/ / Temperaturdaten an den Server senden
send_display("Wait temp....");
send_temp_to_server();
res=5;
delay(2000);
break;
Fall 5:// öffnen oder schließen
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 { // SCHLIESSEN
display.print(F("CLOSE"));
display.setCursor(10,0);
display. print(F("Temp hoch!!!"));
Serial.println("CLOSE");
Serial.print ln("Temp hoch!!!");
digitalWrite(pinRelay,LOW);
}
display.display();
delay(3000);
Serial.println("Wait RFID ....");
res=0;
break;
default:
break;
}
}

//
void printWiFiStatus() {
// Drucken Sie die SSID des Netzwerks, mit dem Sie verbunden sind:
Serial.print("SSID:");
Serial.println(WiFi.SSID());
// Drucken Sie die IP-Adresse Ihres WiFi-Shields:
IPAddress ip =WiFi.localIP();
Serial.print( "IP-Adresse:");
Serial.println(ip);
// Ausgabe der empfangenen Signalstärke:
long rssi =WiFi.RSSI();
Serial.print ("Signalstärke (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)) {
//// Daten an den Server senden
// String bilden
// uid pro Zeile
String str ="/firm/get_uid.php?uid=";
für (Byte i =0; ich <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("Verbindung:schließen");
client.println();
// олучение ответа
previos=millis();
for( int i=0;i<40;i++)
response[i]=0;
do {
if(client.available()> 0) {
// get Daten vom Server
s =client.read();
if(s=='#')
f=1;
if(f==1) {
response[x]=s;
x++;
}
Serial.write(s);
}
}
while((millis () - previos) <5000);
if(response[0]='#') {
ret=command(response);
}
Serial.println(response );
//client.stop();
return ret;
}
else {
// keine Verbindung
Serial.println("connection fehlgeschlagen");
//client.stop();
return 3;
}
}
//
void send_temp_to_server() {
client.stop();
if (client.connect(server, 80)) {
//// Daten an den Server senden
// String bilden
// UID pro Zeile
String str="/firm/get_temp.php?uid=";
for (byte i =0; ich <4; i++) {
str+=String(cardUID[i],HEX);
}
str+="&temp="+String(temp);
Serial.print("str =");Serial.println(str);
client.println("GET "+str+" HTTP/1.1");
client.println("Host:freeparkovka.ru");
client.println("User-Agent:ArduinoWiFi/1.1");
client.println("Connection:close");
client.println();
Serial.println( Antwort);
Verzögerung(10); }
else {
// keine Verbindung
Serial.println("Verbindung fehlgeschlagen");
}
}
// Überprüfung von Befehlen, die von kamen the server
int command(char* arr) {
String str(arr);
//
if(str.indexOf("yes")!=-1) {
Rückgabe 1;
}
else if(str.indexOf("no")!=-1) {
Rückgabe 2;
}
Rückgabe 3;
}
// Ausgabe anzeigen
void send_display(String str) {
display.clearDisplay();
display.setCursor(10,10);
display.print(str);
display.display();
}

SCHRITT 9. Seite zur Fernanzeige der Temperaturdaten der Mitarbeiter

Um die an den Server gesendeten Daten anzuzeigen, öffnen Sie die Site-Seite. The contents of the script to output a page file view_temp.php

//
$location="localhost";
$user="********";
$pass="********";
$db_name="********";
// connect db
if(! $db=mysqli_connect($location,$user,$pass,$db_name))
{echo "connect error";}
else
{;}
$query0=" SELECT * FROM temp WHERE uid='".$_GET['uid']."' ";
$rez0=mysqli_query($db,$query0);
$content1.=date('Y-m-d')."

";
$content1.="";
$query1="SELECT * FROM temp WHERE day>=CURDATE() ";
$rez1=mysqli_query($db,$query1); $i=1;
while($row1=mysqli_fetch_assoc($rez1)) {
$content1.="";
$content1.="";
$rez2=mysqli_query($db,"SELECT name FROM users WHERE id =".$row1['id_user']." ");
$row2=mysqli_fetch_assoc($rez2);
$content1.="";
$content1.="";
if($row1['temp']>37.5)
$content1.="";
else
$content1.="";
$content1.="";
$i++;
}
$content1.="
".$i."".$row2['name']."".mb_substr($row1['day'],10,9)."".$row1['temp']."".$row1['temp']."
";
echo $content1;
?>


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 (WEISS); 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(); Verzögerung (2000); Serial.println("Wait RFID ...."); }void loop() { switch(res) { case 0:// send_display("Wait RFID...."); res=1; brechen; 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(); Verzögerung (2000); Serial.println("send uid to server...."); } mfrc522.PICC_HaltA(); mfrc522.PCD_StopCrypto1(); } display.display(); brechen; 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(); Verzögerung (3000); brechen; 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; Verzögerung (2000); } } else { res=0; } brechen; case 4:// send_display("Wait temp...."); send_temp_to_server(); res=5; Verzögerung (2000); brechen; 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(); Verzögerung (3000); Serial.println("Wait RFID ...."); res=0; brechen; Vorgabe: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("Verbindung:schließen"); 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("Verbindung:schließen"); client.println(); Serial.println(response); Verzögerung(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 (WEISS); // 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 (WEISS); 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(); brechen; 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; } brechen; 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(); Verzögerung (3000); Serial.println("Wait RFID ...."); res=1; brechen; 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;?>

Schaltpläne

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

Herstellungsprozess

  1. Zutrittskontrolle mit QR, RFID und Temperaturüberprüfung
  2. Temperaturgesteuerter Lüfter
  3. Temperaturüberwachung auf dem Raspberry Pi
  4. Überwachen der Temperatur mit Raspberry Pi
  5. Temperaturbasiertes Gerätesteuerungssystem mit LM35
  6. Raspberry Pi-Temperatursensor
  7. Pool-Füllkontrolle
  8. Fehler bei der Kühlung industrieller Schalttafelgehäuse
  9. Temperaturkontrolle und -beeinflussung während des Druckgussverfahrens
  10. Temperaturregelung auf der Baustelle – ein Mietleitfaden für Bauprofis