nexo banner

nexo

7 devlogs
16h 17m 14s

An open-source smart speaker utilizing a Raspberry Pi as a brain of the speaker. It’s using a high fidelity DAC board connected to the RPi and a Hi-Fi amp to create a smart speaker with really high quality audio that even competes with Sonos.

This project uses AI

I used GitHub copilot for code auto completion.
I also used Google Gemini for some help with getting Linux things up and running, such as finally getting a virtual cable working, and for some other generic help with the code over all to fit the architecture I ended up going with.
I also used Gemini a little bit to fix some typos and/or wrong pronounciation and writing issues with Readme’s (since I’m not a native english speaker 😅)

However most of this project is hardware based, so there wasn’t really a way to use AI there.

Demo Repository

Loading README...

imst

Shipped this project!

Shipping the nexo speaker again. Now I finished some final touches (heh) and made little printed stickers for the contactless buttons so it’s easier to find them and actually control the speaker. I ended up 3D printing them from white PLA and then gluing them onto the wood which came out pretty nice. They also have some height so it’s a lot easier to find them even in the dark with just your touch feel. So yeah, this is getting pretty final now!

imst

Created little printed sticker buttons so that you can tell where to touch to activate the contactless buttons as I sometimes didn’t touch it properly 😅. They’re 3D printed and then glued on. I modeled them in OnShape, I also wanted them to kinda look like Sonos control icons that they use on their speakers.

Attachment
0
cskartikey

Tagged your project as well cooked!

🔥 cskartikey marked your project as well cooked! As a prize for your nicely cooked project, look out for a bonus prize in the mail :)

imst

Shipped this project!

Hours: 15.35
Cookies: 🍪 212
Multiplier: 27.15 cookies/hr

So I built a smart speaker which is kind of designed to directly compete with commercial products from companies like Sonos or Denon. The speaker connects to Wi-Fi and can stream music directly from Spotify and also a player can be connected to it through Bluetooth for quick easy offline playback. I CAD modelled every part for it in OnShape (viewable on GitHub) and then 3D printed it. I even created an acoustically dead enclosure for it using plaster of paris and PVA glue with which I filled up the sides of the subwoofer enclosure. The whole speaker is then wrapped around a wooden shield to make it look really nice and minimalistic and also save tons of plastic and printing time. It even features an app which the user can use to control it and change its settings, even it’s equalizer. It also features a dynamic EQ to account for the Fletcher-Munson curve (so it dynamically boosts bass on lower volumes), which a lot of high end commercial speakers do. All logic is programmed in python and it’s running on a Raspberry Pi inside. It features a Hi-Fi DAC+ to provide high quality analog audio to a TPA3255 amplifier which powers a dayton subwoofer and 2 mid speakers and 2 tweeters. The hardest part probably the volume/EQ managing part, which I figured out by implementing various protection precautions in it to hopefully protect the speakers in the long run. Making the wooden enclosure was also pretty difficult because it just took really long and took a lot of force, I also had to be really careful to not break it while bending it. I ended up tackling that pretty well though. I’m really happy with how it turned out, it actually sounds really amazing. I actually do use this project on a daily basis, which I’m really happy about, because it’s actually a project with a good use case! So yeah, I think that’s it. Overall it’s an opensource Hi-Fi quality speaker that anyone can build!

imst

When listening to music at low volumes, the human ear is less sensitive to lower frequencies (it’s called the Fletcher-Munson phenomenon / equal-loudness contour). That’s why most modern commercial speakers boost the bass on lower volumes and then remove that boost on higher volumes to protect the speakers.

I did exactly that with a dynamic EQ on my speaker. I created a new EQ in my DSP software carla, I added logic to my python control script, so that with each volume decrease from 80% (to protect from overpowering) the EQ adds some boost to the 40, 63 and 100 Hz bands. I calculated the amount which should be added each step by picking a set volume at 33% and making it sound good to my ears and then calculating the steps it took from 80%. Like this it sounds really good for every volume level, however I am kind of a bass head so it might be a little bass heavy. It will also be different for every other speaker.

Which thanks to the previous devlog, where I finally properly sealed the subwoofer enclosure, makes the speaker sound REALLY GOOD NOW !!! I’m actually super happy about it because it actually sounds amazing to me now (again, I really love bass).

I also changed up a bit the way the logic fetched the current volume of the playback source, because that was a little inconsistent, now it should be perfect.

So yeah, I think the speaker is fully ready for basically production now! :D

– (I just want to acknowledge this, because some people might think I actually made it at lightspeed)
BTW, this speaker was not made within just 15 hours of work, it took a lot longer (about 110 hours total everything), I just didn’t know lapse existed before, plus I sometimes didn’t want to record with lapse as I was doing most woodworking at school on our machines, so it would feel weird to me. My hackatime was also sometimes not linked properly, so it didn’t track time. Also please take that into account when rating the project! Thank you :D

0
imst

Okay, so….. a little problem arose…. the subwoofer enclosure wasn’t sealing properly enough which was making the bass sound a bit more muddy and not clear than it should have.

This happened because the front ring, that housed a few nuts for the front plate to screw into, broke off from the sub enclosure because the glue wasn’t strong enough and also there was a lot of stress on it, essenntially ripping off the front plate entirely from the enclosure.

So I had to disassemble the speaker to fix it. I removed the glue residue so the new glue could stick properly and would sit on more cleanly. I ended up using epoxy resin, which with 130 kg/cm3 force should properly hold up the stress this ring will be getting from the wooden enclosure pressing onto it.

Now it sounds a lot more better, especially the bass is a trillion times better now.

0
imst

After tons of work on the wooden outside enclosure, i finally fully finished it and now the speaker is fully done and built. It works really well and it sounds amazing, I’m super happy about how it turned out, it also looks extremely clean and minimalistic, just as I wanted it, thanks to the wooden outside, which was a pain to make and then fit all together but I managed to do it!

Attachment
Attachment
Attachment
1

Comments

aloyak
aloyak about 2 months ago

damn this is really cool!!

imst

Figured out how Lapse works and added a fraction of my work dedicated to the wooden enclosure of the speaker!

Attachment
0
imst

Shipped this project!

Hours: 9.13
Cookies: 🍪 205
Multiplier: 22.46 cookies/hr

So I built a smart speaker that is able to connect to Spotify and directly stream songs from it using the Spotifyd library (which uses librespot, thanks a lot to librespot, because Spotify seemingly does not care about small developers) and also it can work as a basic bluetooth speaker to which you can connect to using any bluetooth transmit device using the aptX codec! The whole smart speaker uses an RPi 5 as the brain (could even be a zero 2 w probably) and it also uses some LEDs as feedback for the user (mainly about volume, but also skipping tracks, pausing/playing, restarting spotifyd (in case it breaks), kicking a user from bluetooth or force switching to bluetooth mode while Spotify is playing. All of these controls are controlled using 3 key switch sensing modules (basically buttons that can sense fingers a few mm away from it so it can sense through wood). The software part uses Linux for the audio processing, where I’m using pulseaudio with some optimized settings for high quality resampling (44.1 kHz to 48 kHz) and I’m also using Carla as a type of DSP to edit up, equalize (and also add more bass, because I love bass) and split the sound accordingly (so that 20-200 Hz goes to the subwoofer, 200+ to the midbass speakers and 2000-20000 to the tweeters) so that it sounds really nice. I also spent a lot of time making the plastic enclosures, gluing everything together, figuring out and fixing some structural issues I’ve encountered, and mainly, what I’m really proud of, is making the subwoofer enclosure. I filled the sides of it out (they were not filled, but had air in them) with a plaster of paris mixture with PVA glue to make a really nice acousticly dead heavy enclosure, so the subwoofer has an optmized enclosure to produce bass notes in, thanks to this, I managed to get the low tuning frequency down to 50 Hz, which is lower than the subwoofer is rated for! Overall this was a really cool project and I actually think I managed to make a speaker that sounds better than most smart assistants and actually is able to fight with even more expensive speakers that Sonos offers. The main challenging parts were figuring out the audio software things, because I’ve had a lot of problems while doing this project with Linux and audio issues, however I ended up figuring them out and making it even better than what I had at the start. I also had some issues with hardware and gluing things together and making the subwoofer enclosure airtight, but I figured out those things too, somewhere I had to make and print a new part, or add a bit of silicone. Overall I’m really proud of how the project turned out and I’m really happy with how it sounds. A lot more documentation and information is on my GitHub readme, so please check that out too!

imst

There’s gonna be alot of stuff here, but basically, I finished the whole code for the speaker. The time spent here only consists of some code, because I didn’t have hackatime installed when I started coding, but yeah. In this devlog I made the whole speaker work, I added install and startup scripts that work great and I got all functions I wanted to work, such as the connection with the app, buttons, LED feedback etc. I also made spotifyd work, so the speaker is able to directly stream music through Spotify using Spotify connect and I also added support for bluetooth so i can connect to the speaker using bluetooth. I’m currently working on it’s wooden outside enclosure which I will add to the attachments!

Attachment
0
imst

I’m working on my first project! This is so exciting. I can’t wait to share more updates as I build.

Attachment
0