Section TOP Features Design PSU Build Summary Geiger Module PCB Arduino USB Prgmr Remote Ctrl LCD Menu Geiger PC Setup Tool 7 Segment Disp GK WiFi Kit ESP8266 Prgmr ESP8266 IDE Add On IOT Setup DHT22 Rain Sensor OLED Schematic ThingSpeak IOT Monitor Widget Code/Code Mods
WiFi enabled Background Radiation & Environment Monitoring Station with built in logging for Radmon, ThingSpeak and Sparkfun.
Kenley Live Background Radiation Data
Uploaded data can be viewed as live graphs charts and gauges. See further examples here Kenley Radiation Monitor.
Document Download from One Drive
Dual processors Arduino 328 for Geiger Counter and ESP8266 (Arduino core) for WIFI logging
LCD Display for setup and Radiation monitoring
IR remote control of setup functions
OLED display of logging and WIFI connection
Dual 8 digit 7 segment displays to show current CPM, Dose, Ave Dose and PK CPM
PIR activated 7 segment displays to keep running costs down. Note from GK WIFI v2.3 the PIR also controls the OLED
Modular design minimal soldering required
Secondary LED display of detected radiation
Local temperature and Humidity logged
Rain sensor logged to ThingSpeak using an add on rain sensor
The Geiger Counter & WIFI GK Kit that this project is based on are available from the DIYGeigerCounter web site.
There may be other copies of this kit available on the internet but both the code and hardware were designed at DIYGeigerCounter so you know it will work.
There is a great little section on the site showing how to upgrade older kit so if you buy the original hardware you know there is a great chance your hardware will be supported in the future.
below my original Geiger Counter built into a wooden box and using a SMB-20 GM Tube
The new Geiger counter is housed in a clear Perspex enclosure on an Oak base and will be enclosed in a large wood and glass display cabinet.
All the modules, displays and wiring are on display as I like the "Industrial" or "Art-Techno" look.
The case is large enough to house an SBM-20 GM Tube, an SBM-19 tube will require an external housing.
The Geiger counter module is programmed using a USB to serial module with DTR via the Arduino IDE
The ESP8266 WIFI module is programmed using a USB to serial module without DTR again via the Arduino IDE
below the large but very sensitive SBM-19 Geiger Muller tube is mounted in an external housing via 6.3mm cartridge fuse clips
below the Geiger Counter & ESP8266 WIFI modules are programmed by removing the existing connectors
and plugging in USB to serial convertors connected to short cables
5volt power is supplied by my common power supply non battery backed output.
The circuit with 7 segment LEDs, LCD with backlight and OLED draws the following current
which rises as the 7 segment display brightness is turned up see the table below.
The PIR turns the 7 segment display off when no one is in the room.
|7 Segment Disp Brightness||Current mA|
Build Instruction Summary
Purchase Geiger Counter Module or modify existing hardware to kit v5.1 level from DIYGeigerCounter
Modify the Geiger Counter Module for the 7 Segment LED display and LED radiation detected repeater
Download my modified version software version for the Geiger Counter and install it using the Arduino IDE (tested IDE 1_6_9)
Purchase GK WiFi kit from DIYGeigerCounter
Create Radmon, ThingSpeak and Sparkfun accounts
Download the GK WiFi software from the link in the manual. Enter your setup details using the Arduino Generic ESP8266 Module note IDE version 1_6_5 recommended
Tip: If you're installing on Windows and you have older versions of the IDE that you want to keep, choose the "Windows zip" file install.
Arduino Geiger Counter Module
Modified to work with v11.1 software and 7 segment LED displays
My old clone Geiger Counter Module required many modifications to get it working with the official GK-WiFi kit.
If you purchase the Geiger Kit GK Bk5 from the DIYGeigerCounter site it will work out of the box.
Lower PCB showing pins.
Lower PCB Bottom View showing mods to bring the kit up to DIYGeigerCounter v5.1 to use software v11 software.
If you purchased your kit from DIYGeigerCounter then simply follow this guide if not you will need to trace the PCB
and work out from the guide where to connect the extra wires and components.
Arduino Programmer note the DTR connector.
To program the Arduino on the Lower PCB disconnect the plug to the WiFi Kit and plug the USB Programmer in.
I have labelled the plug "UP" to ensure I connect it the correct way round.
IR Remote Control
The setting are changed by IR remote control.
I had this control from a remote operated relay switch and it works fine.
The IR functions are mapped out below just hover your mouse over to show the mapped functions.
Note When not in a menu the 7 segment display brightness uses the numbers 0 to 9.
When you first power on the kit it will run through the startup screens.
The first screen will show the software version that is running in the format 11.1.19 Brett.
11.1 is the official version written by BroHogan email him here (brohoganX10 (at) gmail (dot) ) com see DIYGeigerCounter.com and .19 Brett is my modified version.
The next screen will show the current settings for your dose rate, and the battery voltage.
The third screen will show the current setting for the alarm threshold and ask if you would like to change it.
Pressing the Select button during this prompt will take you to another screen where repeated presses of the Select button will change the alarm threshold.
|Press the menu button on the remote then use the up/dowm buttons to step through the menus|
Initially, the menu options are set to defaults. Settings made will be stored in EEPROM on the ATmega328, so they will be in effect when you power back on.
Pressing and holding the physical Select button at power on will reset all menu settings back to their default settings.
Here's a brief description of each menu option along with its default setting:
DISP PERIOD (MS) - The number of milliseconds before the display refreshes. Default = 5000 mS (5 sec)
(Display counts are based on a "running average" Settings of less than 5 seconds are not recommended)
LOG PERIOD - Interval to write the CPM, 'dose', and MCU voltage to the serial output. Default = 1 minute Zero means logging is turned off.
CPM->[DOSE] RATIO - Sets that ratio for the type of GM tube used. Default = 175.43 CPM and 100 CPM to dose unit (uSv)
Note this ratio will depend on the dose unit being displayed - see DOSE UNIT. Also note that 2 ratios can be stored. The second ratio can be selected by the Tube Switch. Depending on the position of the switch this menu option will set the value for either the 1st or 2nd ratio.
175.43 is the common default for the SBM-20 and 100 for the LDN 712. The “C” key on the remote can be used to enter a decimal point
ALARM THRESHOLD - When the CPM or DOSE units is greater than this value the alarm is triggered. Default = 500 CPM
This can be either in CPM or the dose unit selected – see ALARM UNIT. Zero means the alarm is turned off. Unlike using the Select button, any value may be entered. The alarm will stop when activity drops back under the alarm threshold. You can also silence the alarm for 30 seconds by pressing the Select button when the alarm is sounding.
DOSE UNIT - Use the arrow keys to select the name of the unit for the dose value - "uSv/h", "uR/h" or "mR/h". Default = uSv/h
ALARM UNIT - Sets whether the alarm is based off of CPM or the DOSE unit. Use the arrow keys to select. Default = CPM
SCALER PER (MIN) - Sets the period for the second scaler. Default = 10 minutes
If scaler period set to "Infinite" (setting below 2) , the accumulated dose rate is displayed on the scaler screen.
BARGRAPH MAX CPM - Sets the CPM that will give a full scale reading on the bar graph. Default = 1000 CPM Also see the Tone Mode section for how this option affects tone mode.
TONE SENSITIVITY - Determines how sensitive the tone is to changing activity. Default = 4
Low numbers are more sensitive. (see below)
USE RADLOGGER? - When "Yes" serial output is compatible with Radiation Logger and Radmon applications. Default = OFF see Graphing to a PC page. If you are using the GKnet to connect directly to Radmon.org, this setting should be OFF. REG.
VOLTAGE - Displays the voltage powering the MCU (Vcc). To a large degree, this represents the state of the battery.
Note that each menu setting has a minimum and a maximum setting. Entries that are out of bounds will revert to the minimum or maximum.
|Main Display Modification|
|I have added a 7 segment
display brightness indication on the main display (LED + Brightness
from 0 to 9) along with a " * " to show when the count click sound
is Muted (mouseover image to show).
When MUTE is pressed the display will show the word MUTE over the LED brightness indicator and will then revert to a " * " to show the sound is muted.
Geiger Kit PC Setup Tool
If you don't have the remote you can edit the settings with the Geiger Kit PC Setup Tool available from the DIYGeigerCounter web site software page.
Loading this sketch will allow you to set the menu options using the serial monitor screen in the Arduino IDE instead of a TV Remote.
To use download the sketch from the page above and open it with your Arduino IDE.
Upload it to your Geiger Counter module and then open the Serial Monitor and set it to 9600 baud.
The Sketch will run, and you just follow the onscreen prompts to setup your module see animation below.
When setup is completed load your Geiger Sketch back to your module and it will use the uploaded settings.
7 Segment Display Add On
The display uses two MAX7219 modules to control 16 7 segment displays.
Each module uses a single MAX7219 IC.
I have added a 22μF electrolytic capacitor across the supply rail on both modules as these are specified on the MAX7219 data sheet.
The displays only require 3 control wires and power to work. The 5 wires are looped in and out of the modules by built in connectors.
On the final module the 2 power wires are fed back to the start of the loop.
8 digit 7 segment display module. Wiring goes in on the left and out to the next module from the right
Construction is very simple. Neutral density Perspex sheet is bolted to two brass strips.
The modules are then mounted to the Perspex again with bolts.
The whole display is then fixed to the Oak base use small screws via a couple of tiny copper brackets.
See animation below.
Grey Neutral Density Perspex Demonstration
The 7 segment LED display modules are mounted behind Grey Neutral density Perspex to hide the modules themselves
and also to provide contrast to the display.
Mouse over the image below to show the difference between clear Perspex and Grey Neutral Density Perspex on the display
Rear of the LED display showing the extra capacitors and wiring looping in and out of the modules.
Note the return power wires from the top left to bottom right display.
7 Segment Display Brightness Control
The brightness of the 7 segment displays are controlled by remote control.
When not in a setup menu pressing number buttons 0 to 9 sets the display brightness.
As soon a number from 0 to 9 is pressed the secondary count LED illuminates and the CPM Pk display is blanked and replaced by the brightness number pressed on the remote.
Once the button is released the display is set to that brightness value and CPM Pk is displayed again. The current value is then displayed on the LCD display.
See looped animation below showing brightness being set from 6 to 1 and back to 6 again.
This kit allow you to send your Geiger kit readings to radiation monitoring sites, and IOT sites, on the internet.
The GK-WiFi, connects to your network with a WiFi connection.
Below Video clip showing the OLED Wifi Kit from with optional OLED display on initial power up and then uploading Background Radiation data to Radmon , ThingSpeak and Sparkfun.
The kit comes with 2 PCBs the main ESP8266 board and the interface board.
The components will need to be soldered to the boards but this just takes a few minutes.
Full construction details on the DIYGeigerCounter site under Add On Loggin Kits.
ESP8266 WIFI Board Schematci showing connections for DHT22,DCF77 monitor and PIR sensor
Note all digital input pins are 3.3v, analog pin is 1v
Tx, Rx, 5v & 0v are connected to the WiFi kit to program it via the Arduino IDE
Currently version 1.6.5-R2 is suggested
(Tested OK on IDE 1.8.5)
Tip: If you're installing on
Windows and you have older versions of the IDE that you want to keep, choose the
"Windows zip" file install.
Tx, Rx, 5v & 0v are connected to the WiFi kit to program it via the Arduino IDE Currently version 1.6.5-R2 is suggested (Tested OK on IDE 1.8.5)
Tip: If you're installing on Windows and you have older versions of the IDE that you want to keep, choose the "Windows zip" file install.
Resetting the ESP8266 - Press the reset button and release.
Press PGM & RST buttons, release the RST button and then release the PGM button.
Press upload on the Arduino IDE
Tested OK on IDE 1.8.5
Installing the Arduino IDE and the ESP8266 Add-on:
The GK-WiFi kit uses the ESP8266 to connect to WiFi and it is also the processor. Programming is done using the Arduino IDE, but In order to program this chip, you must install an add-on package to the IDE.
It may seem a little daunting at first, but if you follow the steps below you will get through it alive. There are also many guides online for this - for example, this one from Adafruit and this one from Sparkfun. These can provide additional details. Please note that I can provide only limited help with this setup. ... OK, let's take this one step at a time.
1. Get the IDE. Currently version 1.6.5-R2 is suggested - available here. At this writing, newer versions of the IDE have issues with the ESP8266 core, or other issues. Tip: If you're installing on Windows and you have older versions of the IDE that you want to keep, choose the "Windows zip" file install. Otherwise your older IDE will be removed. Follow the guidelines for installing the new IDE.
2. Open the IDE and go to File > Preferences. Add this line in the "Additional Board Manager URLs:" field; http://arduino.esp8266.com/stable/package_esp8266com_index.json Press OK.
3. Now go to Tools > Boards > Boards Manager. You should see a list of all the installed boards. At the bottom you will see and entry for esp8266 ... Click the Install button in that panel.
It will take a few minutes to download and install. Once it's complete, INSTALLED will appear next to the entry.
4. Now open Tools > Boards again. You should see Generic ESP8266 Module. Select it. Open Tools > Boards again and you should see settings similar to this:
Generally there is no need to change these other settings - except for your
(Later you can try increasing the Upload Speed from 115200 to a faster speed but it's best to start with the default speed. Faster upload speeds can cause upload problems. Speed may change back to the default when you change board types.)
You're over the hump!
5. You can test out your setup by going to File > Examples and scroll down till you see esp8266, then pick Blink. Then click the Verify button on the toolbar (check mark). You should see the Blink sketch compile. (No need to load it.) Now you can use the Arduino to program the ESP8266 chip on the GK-WiFi board. More on that later. Note that you must disconnect the GK-WiFi board from the Geiger kit before you can upload any sketch.
The software supports connecting to the three sites listed below. Use the steps below to create accounts for the sites you will be connecting to. Each will give you account credentials that are entered in the Credentials.h file of the sketch.
§ Open an account with Radmon.org - here. Note the Username and Password you choose.
§ You will use the username and password in setting up your sketch.
§ You may also wish to download RadLog program for the PC. It’s not required for directly connecting but it has some handy features. It’s in the “Downloads” section of the Radmon.org site.
§ Create a free datastream - here. During this process you will list the Field Types that you want. In order to use the sketch "as is" you must use the same Field Types that the sketch is providing data for. These are:
cpm, dose, vcc, maxcpm Fields must be lowercase. (see image left)
§ It's best to start with just those 4 fields. If you add the DHT22 for temperature and humidity later, you can add the additional fields which are: temp, and humidity.
§ You will be given a set of keys - a public key, a private key, and a delete key. You will also be provided with the URL for your feed. (It contains the public key.) You have the option of emailing this info to yourself which is suggested.
§ You will use the public key and private key in setting up your sketch. You can use your delete key to remove a datastream by going to this page. § You may find the CSV export to be a handy feature.
§ Create a ThingSpeak account - here. Click New Channel where you will list the fields that you want. Unlike Sparkfun, the field names are predefined as field1, field2, field3, etc. So you can assign any descriptor to each field. However, in order to use the sketch "as is" the order of the fields is important. In other words, field1 = CPM, field2 = Dose, field3 = Vcc, field4 = MaxCPM. (see image below)
§ Again, it's best to start with just those 4 fields. If you add the DHT22 for temperature and humidity later, you can add the additional fields which are: field5 = temperature and field6 = humidity.
§ You will be given a Write API Key. You will use this key in setting up your sketch. § You may find the MATLAB feature handy, but I haven't messed with it.
Your WiFi Credentials:
In addition to the credentials for the accounts selected, you will need your SSID and network password.
Program the GK-WiFi:
In order to use the GK-WiFi the software provided must be modified with your WiFi credentials (SSID and password) and the user name and password of all the IOT sites that you wish to connect to. There are also options (#defines), described later, that you can use to add or adjust some features.
§ Get the latest sketch from here. Unzip it and put it in your sketchbook. Also get the library package from here. Unzip it and put the contents in a "libraries" folder in your sketchbook. If you don't have a libraries folder there already, create one.
§ Open the sketch in the Arduino IDE. On the main tab near the top, you will see a section called Other User Settings with #defines for various functions. They are described in the comments and below. However it's best to keep the defaults in the beginning.
§ Open the Credentials.h tab. Here you will add your network credentials, use the #defines to select the accounts you wish to send to, and add the credentials for those accounts. The comments should give you the details you need. Save your sketch.
§ Be sure your IDE is set for the Generic ESP8266 Module and run a Verify to make sure all is well. You will see compile red warnings, this is normal. In the end you should see a "Done compiling".
§ Now, finally, it's time to upload the sketch. Plug the ESP8266 carrier board into the main board, but do not plug the GK-WiFi into the Geiger kit. (The ESP8266 uses lots of power at startup and some USB ports can barely handle it.) Plug in your FTDI into the pins on the bottom. You should see the red led on the ESP8266 light up.
§ Press and hold the PGM button on the GK-WiFi you should see the RDY led light up brightly. While holding that switch, press and release the RST button, then release the PGM button. You should see the RDY led light up dimly. If you do, the ESP8266 is ready to accept a program.
§ Click Upload on the IDE. Compile time is a lot slower for the ESP8266. Eventually you will see a row of red dots across the bottom screen and finally the message "Done uploading". Have a beer.
§ If you get errors, disconnect your serial cable to the USB to Serial adaptor, reconnect it, go back into program mode, and try again. After any upload fail, make sure you put the board back in program mode as described above.
First, a little menu work on your Geiger kit . . .
• Go into the Setup menu and set the LOGGING PERIOD for the period that you want to send data at. For radmon.org no less than 30 seconds is recommended, but you're impatient right now, so set it at 15 seconds.
• On the GK-B5, or GK-Mini make sure you have the “USE RADLOGGER” option turned off. On the GK-Plus, set the SERIAL OUTPUT MODE to the “GK-B5” option.
Power off the Geiger kit, disconnect the FTDI, and plug the 6 pin female header (serial input) of the GK-WiFi into the FTDI connector of your Geiger kit. Now power on the Geiger kit. You should see . . .
• The red led go on - connecting to WiFi, and then off - connected!
• The yellow led go on - waiting for data from the Geiger kit, and then go off - got data!
• The green led will flash when sending data to each site - data sent!
Now you can go to the IOT sites you signed up for and check your results there.
Adding Google Charts From Thingspeak
Info again from DIY Geiger Counter Site - Check this site for updates
The charts below show live data from my Radiation Monitor in Kenley.
The Radiation Monitor sends its data to my ThingSpeak channel where it is collected and stored by the ThingSpeak servers.
Three methods are described below which show how to get the ThingSpeak data to
display on this Google Sites page.
Embedding the ThingSpeak charts into Google Sites.
Using the "IoT Charting Gadget" generously created by Mike Teachman. .
Create a web page that gets the data from ThingSpeak and displays it using Google Charts.
Embed method ...
Variations of this method will work on the original rollout of Google Sites as well as the new version of Google Sites.
Here on this original version of Google Sites we are using the "Iframe Wrapper" gadget. Get it at Insert / ... More Gadgets on Google Sites.
To get the data for the "Document / page URL" field of that gadget, do the following:
Open your Public page in ThingSpeak.
Select the graph you want to add.
At the top of the graph, click on the box with the arrow sticking out.
Go to the new page that opened and copy the URL from that page.
Insert it in the "Document / page URL" field.
For the new version of Google Sites it's even easier to embed the ThingSpeak URL into the site.
Find where you want to place your graph, double click to open the content creation menu.
Click the "Insert" option and use the Embed by URL Tab.
Enter the URL from the ThingSpeak chart that you got from Step 4 above.
You can also insert an iFrame instead of embedding. In that case you use the "callout / speech bubble" icon at the top of the chart.
Check the DIY Geiger Counter site for further updates.
DHT22 Temperature & Humidity Sensor Add On
Temperature and Humidity sensing/logging can simply be added by connecting a DHT22 sensor
to GPIO5. Don't forget to enable it in the GK WiFi Sketch and on ThingSpeak.
The data lead is tied to 3.3v via a 10K resistor.
below DHT22, Rain Sensor/Intrusion Detection and DCF77 Signal match wiring
Note only 1 sensor can be used at a time either DCF77 or Rain/Intrusion if more sensors are requied use another GPIO pin.
The connections for power, PIR, DCF77 Sync or Rain/Switch sensor, Geiger Muller Tube and the DHT22 sensor itself connect onto
a length of Vero board fixed to the back of the case.
Temperature and Humidity readings show on the OLED display after sending.
DCF77 Signal Match Add On v2.2
All my clocks are synchronised to the DCF77 "Atomic Clock" in Germany.
My Binary clock outputs a 5v signal when an error free minute is received this is connected to the WIFI
board on the Geiger Counter and uploaded to Thingspeak so I can monitor my DCF77 reception remotely.
Temperature and Humidity and DCF77 signal match monitor readings show on the OLED display after sending.
When the reading is 1 the DCF77 signal has been received for a full minute with no errors.
Any errors in a single minute then the reading will be 0.
ThingSpeak IOT Monitor Widget
Any of the 7 sensors can be viewed live on your Android mobile home screens.
Clicking on the graph symbol below the reading brings up the graphing screen.
Rain Sensor/Switch Detection Add On
Using the Kemo Rain Sensor connected to GPIO4 and logged with ThingSpeak you can set up alerts or just monitor when it is raining.
The device simply closes a relay contact when rain is sensed and raises GPIO4(tied via a 10K resistor to 0v) to 3.3v.
This could be used for any other purpose where a simple switch contact is used.
eg fit a micro switch to your external Geiger Muller tube enclosure to warn if the case is being tampered with.
See schematic above under DHT22 for connections.
The OLED if used shows Rain 0 no rain and Rain 1 if it's raining
Note the OLED format change. I have set all data in columns.
Kemo Rain Sensor DC 12V
|Operating voltage||12 V/DC|
|Current consumption without / with heating||ca. 8 / 160 mA|
|Relay contact||1 x ON, maximum load 25 V, 2 A|
|Sensor heating||automatically in case of contact with rain|
|Light-emitting diode 1||indication that the rain sensor works|
|Light-emitting diode 2||indication that rain is reported and the relay has switched on|
|Duty cycle of the relay||as long as the sensor is wet|
|The module is encapsulated waterproof.|
|Active sensor surface, gold-plated||ca. 29 x 30 mm|
|Dimensions||ca. 65 x 45 x 36 mm|
Rain Sensor Instructions
instructions: The rain sensor has bores in each edge of the bottom. By
means of these 4 holes it may be screwed on a metal angle, a sun blind or the like.
Mounting has to be done in such a manner that the gold-plated sensor surface is
slightly inclined towards the points of the sensor surface enabling the water to flow
off and preventing the water from staying on the sensor surface.
The connecting cable will be led into a watertight switching outlet and wired up
there. Please use a stabilised 12 V-power supply with a power of >150 mA as
current supply. The relay contact in the module may only be loaded up to 25 V
and 2 amperes at maximum. In case you wish to control higher loads or larger
voltages (e.g. 230 V~ motors), you have to interpose another relay approved for
this breaking capacity.
Setting into operation: After switching on the operating voltage of 12 V, the
installed LED 1 lights up. If you put some drops of water on the sensor surface
now, LED 2 lights up and the relay switches on. At the same time a sensor heating
switches on which shall cause an accelerated drying of the sensor surface.
This heating has a power of approx. 1 W and after a certain time it increases
the temperature of the sensor surface by some degree Celsius compared to the
Maintenance: Depending on the degree of soiling, the sensor should be cleaned
regularly using a damped cloth. Please do not use any scratching cleaning agents,
as they may rub off the gold film. Neither apply any polishes or waxes as these may
lead to a coating of the sensors and thus they cannot sense the rain any more.
Use as directed: Indication of rain or slushy snow and slushy hail, respectively.
Please pay attention to the enclosed printed matter „General instructions for
Note: The electronics of the rain sensor reacts to the electrical conductivity of the
water. We have now ascertained that there are areas where rainwater falls, which
is absolutely clean (distilled water). The sensor does not react to this. The water
must be at least slightly contaminated (fractions of dust, smoke, etc.) so that the
water is electroconductive and triggers the sensor. In Germany the rainwater is
conductive in 99% of the areas. If the sensor does not trigger in your case, you
should install it in such a manner that the rainwater runs at first over a small
porch roof or the like before the water touches the sensor. If the water falls directly
from the cloud on the sensor in its purest form and does not trigger it, it will be
sufficient if it runs over a small board or from a porch roof on the sensor. Then the
water will have absorbed enough impurifications that it will be electroconductive
and triggers the sensor. Of course, the sensor has to be built it slantwise so that
the water runs down again.
In order to use this add-on a few small changes are made to the GK-WiFi sketch details below
|Code Line Number in Function||Function Name||Details|
|129 or 131||GK-WiFi_vX_XBrett||setup rain sensor input or DCF77 sensor on pin 4|
|133||GK-WiFi_vX_XBrett||setup PIR sensor input on pin A0 (analog)|
|208 or 213||GK-WiFi_vX_XBrett||read the rain sensor or DCF77 input pin|
|215||GK-WiFi_vX_XBrett||read the PIR pin|
|217 to 225||GK-WiFi_vX_XBrett||check analog value of PIR pin and switch on OLED display if above 500|
|275||GK-WiFi_vX_XBrett||change OLED display format to all in 2 columns|
|315||GK-WiFi_vX_XBrett||send heading "Rain" or "DCF77"and reading 0 or 1 to the OLED display|
|106||WiFi||set field and sensor to send to ThingSpeak|
|176||WiFi||change from url += Temp; to url += int(Temp);|
|181||WiFi||add rain sensor upload to Sparkfun|
|8||gk_wifi.h||define Rain_Sense or DCF77 sense|
|37 or 40||gk_wifi.h||create integer for rain sense raining or PIR sense 1 not raining 0|
|44||gk_wifi.h||create integer for PIR sense|
I have changed the version number to vX_XBrett so you can easily see it has been modified by myself.
All changes are commented thus //Brett to show where code has been added.
Download modified GK-WiFi Sketch just add your details in the credentials function before uploading to your ESP8266
At the top of the board you'll find a 4 pin I2C header. You can use it (with programming) to add I2C devices. However, it's also setup to accept a little OLED display. All you need to do there is set #define USE_OLED to true and plug in the display to show the data received and who it was sent to. It's pretty cool!
There are two sizes of I2C OLED that I've tried that work - .96" and the 1.3" (both monochrome). You can search eBay for these. Please note that given the remarkable variability of Chinese products, I can't be responsible if you get the wrong type. (I have heard that some have different pinouts, so check this.)
Finally note that the I2C header is the same height as the carrier board headers so if you want to just plug the OLED in to see it, you must extend the pins on the display. A 4 pin female header with long pins has been included for that purpose.
0.96" I2C OLED Display Module White
OLED Driver IC: SSD1306
Resolution: 128 x 64
Visual Angle: >160°
Input Voltage: 3.3V ~ 6V
Compatible I/O Level: 3.3V, 5V
Module Size: 2.7 x 2.8cm
OLED Normal running/uploading
Wiring & interconnections of modules
ThingSpeak IOT Monitor Widget
Shows Geiger Counter Readings on your Android home screen
Details/Instructions copied from Google Play
Be always up to date with a state of your IoT devices connected to
You don't need to start an app every time you want to know your senros' actual readings,
cause they will be always on your Home screen in sight!
Code & Code Modifications
My hardware additions of a PIR sensor and 7 segment displays required 4 extra pins. 1 for the PIR and 3 for the MAX7219 connections for the 7 segment display.
I used the existing TONE_POT and ALARM_PIN as these functions were not required in my setup and also pins A4 & A5 as they were spare.
Arduino Pin Outs and Functions
|IC Pin||IDE Pin||Name||Change from v11.1||Function|
|1||Reset||Reset Geiger Counter|
|5||3||LCDPIN_RS||LCD register select (RS) pin|
|6||4||LCDPIN_EN||LCD enable pin|
|11||5||LCDPIN_D4||LCD D4 pin|
|12||6||LCDPIN_D5||LCD D5 pin|
|13||7||LCDPIN_D6||LCD D6 pin|
|14||8||LCDPIN_D7||LCD D7 pin|
|15||9||TUBE_SEL||Jumper to select alt conversion to uSv (2nd tube)|
|16||10||NULL_BUTTON||Null button used to set the null point in tone mode|
|17||11||SEL_BUTTON||button to toggle alternate display and set alarm|
|18||12||LED_PIN||flashes on each detection & 4 times on start|
|19||13||TONE_PIN||PWM output to speaker or piezo for tone mode|
|23||A0 (14)||DataIn||TONE_POT||DataIn MAX7219|
|24||A1(15)||infraredSw||ALARM_PIN||When PIR sensor active goes high|
|25||A2(16)||SPKR_MUTE||signal pin to mute speaker|
|26||A3(17)||IR_PIN||Interrupt 1 for IR sensor|
|27||A4(18)||CLK||Spare pin||CLK MAX7219|
|28||A5(19)||LOAD||Spare pin||LOAD MAX7219|
Code Changes Summary
Where I have made changes I have added a comment //Brett in the code
|Code Line Number in Function||Function Name||Details|
|85||GeigerKit_v11_1 Function||MAX2719 for 7segment display added to pins 14,18 & 19|
|156||GeigerKit_v11_1 Function||Added inputs for PIR detector infraredSW|
|213||GeigerKit_v11_1 Function||Mod to LCD display version number so my version of the original code is added to original code version e.g. v11.1.20 Brett shows I have changed v11.1 code by adding my code v20|
|216||GeigerKit_v11_1 Function||7 segment display MAX2719 setup|
|326||GeigerKit_v11_1 Function||static boolean scalerDispUsed = true; change from "false" to enable scaler from start|
|331||GeigerKit_v11_1 Function||PIR control of 7 segment and LCD display (not backlight)|
|355||GeigerKit_v11_1 Function||Set value of 7 segment display brightness to value of Intesity|
|366||GeigerKit_v11_1 Function||Set value of peekDisp to value of omeMinCnt x6 this is the CPM Pk display & display it on the top row digits 1 to 4 with 3 digit 0 and zeroe blanking on digit 4|
|567||GeigerKit_v11_1 Function||Bottom LED Row 1st 4 digits CPM display setup and show CPM on 7 seg display inc 3 digit 0 and zero blanking on 4 th digit|
|666||GeigerKit_v11_1 Function||Put "*" in the corner of the display if MUTE is on|
|672||GeigerKit_v11_1 Function||Show 7 seg intensity on 1st row of LCD display|
|692||GeigerKit_v11_1 Function||uSvDisp LED display Bottom right digits 5 to 8 Dose display inc decimal point with digit 5 always blank|
|768||GeigerKit_v11_1 Function||LED display Top left digits 5 to 8 Average Dose inc decimal point with digit 5 always blank|
|1059||GeigerKit_v11_1 Function||LED logging indication commented out as this LED now flashes on every count|
|1070||GeigerKit_v11_1 Function||Serial print LED indication commented out as this LED now flashes on every count|
|1296||GeigerKit_v11_1 Function||LED flashed once on every count|
|Removed define for ALARM_PIN|
Add variables for 7 digit displays 01 to 08 bottom row CPMdigit01 to
CPMdigit08 and top row CPMdigit201 to CPMdigit208, infraredSw to A1,
cpmuDispLED (CPM display) , uSvDisp; interger for dose in uSv ,
uSvInstant; //interger for Instant dose in uSv, peekDisp; interger
to show CPM Pk, Intensity = 2; 7 segment display intensity (2 on
|IR.h Function||No changes|
|IR Function||No changes|
|20||Menu Function||7 segment display brightness set directly when digits 0 to 9 are pressed "TEST" button now spare|
Atemega 328 Pinout
IDE in Green
The code can be downloaded here Download v23
My code is based on DIYGeigerCounter code v 11.1 my code is now at v23
GK WIFI Code download my version 2_3
This now has code to PIR control to the OLED display to prevent screen burnout
GK WIFI Code download my version 2_2
This includes the code for the DCF77 Signal monitor
GK WIFI Code download my version 1_9
This includes the code for the Rain/Intruder detector
I am not very good at coding and I am sure there are many better ways of modifying the code to add 7 segment displays so I have commented my code thus //Brett
at the beginning and end of any mods or additions. This along with the tables above should make it quicker to see what mess I have made of the code and allow you to enter your own pretty code instead!