Arkadaşlar merhaba
bu dersimizde işi biraz daha ileri seviyeye taşıyoruz bir önceki projemizde RFID kurup kartımızı okuttuğumuzda servo motorumuzu hareket ettirerek kapı kilit sistemini yapmıştık şimdi sistemin RFID kısmını tekrar bağlıyalım ve bir de her kart okuttuğumuzda ses çıkartması için 3 numaralı pin e buzzer bağlayalım , bu projemizde arduino IDE programımızın yanısıra PYTHON programlama dilini de kullanacağız ve bilgisayarımızdan personelin giriş saat lerini kaydederek personel takibini gerçekleştirmiş olacağız…
öncelikle bilgisayarımıza indirip kurmamız gerekenleri aşşağıda verdiğim linklerden indirip kuralım
PYTHON programlama dilini kurmak için TIKLAYINIZ
Kodlarımızı yazacağımız Visual Studio Code programını indirmek için TIKLAYINIZ
bu programları kurup hazır ettikten sonra aşşağıdaki şema ile bağlantımızı yapalım

ARDUİNO 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 KODLARI
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('COM6', 9600, timeout=1)
csv_baslik = ['Personel', 'Giriş Saati']
# Personel bilgilerini saklamak için bir sözlük
personel_bilgileri = {
"63eaf60463eaf604": "Mesut NALKIRAN",
"63eaf604c3123716": "Robotik KODLAMA",
}
# 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 %d-%m-%Y')
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="Tanımsız Kart", 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(['tanımsız kart', 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.

burada programı çalıştırdığınızda eğer serial hatası alırsanız yani serial module hatası alırsanız terminal ekranını açarak pip install pyserial yazıp kurulumunu sağlamış olacaksınız
tekrar çalıştırdığınızda karşınıza aşşağıdaki gibi bir ekran çıkacaktır

kartımızı okutunca ise aşşağıdaki gibi bir görüntü elde edeceğiz

öncelikli olarak PYTHON kısmına geçince yapmamız gerekenler var arduino da elimizdeki kartları seri ekranda okutup kart ID sini alıp bir kenara not etmiştik bu kard ID lerini PYTHON kodu içerisine aşşağıdaki gibi dahil ediyoruz ve aynı şekilde istediğiniz kadar kart kaydedebilirsiniz…

ve son olarak visual kodunuzu kaydettiğiniz yerde kayıt yaptığınız dosyanın da bulunması gerekir

yok ise kodun içerisindeki kayıt dosyanızın isminden birtane yeni metin belgesi açıp ismini komple kodun içerisindeki ile değiştirerek sağlayabilirssiniz böylece artık tanımlı kartı okuttuğumuzda direkt olarak excell tablosuna saat dakikka ve tarih olarak kaydedilecektir tebrikler harika bir proje daha başarmış oldunuz…
