RFID Toegangssysteem met Contactloze Temperatuurmeting voor Veilige Medewerkerstoegang
Onderdelen en Benodigdheden
| Onderdeel | Aantal |
|---|---|
| Arduino MKR1000 (WiFi) | 1 |
| RFID Reader RC522 | 1 |
| OLED 0.96" 128x32 (SSD1306) | 1 |
| MLX90614 Infrarood Temperatuursensor | 1 |
Apps & Online Services
- Arduino IDE
- Fritzing (voor schema's)
Over dit Project
Wanneer medewerkers het bedrijf binnenkomen via RFID-tags, meet het systeem contactloos de lichaamstemperatuur. Bij verhoogde temperatuur (COVID-19 symptoom) wordt toegang geweigerd. Alle data (medewerker identificatie via RFID UID, aankomsttijd, temperatuur) worden naar de bedrijfswebsite gestuurd voor monitoring.



Stap 1: Software Installatie
We gebruiken de Arduino MKR 1000 WiFi Board. Standaard ondersteunt Arduino IDE alleen AVR-borden. Voor MKR1000 voeg je Arduino SAMD (32-bit ARM Cortex-M0+) toe via Tools → Board → Boards Manager → zoek "Arduino SAMD" → Install.

Na installatie verschijnen MKR-borden onder Tools → Board. Sluit MKR1000 aan via USB; drivers installeren automatisch.

Stap 2: MLX90614 IR Temperatuursensor Aansluiten
De MLX90614 meet contactloos temperatuur (-70 tot +380°C, nauwkeurigheid ~0.5°C). Gebruikt I2C-protocol.



Installeer bibliotheek Adafruit_MLX90614.h via Sketch → Include Library → Manage Libraries. Upload testsketch mlx90614_01.ino:
#include <Wire.h>
#include <Adafruit_MLX90614.h>
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);
}
Open Serial Monitor: omgevingstemperatuur en objecttemperatuur elke 3 seconden.

Stap 3: OLED Display Aansluiten
128x32 monochroom OLED module met SSD1306 chip, I2C-interface.

Bibliotheek: Adafruit_SSD1306. Sketch mlx90614_02.ino meet temperatuur elke 3 seconden en toont op display.
#include <Wire.h>
#include <Adafruit_MLX90614.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
Adafruit_MLX90614 mlx = Adafruit_MLX90614();
Adafruit_SSD1306 display(128, 32, &Wire, -1);
float temp;
unsigned long millis1 = 0;
void setup() {
Serial.begin(9600);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.setTextSize(1);
display.setTextColor(WHITE);
display.clearDisplay(); display.display();
mlx.begin();
Serial.println("start");
}
void loop() {
if (millis() - millis1 >= 3000) {
display.clearDisplay();
display.setCursor(10, 10); display.println(F("Wait temp...."));
temp = mlx.readObjectTempC();
display.setCursor(10, 20); display.print(temp); display.print(F(" *C"));
display.display();
millis1 = millis();
}
}

Stap 4: RC522 RFID Reader Aansluiten
RFID-tags: actief/passief, frequenties LF/HF/UHF. RC522 module (MFRC522 chip, 13.56 MHz) is standaard voor Arduino.


Sketch mlx90614_03.ino: UID detectie, temperatuurmeting, open/dichte berichten op Serial en OLED.
#include <Wire.h>
#include <Adafruit_MLX90614.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <SPI.h>
#include <MFRC522.h>
Adafruit_MLX90614 mlx = Adafruit_MLX90614();
Adafruit_SSD1306 display(128, 32, &Wire, -1);
MFRC522 mfrc522(7, 6); // SS=7, RST=6
byte cardUID[4] = {0,0,0,0};
int res = 1;
float temp;
unsigned long millis1 = 0;
void setup() {
Serial.begin(9600);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.setTextSize(1); display.setTextColor(WHITE);
display.clearDisplay(); display.display();
mlx.begin();
SPI.begin();
mfrc522.PCD_Init();
Serial.println("start"); Serial.println("Wait RFID ....");
}
void loop() {
switch (res) {
case 1: // Wacht op RFID
display.clearDisplay();
display.setCursor(10, 10); display.print(F("Wait RFID...."));
if (mfrc522.PICC_IsNewCardPresent()) {
if (mfrc522.PICC_ReadCardSerial()) {
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(); break;
case 3: // Wacht op temperatuur
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;
break;
case 5: // Open of dicht
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(); delay(3000);
Serial.println("Wait RFID ...."); res = 1; break;
}
}


Stap 5: MKR1000 Verbinden met Internet
Gebruik WiFi101 bibliotheek (Library Manager). Upload voorbeeld connectWithWPA.ino met je WiFi-gegevens:
#define SECRET_SSID "mijn_SSID"
#define SECRET_PASS "mijn_wachtwoord"


Stap 6: Database aanmaken op Bedrijfswebsite
Maak MySQL database met twee tabellen:
- users - medewerkerdata en hun UID
- temp - dagelijkse temperatuurmettingen bij ingang


get_uid.php controleert UID in database, retourneert #no of #yes;naam.
<?php
$location="localhost"; $user="..."; $pass="..."; $db_name="...";
if(! $db=mysqli_connect($location,$user,$pass,$db_name)) {echo "connect error";} else {;}
$query0=" SELECT * FROM users WHERE uid='".$_GET['uid']."' ";
$rez0=mysqli_query($db,$query0);
if(mysqli_num_rows($rez0)>0) {
$row0=mysqli_fetch_assoc($rez0);
echo "#yes;".$row0['name'];
} else { echo "#no"; }
?>
get_temp.php slaat temperatuur op in database.
<?php
// ... zelfde db connectie ...
$query0=" SELECT * FROM users WHERE uid='".$_GET['uid']."' ";
$rez0=mysqli_query($db,$query0);
if(mysqli_num_rows($rez0)>0) {
$row0=mysqli_fetch_assoc($rez0);
$query1=" INSERT INTO temp SET id_user='".$row0['id']."', temp='".$_GET['temp']."', day='".date('Y-m-d H:i:s')."' ";
mysqli_query($db,$query1);
echo "#yes";
} else { echo "#no"; }
?>
Stap 7: Data Versturen van MKR1000 naar Website
Twee functies: send_uid_to_server() en send_temp_to_server(). Volledige code in bijlagen.
Stap 8: Relais voor Toegangscontrole
Relais schakelt de ingang open/dicht op basis van temperatuur.

if (temp < 37.5) { // OPEN
digitalWrite(pinRelay, HIGH);
} else { // CLOSE
digitalWrite(pinRelay, LOW);
}
Complete sketch mlx90614_07.ino in bijlagen.
Stap 9: Webpagina voor Remote Monitoring
view_temp.php toont temperatuurdata per medewerker (rood = >37.5°C).
<?php
// ... db connectie ...
$query1="SELECT * FROM temp WHERE day >= CURDATE() ";
$rez1=mysqli_query($db,$query1); $i=1;
while($row1=mysqli_fetch_assoc($rez1)) {
$content1.="<tr><td>".$i."</td>";
$rez2=mysqli_query($db,"SELECT name FROM users WHERE id=".$row1['id_user']);
$row2=mysqli_fetch_assoc($rez2);
$content1.="<td>".$row2['name']."</td>";
$content1.="<td>".mb_substr($row1['day'],10,9)."</td>";
if($row1['temp']>37.5) $content1.="<td style='background-color:red'>".$row1['temp']."</td>";
else $content1.="<td>".$row1['temp']."</td>";
$content1.="</tr>"; $i++;
}
echo $content1;
?>

Productieproces
- Temperatuurcontrole oplossingen voor bouwplaatsen: Uitgebreide verhuurgids
- Anticonceptiepil: Geschiedenis, Voordelen, Risico's en Productie
- Geïntegreerde QR, RFID en Temperatuurverificatie Toegangscontrolesysteem
- Temperatuur-gecontroleerde Ventilator: DIY Relais Systeem Voor Media Kast Koeling
- Professionele temperatuurbewaking met Raspberry Pi en DS18B20
- Accurate temperatuurbewaking in een serverkast met Raspberry Pi
- LM35-gebaseerd temperatuurregelsysteem met AT89S52 microcontroller
- Een Raspberry Pi thuistemperatuurmonitor bouwen met MCP9808, InfluxDB & Grafana
- Geautomatiseerd Zwembadvul- en Monitoringssysteem
- Veelvoorkomende Koelfouten in Industriële Bedieningspanelen: Oververhitting en Apparatuurstoring Voorkomen
- Temperatuurcontrole in drukgieten beheersen voor optimale kwaliteit