January 11, 2023 at 18:53
In today’s world, many of us are working from home or remotely, and it can be difficult to know when someone is in a meeting. To solve this problem, I created an “On Air” sign that lights up to indicate when a meeting is taking place.
The sign is designed to be placed practically anywhere, but this one is mounted outside my office door. It is made up of two main parts: a 3D-printed base and a circuit board. The base is designed to hold the components, and was printed using PLA filament.
The circuit board is where the magic happens. It contains a Raspberry Pi Zero W, addressable RGB LEDs, and a few simple electronic components. When the Raspberry Pi receives a signal indicating that a meeting has started, it lights the sign red. When the meeting is over, the sign changes to green.
This "meeting has started" signal is sent from a countdown timer that was
created in JavaScript / HTML. When the countdown hits "00:00", a signal is sent
over to the Pi running the web.py
library - example below. If you want to see
other examples on how to wire / code the LEDs, please have a look at my earlier
Kid Wake Up Light post.
import web
urls = (
'/', 'index'
)
class index:
def GET(self):
# This is the script that will run when the user visits the webpage
print("Script running!")
return "Script ran successfully"
if __name__ == "__main__":
app = web.application(urls, globals())
app.run()
The countdown timer was the most difficult for me, as JavaScript and I don’t get along very well. The good news is that it came out great and runs the sign like a champ! If you want to use it too, I’ve tossed it here for you to test out / bookmark / download.
3D printers typically take a while to complete. This one was finished in ~6 hours, and it was assembled with some M3 20mm screws. It wasn’t until after all this was done did I realize adding a camera would be a neat bonus. I’d certainly like to see who was walking up to the door throughout the day. That’s much more convenient than constructing a window above my computer monitors.
Thankfully, the Raspberry Pi has low cost cameras that connect directly to the board. I unfortunately purchased the v2 model a few days before the v3 was announced. This will eventually need an upgrade since this one performs poorly in low light.
update: I eventually upgraded to this camera with built-in IR. It works great!
The Motion software package is quick to get up and running, has a lot of configuration options, and can get someone streaming video within a few minutes. It listens on port 8081 by default and is visible through any web browser. It can be installed, setup, and ran by typing the following on your command line.
$ sudo apt install motion
$ nano /etc/motion/motion.conf
$ sudo motion
After all that was done, it needed a place to stream to. Having a browser tab always open on my PC would be a terrible option. I would always need to remember to open it, and flipping back and forth between tabs to view the stream would be tedious. A better option would be a dedicated screen. Thankfully, my Magic Dashboard is a perfect spot. I "simply" moved some widgets out of the way and added a module for an iframe. Now the video stream sits pretty on the bottom right of the screen 24/7!
This sign wasn’t "easy-to-make" or "simple" for beginners, but it is a great way to let others know when you’re in a meeting without having to rely on calendar invites or email. It also makes it easy to see when I’m available to play video games or if I’m stuck in another boring meeting.
Overall, this project demonstrates the versatility of 3D printing, the Raspberry Pi, LEDs, and the potential it has to help us create smart and useful devices with a little Python / JavaScript. With a little creativity and motivation, you can solve lots of fun problems!