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 (PDKS), çalışanların veya öğrencilerin kuruma giriş-çıkışlarını elektronik olarak izleyen, kaydeden ve raporlayan entegre bir sistemdir. Bu sistem:
gibi bileşenlerden oluşur ve Arduino mikrodenetleyici kartı bu bileşenleri koordine eder.
Arduino tabanlı bir personel takip sistemi kurmak için aşağıdaki bileşenlere ihtiyacınız olacaktır:
RFID modülü, Arduino’ya aşağıdaki şekilde bağlanır:
Aşağıdaki Arduino kütüphanelerini Arduino IDE’ye yüklemeniz gerekecektir:
#include
#include
#include
#include
#include
#include
#include
#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");
}