This original RadMon project was done in Oct. 2011. (Its been running since then!) However it remained a "personal project" mainly due to it's complexity and cost. Today I'm happy to announce a kit with similar capabilities at a much lower cost. Faster, smaller cheaper marches on!
Enter the GK-RadMon. You can read about it on this page.
This project ("RadMon") measures the background radiation outside the house, and transmits it to a display station inside the house. The outside sensing unit is solar powered (but it doesn't have to be), and should have a range of at least 50m. The display station inside the house continuously displays the current background (along with temperature and humidity), and logs it to an SD card along with date / time. Daily high counts and other information are also displayed.This page describes the final form of this project. If you are interested in the prototypes that led up to - perhaps to build your own using off the shelf components and the Geiger Kit - check out the Project Evolution page. There is also a page for The 2.4GHz Version of this project. After a lot of time and energy, I've concluded that 433MHz version works better for my needs. You can check out the summary at the bottom of that page for the reasons.
The Outside Sensing Unit
With the UC_PWR jumper on the Geiger Kit removed. This separates the Vcc that powers the Geiger HV circuit from the ATmega328. This allows the sketch to control the power to the Geiger circuit from an I/O pin. Using the Geiger circuit only when needed saves power.
I designed a small board that plugs into the Geiger Kit that holds the RFM22B transceiver. A 3.3V voltage regulator is also provided as the "load" output of the solar charger is unregulated. The newer v2 release of this board is shown. (click pic for larger image)
Software-wise, the sensing unit is a client (it initiates communication).
- It turns on power to the Geiger circuit which accumulates counts for 1 minute. It uses ~16mA in this mode.
- It sends CPM, temperature, humidity, Vcc voltage, analog A0 & A1 values, and battery status to the display station inside the house. This is a quick burst of ~80mA.
- It waits for a response from the display station's server. This could be no-op, or some command (i.e. change transmit interval).
- It powers off the Geiger circuit and the RFM22B and puts the ATmega328 in sleep mode.
- When powered down, the circuit draws only (.73) mA.
- The time spent in "power down" is determined by the server sending a “transmit interval” command. So, for example, when the client is reporting normal background counts, the server may instruct the client to sleep for 4 minutes between it’s one minute counting periods. If the background radiation increases beyond a set point, the server may instruct the client to send counts more often.
The Display Station
The original display station was an Arduino, plus an Adafruit Logging Shield and a PCB I designed to interface the RFM22B transceiver. Later I realized that the design could be streamlined quite a bit by putting all those components on a single board. This board is shown below . . .
The display station PCB provides:- ATmega368 "Arduino" microprocessor
- real time clock with battery backup
- microSD card
- interface to the RFM22B transceiver
- header for LCD & contrast pot
- jumper to control the backlight from program or switch
- a resistor network for 5 menu buttons or a joystick are included
For the enclosure I used this aluminum case. I also added a cheap FTDI board so that I could power the unit from a USB power cube and also upload new sketches without opening the case. Here is a diagram for connecting the FTDI board to the display station. A joystick button on the right side controls the menu. (Here is a breakout board for the joystick button that would make it much easier to mount.)
Software-wise, the display station is a server (it responds).
- It receives CPM, temperature, and Vcc voltage, the 2 analog inputs, and the battery status, from the client.
- It converts CPM to uSv/h – ratio set by menu.
- It displays them along with the daily high for CPM.
- It also writes this data to the SD card in CSV format with a date/time stamp provided by the RTC.
- If CPM exceeds an alarm threshold set by menu, the piezo sounds and an LED remains lit for the day.
- If CPM exceeds another threshold set by menu, a command is sent to the sensing unit that puts it in "no sleep mode" where new readings are taken every minute.
- The menu also lets you set the clock, the CPM to uSv ratio, the normal sleep time and can bring up a second display format.
Both RFM22Bs are driven by an excellent library created by Mike McCauley. Big thanks!
The Adafruit Solar Charger provides two outputs for battery status - "Charging" and "Done" (battery charged). The sensing unit sends both of these to the display station where they are displayed and logged. They provide a good indication about how the solar charging is working. Here are some actual results: Test begins with the battery charged - "Done" status
The RFM22B can provide temperature from it’s in-chip sensor but it's not really accurate for outside temperature. I added a DHT22 temperature / humidity sensor to the outside sensing unit which provides a much more accurate temperature as well a % humidity. Great sensor!
The calculations for the power budget of the solar powered sensing unit are as follows:
- Assuming the counting period is 1 minute and the transmit interval is 4 minutes, the average power consumed is 3.8mA. (The quick 35mA transmit burst is not included in this calc.)
- This means that the 2700mAh LiPo would last about 29 days without input from the solar cell.
- [ (2700 / 3.8) / 24hours ]
- The 2W cell linked above would theoretically provide 330mA in perfect sun.
- Assuming 75% efficiency for the cell to charge the battery, a flat battery would fully charge in about 11 hours.
- [ 2700 / (330 x .75) ]
- So theoretically the system has 29 days to catch 11 hours of solar charging.
I doubt that the actual performance is quite that good, but sustaining the system on solar power is no problem.
The chart below shows the data collected and logged for a 20 hour period. The high CPM levels are due to the SI-180G tube I was using. The temperature is from the DHT22, and the light is from an TAOS ambient light sensor connected to A0 on the sensing unit. The charging status is mapped as 0 = not charging, 10 = charging and 20 = charged. The RSSI (received signal strength indication) is also shown. Over 100 with the sensing unit in my back yard and the display station at the far end of my basement is very good.
[8/26/13] Some new features have been added.
- Barometric pressure using the MPL3115A2 pressure sensor. (in place of the TAOS light sensor)
- The Display Station has the option of re-sending the data (via RF) to a "monitor station". The monitor station put the data on Ethernet and sends it to Xively.
- You can see the current feed here. (source for the monitor is available on request)
Downloads: (require Arduino IDE Rel 1.x)
Schematic & preliminary build instructions for the V1 PCBs here
[8/26/13] Updated v8 software
RadMon_RF22_Sensing_Unit_V8 - here
You can also download a package of the (1.0.x) libraries used to compile the sketch - here
If you don't have the joystick switch connected but want to set the time and the parameters to their defaults, there is a serial monitor setup sketch - here.
There is a spectrum scanner that will help find quiet spots that you can set the frequency to - here.
RadMonPlus replaces the Display Station described above with a graphical display and WiFi connectivity.