Close

Improving on TeeEye

A project log for Wake Up and Scream

A wearable sculpture constructed from old student clickers.

eddieEddie 12/19/2023 at 21:050 Comments

With TeeEye I used an optocoupler for each character that I wanted to type.  This came out to around 30 optocouplers/IO pins that were needed.  Scaling that up to 150 devices would be over 4000 optocouplers.  While this would be visually interesting (and something I would love to do) I decided to search for a more efficient/scalable solution.

Here is an article on how keypads work since that's outside the scope of this document but essentially when you press a button you're connecting a point at a column and a row which in my case is interpreted but the device's internal brain and displayed as a character on the screen.

My friend Freakylampss told me I should try using a multiplexer so that's the direction I decided to pursue! 

With this information, I was able to come up with a solution that could use a shift register along with a multiplexer/demultiplexer to control every button on the device! Effectively taking the previously needed 30 IO pins down to just 3.  This would allow me to control six screens from a single Arduino!

Below is the schematic for the circuit that I ended up using.

Here is a list of links/tutorials that helped me figure out what I was doing after my friend sent me in this direction as well as information on how multiplexers and shift registers work.  

Multiplexer - How To Guide (The guide is for a different chip but the principals are transferable) 

Shift Register - Tutorial from Arduino website.  

So how does the circuit work?

The Multiplexer/Demultiplexers each take a 4-bit number that is used to select an input pin on the multiplexer and an output pin on the demultiplexer.  I took these two separate 4-bit numbers and created a single 8-bit number.  I can then use the shift register to send out this single 8-bit number with bits 5-8 controlling the multiplexer and bits 1 - 4 controlling the demultiplexer.  

I then just needed a way to know what 8-bit number I needed to route the signal so that a button press could be emulated.

I made the following table to help get all of that information sorted.  

IC col/row pin is the pin assignment on the multiplexer and demultiplexer

Col Val is the value that should be typed on the screen when the column/row connection is made

bin is the binary number we send out to create a path between the multiplexer/demultiplexer

byte is the decimal representation of the binary number which I used later as a method of storing long strings of text without needing all the space that strings typically take up.

This process took some time to figure out and I felt pretty lost along the way but through trial and error, I got it all to work!

You can see the shift register sending out the 8-bit value and the multiplexer/demultiplexer on the right counting values.  The lowest breadboard ended up getting scrapped in the final design which is why it's not present in the above schematic. 

I think we can all agree that moments like this are why we're here. 

Discussions