This is an old revision of the document!


BankApp

Designed by: Marius-Tudor Zaharia, 333CA, May 2025
Contact: marius.zaharia2305@stud.acs.upb.ro
GitHub repository

Introduction

What is BankApp?

  • BankApp is a hardware-software product that offers various functionalities of a real-world banking application.
  • The hardware is centered around a microcontroller, with multiple peripheral devices allowing for a smooth user-system interaction.
  • The software is built with efficiency and simplicity in mind, assuring a pleasant experience for the user.

Purpose

  • BankApp offers a hardware-software interface that empowers users with a multitude of actions:
    • register in the bank, using a personal card
    • set up a PIN code
    • access to a checking account
    • access to a savings account (with interest gain)
    • add money to the checking account
    • perform payments from the checking account
    • transfer money between checking and savings account
    • add friends
    • send money to friends
    • visualize notifications

Why this idea?

  • Because banking doesn't have to be complicated and boring.
  • BankApp offers a fun, yet efficient implementation to an ubiquitous need of the modern world: money management.
  • With its attractive design and ease of use, BankApp is sure to steal the hearts of world-wide users.

General description

Block scheme

Components and their use

  • Arduino UNO
    • Uses an ATMega328P microprocessor.
    • Provides just enough memory and computational power for a small-sized, embedded project like this.
    • The engine of the system, controls the whole behind-the-scenes logic of the app.
  • LCD 16×2 with I2C module
    • Communicates by I2C with the microcontroller.
    • The main source of information and feedback provided to the user.
    • Displays all menus and actions.
  • MFRC522 Card scanner
    • Communicates by SPI with the microcontroller.
    • The user scans the card here, when prompted.
  • Dual-axis Joystick, with push-button
    • Gets analog input from the user, which is then converted to digital data.
    • Used to navigate between menus and as an OK/Confirm button.
    • The push-button needs debouncing.
  • TTP229 Capacitive keyboard (16 keys)
    • Used to input the PIN code and money sums.
    • No debouncing needed.
    • 10 is used as 0
    • 11 is used as backspace
  • Red Push-button module
    • Used as a Back/Cancel button.
    • Needs debouncing.
  • Passive buzzer module
    • Commanded by the microcontroller via PWM.
    • Provides acoustic feedback to the user.
  • RGB LED module
    • Provides visual feedback to the user.

Hardware Design

Components scheme

Created using Cirkit designer.

Electrical schematic

Created using Autodesk Fusion360.

Bill of Materials

Component Link to Vendor Datasheet Link
Arduino Uno (ATmega328P) Vendor Link Datasheet
Capacitive touch (TTP229) Vendor Link Datasheet
LCD I2C 16×2 Vendor Link Datasheet
Card scanner (MFRC522) Vendor Link Datasheet
Dual-axis Joystick Vendor Link Datasheet
Passive buzzer Vendor Link Datasheet
Red Push-button module Vendor Link Datasheet
RGB LED module Vendor Link Datasheet

Images

Photo 1

Photo 2

Photo 3

Functionalities

State diagram

  • Notes:
    • The LOGOUT menu can be reached by pressing the red button from any menu of the LOGGED IN state (i.e. the yellow menus).
    • The NOTIFICATIONS_SEE, SEE_FRIENDS and ADD_FRIENDS menus offer interfaces where the user can navigate between entries.

Usage Guide

General Commands

  • Navigation between menus is done by flicking the joystick to the left/right.
  • A click on the joystick button is used for selecting a menu or confirming an action.
  • A click on the red button is used for cancelling the current action or returning to the previous menu.
  • The keyboard does not have a 0 key, so 10 is used as a 0, while 11 is used as backspace.
  • To accept a friend request, the joystick should be flicked up.
  • To reject a friend request, the joystick should be flicked down.
  • As a welcome bonus, each user starts with 200 in the checking account and 100 in the savings account.
  • Buzzer sounds and LED lights accompany the LCD messages as feedback at each step.

State Flow

Start menu

  • The device starts with the Welcome menu. By flicking the joystick to the left/right, the user can navigate between menus and choose the next action, Login or Register, by clicking the joystick button. A Debug menu is also available.

Register menu

  • To register, a card should be placed next to the card reader, and then a 4-digit PIN code is required. If the user is already registered, an error message is displayed, else, the user's home menu is accessed.

Login menu

  • To login, the same steps as for register should be followed, with the exception that the validity of the PIN code is checked. Also, if the user has not previously registered, an error message is displayed.

Logged-in menu

  • After a successful log-in, the user has access to multiple menus, beginning with the Hello menu.
  • To the right, the following menus are available: Main account, Economies account, Friends, Change PIN.
  • To the left, the Notifications menu can be found.
  • From any of these menus, if the red button is pressed, the Logout menu is accessed, where the user is asked to confirm the logout.

Main account menu

  • The user can see the sum available in his checking account. From here, he can add cash, make a payment, transfer money to the economies account and send money to a friend.
  • For each of these actions, a menu asking for the sum shall be accessed. The number must be at most 7-digits long. For each transfer from the account (thus, excluding add cash), the existing sum is first checked. If the balance is insufficient, an error message is displayed, and the transaction is aborted.

Economies account menu

  • The user can see the sum available in his savings account. Every 15 seconds, a 2% interest is added to this sum.
  • The user can transfer money to the main account, in a similar way as described above.

Friends menu

  • The user can access the See friends and the Add friends menus.
  • If he already sent a friend request to a certain user, or if that user sent a friend request to the current user that has not yet been resolved, the current user cannot send another friend request to that user.

Notifications menu

  • There are 3 types of notifications supported: Friend request, Accepted friend request, Received money from friend.
  • The latter 2 can be marked as seen by clicking the joystick button.
  • For friend requests, the joystick should be flicked up/down to accept/reject it.

Software Design

Background and General details

  • The project was developed using the PlatformIO extension for VSCode.
  • The following external libraries were used:
    • LiquidCrystal_I2C - GitHub
      • Used for interfacing the LCD, using the I2C protocol. Provides the LiquidCrystal_I2C class, which offers methods for initialization, cursor placing and writing characters.
    • MFRC522 - GitHub
      • Used for interfacing the RFID card scanner, using the SPI protocol. Provides the MFRC522 class, which offers methods for initialization, card detection and UID reading.
    • TTP229 - GitHub
      • Used for interfacing the TTP229 capacitive keyboard. Provides the TTP229 class, which offers a non-blocking method for key reading.
  • Novelty elements - a banking device that uses a joystick as primary navigation method, adding the fun element to the sobriety of a financial app.
  • Laboratories functionalities used
    • Lab 0 - GPIO: The RGB LED is connected to 3 digital GPIO pins of the Arduino, which are set as output.
    • Lab 2 - Interrupts: The Watchdog Timer is programmed to generate an interrupt every second (to manage the interest gain times for the savings accounts).
    • Lab 3 - PWM: The passive buzzer is controlled using the tone() function, which uses PWM behind the scenes.
    • Lab 4 - ADC: The Arduino reads analog values from the Joystick - analogRead(JOYSTICK_VRX_PIN).
    • Lab 5 - SPI: The Arduino communicates by SPI with the RFID card scanner.
    • Lab 6 - I2C: The Arduino communicates by I2C with the LCD.

Implementation details

Results

Conclusions

Download

Timeline

Bibliography

pm/prj2025/iivasciuc/marius.zaharia2305.1747559501.txt.gz · Last modified: 2025/05/18 12:11 by marius.zaharia2305
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