Sandhills uses a general purpose operating system (in this case Debian Linux running on a Raspberry Pi) coupled with some electronics to provide Internet access and remote monitoring out the bush.
The goals of the system are :-
- To give us access to the Internet while we are out there.
- Give us access to information about Sandhills while we aren't there, and
- Have the whole system run 24/7 with a very low power and cost footprint.
Simply, the system consists of an ARM (SoC) based computer and a few support components. Cheap 802.11 and 3G USB dongles provides wireless LAN, Internet and allows the system to form part of a larger wireless mesh.
The computer system:
The ARM based SoC computer is a Raspberry Pi. It runs a version of Debian GNU/Linux called Raspbian. It performs the tasks of managing and establishing the 3G internet connection, providing a wireless (802.11) access point, participating as a 802.11s mesh node, collecting information from various sensors, updating statistics about Sandhills to a web site, and running a web-cam using motion software. The Raspberry Pi board, with its 700MHz processor and 256Mbytes of RAM might seem underpowered to some, but it runs these tasks with ease.
Major software components of the Debian/Linux computer are :
- PPPD for 3G connection handling.
- HostAPd and DHCPD for local 802.11 access.
- Kernel based 802.11s mesh networking.
- Use of GPIO pins for sensor and control functions.
- Motion software in conjunction with a cheap web-cam for seeing what's going on out there.
- Some shell and Perl scripts bringing it all together.
The supporting electronics:
The Raspberry Pi needs to interface with the real world, and to do this it makes extensive use of its General Purpose Input-Output (GPIO) pins.
Firstly, the cheap 3G dongle is not very reliable and likes to "lock-up" after prolonged use. A script running under CRON on the Raspberry Pi checks for the failed state of the 3G dongle, and triggers the removal and re-instatement of power for the USB port it's connected to. This can be seen on the schematic diagram involving the relay.
Secondly, the Raspberry Pi keeps track of the supply battery voltage. I do a simple ADC (Analogue to digital) conversion of the 12v system to read the voltage. As the Raspberry Pi doesn't have an on-board ADC, I use an external IC. That's what the MPC3201 chip is doing.
Next I am using a Dallas DS1820 temperature sensor for reading the temperature. There's support for this IC directly in the Linux kernel, so implementing temperature reading is simple.
Finally, I have a rain sensor based on a tipping-bucket design. I have a simple daemon running on the Raspberry Pi that waits for the tipping bucket's reed switch to momentarily close. It then registers 0.5mm of rain in a counter.
All that's left is a buffer IC to convert 5v logic to the 3.3v the Raspberry Pi wants, and obviously the 12v-5v switching supply itself.