Náš čtenář, pan Janík, si do firmy postavil jednoduchý docházkový systém, který vám v dnešním článku představí.
Projekt vznikl pro potřeby firmy o cca 20 zaměstnancích, a proto byl dimenzován na max. 30 lidí. Je to můj tak desátý Arduino program, a tak se předem omlouvám za neoptimalizovaný a ke konci už i silně chaotický kód :-).
Popis bude taky velmi všeobecný, protože zařízení je už cca 18 měsíců v provozu a od té doby jsem už většinu detailů zapomněl, nicméně případné dotazy se pokusím zodpovědět. Co se týče spolehlivosti, tak za tu dobu asi jednou ztratil připojení do LAN a jednou nebo dvakrát display zobrazil nesmyslné znaky – po odpojení/připojení napájení vše OK.
Komponenty
Skládá se z nástěnného modulu (display, čtečka RFID čipů, Arduino MEGA, Ethernet modul, RTC, PC speaker, EEPROM) a administrace přes LAN – www.
- Arduino Mega 2560
- LCD display
- RFID čtečka
- RFID tokeny – kupoval jsem ty černé, teď už nejsou v nabídce
- Ethernet shield
- RTC modul
- EEPROM paměť
Napájení jsem zkoušel externím zdrojem, ale nakonec se jako nejstabilnější ukázalo napájení kvalitním adaptérem/nabíječkou od mobilu přes USB a tažené kvalitním kabelem Belkin kvůli větší vzdálenosti.
Zapojení
Zapojení jednotlivých komponent je pro případné zájemce možné odvodit z kódu.
Všechny desky a hlavně RFID čtečku jsem osadil filtračními kondenzátory – na chybovost čtení čipů to má dramatický význam!!! Základem je Arduino MEGA, na něm nasazený Ethernet shield (tady pozor!!! – levná verze v odkazu neobsahuje pomocný obvod, který resetuje desku po připojení napájení – musel jsem zbastlit sám – viz. tranzistor s NE555 u tlačítka reset), zvukový výstup tvoří PC speaker + tranzistor coby zesilovač.
Na I2C je zapojeno:
- display 20×4 s I2C převodníkem
- RTC s DS1307 (obvod je velmi nepřesný – za týden je schopný se rozejít i o 2 minuty, lépe by asi bylo použít DS3231 a nebo zkusit stabilnější krystal), na desce RTC se využívá i EEPROM 4KB
- externě další EEPROM 32KB.
Na seriovém portu č. jedna (Serial1: 19,18) je čtečka RFID.
Popis funkce a programu
Veškeré nastavování se provádí přes webové stránky v prohlížeči, na základní obrazovce se zadává 3 místný kód pracovníka (v naší firmě), jméno, příjmení, kód čipu (opíše se naražený na čipu).
Pak je možné prohlížet docházku za aktuální a 2 měsíce zpátky. Stažení se provádí do jednoduchého *.csv souboru. Na stránce je také tlačítko nastavení času PC (synchronizovaného z internetu) do zařízení.
Časy se třídí tak, že 1 záznam dne je brán jako příchod a další jako odchod, přičemž mohou být celkem 3. Časy načtené čipem nejdou smazat (aby nadřízený nemohl upravovat co se skutečně razilo), ale může čas přidat, např. když si zaměstnanec zapomene narazit odchod. SV a ŘD se vkládají ručně (www).
Přesčasy se pro jednoduchost počítají jako že každý započatý den má mít 8 hodin (správnější by asi bylo zadat ručně fond hodin pro každý měsíc). Po odpracovaných 4,5 hodinách se automaticky odečte 30 minut přestávka. Časy se automaticky zaokrouhlují na půlhodiny, příchodem je nejbližší vyšší následující půlhodina a odchodem je nejbližší nižší půlhodina. Toto vše je možné měnit a nastavoval jsem po konzultacích a dle potřeby.
Zabezpečení jsem nejprve vymyslel pomocí javascriptu heslem, ale to lze velmi jednoduše obejít (v administraci použité většinově) a následně jsem pro ruční zápis příchodu přidal 2 heslo kontrolované na straně Arduina – to zná pouze autor/uploader programu a ten, komu ho předá.
Na displeji se zobrazuje čas, datum, den v týdnu, upozornění na pracovní dobu a přesčasovou dobu. Po sejmutí čipu zobrazí jméno pracovníka, čas který se uložil (bez vteřin) a hlášku zapsáno.
V programu jsou také kontrolní funkce, které kontrolují a porovnávají důležité informace (jako pozice zápisu do paměti – ukládá se na několik paměťových pozic současně a na 2 různé EEPROM), v případě chyby se zobrazí.
Program obsahuje i auto-reset (pro zvýšení stability). Paměť EEPROM s časy se zapisuje postupně pořád dokola, paměť SV a ŘD se automaticky smaže po určité době.
Pro získání adres zařízení na I2C jsem použil program „Scanner I2C sbernice“.
Kód je dostupný na serveru BitBucket.
Panu Janíkovi děkujeme za článek a přejeme hodně štěstí s další tvorbou.