At my new job, we have part of an office building. The door leading to our section is locked. It leads to a large room that’s our general meeting room, and then our offices are located along the outside wall. The problem we had is that when we had deliveries or visitors, it was very hard to hear them knock. Especially if we were listening to something on our headphones.
Instead of doing that normal and boring route of buying a wireless doorbell, I decided to make a doorbell and take the opportunity to do some enhancements that a plain wireless doorbell wouldn’t do. After all, we are an innovation center.
I had an Arduino handy, and it would also connect to an Android phone. Connecting to the phone gave me some extra things that would be useful (connecting to the Internet, playing sounds, etc).
So how it works is that an app starts on the phone that runs a background service that listens is constantly monitoring the connection to the Arduino. The Arduino runs a small program that has an interrupt handler that gets fired when the RF receiver gets a signal. I also have some LEDs on there for visual debugging purposes.
So the whole flow of it is that the doorbell is pressed, an RF signal is sent to the RF receiver. The RF receiver fires an interrupt on the Arduino, the Arduino sends a message to the Android device. The Android service picks up the message and fires a notification to Slack, which is a chat program we use at work. So we actually see the knock on our computer screens. The Android device also plays a sounds through some speakers connected to it. After it plays, the Android device sends an acknowledgement back to the Arduino so it can “clear” and be ready for the next time.
If I could do it over again, I would’ve used a Raspberry Pi or bought a shield for the Arduino to allow it to connect directly to the Internet. The connection between the Android device and Arduino is just to flaky. Once it’s up, it’s great. But if the Arduino loses power, you have to make sure it restarts and verify the connection is established.
Also, if I could’ve gotten an RF sending button that looked more like a traditional doorbell, that would’ve been helpful. We had to add a label to the button so people knew it was a doorbell.
The other enhancement would be to write a small app that we would listen for notifications only when we were in a certain area (using geofences) so we could be notified directly on our phones.