I was looking for a fun project to create with one of the first Raspberry Pi's I ever got. I soon realized the potential of the development board, but was long searching for a really nice project. I came across a YouTube post from Kyle Prier where he created a proof of concept streaming internet radio.
While recreating the project I soon realized that some of the code could be improved, for example shorten the initial loop, refactor the LCD code into its own library and use interrupts to check for button presses.
When the project became more and more stable I began to research the way to package it into a real device instead of having to use the breadboard permanently. That gave rise to research speakers, drivers and the way to construct them from scratch. I wrote a program to calculate the optimum volume for the speaker enclosure and how to vary width, breadth and depth while keeping the fixed volume (something I did not find the tools for online).
The Sketchup design for the device
I had to learn how to use SketchUp and Fritsing to create a design and the design for the PCB that would connect all the parts in stead of the breadboard.
Fritzing breadboard layout
The eventual implementation of the schematic
I created a carboard prototype and am on the verge of actually creating the device in wood.
The completed wiring excluding the buttons. It works!
Completed buttons, all pass quality testing.
Wednesday 3rd of May 2017
I am finding that the display is somewhat unstable. After booting the display functions as expected, but after one or two button presses (no matter what button) I am starting to see garbage on the display. I have two of the same displays in my possession and I am seeing this issue with both displays, leading me to believe that this is a software issue.
I 'reverse engineered' the LiquidCrystal.h library that is used in combination with an Arduino, seeing as the display works correctly on that platform and found that the timings need finetuning. I changed and added some extra timing settings in the code and rewrote the init and bitwrite functions in the LCDLib.py module.
I need to test it still, but will post on my progress.
Will keep you all posted!