Dorin-Marian IONIŢĂ (78453) - Color Code Access Granter

Autorul poate fi contactat la adresa: Login pentru adresa

Introducere

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.

Descriere generală

In ordine logica a ciclului de folosire:

  1. Butonul de reset va reseta placuta (intrucat este un POC si este predispus la blocari/buguri).
  2. Modulul de decodificare a codului de culori al cartelei va comunica (va furniza) datele RGB (gata convertite) microcontrolerului (duty cycle 0.5, cu variatia frecventei pentru exprimarea valorilor).
  3. Microcontrollerul va prelua datele de la convertorul de culoare (→ valori digitale) si va rula algoritmul de verificare a codului de culori.
    1. Daca codul se potriveste cu cel programat intern, atunci acesta va anunta pe cel care poseda cartela ca totul este in regula (prin aprinderea unui led colorat) si va trimite datele cu o comanda de deblocare la un modul Bluetooth.
  4. LEDurile primesc comanda de la microcontroller sa se aprinda pentru a marca daca accesul este permis sau nu.
  5. Modulul Bluetooth primeste date de la microcontroller (o comanda definita intern de deschidere) ce va fii convertita in analog si trimisa via radio unui dispozitiv Android.
  6. Dispozitivul Android va produce un mesaj de deblocare sau va trimite semnalul mai departe (codul va fi proiectat sa poata fi extins cu usurinta).

Hardware Design

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:

  • Vcc al HC-05 va fi legat direct la 5V, pentru ca am o versiune care are un stabilizator de tensiune spre 3.3V integrata.
  • Valorile rezistentelor sunt de 2K si respectiv 1K (cele de la divizorul de tensiune).
  • Valorile rezistentelor aditionale ale LEDurilor sunt de 1K.
  • Senzorul este sensibil puternic la lumina ambientala, astfel incat l-am pus intr-o cutie vopsita negru mat pe interior (cu un marker), deschisa doar la capatul pe unde trece cartela.

Software Design

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

ColorBasedAccesGranter

FSM-ul este folosit in implementare este prezentat in continuare:

Starea initiala este NoneState. Semnalul N are semnificatie de culoare invalida/nerecunoscuta.

Rezultate Obţinute

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

Concluzii

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.

Download

Jurnal

  • 20.4.2018: Am completat titlul, descrierea, lista de piese (aproximativ - lipsesc piesele strict electrice de interfatare: condensatori, rezistente), schema bloc si descrierea modulelor componente. Am adaugat si datasheeturile la Bibliografie.
  • 24.4.2018: Am achizitionat piesele pentru placa de baza.
  • 30.4.2018: Am terminat de lipit piesele de baza pe placuta.
  • 2.5.2018: Am instalat bootloaderul pe placuta. Pare functionala
  • 3.5.2018: Am intrat in posesia modulelor bluetooth si senzor de culoare.
  • 6.5.2018: Am realizat schema electronica a circuitului si am updatat wiki-ul in consecinta, inclusiv informatii anterioare ce s-au dovedit sa nu fie tocmai potrivite.
  • 16.5.2018: Am terminat dezvoltarea hardware. Am testat cu multimetrul si am pus la USB-ul de la laptop. S-au aprins LEDurile, nu s-a incalzit circuitul, Bluetoothul este recunoscut pe telefon.
  • 20.5.2018: Am terminat implementarea software. Mai am doar chestii de frumusete: aplicatia Android cu animatie precum si o carcasa roz, din fier, cu luminite. Trebuie sa updatez si wikiul.
  • 20.5.2018: Am facut aplicatia Android. TODO: carcasa - poate, wiki update.
  • 23.5.2018: Updatat wiki pentru milestone. Mai am de facut carcasa si adaugat filmulet demo.

Bibliografie/Resurse

Resurse Hardware

Resurse Software

Download Wiki

  • Documentația în format PDF
pm/prj2018/vcorneci/coloraccesgranter.txt · Last modified: 2021/04/14 17:07 (external edit)
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0