This shows you the differences between two versions of the page.
pm:prj2021:amocanu:terminal-plata-card [2021/06/02 15:58] andrei.lazarescu00 [Terminal plata cu cardul] |
pm:prj2021:amocanu:terminal-plata-card [2021/06/03 07:35] (current) andrei.lazarescu00 [Rezultate Obținute] |
||
---|---|---|---|
Line 20: | Line 20: | ||
* LCD caractere | * LCD caractere | ||
* Numpad | * Numpad | ||
- | * Reader NFC | + | * Reader NFC (RFID-RC522) |
* Carduri NFC | * Carduri NFC | ||
* Alimentator | * Alimentator | ||
+ | |||
+ | 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 4x4) | ||
+ | |||
+ | ==== Schema electrica ==== | ||
+ | |||
+ | {{chema_electrica_pos.png?800|}} | ||
+ | |||
+ | |||
+ | ===== 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 ===== | ||
+ | {{ :pm:prj2021:amocanu:pos_demo.jpg?600 |}} | ||
+ | |||
+ | ==== Video ==== | ||
+ | [[https://youtu.be/VbQcgUl0bH8 | Demo 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 ===== | ||
+ | [[http://abyz.me.uk/rpi/pigpio/python.html#bsc_i2c | I2C Slave Raspberry pi]]\\ | ||
+ | [[https://www.arduino.cc/reference/en/libraries/mfrc522/ | Documentatie librarie NFC]]\\ | ||
+ | [[https://www.arduino.cc/reference/en/libraries/liquidcrystal-i2c/ | Documentatie librarie Display]]\\ | ||
+ | [[https://ocw.cs.pub.ro/courses/pm/prj2021/amocanu/terminal-plata-card | Terminal plata cu cardul]]\\ | ||
+ | [[https://ocw.cs.pub.ro/courses/pm/prj2021/amocanu/terminal-plata-card?do=export_pdf | Document PDF]] | ||
+ | |||
+ | <note important>{{:pm:prj2021:amocanu:terminal-plata-card.zip|Codul pentru Arduino + Raspberry Pi}}</note> | ||
+ | |||
+ | |||
+ | |||
+ |