Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Contactloze tijdelijke controle van werknemers op RFID Pass-Through

Componenten en benodigdheden

Arduino MKR1000
× 1
RFID-lezer RC522
× 1
OLED 0,96" 128x32
× 1
MLX90614
× 1

Apps en online services

Arduino IDE
Fritzing

Over dit project

Wanneer medewerkers met RFID-tags toegang krijgen tot de onderneming, meten we bovendien de lichaamstemperatuur van medewerkers met een contactloze infraroodthermometer. Als er sprake is van een verhoogde temperatuur (een van de symptomen van COVID19), wordt de toegang geblokkeerd. Daarnaast gaan alle gegevens (werknemersidentificatie via RFID) naar de website van het bedrijf dat de gegevens bij aankomst op het werk en lichaamstemperatuur (werknemersidentificatie voor UID RFID) tagt.

Kantoor binnenkomen via RFID met temperatuurregeling (test)

Verzonden gegevens uit de cloud bekijken

Het kantoor betreden met RFID met temperatuurregeling

video2

Stap 1. Software-installatie

We gebruiken de Arduino MKR 1000 WiFi Board als controller. We gaan programmeren in de Arduino IDE. Standaard is de Arduino IDE alleen geconfigureerd voor AVR-kaarten. Om met het Arduino MK Wi-Fi 1000-platform te werken, moet u ondersteuning voor de Arduino SAMD (32bit ARM Cortex-M0+) toevoegen in de kaartmanager. In de Board Manager (Extra> Board> Boards manager ), zoek de Arduino SAMD en klik op de knop Installeren.

Nadat de software in de Arduino IDE is geïnstalleerd, ondersteunt het menu Tools  Board de Arduino Zero- en MKR-boards, inclusief het MKR 1000 WiFi Board). Sluit de MKR 1000-kaart met een USB-kabel aan op uw computer. Het stuurprogramma zou automatisch moeten worden geïnstalleerd.

Stap 2. Een IR-temperatuursensor MLX90614 aansluiten op een Arduino MKR 1000 wifi-kaart

De MLX90614 is een infraroodsensor voor contactloze temperatuurmeting. Het kan temperaturen meten in het bereik van -70 tot 380 graden Celsius met een nauwkeurigheid van ongeveer 0,5°C. Ik had MLX90614DAA op voorraad

De sensor maakt gebruik van het I2C-protocol. Contacten toewijzen

Aansluitschema naar de Arduino MKR WiFi Board

Voor het programmeren gebruiken we de bibliotheek Adafruit_MLX90614.h, die moet worden geïnstalleerd via Manager Libraries (Sketch> Include library> Manager Libraries ). Upload een schets naar het Arduino-bord (mlx90614_01.ino)

// Bibliotheken verbinden
#include
#include
// Een instantie van een object maken
Adafruit_MLX90614 mlx =Adafruit_MLX90614();

void setup() {
Serial.begin(9600);
Serial.println("start");
// het starten van de 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);
}

En open de seriële poortmonitor. De omgevingstemperatuur en objecttemperatuur worden elke 3 seconden naar de seriële poort gestuurd

Stap 3. Een OLED-scherm aansluiten op een Arduino MKR 1000 WiFi-kaart

Het project maakt gebruik van een 12x32 monochroom OLED-display in de vorm van een module met de nodige binding op de SSD1306-chip. Deze modules draaien op de I2C-interface. Aansluitschema naar het Arduino-bord

Bij het programmeren gebruiken we de Adafruit SSD1306 bibliotheek. Laden van een schets van de temperatuuruitgang naar het display. We meten de temperatuur elke 3 seconden (mlx90614_02.ino).

// Bibliotheken verbinden
#include
#include
#include
#include
// Een instantie van een object maken
Adafruit_MLX90614 mlx =Adafruit_MLX90614();
Adafruit_SSD1306 display(128, 32, &Wire, -1);

float temp;
unsigned long millis1=0;

void setup() {
Serial.begin(9600);
// startscherm
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.setTextSize(1);
display.setTextColor(WHITE);
// opties display
display.clearDisplay();
display.display();
// de MLX90614-sensor starten
mlx.begin();
// start
Serial.println("start");
}

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

Stap 4. De rc522 RFID-leesmodule aansluiten op het Arduino MKR 1000 WiFi-bord

Er is een grote verscheidenheid aan RFID-tags. Tags zijn actief en passief (zonder ingebouwde stroombron, gevoed door een stroom die in de antenne wordt opgewekt door een signaal van de lezer). Tags werken op verschillende frequenties:LF (125 - 134 kHz), HF (13,56 MHz), UHF (860 - 960 MHz). Apparaten die informatie van tags lezen en er gegevens naar schrijven, worden lezers genoemd. In Arduino-projecten wordt de RFID-RC522-module heel vaak als lezer gebruikt. De module is gemaakt op de MFRC522-chip van het bedrijf NSP, die werkt met RA-tags (op een frequentie van 13,56 MHz).

Verbinding maken met de Arduino MCF 1000 WiFi-kaart via SPI-protocol

Schets van UID-detectie voor een RFID-kaart, temperatuurmeting en berichten over het openen of sluiten van de ingang met uitgang naar de seriële poort (mlx90614_03.ino).

// Bibliotheken verbinden
#include
#include
#include
#include
#include
#include
// Een instantie van een object maken
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) );
// beginweergave
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.setTextSize(1);
display.setTextColor(WHITE);
weergave .clearDisplay();
display.display();
// starten van de MLX90614-sensor
mlx.begin();
// запуск SPI
SPI.begin ();
// initialisatie van MFRC522
mfrc522.PCD_Init();
Serial.println("start");
Serial.println("Wacht RFID ...." );
}

void loop() {
switch(res ) {
geval 1:// wachten op RFID
display.clearDisplay();
display.setCursor(10,10);
display.print(F("Wacht RFID ...."));
// Controleren of de kaart is aangesloten
if ( mfrc522.PICC_IsNewCardPresent()) {
// Kaartinformatie lezen.
if ( mfrc522.PICC_ReadCardSerial()) {
// save UID
Serial.print(F("Card UID:"));
display.setCursor(10,20);
voor (byte i =0; ik <4; i++) {
cardUID[i]=mfrc522.uid.uidByte[i];
Serial.print(cardUID[i],HEX);
display.print(cardUID[i], HEX);
}
Serial.println();
Serial.println("Wachttemp....");
res=3;
}
mfrc522.PICC_HaltA();
mfrc522.PCD_StopCrypto1();
}
display.display();
pauze;
geval 2:// verzoek naar de UID-server vanuit de database
pauze;
geval 3:// wachten op temperatuurmeting
delay(2000);
display.clearDisplay();
display .setCursor(10,10);
display.println(F("Wachttemp...."));
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;
}
pauze;
geval 4:// temperatuurgegevens naar de server verzenden
pauze;
geval 5:// openen of sluiten
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 hoog!!!");
}
display.display();
delay(3000);
Serial.println("Wacht RFID ....");
res=1;
pauze;
standaard:
pauze;
}
}

Stap 5. Het Arduino MKR 1000 WiFi-bord verbinden met internet

Om de Arduino MKR1000 met een Wi-Fi-netwerk te verbinden, gebruiken we de WiFi101-bibliotheek, die we zullen installeren met behulp van de bibliotheekmanager (Sketch  Include library  Manager Libraries).

Download een schets van het aansluiten van de Arduino MK R 1000 Wi-Fi Board op het benodigde toegangspunt. Upload een voorbeeld van de connectWithWPA.ino bibliotheek aan het bord door de gegevens voor uw WiFi-hotspot in te voeren op het tabblad:

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

Nadat je de schets hebt gedownload, open je de seriële poortmonitor, waar je het proces van het verbinden van het Arduino MKR1000 wifi-bord met het toegangspunt kunt bekijken.

Als de verbinding succesvol is, ga je gang.

Stap 6. Een database met werknemers maken op de website van het bedrijf en een database voor het verzamelen van dagelijkse temperatuurmetingen bij de ingang

Een database maken op hosting (MySQL) en twee tabellen erin:

  • gebruikers - werknemersgegevens en hun uid;
  • temp - voor het verzamelen van gegevens van de aan de ingang gemeten lichaamstemperatuur.

Nu maken we op de hosting 2 scripts voor het verwerken van gegevens verzonden door Arduino MKR 1000 WiFi. Script get_uid.php controleert op een ID in de database en keert terug in het antwoord:

#nee – als de uid niet in de database staat

#ja; - als de uid in de database staat

De inhoud van het script get_uid.php

//
$location="localhost";
$user="***************";
$pass="***********";
$db_name="***********";
// connect db
if(! $db=mysqli_connect($location,$user,$pass,$db_name))
{echo "connect error";}
else
{;}
$query0=" SELECTEER * FROM gebruikers 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";
}
?>

U kunt het script testen door verzoeken te verzenden vanuit de browser:

Script get_temp.php stuurt de temperatuur van de medewerker naar de database

De inhoud van het script get_temp.php

//
$location="localhost";
$user="***************";
$pass="***********";
$db_name="***********";
// connect db
if(! $db=mysqli_connect($location,$user,$pass,$db_name))
{echo "connect error";}
else
{;}
$query0=" SELECTEER * FROM gebruikers 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']."',
day='".date('Ymd H:i:s')."' ";
mysqli_query($db,$query1);
echo "#yes";
}
else {
echo "#no";
}
?>

U kunt het script testen door verzoeken te verzenden vanuit de browser:

STAP 7. Gegevens verzenden van de Arduino MKR 1000 WiFi naar de website van het bedrijf

Laten we 2 functies schrijven:

send_uid_to_server () - de uid naar de server sturen;

send_temp_to_server () - de temperatuur naar de server sturen.

Functie 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)) {
//// gegevens naar de server verzenden
// een string vormen
// uid per regel
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(" Verbinding:close");
client.println();
// получение ответа
previos=millis();
for(int i=0;i<40;i++ )
response[i]=0;
do {
if(client.available()> 0) {
// gegevens ophalen van de 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(respons);
//client.stop();
return ret;
}
else {
// geen verbinding
Serial.println("verbinding mislukt ");
//client.stop();
return 3;
}
}

Functie send_temp_to_server()

void send_temp_to_server() {
client.stop();
if (client.connect(server, 80)) {
//// gegevens naar de server verzenden
// een string vormen
// uid per regel
String str="/firm/get_temp.php?uid=";
voor (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("Verbinding:sluiten");
client.println();
Serieel. println(reactie);
vertraging(10); }
else {
// geen verbinding
Serial.println("verbinding mislukt");
}
}

STAP 8. Een relais toevoegen om de ingang in of uit te schakelen

Een relais toevoegen om de toegang tot de onderneming in / uit te schakelen, afhankelijk van de temperatuurwaarde. Aansluitschema:

En voeg aan de code toe dat het relais wordt in- of uitgeschakeld om de ingang te openen of te sluiten, afhankelijk van de temperatuurgegevens.

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

En de hele schetscode ((mlx90614_07.ino))

// Bibliotheken verbinden
#include
#include
#include
#include
#include
#include
#include
// Objectinstanties maken
Adafruit_MLX90614 mlx =Adafruit_MLX90614();
Adafruit_SSD1306 display(128, 32, &Wire, -1);
MFRC522 mfrc522(7, 6);
WiFiClient-client;
// uw netwerk-SSID (naam)
// en wachtwoord (WPA)
char ssid[] ="my_DLink";
char pass[] ="********";
// naam adres
char server[] ="www.freeparkovka.ru";
int pinRelay=5;
int status =WL_IDLE_STATUS;
char antwoord[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 van de sensor MLX90614
mlx.begin();
// запуск SPI
SPI.begin();
// initialisatie van MFRC522
mfrc522.PCD_Init();
Serial.println("verbind WiFi ...");
display.setCursor(10,10);
display.print (F("WiFi aansluiten"));
display.display();
// controleer op de aanwezigheid van het schild:
if (WiFi.status() ==WL_NO_SHIELD) {
Serial.println("WiFi-schild niet aanwezig");
// ga niet verder:
while (true);
}
// probeer verbinding te maken naar wifi-netwerk:
while (status !=WL_CONNECTED) {
Serial.print("Poging om verbinding te maken met WPA SSID:");
Serial.println(ssid);
// Maak verbinding met WPA/WPA2-netwerk:
status =WiFi.begin(ssid, pass);
// wacht 5 seconden voor verbinding:
vertraging (5000);
}
display.setCursor( 30,20);
display.print(F("ok"));
display.display();
printWiFiStatus();
delay(2000);
Serial.println("Wacht RFID ....");
}

void loop() {
switch(res) {
geval 0://
send_display("Wacht RFID....");
res=1;
pauze;
geval 1:// wachten op RFID
// Controleer of de kaart is aangeslotenа
if ( mfrc522.PICC_IsNewCardPresent()) {
// Kaartinfo lezen
if ( mfrc522.PICC_ReadCardSerial()) {
// save UID
Serial.print(F("Card UID:"));
display.setCursor(10,20);
for (byte i =0; ik <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);
Serieel .println("stuur uid naar server....");
}
mfrc522.PICC_HaltA();
mfrc522.PCD_StopCrypto1();
}
weergave .display();
break;
geval 2:// verzoek aan de UID-server vanuit de database
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("onjuist"));
}
else {
res=0;
display.setCursor(10,0);
display.print(F("error 404"));
}
display.display();
vertraging(3000);
pauze;
geval 3:// wachten op temperatuurmeting
if(millis()-millis3<10000) {
sen d_display("Wachttemp....");
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;
}
pauze;
geval 4:/ / temperatuurgegevens naar de server verzenden
send_display("Wachttemp....");
send_temp_to_server();
res=5;
delay(2000);
breken;
geval 5:// openen of sluiten
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 hoog!!!"));
Serial.println("CLOSE");
Serial.print ln("Temp hoog!!!");
digitalWrite(pinRelay,LOW);
}
display.display();
delay(3000);
Serial.println("Wacht RFID ....");
res=0;
pauze;
standaard:
pauze;
}
}

//
void printWiFiStatus() {
// print de SSID van het netwerk waarmee je bent verbonden:
Serial.print("SSID:");
Serial.println(WiFi.SSID());
// print het IP-adres van uw WiFi-schild:
IPAddress ip =WiFi.localIP();
Serial.print( "IP-adres:");
Serial.println(ip);
// print de ontvangen signaalsterkte:
long rssi =WiFi.RSSI();
Serial.print ("signaalsterkte (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)) {
//// gegevens naar de server verzenden
// een string vormen
// uid per regel
String str ="/firm/get_uid.php?uid=";
voor (byte i =0; ik <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("Verbinding:sluiten");
client.println();
// олучение ответа
previos=millis();
for( int i=0;i<40;i++)
response[i]=0;
do {
if(client.available()> 0) {
// get gegevens van de 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 {
// geen verbinding
Serial.println("verbinding mislukt");
//client.stop();
return 3;
}
}
//
void send_temp_to_server() {
client.stop();
if (client.connect(server, 80)) {
//// gegevens naar de server verzenden
// een string vormen
// uid per regel
String str="/firm/get_temp.php?uid=";
voor (byte i =0; ik <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("Verbinding:sluiten");
client.println();
Serial.println( reactie);
vertraging(10); }
else {
// geen verbinding
Serial.println("verbinding mislukt");
}
}
// controleopdrachten die afkomstig zijn van de server
int commando(char* arr) {
String str(arr);
//
if(str.indexOf("yes")!=-1) {
return 1;
}
else if(str.indexOf("no")!=-1) {
return 2;
}
return 3;
}
// display output
void send_display(String str) {
display.clearDisplay();
display.setCursor(10,10);
display.print(str);
display.display();
}

STAP 9. Pagina voor het op afstand bekijken van temperatuurgegevens van werknemers

Open de sitepagina om de gegevens te bekijken die naar de server zijn verzonden. De inhoud van het script om een ​​paginabestand uit te voeren 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(WIT); display.clearDisplay(); weergave.weergave(); // MLX90614 mlx.begin(); // SPI SPI.begin(); // MFRC522 mfrc522.PCD_Init(); Serial.println("connect WiFi ...."); display.setCursor(10,10); display.print(F("Connect WiFi")); weergave.weergave(); // check for the presence of the shield:if (WiFi.status() ==WL_NO_SHIELD) { Serial.println("WiFi shield not present"); // ga niet verder:while (true); } // attempt to connect to WiFi network:while ( status !=WL_CONNECTED) { Serial.print("Attempting to connect to WPA SSID:"); Serieel.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")); weergave.weergave(); printWiFiStatus(); vertraging (2000); Serial.println("Wait RFID ...."); }void loop() { switch(res) { case 0:// send_display("Wait RFID...."); res=1; pauze; 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); } Serieel.println(); res=2; weergave.weergave(); vertraging (2000); Serial.println("send uid to server...."); } mfrc522.PICC_HaltA(); mfrc522.PCD_StopCrypto1(); } weergave.weergave(); pauze; 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")); } weergave.weergave(); vertraging (3000); pauze; case 3:// if(millis()-millis3<10000) { send_display("Wait temp...."); temp=mlx.readObjectTempC(); display.setCursor(10,20); display.print(temp); display.print(F(" *C")); weergave.weergave(); if(temp>
34.0 &&temp<42.0) { res=4; vertraging (2000); } } else { res=0; } pauze; case 4:// send_display("Wait temp...."); send_temp_to_server(); res=5; vertraging (2000); pauze; 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); } weergave.weergave(); vertraging (3000); Serial.println("Wait RFID ...."); res=0; pauze; default:break; }}//void printWiFiStatus() { // print the SSID of the network you're attached to:Serial.print("SSID:"); Seriële.println(WiFi.SSID()); // druk het IP-adres van uw WiFi-schild af:IPAddress ip =WiFi.localIP(); Serial.print("IP-adres:"); Serieel.println(ip); // print de ontvangen signaalsterkte:lange rssi =WiFi.RSSI(); Serial.print("signaalsterkte (RSSI):"); Seriële.print(rssi); Serial.println(" dBm");}// int send_uid_to_server() { int ret=3; unsigned long previos; int x=0;int f=0; char s; klant.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("Verbinding:sluiten"); klant.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("Verbinding:sluiten"); klant.println(); Serial.println(response); vertraging(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(WIT); // display.clearDisplay(); weergave.weergave(); // 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")); weergave.weergave(); // 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(WIT); display.clearDisplay(); weergave.weergave(); // 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); } Serieel.println(); Serial.println("Wait temp...."); res=3; } mfrc522.PICC_HaltA(); mfrc522.PCD_StopCrypto1(); } weergave.weergave(); pauze; 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")); weergave.weergave(); if(temp>
34.0 &&temp<42.0) { res=5; } pauze; 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!!!"); } weergave.weergave(); vertraging (3000); Serial.println("Wait RFID ...."); res=1; pauze; 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;?>

Schema's

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

Productieproces

  1. Birth Control Pil
  2. Toegangscontrole met QR, RFID en temperatuurverificatie
  3. Temperatuurgestuurde ventilator
  4. Temperatuurbewaking op de Raspberry Pi
  5. Temperatuur bewaken met Raspberry Pi
  6. Temperatuurgebaseerd apparaatbesturingssysteem met LM35
  7. Raspberry Pi-temperatuursensor
  8. Pool Fill Control
  9. Fouten bij het koelen van industriële bedieningspaneelbehuizingen
  10. Temperatuurcontrole en invloed tijdens het spuitgieten
  11. Temperatuurregeling op de bouwplaats — een verhuurgids voor bouwprofessionals