Some time ago I stubbled on the topic of Angel of Rust(If you haven seen it, you're missing out! Go check out the 2285-inspired control panels topic), and I was really impressed by the work! One can't help but to be inspired and I really wanted to give building such beautiful panels a try myself too.
I organize a small convention in the Netherlands. And next years theme is going to be space!
So I finally have a valid excuse to start working on these panels. When I started drafting plans for the project I found that I have taken much inspiration from the former project of Angel although there where a few key points I took a different approach: I/O expanders instead of multiplexers and matrixes I want to use I/O expanders and PWM drivers for all the button inputs and light outputs. This would make eventual construction a bit simpeler in hooking everything up. And make changes or upgrades to the setup easier.
I went for modules which where most used and readily available. So it was easy to find example code/libraries and breakout boards.
- MicroControler: Teensy LC
- I/O expander: MCP23017 (for reading all buttons)
- PWM Driver: PCA9685 (Driving leds)
- multiplexer: 74HC4067 (reading analog inputs
- Serial to rs485: SP3485
- usb to serial rs232
- adc-dc converter: LM for turning 12v into 3,3v
- Momentary pushbuttons with build in LEDS
- 10K sliders
- touchpanel or ps2 joystick for mouse input
- leds or led bars for indicators
- segment displays with driver TM1637
More about the I/O expanders:
So I chose the I/O expander because I wanted what seems for me an easier way to hook up all the buttons when it comes to building the panels Without reading multiplexers and dealing with matrixes(not that there is anything wrong with that, I just wanted to take a different approach) The MCP23017 uses i2C, a protocol for devices to talk over a bus that only needs 2 wires. Additionally the chosen I/O expander offers a 3th wire to send interrupt signals to the micro controller. This allows us to have the controller only start reading buttons as soon one is pressed(its a bit more advanced than this, but I'll save that for later). Each expander can handle 16 inputs, and has 8 addresses you can assign. So with 8 expanders in one bus you could read up to 128 buttons!
The PWM driver:
With all buttons having their own leds. it would be so much cooler if we could control each led individually. Even more awesome: dim them as well. So there we have the PWM driver. PCA9685 also uses the i2C bus. And can drive 16 outputs with 62 possible addresses for each driver you can control up to 992 PWM outputs ! 😃
Design of pcb:
Following suit I come to a similar design of a main board, which houses all the power management, and communication and computation. From there we can break out to break out boards where w can hook up the I/O expanders, PWM drivers, Analog input and drive a multiplexer. I also kept room in the design for when something else needed to be done, eg driving an segment display instead of reading analog inputs.
A friend helped out and designed the main board for me(I also lacked the licence to go 10x10) and I designed the breakout. Both in Eaglecad.
Here is the mainboard: (note: these screen shots I found on my pc will likely not represent the final version that was used for the order, so minor things like trace with or spacing might not be representative.)
And the breakout:
I ordered the boards at jlcpbc.com and a couple of days later these boards showed up in the mail:
They turned out excellent. Happy with the result.
This is how they turn out almost fully poplulated:
Perhaps I should have started posting sooner. And keep some sort of blog to how I got to this point. But I'll try to back track and cover all the parts if there is an intrest for that. I could add more detail on the io expanders the i2c protocol. And also cover on how I got them to work in code.
If you find particular parts interesting, please let me know and I can make follow up posts in more detail.
Thanks for stopping by!