This is an old revision of the document!
Ansamblul va avea atasat o camera VGA ce va realiza capturi la apasarea butonului. Imaginile vor fi trimise la un server extern folosind un modul Ethernet, unde acestea vor avea rol de input pentru modelul de recunoastere faciala implementat, urmand ca raspunsul sa fie transmis placutei Arduino. Microcontrolerul va putea atunci sa actioneze asupra incuietoarei prin intermediul unui releu.
Initial, proiectul isi propusese sa adauge un card SD pentru stocarea imaginilor si un numpad pentru o metoda alternativa de autentificare prin introducerea parolei, insa s-a renuntat la acestea din moment ce toti pinii pentru uz general au fost folositi (camera necesita conectarea a 18 pini) si a fost necesara si remaparea pinilor.
Microcontroller-ul comunica cu shield-ul Ethernet prin pinii ICSP, fiind astfel necesara nefolosirea pinilor 10-13 (sunt conectati intern la pinii ICSP). Analog, pinii SCL si SDA corespund cu pinii A5, respectiv A4.
Pinii RX si TX sunt folositi pentru buton si releu, la releu fiind de asemenea atasat un alimentator de 12V pentru incuietoare.
Atat codul scris pentru placuta Arduino, cat si cel folosit pe server au fost urcate folosind git. Pentru programarea pe microcontroller s-a folosit Arduino IDE, iar pe server se gaseste un script bash ce lanseaza 3 terminale care ruleaza in paralel script-uri Python.
Codul sursa se afla in folder-ul “Ethernet_Camera”. Implementarea s-a inceput de la codul oferit de urmatorul ghid, care la randul lui a folosit urmatoarea sursa. La apasarea butonului, se va trimite un batch de 5 imagini, din moment ce unele imagini pot avea probleme de luminozitate sau pozitionare.
La initializare, se configureaza pinul 6 ca si PWM clock pentru camera VGA si se configureaza adresele MAC si IP, urmate de port-ul pentru transmiterea UDP. In urma testelor nu s-a observat o pierdere semnificativa a datelor in comparatie cu protocolul TCP, UDP oferind totodata o viteza mai mare de transmitere a pachetelor.
Pe masura ce se citesc pixelii, acestia sunt salvati intr-un buffer de dimensiune 1280 bytes (4 linii din imagine, a fost necesara optimizarea memoriei din moment ce SRAM-ul placutei Arduino are capacitate maxima de 2048 bytes), urmand a se transmite pachetul la umplerea acestuia. Microcontroller-ul va primi un pachet UDP in caz afirmativ, urmand sa deschida incuietoarea pentru 2 secunde.
Prin rularea script-ului run.sh se lanseaza in executie script-urile python3:
In prima jumatate a executiei din demo, s-au obtinut