Few months ago I got myself an Arduino Uno board from Adafruit. I have had couple use cases I was going to try to use them for in order of importance
- Water leak detection e.g. put a sensor in crawl space or attic for early detection of water leaks
- Garage door open/close state - find out if the garage door has been left open
- Humidity and temperature monitoring around the house
After receiving the board and playing with some of the basic examples I figured it was time to resolve how to push sensor data to a central location. Some of the options I discovered were as follows
- XBee modules. Approx cost per module ~ $20
- Bluetooth - Approx cost per module $7
- 315/433 Mhz remote control - Approx cost per module ~ $1
- Nordic Semiconductor nRF24L01+ modules - Approx cost per module ~ $1
XBee and Bluetooth are really nice options however I considered them too overpriced for this particular use case so I went ahead and bought a pair of 433 Mhz and nRF24L01+ modules.
First thing I tried was 433 MHz modules. They were easy to wire and configure since e.g. transmitter has only 3 pins and receiver 4 pins (although you only use 3) and using the rc-switch project libraries I was able to communicate between my Arduino and a Raspberry Pi. The drawback is that it’s fairly low bandwidth and payload size maxes out at 24 bit so pretty limiting.
That said an interesting side benefit of these modules is that large number of remote controlled power outlets out there use either 315/433 Mhz bands e.g. Etekcity outlets. If you have a remote controlled device in your house you can look up what frequency it uses with FCC ID search. There is also the 303 Mhz frequency however I have not been able to find the modules for it yet.
As a result of this tinkering I know am able to turn outlets around my house with my phone :-).
Nordic Semiconductor nRF24L01+
These are a lot more tricky to get going as they have total of 8 pins with one unused and it is easy to mis-wire things. It took me a lot of trying to get these going however I finally got it going and was able to pass data between the Arduino and a Raspberry Pi. Max payload on this is 32 bytes which should be enough for shipping out metric data and you can ship them at a pretty rapid rate. Libraries I ended up using were these
Do note that these may not work with Adafruit’s Trinket.