Activity

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

Shipped this project!

Hours: 6.65
Cookies: 🍪 92
Multiplier: 13.9 cookies/hr

This project is a mobile phone app for android made for connection with my Nexo smart speaker (other project). The app is built in React Native in JavaScript. It uses multiple screens. A part of the home screen is a wifi scanning function which scans the wifi for nexo speakers. It then saves the found speakers and caches them so next time the app opens its loaded quickly. You then can access each speaker in the menu and control it independently and change each of its functions, such as volume, equalizer, network connection, etc. The app can be toggled between light and dark mode and also has an english and a czech version. On the home screen you can view realtime playback of the speaker, which song is playing. When spotify is playing, it even shows the art cover, for bluetooth music it doesn’t. It shows the songs metadata and the speaker which it’s playing on. It’s made to support a master-slave speaker configuration for multi-room function, where on the home screen you’ll be able to only adjust the volume of the whole system and then in each speaker setting you’ll be able to control them independently. I had issues that I had to solve when making the network scanning function, which I ended up fixing and making it work. At first I had issues with it even running at all, then it worked fine in an android emulator, however when I built the apk, it didn’t work again. After using promises with the web requests and after giving specific network access for the app using app.json in Expo I finally got it to work and now it works great even when built. It’s now more rigorous and scans multiple subnets where the speaker could be hidden. Overall this app helped me learn a lot about app development and also about the specific permissions the app needs. It’s very cool to see the app finally work in the end.

imst

In this devlog, I basically created the whole phone application. It uses React Native and is programmed in JavaScript. It uses multiple screens. A part of the home screen is a wifi scanning function which scans the wifi for nexo speakers. It then saves the found speakers and caches them so next time the app opens its loaded quickly. You then can access each speaker in the menu and control it independently and change each of its functions, such as volume, equalizer, network connection, etc. The app can be toggled between light and dark mode and also has an english and a czech version. On the home screen you can view realtime playback of the speaker, which song is playing. When spotify is playing, it even shows the art cover, for bluetooth music it doesn’t. It shows the songs metadata and the speaker which it’s playing on. It’s made to support a master-slave speaker configuration for multi-room function, where on the home screen you’ll be able to only adjust the volume of the whole system and then in each speaker setting you’ll be able to control them independently.

Attachment
Attachment
Attachment
Attachment
0
imst

Shipped this project!

Hours: 10.69
Cookies: 🍪 52
Multiplier: 4.86 cookies/hr

So I built a testing Django café management website which helped me deepen my understanding of Django. The hardest part about this was probably figuring out the whole architecture and thinking about how to make everything work together. Which I tackled by creating two seperate web pages, one for staff, the other for customers, which are independent from eachother. I like how it turned out, because it looks simple and minimalistic while still being functional and having everything work. Another pretty difficult part of this was also making the qr codes work on the staff page, because after django loads the html, django isnt initialized anymore so i can’t dynamically create the qr codes like that, so I solved it by generating qr codes for all tables into a hidden part of the webpage and then fetching the qr code images from that into the actual order cards. This could’ve been done differently though. I also had to write a decent amount of javascript code on the template html files to make it work fluently with the backend and make it fetch in realtime and update every few seconds. I like how it turned out, I also learned a lot of things by doing this for actual website production. Because I wanted to dockerize it and make it docker ready I also learned a lot about docker and now I finally understand how it fully works and why people use it very often.

imst

Adding a second time tracker which I forgot to add before where I was writing the documentation and also finished created the docker file which is fully working now and the app is dockerized and can be run thanks to it basically anywhere.

Attachment
Attachment
0
imst

In this devlog, I created the whole app. I created the architecture in Django, where I edited the urls.py file to add endpoints to the specific sites the application will be hosting. I also edited the settings file to use the .env file to be more secure and also add the django qr code library to then make the qr code generation work. Furthermore I linked the PostreSQL database to the django app inside this settings file for it to work properly with the database. Now for the actual app, I created the needed views for django which range from the specific table websites which the customer can access, order drinks with specific drink types, view their orders and track them and see if they got accepted/completed/rejected or missed. This also uses a predefined .html template I created using the bootstrap CSS framework to make the designing a bit quicker. I then created the staff panel website in a similar way, I created some logic in the views file to pass through some information from the backend into the frontend, and then created the html template file which has some JS code to make fetching from the backend continuous and work good, the same way the table template has it. There’s also logic for the time updates on the orders. The backend does this logic and it updates and checks for these time constraits every time someone fetches the orders. Lastly, I created a website to login to the staff panel where users log in with their username and password. the password is securely hashed on the backend and it’s then stored as a hash on the database. I then also edited the admin page so that it’s possible to create new things, I added some constraints to models so specific types have to be used and also linked through the drink type and the drink. I then also created a custom migration to create a test admin user. The last thing that completes this whole project is unit testing, where I’m testing different things about this app including model integrity, time constraints.

Attachment
Attachment
Attachment
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