Arduino ile Gelişmiş Personel Takip Sistemi (PDKS) Yapımı: Kurumsal Çözümler ve Eğitim Kurumları İçin Uygulamalar

Günümüzde kurumsal yapıların ve eğitim kurumlarının en temel ihtiyaçlarından biri personel ve öğrenci devam takip sistemleridir. Bu sistemler, çalışanların mesai saatlerini, öğrencilerin devamsızlık durumlarını ve binaya giriş-çıkış kayıtlarını düzenli ve güvenilir bir şekilde tutmaya olanak sağlar. Geleneksel yöntemlerle bu takip işlemleri hem zaman alıcı hem de hata payı yüksek süreçlerdir. Arduino tabanlı personel takip sistemleri, bu ihtiyaçlara maliyet etkin, özelleştirilebilir ve güvenilir çözümler sunmaktadır.

Bu makalede, “sezerduino” projemiz kapsamında geliştirdiğimiz, Arduino temelinde çalışan personel takip sistemi yapımını adım adım ele alacağız. Bu sistem, hem kurumsal yapılar hem de okullar için etkili bir devamsızlık ve giriş-çıkış kontrol mekanizması oluşturmaktadır.

Arduino Tabanlı Personel Takip Sistemi Nedir?

Arduino tabanlı personel takip sistemi (PDKS), çalışanların veya öğrencilerin kuruma giriş-çıkışlarını elektronik olarak izleyen, kaydeden ve raporlayan entegre bir sistemdir. Bu sistem:

  • RFID kart okuyucular
  • Parmak izi sensörleri
  • LCD ekranlar
  • WiFi modülleri
  • SD kart modülleri
  • RTC (Real Time Clock) modülleri

gibi bileşenlerden oluşur ve Arduino mikrodenetleyici kartı bu bileşenleri koordine eder.

Sistem Bileşenleri ve İhtiyaç Listesi

Arduino tabanlı bir personel takip sistemi kurmak için aşağıdaki bileşenlere ihtiyacınız olacaktır:

  1. Arduino Uno/Mega (Sezerduino özel Arduino kartımız bu projeye optimize edilmiştir)
  2. RFID-RC522 Modülü (Kart okuyucu)
  3. Mifare 1K RFID Kartlar (Personel/öğrenci kartları)
  4. 16×2 LCD Ekran ve I2C modülü
  5. ESP8266 WiFi Modülü (Verileri buluta aktarmak için)
  6. DS3231 RTC Modülü (Hassas zaman takibi)
  7. SD Kart Modülü ve SD Kart (Veri depolama)
  8. 5V Röle Modülü (Kapı kilidi kontrolü için – opsiyonel)
  9. Breadboard ve Jumper Kablolar
  10. 5V Güç Adaptörü

Kurulum Adımları

1. Donanım Bağlantıları

RFID-RC522 Modülü Bağlantısı

RFID modülü, Arduino’ya aşağıdaki şekilde bağlanır:

  • SDA -> Arduino 10. pin
  • SCK -> Arduino 13. pin
  • MOSI -> Arduino 11. pin
  • MISO -> Arduino 12. pin
  • GND -> Arduino GND
  • RST -> Arduino 9. pin
  • 3.3V -> Arduino 3.3V

LCD Ekran Bağlantısı (I2C ile)

  • SDA -> Arduino A4
  • SCL -> Arduino A5
  • VCC -> Arduino 5V
  • GND -> Arduino GND

RTC Modülü Bağlantısı

  • SDA -> Arduino A4 (LCD ile paylaşılabilir)
  • SCL -> Arduino A5 (LCD ile paylaşılabilir)
  • VCC -> Arduino 5V
  • GND -> Arduino GND

SD Kart Modülü Bağlantısı

  • MOSI -> Arduino 11. pin (RFID ile paylaşılabilir)
  • MISO -> Arduino 12. pin (RFID ile paylaşılabilir)
  • SCK -> Arduino 13. pin (RFID ile paylaşılabilir)
  • CS -> Arduino 4. pin
  • VCC -> Arduino 5V
  • GND -> Arduino GND

ESP8266 WiFi Modülü Bağlantısı

  • RX -> Arduino TX (Softserial ile)
  • TX -> Arduino RX (Softserial ile)
  • VCC -> Arduino 3.3V
  • GND -> Arduino GND
  • CH_PD -> Arduino 3.3V

2. Yazılım Kurulumu

Aşağıdaki Arduino kütüphanelerini Arduino IDE’ye yüklemeniz gerekecektir:

  • SPI.h (Arduino ile birlikte gelir)
  • MFRC522.h (RFID modülü için)
  • LiquidCrystal_I2C.h (LCD ekran için)
  • SD.h (SD kart için)
  • RTClib.h (RTC modülü için)
  • SoftwareSerial.h (ESP8266 ile iletişim için)

ÇALIŞMA VİDEOSU

 Gerekli Kodlar                              

				
					#include <SPI.h>
#include <MFRC522.h>
#include <LiquidCrystal_I2C.h>
#include <SD.h>
#include <Wire.h>
#include <RTClib.h>
#include <SoftwareSerial.h>

#define SS_PIN 10
#define RST_PIN 9
#define CS_PIN 4

MFRC522 rfid(SS_PIN, RST_PIN);
LiquidCrystal_I2C lcd(0x27, 16, 2);
RTC_DS3231 rtc;
SoftwareSerial esp(2, 3); // RX, TX

File logFile;
String cardUID = "";
String currentTime = "";
String currentDate = "";

void setup() {
  Serial.begin(9600);
  esp.begin(9600);
  
  lcd.init();
  lcd.backlight();
  lcd.clear();
  lcd.print("Sezerduino PDKS");
  lcd.setCursor(0, 1);
  lcd.print("Baslatiliyor...");
  
  SPI.begin();
  rfid.PCD_Init();
  
  if (!rtc.begin()) {
    lcd.clear();
    lcd.print("RTC Baglanti");
    lcd.setCursor(0, 1);
    lcd.print("Hatasi!");
    while (1);
  }
  
  if (!SD.begin(CS_PIN)) {
    lcd.clear();
    lcd.print("SD Kart Hatasi!");
    while (1);
  }
  
  // Sistem başlangıcında WiFi bağlantısı
  setupWiFi();
  
  lcd.clear();
  lcd.print("Sistem Hazir");
  lcd.setCursor(0, 1);
  lcd.print("Kart Okutunuz");
}

void loop() {
  // Kart okuma işlemleri
  if (rfid.PICC_IsNewCardPresent() && rfid.PICC_ReadCardSerial()) {
    cardUID = "";
    for (byte i = 0; i < rfid.uid.size; i++) {
      cardUID += String(rfid.uid.uidByte[i] < 0x10 ? "0" : "");
      cardUID += String(rfid.uid.uidByte[i], HEX);
    }
    cardUID.toUpperCase();
    
    // Zaman bilgisini al
    DateTime now = rtc.now();
    currentDate = String(now.day()) + "/" + String(now.month()) + "/" + String(now.year());
    currentTime = String(now.hour()) + ":" + String(now.minute()) + ":" + String(now.second());
    
    // Ekranda göster
    lcd.clear();
    lcd.print("Kart ID: " + cardUID);
    lcd.setCursor(0, 1);
    lcd.print(currentTime);
    
    // SD karta kaydet
    logToSD(cardUID, currentDate, currentTime);
    
    // Buluta veri gönder
    sendToCloud(cardUID, currentDate, currentTime);
    
    delay(2000);
    
    lcd.clear();
    lcd.print("Sistem Hazir");
    lcd.setCursor(0, 1);
    lcd.print("Kart Okutunuz");
    
    rfid.PICC_HaltA();
    rfid.PCD_StopCrypto1();
  }
}

void logToSD(String uid, String date, String time) {
  logFile = SD.open("LOG.CSV", FILE_WRITE);
  if (logFile) {
    logFile.println(uid + "," + date + "," + time);
    logFile.close();
  }
}

void setupWiFi() {
  esp.println("AT+RST");
  delay(1000);
  esp.println("AT+CWMODE=1");
  delay(1000);
  esp.println("AT+CWJAP=\"WIFI_ADI\",\"WIFI_SIFRESI\"");
  delay(5000);
}

void sendToCloud(String uid, String date, String time) {
  String data = "uid=" + uid + "&date=" + date + "&time=" + time;
  
  esp.println("AT+CIPSTART=\"TCP\",\"your-server.com\",80");
  delay(2000);
  
  esp.println("AT+CIPSEND=" + String(data.length() + 60));
  delay(1000);
  
  esp.println("POST /update.php HTTP/1.1");
  esp.println("Host: your-server.com");
  esp.println("Content-Type: application/x-www-form-urlencoded");
  esp.println("Content-Length: " + String(data.length()));
  esp.println("");
  esp.println(data);
  
  delay(1000);
  esp.println("AT+CIPCLOSE");
}