top of page

Arduino ve RFID İle Personel Takip Projesi (Python arayüzü)

Yazarın fotoğrafı: Kadir ÜnverKadir Ünver

Güncelleme tarihi: 10 Oca 2024


Arduino ve RFID kullanarak geliştirilen bir personel takip projesi, tanıma sistemlerinin etkili bir uygulamasıdır. Bu projede, RFID modülü personel kartlarındaki etiketleri okuyarak bilgileri işler, Arduino ise gerekli aksiyonları gerçekleştirir. Bu yazıda, Arduino ve Python arayüzü kullanılarak geliştirilen bir personel takip projesini ele alacağız.


Arduino, RFID modülünden okunan verileri işler ve buzzer aracılığıyla bir ses çıkartır. Python arayüzü ise seri haberleşme ile Arduino'dan gelen verileri okur, personel bilgilerini günceller ve girilen saatleri kaydeder.

Personel takip projesi, kart okunduğunda Arduino tarafından tanımlı personelin adını ve girilen saati görüntüler. Aynı zamanda, veriler CSV dosyasına kaydedilerek ilerideki analizler ve raporlamalar için kullanılabilir. Proje, personelin giriş-çıkış saatlerini izlemeyi kolaylaştırır ve verilerin tutulmasını sağlar.


Malzeme Listesi

  • Arduino nano

  • Rc522 RFID Okuyucu 13.56 Mhz

  • Breadboard

  • Jumper kablo

Programlar

  • Arduino IDE

  • VİSUAL STUDİO CODE

Projenizin sağlıklı çalışabilmesi için hem Arduino IDE için hemde VİSUAL STUDİO CODE için kütüphane dosyalarını kurmanız gerekmektedir.


Devre Şeması



Arduino kodu

#include <MFRC522.h> #include <SPI.h> #define RST_PIN 9 #define SS_PIN 10 #define buzzer 3 MFRC522 rfid(SS_PIN, RST_PIN); // RFID modülünün bağlandığı pinler void setup() { Serial.begin(9600); SPI.begin(); rfid.PCD_Init(); pinMode(buzzer, OUTPUT); } void loop() { // RFID kartının varlığını kontrol edin if (rfid.PICC_IsNewCardPresent() && rfid.PICC_ReadCardSerial()) { // RFID kartından okunan verileri alın digitalWrite(buzzer,HIGH); delay(500); digitalWrite(buzzer,LOW); String kartID = ""; for (byte i = 0; i < rfid.uid.size; i++) { kartID.concat(String(rfid.uid.uidByte[i] < 0x10 ? "0" : "")); kartID.concat(String(rfid.uid.uidByte[i], HEX)); } // Kart ID'sini seri haberleşmeyle bilgisayara gönderin Serial.println(kartID); rfid.PICC_HaltA(); rfid.PCD_StopCrypto1(); } }



  • MFRC522 ve SPI kütüphaneleri projede kullanılan RFID modülünü ve SPI haberleşmesini yönetmek için import edilir.

  • RST_PIN ve SS_PIN değişkenleri, RFID modülünün bağlantı pinlerini tanımlar.

  • buzzer değişkeni, projede kullanılan buzzer'ın bağlantı pinini tanımlar.

  • setup() fonksiyonunda seri haberleşme başlatılır, SPI ayarları yapılır ve RFID modülü başlatılır.

  • loop() fonksiyonu sürekli olarak çalışır ve RFID kartının varlığını kontrol eder.

  • Kart varsa, karttan okunan veriler alınır ve seri haberleşme aracılığıyla bilgisayara gönderilir.

  • Ardından kart durdurulur ve şifreleme sonlandırılır.


Python Arayüz Kodu


import serial
import time
import tkinter as tk
from tkinter import font
import csv
# Arduino'ya seri haberleşme yapılacak port ve hız
ser = serial.Serial('COM3', 9600, timeout=1)
csv_baslik = ['Personel', 'Giriş Saati']
# Personel bilgilerini saklamak için bir sözlük
personel_bilgileri = {
   "a3e95806": "kadir ünver",
   "dcacda38": "mehmet",

   
}

# Tkinter penceresini oluştur
pencere = tk.Tk()
pencere.title("Personel Takip Sistemi")
pencere.geometry("400x300")  # Pencere boyutunu 400x300 olarak ayarl
yazi_fontu =font.Font(size=20)
# Etiketleri ve giriş saatini görüntülemek için metin kutularını oluştur
personel_etiketi = tk.Label(pencere, text="Personel:",font=yazi_fontu)
personel_etiketi.grid(row=0, column=0)

giris_saat_etiketi = tk.Label(pencere, text="Giriş Saati:",font=yazi_fontu)
giris_saat_etiketi.grid(row=1, column=0)

personel_goruntusu = tk.Label(pencere, text="",font=yazi_fontu)
personel_goruntusu.grid(row=0, column=1)

giris_saat_goruntusu = tk.Label(pencere, text="",font=yazi_fontu)
giris_saat_goruntusu.grid(row=1, column=1)


def kart_bilgisi_al():
   if ser.in_waiting > 0:
       # Arduino'dan gelen veriyi oku
       kart_id = ser.readline().decode().strip()
       if kart_id in personel_bilgileri:
           # Giriş saatiyle birlikte personel bilgisini güncelle
           personel = personel_bilgileri[kart_id]
           giris_saat = time.strftime('%H:%M:%S')
           personel_goruntusu.config(text=personel,fg='green')
           giris_saat_goruntusu.config(text=giris_saat)
            # CSV dosyasına veriyi yaz
           with open('personel_girisleri.csv', 'a', newline='') as dosya:
               yazici = csv.writer(dosya)
               yazici.writerow([personel, giris_saat])
       else:
           # Kart tanımlı değilse yabancı kişi yazısını kırmızı yap
           personel_goruntusu.config(text="Yabanci Kişi", font=yazi_fontu, fg='red')
           giris_saat = time.strftime('%H:%M:%S')
           giris_saat_goruntusu.config(text=giris_saat)
           with open('personel_girisleri.csv', 'a', newline='') as dosya:
             yazici = csv.writer(dosya)
             yazici.writerow(['yabanci', giris_saat])
           
   pencere.after(100, kart_bilgisi_al)

pencere.after(100, kart_bilgisi_al)
pencere.mainloop()

ser.close()
  • serial kütüphanesi, Arduino ile seri haberleşme yapmak için kullanılır.

  • time kütüphanesi, saat bilgilerini almak için kullanılır.

  • tkinter kütüphanesi, kullanıcı arayüzü oluşturmak için kullanılır.

  • csv kütüphanesi, CSV dosyasına yazmak için kullanılır.

  • ser değişkeni, Arduino ile seri haberleşme yapmak için kullanılan port ve hızı tanımlar.

  • personel_bilgileri sözlüğü, RFID kart ID'si ile eşleştirilen personel bilgilerini tutar.

  • Tkinter arayüzü oluşturulur ve etiketler, metin kutuları vb. bileşenler yerleştirilir.

  • kart_bilgisi_al() fonksiyonu, seri haberleşme ile Arduino'dan gelen verileri okur ve gerekli işlemleri gerçekleştirir.

  • Eğer kart tanımlı ise, personel bilgilerini günceller ve girilen saatleri kaydeder. Ardından CSV dosyasına yazılır.

  • Eğer kart tanımlı değilse, "Yabanci Kişi" olarak işaretler ve kaydeder.

  • pencere.after() fonksiyonu, sürekli olarak kart_bilgisi_al() fonksiyonunu çağırarak Arduino'dan veri okunmasını sağlar.

  • Pencere mainloop'a girer ve arayüz çalışır.

  • Seri haberleşme kapatılır.


 
 
 

Comments


SUBSCRIBE VIA EMAIL

  • Facebook
  • LinkedIn
  • Twitter
  • Instagram

Thanks for submitting!

© 2035 by Salt & Pepper. Powered and secured by Wix

bottom of page