Phoneme Board

by pantherman594 in Circuits > Assistive Tech

350 Views, 2 Favorites, 0 Comments

Phoneme Board

Phoneme Board Demo

Welcome to Phoneme Board! This is a board with a set of blocks that can be adjusted to any of the 44 phonemes in the English language. By rearranging the blocks, someone would be able to create any word that fits on the board. This was designed for a student in Boston College's Campus School, as a part of my Physical Computing course's Assistive Tech project.

The system was designed so that the blocks, which you may need many and have the largest potential of being handled roughly and broken, were as simple and cheap to make as possible. Almost all of the electronics are enclosed in the board. It is also designed to be large and tactile, and easy to use.

Supplies

For the board:

  • 1 Raspberry Pi. The board was designed for the Raspberry Pi 3 A+, but any with audio out will work (it just may not line up with the case's holes)
  • 1 Breadboard
  • 1 MCP3008 analog to digital converter (Adafruit)
  • 1 74HC595 shift register (Adafruit)
  • 2 RGB LEDs
  • 4 220 ohm resistors
  • 1 3.5mm mono audio socket
  • 4 M3 8mm screws
  • 6 M3 16mm screws
  • 6 M3 nuts
  • 1 light touch switch (instructions) or any other assistive tech switch that plugs into a 3.5mm socket
  • 1 laser cut "board_laid_out.svg" on 1/8 inch birch
  • 1 3D-print "Cover.stl" and "Base.stl"

For each block:

  • 1 trim potentiometer (Amazon)
  • 4 pogo pins (Amazon)
  • 6 small neodymium magnets (Amazon) (or 7, if using the optional holder)
  • 2 inches of copper tape (Amazon)
  • 1 blank PCB (Amazon)
  • 1 1M ohm resistor
  • 1 vinyl-cut "wiring.svg"
  • 1 3D-print "Base.stl", "Button.stl", "Top.stl", and optional "Holder.stl"

General:

  • 3D printer
  • Vinyl cutter
  • Laser cutter
  • Soldering iron
  • Hot glue gun
  • Lots of wires
  • Ferric Chloride and a container to etch the PCBs

See https://github.com/pantherman594/phoneme-board for the code and parts to laser cut/3D print

Set Up the Raspberry Pi for CircuitPython

See the instructions on Adafruit's website: https://learn.adafruit.com/circuitpython-on-raspberrypi-linux/installing-circuitpython-on-raspberry-pi.

Install all the necessary libraries, as well as the "festival" program to convert the phonemes to speech using the following commands:

sudo pip install adafruit-circuitpython-74hc595
sudo pip install adafruit-circuitpython-mcp3xxx
sudo apt install festival

Prepare the PCBs

PXL_20220413_203732660.jpg
PXL_20220413_203817445.jpg
PXL_20220413_203941106.jpg
PXL_20220413_205500801.jpg

For better durability on the board, we will be creating PCBs, using a vinyl cutter to create a mask. Do this wearing gloves, and be careful not to get any of the ferric chloride on your skin.

  1. Vinyl cut "wiring.svg" from the Github repository.
  2. Apply the mask to the bottom of the blank PCB
  3. Place the PCB in a container with ferric chloride, and agitate them
  4. After the excess copper has been removed away, thoroughly rinse off and dry the PCBs
  5. It is okay if there is copper left on the top half of the board, as long as there are 4 separated lines running across the entire width.
  6. Remove the vinyl mask
  7. Properly dispose of the ferric chloride

See https://www.instructables.com/TinyDice-Professional-PCBs-at-Home-With-Vinyl-Cutt/ or https://www.instructables.com/Printed-Circuit-Boards-PCB-using-the-Laser-Cutte/ for more details on the PCB making process.

Solder the PCBs

PXL_20220413_221508726.jpg
PXL_20220413_221502064.jpg

Solder the PCBs together. Join the middle 3 across all the PCBs, leaving the bottom separated. (The top line will not be used). If the gap is too large to solder, you can also use a wire to join them.

Test the resistance from one end of the board to the other. This should be as small as possible (< 1 ohm resistance) so that it doesn't interfere with reading the potentiometers.

It would've been better to use a single large PCB, but that would've been significantly more expensive.

Solder Wires to the PCBs

PXL_20220413_225016859.jpg

Solder a wire to each of the bottom traces and the 3 middle traces on the side.

Assemble the Board

PXL_20220413_225650982.jpg
PXL_20220413_232002704.jpg
PXL_20220413_232009747.jpg

The largest piece goes on the bottom, then the others stack on top. The PCB goes above the second layer, with the wires routed through the channel. Screw them all together with the 6 M3 16mm screws, and hot glue as necessary.

It will be helpful to keep the wires organized for wiring later.

Wire Up the Board

circuits_bb.png

See the attached diagram. The bottom 3 represent the blocks, and the wires connecting them to the main board correspond with the order of the traces on the PCB: the second one from the top goes to ground, the third to 3.3v, the fourth to the first pin on the MCP3008, and each channel goes to their respective pins on the MCP3008.

The pull-down resistors on the MCP3008 pins are necessary so that the pin is not floating when a block is not placed in that slot. The diagram has them moved for visibility, but they are simply wired to ground and the MCP3008 pin.

Glue Magnets to the Blocks

PXL_20220419_152649366.jpg

Attach them to Button and Base, with magnets all facing the same direction so that they will repel each other when Button is placed above Base.

Wire Up the Base of the Block

FPO04ISL2RLDD4C.png
PXL_20220429_020127967.jpg
PXL_20220419_153813585.jpg
PXL_20220419_153352084.jpg

See the attached diagram. Solder 4 wires to pogo pins, and place them in the bottom 4 holes. The first one goes to ground on the potentiometer, the second to 3.3v, the third to the left nub, and the fourth to the data pin on the potentiometer. Connect another wire from the data pin to the right nub. The nubs will be connected when the Button is pressed, allowing for a reading.

Make sure the pins are lined up, because if they are not (like in the last image) it will be difficult to get a consistent reading out of them.

Hot glue to secure when done.

Assemble the Blocks

PXL_20220429_021047569.jpg
PXL_20220504_224343296.jpg

Place a piece of copper tape across the Button part, so that when it is pressed, the two nubs are connected. Make sure everything is lined up, with the notch on Button in the corresponding slot on Top, and the 3 magnets directly in Button on top of the 3 in Base. The potentiometer screw should peek out of Top. Hot glue it together to secure.

Copy the Code Onto the Raspberry Pi

Copy the code from https://github.com/pantherman594/phoneme-board/blob/main/phoneme_board.py onto the Raspberry Pi, and install all the necessary libraries. Add "python /home/py/phoneme_board.py &" to the "/etc/rc.local" file, so that the code will run on startup.

Try It Out!

mpv-shot0001.jpg

You're done! Optionally attach the holders onto the board with another magnet, using a block to help guide the placement, to ensure a secure connection.

The LEDs will flash white 3 times on startup. After that, they will show a 2-color code representing the block in the first position. See codes.txt for more details.

Press the light touch switch to play all the sounds in sequence, creating a word! Alternatively, press the button on each block to hear that block's sound.