Mini Braille Telegraph
Team
- Aneri Muni
- Rachel Clark
- Harley Deka
- Kevin Mairena
Project Summary
The goal of the project is to create a device that will be able to receive a string and write the letters in Braille. The string is received via a UART breakout board from an app and sent to the mbed. An arm composed of a Stylus with a ball point attached to a linear actuator. The arm moves back and forth and is able to indent the paper with the help of a solenoid that pushes the paper up to the stylus so that the indent can be punctured. A stepper motor is used to scroll. more paper through the braille slate. Every time a new letter is printed, the letter is displayed on an LCD attached to the device to demonstrate that the correct letter is being printed in Braille.
Components & Materials
- Mbed
- Bluetooth UART Breakout Board
- uLCD-144-G2
- Stepper Motor
- EMIC Text2Speech Breakout Board
- H-bridge breakout boards (2)
- Slate & Stylus
- Paper
- Solenoid
- Linear Actuator
- Plastic Enclosure
- Speaker
- MOSFET
- Wall Adapter Power Supply (2)
Wiring Tables & Diagrams
Linear Actuator | Mbed |
---|---|
+ | p19 |
- | p20 |
PWM | p25 |
Stepper Motor | Mbed |
---|---|
Forward A | p5 |
Reverse A | p6 |
Forward B | p7 |
Reverse B | p12 |
Solenoid | Mbed |
---|---|
DOT_PIN | p8 |
Bluetooth | Mbed |
---|---|
Serial Tx | p28 |
Serial Rx | p27 |
Vin | VU |
gnd | gnd |
LCD Header | LCD Cable | Mbed |
---|---|---|
5 V | 5 V | Vin |
Serial Rx | Serial Tx | p9 |
Serial Tx | Serial Rx | p10 |
Reset | Reset | p11 |
gnd | gnd | gnd |
Mbed | EMIC | Speaker |
---|---|---|
VU | 5 V | |
gnd | gnd | |
p13 | SIN | |
p14 | SOUT | |
SP+ | + | |
SP- | - |
Code
main.cpp
#include "mbed.h" #include "new_chars.h" #include "uLCD_4DGL.h" #include "motordriver.h" #include "StepperMotor_X27168.h" #include "emic2.h" // stepper motor StepperMotor_X27168 smotor(p5, p6, p7, p12); // linear actuator Motor lin_act(p25, p19, p20, true); // pc serial Serial pc(USBTX,USBRX); // solenoid DigitalOut dot_pin(p8); //DOT_PIN, connected to solenoid // Bluetooth Serial blue(p28, p27); // LCD uLCD_4DGL uLCD(p9, p10, p11); // serial tx, serial rx, reset pin; // EMIC text-to-speech emic2 emic(p13, p14); // tx, rx // constants for movement const float sol_wait = 0.5; // Prints out a braille character void printChar(int c) { lin_act.speed(1); wait(0.1); lin_act.speed(0); wait(1); if (c >= 97) { c -= (97-65); } for (int i = 0; i < 3; i++) { if (chars[c-65][i]) { dot_pin = 1; wait(sol_wait); dot_pin = 0; } if (i == 2) continue; wait(0.5); lin_act.speed(1); wait(0.1); lin_act.speed(0); wait(1); } // stepper motor moves paper for (int i = 0; i < 10; i++) { smotor.step(0); } // move lin act back to start lin_act.speed(-1); wait(1); lin_act.speed(0); wait(0.5); lin_act.speed(1); wait(0.1); lin_act.speed(0); wait(1); for (int i = 3; i < 6; i++) { if (chars[c-65][i]) { dot_pin = 1; wait(sol_wait); dot_pin = 0; } if (i == 2) continue; wait(0.5); lin_act.speed(1); wait(0.1); lin_act.speed(0); wait(1); } // stepper for (int i = 0; i < 20; i++) { smotor.step(0); } lin_act.speed(-1); wait(1); lin_act.speed(0); } int main() { lin_act.speed(-0.9f); wait(2); lin_act.speed(0); emic.volume(18); uLCD.printf("Welcome to the Mini Braille Telegraph! Waiting for message..."); emic.speakf("SWelcome to the Mini Braille Telegraph! Waiting for message.\r"); pc.printf("Starting...\n\r"); while (true) { char c = blue.getc(); if (c == ' ' || c == '\n') { for (int i = 0; i < 40; i++) { smotor.step(0); } continue; } pc.printf("Message: %c\n\r", c); uLCD.cls(); uLCD.text_width(4); //4X size text uLCD.text_height(4); uLCD.printf("%c", c); emic.speakf("S%c\r", c); printChar(c); wait(1500/1000.0); } }
Libraries
Braille Character File
chars.h
const int chars[][8] = { {1, 0, 0, 0, 0, 0}, // A - 65 {1, 1, 0, 0, 0, 0}, // B - 66 {1, 0, 0, 1, 0, 0}, {1, 0, 0, 1, 1, 0}, {1, 0, 0, 0, 1, 0}, {1, 1, 0, 1, 0, 0}, {1, 1, 0, 1, 1, 0}, {1, 1, 0, 0, 1, 0}, {0, 1, 0, 1, 0, 0}, {0, 1, 0, 1, 1, 0}, {1, 0, 1, 0, 0, 0}, {1, 1, 1, 0, 0, 0}, {1, 0, 1, 1, 0, 0}, {1, 0, 1, 1, 1, 0}, {1, 0, 1, 0, 1, 0}, {1, 1, 1, 1, 0, 0}, {1, 1, 1, 1, 1, 0}, {1, 1, 1, 0, 1, 0}, {0, 1, 1, 1, 0, 0}, {0, 1, 1, 1, 1, 0}, {1, 0, 1, 0, 0, 1}, {1, 1, 1, 0, 0, 1}, {0, 1, 0, 1, 1, 1}, {1, 0, 1, 1, 0, 1}, {1, 0, 1, 1, 1, 1}, {1, 0, 1, 0, 1, 1} // Z - 90 };
Stepper Motor Library
Import libraryStepper_Motor_X27168
The API for a Stepper Motor providing position and speed control for an Automotive Gauge Stepper Motor.
Please log in to post comments.