NEW: RoboRover Core is live! Educational robot base with USB-C rechargeable battery, sensors, OLED + Wi-Fi — ready for projects. 🤖

Orders via Akis Express or Box Now (before 12 PM) Mon–Fri ship same day. Cyprus Post orders ship next working day. 🚀

Kypruino Mini Banking System: A Mini NFC Banking Project

Kypruino Mini Banking System: A Mini NFC Banking Project

Team Robo |

In this project, we will build a small NFC-style banking terminal using the Kypruino board, an RC522 RFID reader, a 128×32 OLED screen, onboard buttons, onboard NeoPixels, and the onboard buzzer. The terminal lets users scan a card to open a simulated account, then deposit, withdraw, or transfer virtual money between cards.

This guide is written so that beginners can follow along. You do not need advanced electronics experience, but you should be comfortable connecting simple modules to a microcontroller, uploading an Arduino sketch, and following a menu on a small screen.

Important: This is an educational simulation. It does not connect to real banks, real payment networks, or real bank cards. The RFID card is only used as an account identifier inside the project.


What the project does

The Mini NFC Banking Terminal creates a simple card-based account system. Each compatible RFID/NFC card can be assigned to one account. Once the card is scanned, the user can access the account menu and perform simple simulated banking actions.

  • Card login: scan a card to open a stored account
  • Automatic registration: new cards are assigned to the next available account name
  • Persistent storage: account data is saved in EEPROM, so it remains after power loss
  • Deposit: add virtual money to the current account
  • Withdraw: remove virtual money from the current account
  • Transfer: send virtual money from one scanned card account to another
  • OLED interface: shows account names, balances, menus, and instructions
  • Feedback: NeoPixels and buzzer sounds indicate card scans, success, and declined actions

The result is a fun STEM project that introduces RFID, digital interfaces, memory storage, and transaction logic in a hands-on way.


Components needed

For this build, you will need:

  • 1 × Kypruino board
  • 1 × RC522 RFID reader module
  • 1 × 128×32 I2C OLED screen, usually SSD1306
  • RFID/NFC cards or key tags compatible with the RC522 reader
  • Jumper wires
  • USB-C cable for programming and power
  • Optional 3D-printed enclosure or payment terminal body

The Kypruino’s onboard buttons, NeoPixels, and buzzer are used directly in this project, so no external buttons, LEDs, or buzzer modules are needed.

Card note: The RC522 reader works with many common 13.56 MHz RFID/NFC cards and tags, such as MIFARE-style cards or key tags. It should not be treated as a universal reader for all NFC devices. Real bank cards, phones, and some NFC tags may not work reliably and should not be used for this educational project.

Overview of the Mini NFC Banking Terminal project, showing the Kypruino, RFID reader, OLED display, and card-based interaction.

How the system works

RFID card reader

The project uses an RC522 RFID reader. When a compatible card or tag is placed near the reader, the reader detects the card and reads its UID. The UID is a unique identifier that the program uses to recognise the card.

The project does not store money on the card itself. Instead, the Kypruino stores the card UID and account balance in its own EEPROM memory.

EEPROM account storage

EEPROM is a type of memory that can keep information even when the board is turned off. In this project, EEPROM is used to store:

  • whether an account slot has been registered
  • the RFID card UID linked to that account
  • the account balance in cents

This means that after a card is registered, the Kypruino can remember it the next time the project is powered on.

OLED interface

The OLED screen displays the current menu, account name, balance, and instructions. The interface is designed for a compact 128×32 display, so the information is kept short and clear.

Buttons, LEDs, and buzzer

The onboard buttons are used to navigate the banking actions. The onboard NeoPixels and buzzer provide feedback when a card is scanned, when an operation succeeds, or when an operation is declined.


Wiring the project

Connect the modules to the Kypruino as shown below.

RC522 RFID reader

RC522 Pin Connects to Kypruino
SDA D10
SCK D13
MOSI D11
MISO D12
GND GND
RST D5
3.3V 3.3V

Important: The RC522 module should be powered from 3.3V, not 5V.

OLED screen

OLED Pin Connects to Kypruino
VCC VCC (dedicated I2C port)
GND GND
SDA SDA
SCL SCL

Built-in Kypruino features

Feature Pin used in code
Button A D7
Button B D6
Button C D4
Button D D2
NeoPixels D8
Onboard buzzer D9

Wiring overview showing how the RC522 RFID reader and OLED screen connect to the Kypruino.

Installing the Arduino libraries

Before uploading the code, install the required libraries in the Arduino IDE.

  1. Open the Arduino IDE
  2. Go to Sketch → Include Library → Manage Libraries...
  3. Search for and install MFRC522
  4. Install Adafruit SSD1306
  5. Install Adafruit GFX Library
  6. Install Adafruit NeoPixel
  7. Install Adafruit BusIO if it is not installed automatically

The sketch also uses standard Arduino libraries such as SPI, Wire, and EEPROM.


Uploading the code

Connect the Kypruino to your computer using a USB-C cable. Open the Arduino IDE, select the correct board and port, then upload the Mini NFC Banking Terminal sketch.

When the project starts, the OLED displays:

ATM
TAP CARD

Place a compatible RFID card or key tag near the RC522 reader. If the card is new, the project assigns it to the next available account name. If the card is already known, the project opens the matching account.


Using the account menu

After a card is scanned, the OLED shows the account name, balance, and available actions.

A:OUT      B:IN
C:SEND     D:EXIT

The buttons control the account menu as follows:

Button Action
A Withdraw virtual money
B Deposit virtual money
C Transfer virtual money to another card
D Exit back to the tap card screen

The project checks each operation before accepting it. For example, it will decline a withdrawal if there is not enough balance, and it will decline a deposit or transfer if the receiving account would go above the maximum balance.


Entering an amount

When depositing, withdrawing, or transferring money, the user enters an amount using the four onboard buttons.

The amount editor uses this control layout:

Button Amount editor action
D Move left between digits
B Move right between digits
A Increase the selected digit
C Confirm the amount
Hold C Cancel and return

The display shows a compact instruction line:

<D      B>      A^

The maximum supported balance in the current code is:

EUR 9999999999.99

Making a transfer

To transfer virtual money, the user first scans the sender card and opens the sender account. Then they press C to select transfer.

The screen asks for a second card:

TAP SECOND CARD
C HOLD: CANCEL

The second card becomes the receiver. The project checks that the receiver card is already registered and that it is not the same as the sender card. After the amount is entered, the balance is subtracted from the sender and added to the receiver.

After a successful transfer, the OLED briefly shows both account balances so the user can see the result.


Customising the account names

The project includes a list of account names inside the code. These are the names that new cards will be assigned to.

const char* accountNames[] = {
  "ANDREAS",
  "MARIA",
  "GEORGE",
  "KOSTAS"
};

You can replace these names with your own names. For example:

const char* accountNames[] = {
  "ALICE",
  "BOB",
  "TEAM 1",
  "TEAM 2"
};

New cards are assigned in order. The first new card gets the first name, the second new card gets the second name, and so on.

You can also add more names if you want more account slots, as long as the EEPROM memory of the board is sufficient for the number of accounts.


Changing the starting balance

The starting balance is set in cents. For example, EUR 10.00 is stored as 1000 cents.

const Money STARTING_BALANCE_CENTS = 0;

To start every new account with EUR 20.00, you could change it to:

const Money STARTING_BALANCE_CENTS = 2000;

This starting value is only applied when a new card is registered. Cards that have already been registered will keep their stored EEPROM balance unless the accounts are reset.


Resetting all accounts

If you want to erase all registered cards and balances, the sketch includes a reset option.

Find this line:

const bool RESET_ALL_ACCOUNTS = false;

Change it to:

const bool RESET_ALL_ACCOUNTS = true;

Upload the sketch once. This clears the stored account data from EEPROM.

Then change it back to:

const bool RESET_ALL_ACCOUNTS = false;

Upload the sketch again.

Important: Do not leave the reset option set to true during normal use, or the accounts may be erased every time the board starts.


Understanding the stored money values

The project stores money as cents instead of using decimal numbers. This is a common programming approach for money-style values because it avoids decimal rounding problems.

For example:

  • EUR 0.00 is stored as 0
  • EUR 10.00 is stored as 1000
  • EUR 25.50 is stored as 2550

The OLED display then converts the stored cent value back into a readable format such as:

EUR 25.50

Why use EEPROM?

If account balances were stored only in normal variables, they would disappear when the board lost power or reset. EEPROM allows the Kypruino to remember registered cards and balances between sessions.

This makes the project feel much more realistic. A card can be registered, used, powered off, and then scanned again later with the same stored account information.


Assembling the terminal

Once the circuit is working on your desk, you can place the electronics into a small enclosure or terminal-style body.

  1. Mount the OLED screen on the dedicated I2C port
  2. Place the RC522 reader near the card-tapping area
  3. Keep the Kypruino buttons accessible for menu control
  4. Make sure the NeoPixels are visible if you want the feedback animations to show
  5. Keep the USB-C port accessible for reprogramming
  6. Secure the wiring so it does not pull on the RFID reader or display
Assembly view of the terminal, showing the screen, card-tapping area, and Kypruino controls.

What students can learn

This project introduces several important STEM concepts:

  • RFID/NFC card detection
  • SPI communication
  • I2C OLED display control
  • EEPROM memory storage
  • Menu-based user interface design
  • Button input and long-press detection
  • Digital feedback using LEDs and sound
  • Data structures for storing account records
  • Basic transaction logic
  • Input validation and declined operations
  • Representing money values safely using cents

It also teaches an important engineering idea: a system is not just made of hardware. It also needs rules, memory, feedback, and safety checks to behave in a reliable way.


Possible extensions

  • Add a PIN code before allowing access to an account
  • Add an admin card for resetting or editing accounts
  • Add a receipt screen after each transaction
  • Add a transaction history stored in memory
  • Add different account types or spending limits
  • Add a larger screen for a more detailed interface
  • Add a 3D-printed payment terminal enclosure
  • Use the project in a classroom economy or token system

Final thoughts

The Mini NFC Banking Terminal is a creative STEM project that combines RFID cards, memory storage, screen menus, buttons, LEDs, and sound into one interactive system. By scanning a card and performing simulated transactions, students can explore how digital systems identify users, store data, and respond to different actions.

Although it looks like a small banking or payment device, the project is fully educational and self-contained. It does not use real money or real banking systems. Instead, it gives learners a safe and practical way to understand the logic behind card-based interfaces, stored accounts, and digital transactions.

Final view of the Mini NFC Banking Terminal concept, combining card scanning, account storage, OLED menus, and button-controlled transactions.

Leave a comment

Please note: comments must be approved before they are published.