Terminal plata cu cardul
Autor: Lazarescu Andrei
Grupa: 335CC
Introducere
Acest proiect implementeaza un terminal de plata cu cardul. Scopul acestuia este sa imite un POS gasit in magazine.
Acesta va citi numarul unui card, iar dupa confirmarea pin-ului de catre utilizator, va trimite la server catre validare cardul + suma.
Descriere generală
Senzorii de temperatura si umiditate vor citi incontinuu si vor trimite datele catre placa de baza. Datele vor fi afisate pe ecranul LCD si vor fi prelucrate. In functie de valorile date de senzor, se decide daca se va porni sau nu ventilatorul cu ajutorul modulului releu. De asemenea, modulul de alimentare ne va permite sa folosim statia de monitorizare fara ca aceasta sa fie conectata la calculator.
Programul arduino functioneaza ca un Finite State Machine (FSM), cu stari pentru: pre citire, introducere suna tranzactie, scanare card, introducere pin, tranzactie reusita, tranzactie esuata.
Diagrama bloc:
Hardware Design
Lista de piese:
Arduino-ul comunica cu display-ul si cu raspberry pi-ul prin I2C, iar cu cititorul de carduri prin SPI. Raspberry pi-ul opereaza in modul slave.
Numpd-ul este conectat la pinii 2-7 si A0, A1. Acesta functioneaza multiplexand randurile si coloanele, astfel fiind posibil sa interactionam cu 16 butoane, utilizand numai 8 pini (conectati intr-o matrice de 4×4)
Schema electrica
Software Design
Tot codul pentru placa Arduino se află în fișierul Proiect_PM.ino, iar programul pentru raspberry pi in fisierul rpi.py
Codul Arduino este facut sub forma unui FSM. Acesta memoreaza in ce stadiu este actual si interactioneaza cu fiecare device cand si cum este necesar.
Codul de pe raspberry pi initializeaza device-ul ca un I2C slave pe adresa 0x13, apoi, la fiecare write, seteaza o variabila in memorie. Cand se trimit octetii 3, apoi 1, computer-ul face toate request-urile necesare la server
Stagiile programului arduino:
starting: Aici se initializeaza Arduino-ul;
write_iban: Afiseaza pe LCD UID-ul cardului apropiat. Acesta este un mod de debug, care nu e folosit in modul normal de operare;
select_iban: Aici se selecteaza destinatarul platilor
enter_amount: Aici se introduce suma tranzactiei
show_transaction: Aceasta stare doar afiseaza pe ecran detaliile tranzactiei
read_card: Aici se interactioneaza cu cititorul de carduri pentru a citi cardul
process_transaction: In aceasta stare se transmitplacii raspberry pi detaliile tranzactiei, iar aceasta face requesturile necesare la server
transaction_succesful: Acesta afiseaza un mesaj ca tranzactia a reusit si reinitializeaza variabilele la starea initiala.
Rezultate Obținute
Video
Concluzii
Am avut niste probleme cu modulul care citeste carduri, dar am reusit sa gasesc workarounds
Sunt fericit cu rezultatul final, dar as fi vrut sa am mai mult timp pentru a implementa niste functionalitati in plus
Am invatat o tona de lucruri noi, mai ales despre modul in care functioneaza modulele nfc
Bibliografie/Resurse