My LED light project is in it's final stretch before we bring it with us to the Electric Forest festival at the end of the month. I have a lot of updates, but for now I just want to post a video of the lights in action. Stay tuned for a more detailed post where I talk about the final hardware/software for this project.
Over the last few months I’ve been working on a LED light project. I’ve already blogged about hooking up the LED matrices and the accelerometer. I also blogged about my frustrations with product defects and setbacks. But I never really wrote about the actual goal of the project. Until now!
The goal of the project is to build a portable square matrix of LED lights that can be affixed to our backpack at music festivals. The lights will be passive - that is, there won't be any buttons, knobs, or any other required interaction. However, the lights will be supported by some sensors (such as the accelerometer), which will allow it to react to its surroundings. The LED matrix will display colorful moving images that will hopefully be at home at music festivals...you know, the fun rave-y kinds.
I didn’t want to declare this goal too early because I was afraid the project wouldn’t be feasible. I didn’t want my fourth blog post to be an apologetic explanation about how my project idea was fundamentally flawed! I decided to build a proof-of-concept first, and then blog the specifics second.
I'm excited to share more details about the project. It has come a long way over the past few weeks. But first, I'd like to talk about three potential “show-stoppers” that had me worried when this project was in it's early stage.
An accelerometer will be a fundamental input source for the device; but, unfortunately, both the lights and the accelerometer use the same connector on the Raspberry Pi. To get this to work, I would need to stack the LED controller on top of the accelerometer connector so they can “share” the same GPIO connection. I thought this wasn’t going to work at all. Surprisingly, it worked just fine. For those following along at home, I used the Adafruit RGB Matrix Hat and the 3-Axis ADXL342 i2c accelerometer (connected via this i2c shield).
To make good use of the acceleration readings from the accelerometer, I’d need to run a physics simulation in the background while the lights are running. Then, I could render physical objects on the screen that respond realistically to movement. I considered this to be a major challenge because the light display, physics simulation, and acceleromter would all need to run fast enough to maintain at least 30 frames per second - below that frame rate, things will start to look choppy.
The only way to prove that this could work was to build a prototype and test it out. It was a happy night when I finally got everything running. Yes, the Raspberry Pi (model 3B) is indeed fast enough to run the physics simulation (in pybox2d) and the lights (using this package by hzeller) at the same time. However, it can only simulate a small number of physics objects at once. Performance drops dramatically when there are over 100 physics objects at once.
This was the grandaddy of all potential show-stoppers for this project. The LED matrix runs at 5V, but it takes a lot of current. The Raspberry Pi itself probably doesn’t take much juice, but requires a stable and uninterrupted power source. I started off looking at drone and remote car batteries, thinking I’d need something beefy like that. Eventually, I remember that I already own this fairly powerful battery for charging my Nintendo Switch. I had to buy this cable off of Amazon to connect the battery to the LED hat. After that cable arrived in the mail, I stalled on testing the battery for about a week. I was afraid of finding that it wouldn’t work and that the project was over. Fortunately, that wasn’t the case. In my testing so far, the battery worked for 90 minutes and, according battery status, is still somewhere between 75% and 100% charged.
This isn’t a total victory yet. I want to test that battery all the way to 0% so I know exactly how much time it can run when we are “off the grid”.
They might not. I won’t really know for sure until I try. Music festivals often allow totems, which are border-line spears. Festivals also allow LED hulahoops. So, I feel like I have a good shot at getting my project into a festival. That said, I will need to try hard to make my device look safe not scary.
I haven’t posted to the blog in awhile. And when the time without a post is this long, I feel like I need to return with some good quality content. I’d love to write a fun post about my progress on the LED light project but, unfortunately, it has suffered from several set-backs over the past few weeks.
After getting one LED panel working, I decided to buy three more panels. The panels are designed to be tiled together to form a larger display. Sadly, all three of the new panels were broken (one was cracked and the other two didn’t turn on). So, determined to keep the project moving forward, I bought another four panels. To my dismay, all four of those were broken too! So, I returned seven broken panels to Amazon all at once.
I did some research online and learned that I need to be careful with Amazon returns. If I were to buy and return another big batch of these panels, I’d be at risk of getting my Amazon account suspended. I had my Dad buy four panels with his account, and I bought another two panels of a slightly different design with my own account. I’ve tested two of those six so far, and fortunately, they both work.
The broken panels were a big set back. Testing and troubleshooting the panels takes a lot of time, and it’s frustrating working for a few nights and making zero progress.
Aside from the LED panels, I’ve also been tinkering with an ASUS Tinker Board S. This was my Christmas gift from my Secret Santa, Mike (thanks, Mike). It’s a single-board computer, very similar to the Raspberry Pi, but more powerful. At the same time, it’s less widely used and therefore more difficult troubleshoot by searching online. I’ve learned that 90% of tinkering is troubleshooting, so that’s a big deal.
I loaded an operating system for the Tinker Board onto an SD card, and somehow I completely bricked the SD card shortly thereafter. So, the project is on hold again until I get a new SD card.
I hope to have another update on this project soon. I have a working concept of what this project will become, but I still need to check if there’s any show-stoppers in terms of feasibility.
This is a continuation of my last post about tinkering with the Raspberry Pi, which you can find here.
I recently purchased an accelerometer along with an "i2c" connector that makes interfacing the accelerometer with the Raspberry Pi easier. To be specific, the accelerometer I bought was a model ADXL345. You may recognize an "accelerometer" as the device that lets your smartphone know which way it’s being tilted or moved. Similarly, the Nintendo Wii famously used an accelerometer in its controller so you can swing it around to bowl or play tennis.
There were a few good tutorials online that helped me get the accelerometer working. I was surprised how easy it was to set up. Plus, on the hardware side, no soldering was needed!
I found a very simple example program online to take a single acceleration reading using python. I expanded on that example, and developed a small python module that can initialize the accelerometer, modify its calibration, and provide acceleration readings whenever requested. I could even get hundreds of readings per second, if necessary.
Out of the box, the accelerometer’s calibration wasn’t great. It provides three acceleration values (think of these as up/down, left/right, and forward/backward). When the accelerometer is at rest (i.e., sitting on my desk), two of those accelerations should be zero and the up/down direction should show earth’s gravitational acceleration (32.2 ft per second squared) in the downward direction. It was off by about 10% in one direction, but that was easy to recalibrate.
I like tinkering on tech projects, but I don't know much about electronics and hardware. I know enough to assemble a computer and debug simple hardware problems - but I am incapable of doing custom electronics. I want a new fun project that I could use to broaden my knowledge of electronics. While I still don't know what that project is going to be, I decided to start by playing with some LED lights because they're fun and visual.
I stocked up on various components that work with my Raspberry Pi 3. For those who are uninitiated, the Raspberry Pi 3 is a $35 computer that's about the size of a deck of cards. It's designed to be very extendable, so capable tinkerers can use it for things like robotics, smart home accessories, etc. I used the Raspberry Pi for the machine-learning traffic camera project about a year ago. For starters, my goal was to get a single matrix of LED lights working. To do this, I needed the following components:
I felt like I was in over my head when I discovered that everything wasn't pre-soldered for me. I've never soldered before, despite actually owning my own soldering iron. The first few minutes of soldering went very poorly, but I eventually got the hang of it. I made a few newbie mistakes with the soldering; for example, I soldered one of the connectors backward - so I needed to use a razor to shave a part of the plug down so it could fit into the backward connector.
After taking care of all the hardware, I booted up the Raspberry Pi and installed some software to drive the LEDs. I used an open-source software library that appears to be the go-to standard for these types of LED projects. This software should enable me to show any arbitrary image/animation on the LEDs. Plus, it comes with a few built-in examples that are good for testing the hardware; one of which is a spinning multi-colored square.
Initially, I was thrilled because the LED display sprang to life on my first attempt to run the example. But, then I realized that the screen was really only showing the color red - no blue and only a tiny bit of green. I was stuck debugging this problem for a few frustrating nights. I fiddled a bunch with the software, I tried every capable power cord in our apartment, I resoldered every connection, I even soldered a custom jumper wire between two pins (I read online that this customization improves LED performance) - but none of these things fixed the problem. I spent some time poking at the board using a multimeter when I finally realized that the wires leading to the LED matrix were carrying a lot less power than they should have been. I used the multimeter to connect the 5V input directly to the LED display, and to my amazement, the lights started glowing with the full spectrum of color. There must have been a defect with the RGB Matrix HAT (or more likely, I must have broken the HAT while soldering). To fix it, I soldered a jumper between the 5V input and the connector that leads to the LED matrix. I have a feeling a skilled electrical engineer would have found a more elegant fix to this problem - but I was pretty proud that I found any fix to the problem.
This was a super rewarding starter project for someone looking to learn a bit about electronics. I'm especially excited about this because there's a lot that can be done from here. These LED panels can be daisy-chained together to make a bigger display, plus I can program the panels to display just about anything. I already have a few ideas for the next steps - but I will keep those to myself for now.
© 2017. All rights reserved.