2019-01-13
If you’re like me, then you probably have a million project ideas that have been on the backburner for ages. Eventually, it gets to the point where the sheer number of projects becomes overwhelming. The moment you start working on one project, you immediately think to yourself “Should I really be working on this one right now? Perhaps this other project is more important…“. As a result, you end up in a state of “Project Paralysis”. You stop making progress on any of your projects because you’re continually trying to decide which one is the most important.
So, in an effort to break my current state of “Project Paralysis”, I’m going to start writing about some of the projects I’ve had on the backburner for a while. With any luck, this will help me figure out which projects I should tackle in the near future!
My apartment just has 2 old wall units for heating and air conditioning. These units don’t have any thermostats, so I have to control them manually throughout the day. But, this becomes a problem at night since I generally try to be asleep, and thus cannot turn them on and off. So, I’ve been thinking about automating these units.
There are really 3 main components to this project. First, I would need a way to be able to measure the temperature in my apartment. I’ve tested some DHT22 sensor modules, and they appear to do the trick.
Second, I need a way to control the AC units. Since these are older, mostly-mechanical units, it will be difficult to automate most of their functionality. So for now, I’ll just settle with an automated way to turn the entire units on and off. The easiest way to achieve this is probably to insert a relay between the AC unit and the power supply. I’m not exactly an electrician, so I’ll need to do some homework before I start wiring things together.
Third, I need to create a control unit that will integrate these other two components. Fortunately, as a software engineer, this will probably be the easiest part of the project. I’ll probably just connect everything to a Raspberry Pi and implement the logic in Python.
I installed some blackout curtains recently, and now my apartment finally gets dark at night! Unfortunately, the downside is that it stays dark in the morning. I can’t see the sunrise anymore, which is making it difficult to wake up in the mornings!
So, I want to rig up some motors that will be able to open/close my curtains on demand. I’m thinking about using some stepper motors to drive some GT2 Timing Belts. These belts will then be connected to the curtains, and will hopefully be strong enough to open and close them!
Of course, the ultimate goal is to have the curtains open automatically a little before sunrise. So, to achieve this, I’ll hook the curtain motors up to some Arduinos. These Arduinos will be responsible for controlling the motors based upon various commands that are received.
Lastly, I’ll probably setup a Raspberry Pi to actually send the commands to the Arduinos. This will allow for a lot of flexibility in the behaviors. For instance, I can change the times to open/close the curtains, or even control them “manually” through a web service interface.
My friend Britney and I were huge fans of the Pebble Time watch. One of this watch’s killer features was that it allowed you to view your upcoming schedule at a glance. So, there was no need to find your phone, unlock it, and navigate to the calendar app. Everything you needed to know was right there on your wrist!
The FitBit Versa is the spiritual successor to the Pebble Time. However, FitBit chose to market the Versa as more of a “Fitness Tracker” rather than a “Smartwatch”. As a result, they dropped the Timeline feature in favor of some exercise-related features.
So, we decided that we’d use the FitBit SDK to recreate the Pebble Timeline feature!
There are a number of technical hurdles we need to overcome for this project. First, the FitBit UI does not allow elements to be created/destroyed dynamically. Instead, you have to create tons of extra “placeholder” elements beforehand and control their visibility via code. This constraint makes it difficult to implement anything that operates as a list. But, fear not! We’ve overcome this obstacle and created a UI prototype:
Second, the FitBit Companion API is very bare-boned. Most disappointingly, it does not appear to expose any calendar-related information from the phone. So, we’re currently trying to figure out the best way to create an Android->FitBit bridge so that we can obtain this information. We believe this can be achieved by hosting a web service on the Android device itself, but this solution seems a bit clunky. Therefore, we’re still investigating other alternatives.
The remaining hurdles seem to be fairly small in comparison to these two. So, hopefully we’ll be able to wrap up the project in the coming weeks!