Close

Arduino docházkový systém

Arduino docházkový systém - Detail displeje

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.

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.

Arduino docházkový systém - Zapojení

Zapojení

Arduino docházkový systém - Zapojení

Zapojení

Arduino docházkový systém - Umístění RFID antény

Umístění RFID antény

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í.

Arduino docházkový systém - Přehled zaměstnanců

Přehled zaměstnanců

Č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).

Arduino docházkový systém - Webové rozhraní

Webové rozhraní

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.

Arduino docházkový systém - Detail zaměstnance

Detail zaměstnance

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.

Arduino docházkový systém - Detail displeje

Detail displeje

Arduino docházkový systém - Hotová konstrukce

Hotová konstrukce

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.

Zbyšek Voda

Zbyšek Voda

Už nějaký čas se zajímám o věci kolem Internetu věcí a otevřeného hardware a software. Tak jsem se také v roce 2010 dostal k Arduinu, pro které dodnes programuji a taky píšu články o práci s ním. Baví mě vymýšlet, jak staré věci používat novým způsobem.
Zbyšek Voda

Latest posts by Zbyšek Voda (see all)

10 Comments on “Arduino docházkový systém

Vetrelec.1
25.5.2017 at 7:19

čest zprovoznil to někdo jak už psal jeden kolega čip čte a zapisuje ale na webu se nezobrazují časy poradí někdo?

pnavoy
23.11.2016 at 17:54

Pekná práca, ale pre začiatočníkov by pomohla schéma zapojenia. Z tých fotografií to nie je celkom jasné.
Pri kompilácii programu som narazil opäť na chybové hlásenie:

Arduino: 1.6.6 Hourly Build 2015/09/25 05:34 (Windows 10), Vývojová doska:“Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)“

D:\Users\Navoy\Desktop\arduinocz-dochazkovy-system-8869d769e56c\arduinocz-dochazkovy-system-8869d769e56c\Dochazka022_upravena\Dochazka022_upravena.ino: In function ‚void loop()‘:

Dochazka022_upravena:172: error: ‚RTC‘ was not declared in this scope
Dochazka022_upravena:1238: error: ‚DS1307_DOW‘ was not declared in this scope
Dochazka022_upravena:1239: error: ‚DS1307_DATE‘ was not declared in this scope
Dochazka022_upravena:1240: error: ‚DS1307_MTH‘ was not declared in this scope
Dochazka022_upravena:1241: error: ‚DS1307_YR‘ was not declared in this scope
Dochazka022_upravena:1242: error: ‚DS1307_HR‘ was not declared in this scope
Dochazka022_upravena:1243: error: ‚DS1307_MIN‘ was not declared in this scope
Dochazka022_upravena:1244: error: ‚DS1307_SEC‘ was not declared in this scope
exit status 1
‚RTC‘ was not declared in this scope.

Vedeli by ste mi s tým prosím pomôcť ?
Ďakujem PN

alf159
23.11.2016 at 22:10

Při kompilaci musíte přiložit 2 knihovny DS1307 a LiquidCrystal_I2C. Posílal jsem redaktorům spolu s článkem. Provizorně jsem tedy nahrál na ulozto, případně mohu zaslat na email.
https://uloz.to/!DINVqNe9M5gT/ds1307-zip
https://uloz.to/!G7tGOp1BNB9D/liquidcrystal-i2c1602v1-zip
Schéma by bylo dobré, ale bohužel jsem si jej nenakreslil a musel bych jej tedy rekonstruovat z programu a s programem fritzing taky moc neumím.
Kdyby jste chtěl stavět, tak ještě napište a napsal bych Vám aspon jak propojit – který pin na který.

pnavoy
26.11.2016 at 15:49

Dobry den, kniznice samozrejme mam.
Skor zda sa mi, ako keby v programe nejake premenne (RTC?) neboli definovane. Chcel by som vediet v akej verzii Arduina ste kompilovali program. Ja som skusal 1.6.6 a 1.12, ale s rovnakym výsledkom.

Co sa tyka schémy, postacilo by aj zapojenie pinov jednotlivých modulov.

Vdaka.

pnavoy
28.11.2016 at 17:54

Dobrý deň. Ďakujem za cenné rady. Nakoniec to pomohlo. Ale predsa by som len poprosil to zapojenie jednotlivých pinov. A tých fotiek to nie je zrejme.

Vďaka.

alf159
29.11.2016 at 18:39

Pokusím se vám odpovědět, ale budu to hledat na internetu, takže to nemusí být na 100%, schéma jsem si nekreslil a jelikož je systém v provozu, tak ho rozdělávat nebudu.

Ethernet shield zasunout do arduino.
Vše ostatní propojit s napájením 5V.

RFID modul zde:
http://wiki.seeedstudio.com/wiki/125Khz_RFID_module_-_UART
zde zapojit napájení, pin TX(1) propojit s RX(19) na arduino, pin RX(2) propijit s TX(18) na arduino.

Vše ostatní paralelně na I2C, na arduino SDA(20), SCL(21).
http://www.sainsmart.com/media/catalog/product/i/m/img_0393__.jpg
LCD:
http://www.sainsmart.com/media/catalog/product/1/_/1_12_1.jpg
popsáno na obrázku, napájení, SDA na SDA, SCL na SCL
RTC:
http://img.banggood.com/images/upload/2012/lidanpo/SKU099560L.jpg
stejně jako LCD, má všechny pin 2x, myslím, že jsou propojené
EEPROM:
http://img.dxcdn.com/productimages/sku_294219_1.jpg
popsáno na obrázku, napájení, SDA na SDA, SCL na SCL

pnavoy
2.1.2017 at 9:16

Ďakujem pekne za radu. Všetko som postavil podľa návodu. Display funguje, administracia cez web tiež. Po prilozeni RFID tokenu sa zobrazí info ZAPSANO, ale pri prezeraní cez web nie je vidieť čas prichodu-odchodu zamestnanca.
Viete mi s tým prosím poradiť?
Prikladám screenshot: https://ulozto.sk/!3j0E9lR2akOT/dochadzka-test-zip
Ďakujem.

tuxmartin
10.11.2016 at 18:29

Jen pro info – proc pouzivate 125 kHz RFID a ne novejsi 13,6 MHz?
Cenove jsou podobne a hlavne 13,6 MHz se nedaji kopirovat a podvadet.

Jinak pekne zarizeni!

Laadis
10.11.2016 at 19:33

Zdravím 🙂 pěkný 🙂 nedávno jsem také stavěl docházkový systém pomocí arduina pro svého zaměstnavatele jako náhradu starých papírových píchaček. Akorát jsem využil pár jiných komponent než co jsou uvedené ve článku. Jedná se o dotykový 3,2″ TFT display, Ethernet W5100, RTC obvod DS3231, Arduino Mega a Nano, samozřejmě 13,6 MHz RFID čtečku + tagy a nakonec piezo reproduktor. Systém každý příchod nebo dochod (dle volby na displeji) odešle rovnou na server a když se tak nepovede (nemí připojeno k serveru) uloží záznam na micro sd kartu (W5100 má slot pro micro sd kartu) a při opětovném navázání spojení se serverem data odešle.

Janík
10.11.2016 at 20:33

Tak to už opravdu nevím, proč jsem se tak rozhodnul. Rfid systémy prakticky neznám, tak jsem asi vybral nejlevnější. A taky jsem si asi myslel, že 125kHz snímá z větší vzdálenosti, tak jsem nechtěl, aby to tam zaměstnanci museli nějak hledat.
Ono po zkušenostech z realizace bych spoustu věcí udělal jinak (viz. článek).
Zvažoval jsem i variantu jak píše Laadis s uploadem na server, kde je výhoda že další zpracování probíhá mnohem elegantněji na PC, ale nakonec jsem to z různých důvodů udělal takto.

Napsat komentář