Manufaktur industri
Industri Internet of Things | bahan industri | Pemeliharaan dan Perbaikan Peralatan | Pemrograman industri |
home  MfgRobots >> Manufaktur industri >  >> Manufacturing Technology >> Proses manufaktur

Sistem RFID Lewat dengan Pemindaian Suhu Kontakless untuk Akses Karyawan Aman

Komponen dan Perlengkapan

KomponenJumlah
Arduino MKR10001
Pembaca RFID RC5221
OLED 0.96 inci 128x321
MLX906141

Aplikasi dan Layanan Online

Tentang Proyek

Ketika karyawan mengakses perusahaan menggunakan tag RFID, kami juga mengukur suhu tubuh karyawan dengan termometer inframerah non-kontak. Jika ada suhu yang meningkat (salah satu gejala COVID-19), akses diblokir. Selain itu, semua data (identifikasi karyawan melalui RFID) dikirim ke situs web perusahaan yang memantau waktu kedatangan kerja dan suhu tubuh (identifikasi karyawan untuk UID RFID) tag.

Langkah 1. Instalasi Perangkat Lunak

Kami menggunakan Papan WiFi Arduino MKR 1000 sebagai kontroler. Kami akan memprogram di Arduino IDE. Secara default, Arduino IDE dikonfigurasi hanya untuk papan AVR. Untuk bekerja dengan platform Arduino MK Wi-Fi 1000, Anda perlu menambahkan dukungan untuk Arduino SAMD (32bit ARM Cortex-M0+) di Manajer Papan. Di Manajer Papan (Alat > Papan > Manajer Papan), cari Arduino SAMD dan klik tombol Instal.

Setelah menginstal perangkat lunak di Arduino IDE, menu Alat  Papan akan mendukung papan Arduino Zero dan MKR, termasuk Papan WiFi MKR 1000. Hubungkan papan MKR 1000 ke komputer Anda menggunakan kabel USB. Driver seharusnya terinstal secara otomatis.

Langkah 2. Menghubungkan Sensor Suhu Inframerah MLX90614 ke Papan WiFi Arduino MKR 1000

MLX90614 adalah sensor inframerah untuk pengukuran suhu non-kontak. Ini dapat mengukur suhu dalam rentang -70 hingga 380 derajat Celsius dengan akurasi sekitar 0,5°C. Saya memiliki MLX90614DAA di stok.

Sensor ini menggunakan Protokol I2C. Tetapkan kontak sebagai berikut:

Diagram koneksi ke Papan WiFi Arduino MKR:

Untuk pemrograman, kami menggunakan perpustakaan Adafruit_MLX90614.h, yang harus diinstal melalui Manajer Perpustakaan (Sketsa > Sertakan perpustakaan > Manajer Perpustakaan). Unggah sketsa ke Papan Arduino (mlx90614_01.ino):

// Menghubungkan perpustakaan
#include <Wire.h>
#include <Adafruit_MLX90614.h>
// Membuat instance objek
Adafruit_MLX90614 mlx = Adafruit_MLX90614();

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

Buka pemantau port serial. Suhu lingkungan dan suhu objek dikeluarkan ke port serial setiap 3 detik.

Langkah 3. Menghubungkan Layar OLED ke Papan WiFi Arduino MKR 1000

Proyek ini menggunakan layar OLED monokrom 12x32 dalam bentuk modul dengan pengikat yang diperlukan pada chip SSD1306. Modul-modul ini berjalan pada antarmuka I2C. Diagram koneksi ke Papan Arduino:

Saat memrogram, kami menggunakan perpustakaan Adafruit SSD1306. Memuat sketsa untuk keluaran suhu ke layar. Kami mengukur suhu setiap 3 detik (mlx90614_02.ino):

// Menghubungkan perpustakaan
#include <Wire.h>
#include <Adafruit_MLX90614.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
// Membuat instance objek
Adafruit_MLX90614 mlx = Adafruit_MLX90614();
Adafruit_SSD1306 display(128, 32, &Wire, -1);

float temp;
unsigned long millis1=0;

void setup() {
  Serial.begin(9600);
  // memulai layar
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  display.setTextSize(1);
  display.setTextColor(WHITE);
  // opsi layar
  display.clearDisplay();
  display.display();
  // memulai sensor MLX90614
  mlx.begin();
  // mulai
  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();
  }
}

Langkah 4. Menghubungkan Modul Pembaca RFID RC522 ke Papan WiFi Arduino MKR 1000

Ada berbagai macam tag RFID. Tag aktif dan pasif (tanpa sumber daya bawaan, didayai oleh arus yang diinduksi dalam antena oleh sinyal dari pembaca). Tag bekerja pada frekuensi berbeda: LF (125 - 134 kHz), HF (13.56 MHz), UHF (860 - 960 MHz). Alat yang membaca informasi dari tag dan menulis data ke dalamnya disebut pembaca. Dalam proyek Arduino, modul RFID-RC522 sangat sering digunakan sebagai pembaca. Modul ini dibuat pada chip MFRC522 dari perusahaan NSP, yang menyediakan kerja dengan tag RA (pada frekuensi 13.56 MHz).

Menghubungkan ke Papan WiFi MKR 1000 melalui Protokol SPI:

Sketsa deteksi UID untuk kartu RFID, pengukuran suhu, dan pesan tentang pembukaan atau penutupan input dengan keluaran ke port serial (mlx90614_03.ino):

// Menghubungkan perpustakaan
#include <Wire.h>
#include <Adafruit_MLX90614.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <SPI.h>
#include <MFRC522.h>
// Membuat instance objek
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);
  // memulai layar
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.clearDisplay();
  display.display();
  // memulai sensor MLX90614
  mlx.begin();
  // mulai SPI
  SPI.begin();
  // inisialisasi MFRC522
  mfrc522.PCD_Init();
  Serial.println("start");
  Serial.println("Wait RFID ....");
}

void loop() {
  switch(res) {
    case 1: // menunggu RFID
      display.clearDisplay();
      display.setCursor(10,10);
      display.print(F("Wait RFID...."));
      // Memeriksa apakah kartu diletakkan
      if ( mfrc522.PICC_IsNewCardPresent()) {
        // Membaca info kartu
        if ( mfrc522.PICC_ReadCardSerial()) {
          // simpan 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();
      break;
    case 3: // menunggu pengukuran suhu
      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: // buka atau tutup
      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;
    default:
      break;
  }
}

Langkah 5. Menghubungkan Papan WiFi Arduino MKR 1000 ke Internet

Untuk menghubungkan Arduino MKR1000 ke jaringan Wi-Fi, kami akan menggunakan perpustakaan WiFi101, yang akan kami instal menggunakan Manajer Perpustakaan (Sketsa  Sertakan perpustakaan  Manajer Perpustakaan).

Unduh sketsa untuk menghubungkan Papan WiFi Arduino MKR 1000 ke titik akses yang diperlukan. Unggah contoh dari perpustakaan connectWithWPA.ino ke Papan dengan memasukkan data untuk hotspot WiFi Anda di tab:

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

Setelah mengunduh sketsa, buka pemantau port serial, tempat Anda dapat memantau proses menghubungkan Papan WiFi Arduino MKR1000 ke titik akses.

Jika koneksi berhasil, lanjutkan.

Langkah 6. Membuat Basis Data Karyawan di Situs Web Perusahaan dan Basis Data untuk Mengumpulkan Pembacaan Suhu Harian di Pintu Masuk

Membuat basis data di hosting (MySQL) dan dua tabel di dalamnya:

Sekarang di hosting kami membuat 2 skrip untuk memproses data yang dikirim oleh Arduino MKR 1000 WiFi. Skrip get_uid.php memeriksa ID di basis data dan mengembalikan dalam respons:

• #no – jika uid tidak ada di basis data

• #yes;<name> - jika uid ada di basis data

Isi skrip get_uid.php

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

Anda dapat menguji skrip dengan mengirim permintaan dari browser.

Skrip get_temp.php mengirim suhu karyawan ke basis data

Isi skrip get_temp.php

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

STEP 7. Mengirim Data dari Papan WiFi Arduino MKR 1000 ke Situs Web Perusahaan

Mari kita tulis 2 fungsi:

• send_uid_to_server () - mengirim uid ke server;

• send_temp_to_server () - mengirim suhu ke 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)) {
    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) {
        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);
    return ret;
  } else {
    Serial.println("connection failed");
    return 3;
  }
}

void send_temp_to_server() {
  client.stop();
  if (client.connect(server, 80)) {
    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(response);
    delay(10);
  } else {
    Serial.println("connection failed");
  }
}

STEP 8. Menambahkan Relay untuk Mengaktifkan / Menonaktifkan Input

Menambahkan relay untuk mengaktifkan / menonaktifkan masuk ke perusahaan, tergantung pada nilai suhu. Diagram koneksi:

Dan tambahkan ke kode mengaktifkan/menonaktifkan relay untuk membuka atau menutup input, tergantung pada data suhu.

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 high!!!");
  digitalWrite(pinRelay,LOW);
}

STEP 9. Halaman untuk Melihat Jarak Jauh Data Suhu Karyawan

Untuk melihat data yang dikirim ke server, buka halaman situs. Isi skrip untuk mengeluarkan halaman file view_temp.php

<?php
$location="localhost";
$user="********";
$pass="********";
$db_name="********";
if(! $db=mysqli_connect($location,$user,$pass,$db_name)){echo "connect error";}
$query0=" SELECT * FROM temp WHERE uid='".$_GET['uid']."' ";
$rez0=mysqli_query($db,$query0);
$content1.=date('Y-m-d')."<br><br>";
$content1.="<table>";
$query1="SELECT * FROM temp WHERE day >= CURDATE() ";
$rez1=mysqli_query($db,$query1); $i=1;
while($row1=mysqli_fetch_assoc($rez1)) {
  $content1.="<tr>";
  $content1.="<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++;
}
$content1.="</table>";
echo $content1;
?>

Kode

// Kode lengkap Arduino untuk sistem RFID dan pemindaian suhu
// Termasuk WiFi101, MFRC522, MLX90614, SSD1306, dan komunikasi server PHP.
// Lihat sketsa lengkap di atas dalam setiap langkah proyek.

Skematik

File skematik Fritzing tersedia dalam dokumen proyek untuk referensi rangkaian.

Proses manufaktur

  1. Sistem Kontrol Akses Terintegrasi QR, RFID, dan Verifikasi Suhu
  2. Kipas Pendingin Mengontrol Suhu: Sistem Relay DIY untuk Pendingin Meja Media
  3. Pemantauan Suhu Raspberry Pi Profesional dengan DS18B20
  4. Pemantauan Suhu Akurat di Lemari Server dengan Raspberry Pi
  5. Sistem Kontrol Suhu Berbasis LM35 dengan Mikrokontroler AT89S52
  6. Membangun Pemantau Suhu Rumah Raspberry Pi dengan MCP9808, InfluxDB & Grafana
  7. Sistem Pengisian dan Pemantauan Kolam Renang Otomatis
  8. Kesalahan Pendinginan Umum di Panel Kontrol Industri: Menghindari Overheating dan Kegagalan Peralatan
  9. Menguasai Kontrol Suhu dalam Die Casting untuk Kualitas Optimal
  10. Solusi Kontrol Suhu untuk Situs Konstruksi: Panduan Penyewaan Lengkap