Autorul poate fi contactat la adresa: Login pentru adresa
Tema proiectului meu este un access granter bazat pe cartele colorate, pe modelul cartelelor de acces optice.
Astfel, microcontrolerul are atasast un senzor optic de culoare (RGB) care reactioneaza la trecerea unui obiect prin fata lui, mai precis furnizand informatii despre culoarea acestuia. Microcontrolerul va analiza aceste semnale de la senzor si va decide daca codul de culori de pe cartela este unul valid. In caz afirmativ va aprinde un led de culoarea C1 si va trimite, printr-un modul Bluetooth, datele la un telefon cu Android, care va afis pe ecran un mesaj de deblocare (emuland astfel orice device - practic se poate interfata cu orice). De asemenea, are atasat un led C2 (rosu) si un led C3(verde), care se aprind la detectarea respectivelor culori. Cand se detecteaza albastru se aprind ambele leduri.
Scopul proiectului este sa permita un mecanism de acces doar celor acreditati - intr-o anumita incinta, sau la o anumita aplicatie sau la un anumit device. Mecanismul va fi util pentru ca ar trebui sa fie foarte ieftin de produs si, in plus, va fi o securitate bazata destul de mult pe hardware, deci mai greu de bypassat.
Ideea de la care am pornit este senzorul optic de cartela care se gaseste in mai toate cladirile de birouri.
In ordine logica a ciclului de folosire:
Piese
Piese | Model | Cantitate | |
---|---|---|---|
Placa de bază cu microcontroler | ATMega324A-PU | 1 | |
Modul Bluetooth | HC-05 | 1 | |
Color light to decimal coverter | TCS230 | 1 | |
Buton reset - inclus in piesele de baza | 1 | ||
LED colorat | 2 | ||
Fire mama-tata | 10 | ||
Fire mama-mama | 8 |
Schema electronica
Observatii:
Mediul de dezvoltare folosit este Sublime Text. Makefileul se ruleaza in CygWin, iar incarcarea pe placa se face cu ajutorul usbhidioc. Librari folosite au fost o librarie pentru un senzor de culoare, pe care eu am modificat-o sa functioneze la TCS230. Am folosit, de asemenea, pentru transmisia pe Bluetooth, biblioteca de USART din laborator.
Algoritmul de functionare este bazat pe finite state machine, astfel incat sa se poata detecta un cod valid.
A fost necesar o calibrare a senzorilor: de fapt, aceasta a fost o parte foarte complicata, mi-a luat cam o zi. Am incercat sa izolez senzorul de lumina ambientala si sa testez in diferite nuante de culori si diferite vizibiltati. Astfel, am obtinut niste marje de valori pentru culori, in diferite situatii, si am incercat sa fac tranzitia masinii de stari pe baza acestora.
Debuggingul a fost realizat pe USART, prin Bluetooth, cu un Bluetooth Terminal.
Pentru partea de comunicare mi-am definit un protocol de comunicatie ce imi oferta atat datele senzorilor pe ecran (in caz ca ceva merge prost la PMFair, dar eu sunt optimist), cat si detecteaza daca s-a primit un mesaj de tip ACK - access granted.
Aplicatia Android poate activa/dezactiva Bluetoothul, scana dupa deviceuri imperecheate precum si receptiona si afisa informatii si notificari (de ACK) pe baza protocolului astfel definit.
Link cate repositoriul de GitHub folosit gasiti aici (cu tot cu surse, atat C cat si Android, scheme, documentatie, etc.):
FSM-ul este folosit in implementare este prezentat in continuare:
Starea initiala este NoneState. Semnalul N are semnificatie de culoare invalida/nerecunoscuta.
Proiectul este functional, recunoaste destul de bine (dar uneori este sensibil la lumina ambinetala) patternuri (si doar acele patternuri) de cartele colorate. Aplicatia de Android functioneaza si ea perfect.
Voi adauga filmulete si poze dupa ce fac si carcasa proiectului – s-a mentionat pe forum ca este permis sa facem acest lucru si mai tarziu.
Video: ZMzLUf7R33c
Daca inainte de acest proiect aveam dubii daca vreau sa ma specializez in low-level: kernel dev/firmware dev/design hardware, acum nu mai am niciunul. A fost o adevarata placere sa realizez proiectul, cu atat mai mult ca functioneaza.
Se dovedeste ca poate fi chiar practic, intrucat intervalele de culori sunt stranse si este destul de greu sa se falsifice cartele.
Cartele sunt foarte ieftin de produs, si deviceul in sine nu este extraordinar de scump.
Mi-am dovedit mie ca stiu si putina electronica facand acest proiect si ca sunt suficient de descurcaret incat sa-l realizez pana la o functionare corespunzatoare. Iau in considerare, la licenta, sa fac un proiect tot de acest fel, dar mult mai mare.
Mi-am dat seama si ca imi place sa programez in Android, desi este parca prea high-level pentru mine.
Resurse Hardware
Resurse Software
Download Wiki