Skip to main content
Version: ACS CC

Braille Bidirectional Trainer

An interactive system for learning Braille through visual, tactile and auditory feedback.

info

Author: Ciuperca Robert-Mihai
GitHub Project Link: Project Repository

Description​

The Braille Bidirectional Trainer is a dual-mode educational device. Mode 1 teaches sighted users to write Braille using a 3×3 button matrix, where the second and third columns function as a Braille-style 3×2 input interface based on prompts displayed on the screen. Mode 2 helps visually impaired users practice reading through a 6-solenoid tactile display, with responses entered using the full 3×3 matrix configured as a T9-style keypad and validated through audio feedback.

Motivation​

I chose this project after meeting a visually impaired person and realizing how much a basic knowledge of Braille would have helped our communication. This experience inspired me to create a tool that assists parents and teachers in supporting blind children, while providing young learners with an interactive, fun way to practice their tactile skills.

Architecture​

Project Diagram

The system operates in two modes, selected at startup by pressing specific buttons. Each mode has 3 levels of increasing difficulty, and the user must achieve at least 80% accuracy to advance.

Mode 1 — Learn to Write Braille (Sighted Users)​

The OLED display shows a random letter or word. The user encodes it in Braille using the second and third columns of the 3×3 button matrix, which together emulate a standard 3×2 Braille cell. There is no confirmation button; instead, the system waits approximately two seconds for the user to press the buttons they consider to represent the correct Braille character, after which the answer is automatically validated. A green LED lights up for correct answers, while a red LED indicates an incorrect response.

Mode 2 — Learn to Read Braille (Blind Users)​

The STM32 activates solenoids through an 8-channel relay module to physically raise Braille dots on a tactile plate. The user feels the pattern and types the corresponding letter on 9 red buttons arranged as a phone keypad (multi-press input, like old Nokia phones). Feedback is given via buzzer: one beep for correct, two beeps for incorrect. The STM32 NUCLEO-U545RE-Q acts as the central controller, managing all input/output:

  • Input: 9 red buttons (GPIO)
  • Display: 0.91" OLED 128×32 via I2C — shows letters, words and game status
  • Tactile output: 6 push-pull solenoids (5V 0.7A) driven by an 8-channel relay module
  • Feedback: Bicolor LED (Mode 1) and passive buzzer via PWM (Mode 2)
  • Power: USB-C for STM32, separate 5V 6A PSU for solenoids

Log​

Week 20 - 26 April​

  • Drafted the initial hardware documentation (block structure, component list, wiring notes)
  • Ordered all required components from Optimus Digital, eMAG, Farnell, AliExpress and Ground Studio
  • Refined the project concept: defined the two operating modes (sighted / blind), the level progression logic, and how the selection screen switches between them

Week 27 April - 3 May​

  • The majority of the hardware components arrived
  • Began learning how to connect and integrate the electronic components
  • Studied the datasheets for the STM32, OLED display, relay module, and solenoids

Week 4 - 10 May​

  • Attended the Support Project Work session
  • Received guidance and recommendations from the assistants regarding the hardware implementation

Week 11 - 17 May​

  • Built the hardware part of the project
  • Connected and tested the main electronic components
  • Assembled the keypad matrix

Week 18 - 24 May​

Hardware​

1. STM32 Nucleo-U545RE-Q - Main Microcontroller Unit

  • Handles: buttons (GPIO), OLED (I2C), LEDs (GPIO), buzzer (PWM)

2. 6 Mini Push-Pull Solenoids (5V, 0.7A)

  • Tactile Braille output: 3×2 dot matrix under the tactile plate
  • Powered from external 5V/6A supply switched by the relay module

3. 0.91" OLED Display (128×32, I2C)

  • Visual output for Mode 1: displays random letters, short words and complex words that the user must encode in Braille

4. Push Buttons (16 total)

  • 9 red buttons form a Nokia T9 keypad (3x3)
  • All buttons are debounced in software

5. Relay Driver Stage (8-Channel Optoisolated Relay Module)

  • One relay channel per solenoid (6 out of 8 channels used; channels 7 and 8 unused)
  • Low-side switching for solenoids via relay contacts
  • Jumper between VCC and JD-VCC must be removed when external PSU is connected (failure to do so risks damaging STM32 and laptop USB port)
  • No external flyback diodes, gate resistors or pull-downs required (all handled internally by the relay module)

6. Feedback Outputs

  • 1 Bicolor LED (green/red - correct/wrong) working via 220Ω resistor
  • 1 passive buzzer for Mode 2 (1 beep = correct, 2 beeps = wrong)

7. Power Subsystem

  • External 5V/6A feeds the solenoids only: solenoids use up to ~4.2A peak (6 * 0.7A)
  • MCU powered via USB-C, only GND shared between the two supplies

8. Passives & Wiring

  • Resistors: 220Ω (LED, MOSFET gates), 10kΩ (pull-downs), 1kΩ (buzzer transistor base)
  • 1× breadboard 830pt
  • M-M, M-F, F-F jumpers; plexiglass tactile plate with 6 holes for solenoid pistons

9. Physical Assembly

  • Plexiglass tactile plate with 6 holes drilled for solenoid pistons
  • Solenoids mounted underneath, aligned with the holes
  • Buttons arranged on top (T9 keypad)

Schematics​

Kicad Schematic

Hardware Picture

Bill of Materials​

DeviceUsagePrice
STM32 Nucleo-U545RE-QMain microcontroller130 RON
Mini Push-Pull SolenoidsRaises/Lowers Braille dots130 RON
OLED DisplayDisplays letters/words38 RON
9 red buttonsNokita T9 keypad (3x3 matrix)18 RON
Bicolor LEDVisual feedback1 RON
5V6A Power SupplyPowers solenoids52 RON
8 Relay ModuleControls solenoids activation26 RON
BreadboardConnects all electronic parts10 RON
BuzzerAudio feedback1 RON
Resistors, capacitors, diodes, wiresSupport the main components~30 RON
Perforated boardSolenoids mounted underneath raise through the holes~10RON

Software​

LibraryDescriptionUsage
embassy-stm32Hardware InterfaceActs as a bridge between the Rust code and the physical pins (GPIO, I2C, PWM)
defmtDebug LoggingSends status messages to the computer for debugging via probe
panic-probeError HandlingReports crashes and errors through the debug probe

The rest will be added as I develop the code

  1. The Braille Alphabet
  2. Interactive Braille Trainer
  3. People's opinion on learning Braille