RFID-Zeiterfassungs Terminal
Vorwort
Das Projekt ist eines meiner ersten µC "Projekte" (neben ein paar 3x3x3 bzw. 5x5x5 LEDCubes). Die Programmierung, das Layout, der Schaltplan usw. ist nach bestem Wissen und Gewissen entstanden und erhebt keinen Anspruch auf Vollständigkeit oder 100%ige Richtigkeit. Es Funktioniert, macht einen guten Eindruck und das ist das für mich wichtige.
Jetzt aber los, hier mein Machwerk
Ziel
- Flexibles Zeiterfassungssystem
- Erfassung an Terminals
- Erfassung über Software (Intranet)
- Auswertung über Intranet
Werkzeuge
- BASCOM Vollversion
- PonyProg
- Pollin ATMEL Eval Board 2.0
- Lötkolben und was man noch so braucht ;-)
- PHP-Editor
Hardware
- Erste Tests mit dem Pollin RFID Bausatz
- Eigener Schaltplan mit folgenden Erweiterungen
- RFID Schaltung
- RealTimeClock
- Puffer Batterie
- EEPROM Zwischenspeicherung
- Kommunikation mit SocketServer RS232
- Eingabetastatur /Folientastatur
- 20x4 LCD Display
- ISP Schnittstelle
- Summer
- Anschlussmöglichkeit für LEDs für optische Funktionsanzeige Kommen/Gehen…
Lieferanten
- Pollin Elektronik: (RFID-Chip, ATmega32, Widerstände, Batteriehalter, Batterien, Spannungsregler, MAX232, Kondensatoren, Luftspule, Anschlussklemmen, Dioden, Taster)
- Reichelt Elektronik: (LCD Display, Schrauben, Muttern, Kühlkörper, Sockel, Wannenstecker, Stiftleisten, Poti, Folienkondensatoren, Quarz, Uhrenquarz, RTC DS1307, Summer, Flachkabel, Sub-D Stecker)
- OKW (Gehäuse Hersteller): Gehäuseunterteil, Gehäusedeckel, Wandhalterung, Abdeckstreifen Transparent für individuelle farbliche Gestaltung
- Gehäuse auch bei Conrad erhältlich
- TES-Frontdesign: Folientastatur passende zu OKW-Gehäusen (TES schneidet vorhandene Standard-Folientastaturen für paar Euro speziell zu)
- Hantz & Partner: Distributor für SENA LS100 DeviceServer
Funktionen des Gerätes (Programmablauf)
- Initialisieren (nach einschalten oder Neustart übers Menü)
- Boottimeout abwarten um DeviceServer das Holen einer IP zu ermöglichen bevor es losgeht. Im Display zählt ein Counter hoch (default 20 Sekunden)
- Init an Server schicken mit folgenden Informationen:
- Terminal ID (eindeutige Nummer der Terminals)
- Firmwareversion (in Bascom mit version() in EPROM gespeichert)
- Einstellungen wie z. B. Boottimeout, Displaytimer, Sound AN/AUS usw.
- Und Eintrag des letzten Kontaktes mit dem Terminal in Datenbank
- Standort empfangen von Server
- Aktuelle Uhrzeit vom Server holen und die RTC danach stellen
Main Loop
- Uhrzeit anzeigen (Mo 31.05.11 13:37) ausgelesen aus RTC
- Aktuelle Funktion anzeigen (Kommen, Gehen usw.)
- Wenn Zeitpunkt der Zeitumstellung (DST) Zeit neu vom Server holen und in RTC setzen
- Alle 15 Minuten wahrscheinliche Funktion wählen (morgens KOMMEN, mittags GEHEN, Nachmittags KOMMEN und Abends GEHEN)
- Auf Tastendruck warten (Wenn Tastendruck != 16 (nichts) dann springe jeweilige Funktion an.
- DisplayTiemout schleife bei Inaktivität zählen und Display von maxhelligkeit auf minhelligkeit via PWM dimmen. Und wahrscheinliche Funktion wählen
Programmfunktionen
- RTC auslesen
- RTC setzen
- Sound Funktion (Beep und Beeeeeeeeeep)
- Menü Funktion für diverse Einstellungen (2 Wert vergingern, 8 Wert erhöhen, OK Speichern)
- Displaytimeout
- Boottimeout
- Anzeigedauer nach Stempelung
- Anzeigedauer bei Infoabfrage
- Sound An/Aus (Beeeps)
- Funktion für neuen RFID-Key einlernen (Key Code wird in DB geschrieben)
- Terminal Info (Terminal ID, Standort ausgelesen aus DB bei init Funktion
- Neustart des Terminals (Watchdog setzen und nicht resetten)
- Uhrzeit holen und setzen
- Connection Timeout
- Anfrage senden
- Anfragestring: Terminal ID-Funktion-weitere Daten…
- Daten empfangen - UART Puffer Zeichen für Zeichen auslesen solange da eins ist. Und Connectiontimeout hochzählen und ggf. empfang abbrechen
- Externes EEPROM schreiben / lesen (nicht umgesetzt)
- Serverzeit ermitteln und RTC setzen
- Funktion (Kommen/Gehen usw.) anhand Uhrzeit ermitteln
- Funktionstext (1 = Kommen, 2 = Gehen, usw. ermitteln und anzeigen)
- Wochentagtext ermitteln anhand Tage (1-7)
- Bei Tastendruck Funktion setzen (Kommen/Gehen/Dienstgang usw.)
- Bei RFID Interrupt Anfrage senden (TerminalID, Code und Funktion an Server schicken), Ergebnis (Soll/Ist Stunden und Name) empfangen und anzeigen.
Programmcode
Aktueller Bascom Code (derzeit in Bearbeitung). Vielen Dank an die Mithelfer und Codeschnipsel Authoren ! DANKE !
Wird als Datei angehängt, der Übersicht wegen (THX4Tipps)
Funktionen des SocketServer
- Geschrieben in PHP lauschend auf Port 10000 (konfigurierbar)
- Auswertung und Antworten auf Anfragen mehrerer Terminals
- Speichern der Stempelungen usw. in MySQL Datenbank
- Events in Eventtabelle protokolieren (Init, Zeitabruf, Stempelung usw.)
- Ausgabe auf Console (Debugging)
- Laufend als Deamon (geplant)
PHP Code
folgt...
Intranetseite zur Auswertung
- Basierend auf meinem Intranet Framework
- Login über LDAP Server (Novell eDirectory)
- Navigationsmenü
- Berechtigungsmodell des Frameworks
- Adminbereich
- Stammdatenpflege für Mitarbeiter
- Tagesansicht pro Mitarbeiter oder Mitarbeitergruppe
- Monatsansicht pro Mitarbeiter
- Gruppenverwaltung /Zuordnung
- Übersicht aktuelle Anwesenheit der Mitarbeiter
- Fehlzeiten und Urlaubseinträge
- Zeitnachträge wenns vergessen wurde
- Anzeige Tages/Wochen Saldo/Soll/Ist
- RFID-Schlüsselverwaltung für Zuordnung zu Mitarbeitern
- Freigabe von Nachträgen durch z. B. Vorgesetzten
- Genehmigung von Urlaub o. anderer Fehlzeiten
Schaltplan und Layout
Bilder
Platinen Historie (links nach rechts):
- Streifenraster Experimentierplatine
- Selbstgeäzte Platine LaserTransferBügel Methode nach eigenem Layout
- gefertigte Musterplatine einseitig
- gefertigte Serienplatine doppelseitig mit Bestückungsdruck
Testterminalgehäuse für Praxistests (lief bereits mit allen Platinen)
SENA LS100 SerialDeviceServer
Die ersten fünf Seriengeräte mit verbautem DeviceServer, getestet und funktionsfähig. Eines der LS100 Netzteile welches auch den Rest des Terminals versorgt ist auch sichtbar. Eine Luftspule welche im Gehäusedeckel fixiert wird ist auch auf dem ersten Bild zu sehen. Das zweite Bild zeigt ein Gerät der Serie.
Links: Das sind die Folientastaturen (Zugeschnitten vom Lieferanten). Die grünen Streifen werden durch selbstgedruckte Tasten/Symbole ersetzt. Man kann also sehr einfach die Folie gestalten. Rechts: Bestückte Folientastatur mit eigenen Streifen.