Putting the “automation” in home automation with Arduino
Whether my kids or myself are to blame, it drives me crazy to see large electricity bills from cooling and heating the house when nobody’s actually in the house.
Looking for a solution to the problem and driven by “stream” technology, I decided to build my own smart home IoT system to collect and monitor temperature, humidity, and motion in my house. As a platform, I chose the Arduino Uno board, and in less than a few days, I had a running system to collect the sensor data and visualize it in realtime.
However, visualizing the data was not enough. I needed a system that would track the data, understand normal patterns, and notify me when abnormal patterns emerged. For example, if there was no motion in the room, but the A/C was left on, the temperature and humidity would drop abnormally.
A common problem that pushes any Arduino&co fan to think making his own home automation system, sooner or later. But how to solve those issues raised above?
To solve this problem, I built on top of my existing IoT system and implemented two additional services:
- PubNub: a realtime data stream network to stream sensor data
- Anodot: a smart platform to collect and automatically analyze data and alert when abnormal patterns are detected
PubNub’s network provides a two-way data stream to my sensors (so later I can control devices in my home) and it has supported SDKs for Arduino and Node.js. PubNub also provides reliability, availability, and efficiency guarantees, so I don’t have to worry about data not being sent or received.
Anodot’s platform provides everything that I need for data visualization, analytics, and automated alerting based on its machine learning algorithms that automatically find abnormal patterns in my sensors’ data.
For the base model, I used the Arduino Uno with the Ethernet shield. (Later I plan to replace it with Arduino Nano and the low cost ENC28J60 Ethernet adapter.)
To this base system, I connected the following sensors:
- DHT11 temperature and humidity sensor
- BMP180 for barometric pressure and temperature
- HC-SR501 passive infrared motion sensor
I used the open-source DHT11 and Adafruit sensor libraries to read information from the BMP180 sensor and the DHT sensor.
The web interface could be for instance the following one:
Further details, code and schematics here: Putting the “automation” in home automation with Arduino