‘Beep, beep, beep...’. It’s my alarm. I can’t recall how many times I’ve hit the snooze button. I know it’s too early, but somehow I’m still late! I try to wake my daughter to get her ready for school, but she just complains about it being too cold, and throws the covers over her head. The next 30 minutes are a blur; a cacophony of breakfasts being eaten, socks being found and bags being packed. Somehow we’re out of the door and on our way to school.
Unfortunately it’s a bit of trek to my daughter’s school, a 50 minute slog. We play I spy and number games to pass the time. I try to ignore the fact that I’m going to be late for work… again. Then a small voice pipes up and says, “Daddy - I think I’ve left my lunch box at home”. My heart sinks. We’re 45 minutes away from home. There’s no way we’re turning back now. Another ‘emergency lunch order’ to be purchased, the worst parent of the year award goes to me, for the second week in a row.
It’s always something, whether it’s umbrellas, coats, book bags, lunch boxes - you name it, we’ve left it. Now, thanks to Azure and Arduino, nothing is left behind. Nothing Left Behind is a context based object tracker; just throw a Thing into a lunchbox or the pocket of a coat and Azure will send out an alert if the Things don’t leave together.
What it does
Each Thing is a battery powered Arduino MKR1000 hooked up to Azure IoT Hub. Azure IoT Hub manages device state and triggers Azure Functions whenever new telemetry is received. Azure Functions queries Azure CosmosDB and produces alerts (Twilio SMS messages) if Things drift apart.
Why Azure? As each Thing is battery powered, reducing energy consumption is critical. By only powering up to check-in with Azure we can leave the heavy lifting of calculations and sending alerts to the power of the cloud. Moreover, as each Thing isn’t always connected to the internet (it will spend most of its life in sleep mode) Azure IoT queues commands (like play a sound, or turn on the light) until the Thing checks-in again.
How I built it
Please head over to GitHub for the project's source code and build instructions.
Challenges I ran into
The first prototype used Wi-Fi signals to compare the position of each Thing. Unfortunately, even when stationary the Things would send different scan results. As a result, v1.1 uses a very simple set of rules for determining if a Thing has been left behind - i.e. is a Thing which belongs to a Thing family, still connected to Wi-Fi when the other Things from that family aren't? If yes, send an alert.
What's next for Nothing Left Behind
The current version of Nothing Left Behind depends on a Wi-Fi connection to communicate with Azure (so leaving something at school is still a problem). I've ordered a couple of Arduinos with SigFox onboard to test their location detection capabilities, which I hope will become v2.