Introduction: Yet Another Arduino Boombox
This is another version of a music device with an Arduino UNO, a Bluetooth receiver, an FM radio, a clock and a small IR remote, all with a small touch screen, so a combination of several of other Instructables that you may find in this web page (I think that not even the title is original). This is not an actual boombox, but just the audio part without amplifier or box.
There is maybe a different thing in this project. Many implementations that I found inadvertently pass the common mode noise from the digital part of the BT to the audio processor. I solved the question by inserting a differential amplifier between the BT and the preamp, so all common mode noise in positive and negative terminals of the BT audio output get cancelled, and only the difference signals pass.
In this implementation I use a touchscreen so there are no buttons except for those of the IR remote. This provides enhanced information, reconfigurability, and a simple enclosure with no mechanical elements. I do not provide any enclosure design, but just the hardware and software designs.
We have four parts in this project. The first one is an audio processor that can be controlled from the arduino, The processor is the rather old TDA7439, used in many other Instructables projects. It provides multiplexi for four stereo inputs. One of the input is the Bluetooth, which is floating. The floating output of the Bluetooth is designed like that so the common mode noise produced by the digital section of the device can be rejected using differential ampifiers. So, I designed a simple differential amplifier using a pair of Op Amps LM 4562 that get rid of the common mode noise. The TDA7439, and the differential amplifiers will be powered with a simple 7808 regulator in the same board. We will add another 7808 to this board in order to power the Arduino and the touchscreen.
In the second part, we will construct another board for the BT, the radio, the clock and the pins for the IR remote. These two boards will be stacked and connected to the Arduino using pinheads, so we will not use any cables except for the power, audio output, and auxiliary audio inputs.
The third part is the control of the different devices to the arduino. In particular, the audio processor, the radio and the clock use the I2C bus, so controling them is failry simple. The Bluetoot is controled using the UART interface, but since it is already in use by the touchscreen, we need to simulate another one in Arduino pins 10 and 11.
The fourth part consists of the software that controls the whole device. As a programmer I suck, so you will see that my script is subject to huge improvements. Anyways, I will use a set of Arduino libraries for the touchscreen, bluetooth, radio, IR, multiplexer and so on.
In spite of poor programming, the device is functional. The Bluetooth and the radio show the metadata when available, and the TDA can be controlled to set the sources, volume levels and equalizer levels, plus the device shows the hour and date or, optionally, an analog clock face. The program, as it is, exhausted the memory of the Arduino, but better implementations may require less memory, thus adding new functionalities to the device.
Step 1: Design of the Audio Processor
The eagle files of the audio processor are provided. You can see here the TDA connected to the differential amplifiers and the rest of the inputs. I also included two power sources, one for the devices on the board, and the other one to power the Arduino. The male pinheads are placed to match the female ones of the other board.
The differential amplifiers are constructed with two LM456 low voltage audio Op Amps. One amplifier is the differential itself, and the other one is a constant voltage reference that simulates a double polarized 2.5 volt polarization. I tried to match input and output impedances.
The board is double sided. In my implementation, I etched it at home, and used a toner transfer method, and a simple mixture of vinegar, hidrogen peroxide and salt. I am not explaining how to do it because there are a number of instructables that do it, and many alternatives to do a better job. Since I cannot make vias, all soldered components must be soldered in the two sides, which makes the result look very dirty, as you can see in the picture, but it works and it is solid.
Four sets of male headers need to be placed in the bottom side of the board to match the corresponding female ones in the BT and radio board:
- 2 headers in the pads labelled as Vout. This will power the rest of the boards
- 3 headers in the pads labelled as SCL / SDA . This is the I2C bus to the TDA7439
- 3 headers in the pads labelled as L2/R2
- 4 headers in the pads labelled as BT
The rest of pads are placed in the top side for voltage input (from 9 to 12 volts), two audio inputs (unused in this prototype, but functional) and the audio output. The cables that you see are there because I did not buy 4 of the 12 0.47 uf mylar capacitors, so I just bridged them for the test. You do not need to add any cable to the boards.
Bill of materials
Their places in the circuit board are detailed in the eagle files below.
- Voltage regulators:
- 2 X 7808
- 12 X 0.47 uF, ceramic or Mylar
- 4 X 22 nf, ceramic or Mylar
- 4 X 100 nf, ceramic or Mylar
- 2 X 5.6 nf, ceramic or Mylar
- 2 X 2.2 uf, tantatium, non polarized
- 2 X 100 nf, ceramic
- 2 x 10 uf, electrolitic
- 8 X 47 K
- 5 X 2.7 K
- 2 X 5.6 K
- 1 X TDA7439
- 2 X LM456
Step 2: Design of the BT and Radio Board
The bluetooth that I chose is the Sparkfun breakout board of RN 52. It is easy to include in a design and all Arduino files and documentation are provided in the Sparkfun webpage. It is a little expensive, though. A Sparkfun breakout board that includes the SI4703 tuner is used in this design. The libraries and comments are also available in Sparkfun. I needed to update the BT firmware prior to the design for it to be able to get the music metadata. The RN 52 manufacture's webpage provides with the needed instructions and files. The RN52 uses 3.3 volts, and the rest of the devices use 5v. The Si4703 page in Sparkfun specifies that this device must be powered at 3.3v max, but the Si7403 datasheet clearly says that it can be safely powered up to 5.5v. I then powered everything with the power outputs provided with the Arduino board, and I needed level converter to communicate the BT with the Arduino. The converter is also a Sparkfun breakout board. I used a Chronodot RTC as a clock.
The board is made of male headers to connect the breakout boards. On the top side you have to place headers for the BT and the radio, and then solder these breakout boards. The bottom side contains the level converter and the clock. Note that these two are placed backwards. The cables that you can see in the picture are two already corrected errors, so in the uploaded version of this board there are no cables.
Two 47K 1/8 w resistors *must* be placed in their marked positions in the Chronodot. They are the pullup resistors for all devices connected to the I2C bus. Apparently, the radio has pullup resistors that would do the job, but my circuit did not work without the clock resistors on it.
There are also two sets of 8 male headers in one of the sides of the BT and two sets of 8 and 10 male headers on the other side. They are to be soldered in the bottom side.
Finally, the radio has a header to connect the antenna.
There are also female headers in the top side. They match the male headers that are in the bottom side of the audio processor, so they connect together.
I also added a piezobuzzer that sounds when a button is pressed, and a remote.
Bill of materials
- 2 X 47 K 1/8 W resistors
- 1 X Chronodot RTC board
- 1 X piezobuzzer
- 1 X remote and sensor. I found the one of the picture and link in eBay for less than $3. It uses the NEC standard. There are many others. In order to make them work, you can refer to this very useful instructable.
- 1 X bi-directional level converter
- 1 X RN 52 breakout board
- 1 X Si/403 breakout board
Step 3: Connection to the Microcontroller
I used an arLCD, which is an Arduino UNO clone attached to a TouchScreen. I chose it because I already had it, but also because it only uses pins 0 and 1 corresponding to the Arduino UART. I need another UART for the Bluetooth, which is implemented in software in pins 10 and 11.
Once everything is connected, it looks pretty compact, and it is ready to be programmed.
As you can see, I did not include any amplifier, just tested it with some computer speakers. There are a lot of instructables where people design boomboxes and they are very good. You can connect my device to any of them.
Step 4: The Software
The Arduino file is provided below. I do not provide the libraries, but they can be found in the Internet. I provide the links. You need to download the headers (.h files) and the cpp files of all the libraries and include them in Arduino. For the links provided below, just click on download ZIP, and then, in Arduino, just click Sketch, Import Library, Add Library, and then click on the downloaded ZIP. This will extract and add libraries and examples. They are:
Wire.h (included in the Arduino IDE libraries)
EEPROM.h (included in the Arduino IDE libraries)
Again, there are a lot of instructables on how to program or upload scripts to the Arduino, so I will not make any explanation here.
The program is pretty commented, though, as an EE I am not proud of what I did, since it is not well structured and optimized. Many of you can do a much better job. Nevertheless, it works. The program controls all devices and you can change the sources and settings both from the screen or the remote.
The device has a main screen that switches from BT to radio and to the equalizer. besides, there is an analog clock that appears upon clicking in CLK. The screen is a GIF, and you can do your own. Just draw your buttons and then remove the Alpha channel so the GPU can read it. The image must be 320X240. The image must be stored in the arLCD memory, inside /EZUSER/IMAGES folder, and the Arduino will find them right away (no need to specify the path)
The radio can store up to 9 channels in the memory and it has seek function. The settings and the hour are persistent if you unplug the device from the power.
That is pretty much all. Do not hesitate to contact me for anything and if you improve the thing (there is a lot of room for improvements), let me know. Thanks for reading.