NetIO GC10 Geiger Counter general information and code

  • Recently I got an Arduino Uno clone to play around with. It turns out it can also act as an USB RS232 serial interface for devices connected to it. Since I never got an USB–serial interface before either, I thought it would be interesting to try interfacing with the NetIO GC10 counter I have. I previously used to count and log 5V Geiger pulses from it using an audio jack connection and a very simple electric circuit, but this method over time proved to be a bit overkill for my purposes, in addition to being prone to various issues.


    Arduino Uno only has one built-in hardware serial port available (pins 0–1), which is shared with the USB computer connection. This means that if a serial device is connected here, it can intefere with PC communication. However, arranging a so-called soft serial connection with other pins is a possibility, although it will have lower performance than the hardware serial connection. To do this I used the altsoftserial library, which adds a serial port on pins 8–9. This is where I connect the Geiger counter.


    The GC10 counter automatically sends CPM data every second. Every string is terminated with an explicit CRLF sequence, which in printf-like commands in many programming languages is represented by the escape sequence /r/n.


    Below is a photo of my current arrangement. The Geiger counter is powered directly by the Arduino board through the VCC pin of the data I/O interface. The manufacturer points out that other VCC/DC inputs must not be used at the same time or the Geiger counter will be damaged.



    In the above photo, black tape is covering the annoyingly bright LED and the loud buzzer (when it's enabled).



    Arduino C code used:



    Python code used to continuously log data from it through the hardware serial port:



    Typical output from the above code

    Code
    1. 2020-01-29T12:02:38.193560, 86
    2. 2020-01-29T12:02:39.197706, 87
    3. 2020-01-29T12:02:40.204730, 88
    4. 2020-01-29T12:02:41.208844, 89
    5. 2020-01-29T12:02:42.212709, 90
    6. 2020-01-29T12:02:43.220673, 90
    7. 2020-01-29T12:02:44.215784, 90
    8. 2020-01-29T12:02:45.230620, 90


    Other Resources


    EDIT: it appears that code indentation got messed up while copy-pasting code here. This will not be an issue for the Arduino code, but it will for the Python code for logging. Until I fix this in this comment, the Python code is simple enough for most people with some experience with the language to quickly solve the issue in their favorite IDE.


    EDIT2: the problem above appears to have been solved.

  • While surface area certainly plays a primary factor on sensitivity, according to tests made by the author in the page below, SBM-20 GM tubes become more sensitive and have a shorter dead-time up to significantly higher voltages than generally recommended. The voltage at which a continuous discharge starts occurring inside the tube appears to be higher than what can be safely set in the NetIO GC10 counter through the serial interface (the 2N80 power MOSFET used for the internal boost circuit has an absolute maximum voltage rating of 800V and some margin will have to be provided) :


    https://uvicrec.blogspot.com/2…0-geiger-muller-tube.html


    Other that the calibration will be slightly off, I'm not sure of what drawbacks there will be in running the tube at for example 600V instead of 400V (current setting on my counter; the default setting was 313V). Anode–cathode voltage from the counter needs a high impedance probe for accurate readings, so these values are just estimations based on the internal voltage setting.


    According to the manufacturer (NetIO), GM tube voltage should be 5.7 × HVG, where HVG is the variable which can be tweaked. On my counter it was 55 by default (313V). Following some tests, yesterday I found that my SBM-20 tube (manufactured in the 8th week of 1985) stops working below a setting of 39 (222V).

  • I tried using the Geiger Counter on an unshielded location on the desk next to my PC at increasing voltage settings (400V, 500V, 600V) applied to the GM tube. The high peaks are when I placed a 1 Kg potassium hydroxide canister close to the GM tube as a sort of check source to observe immediate differences in response after changing the setting.



    The base signal appears to have increased slightly and possibly become more stable, but the KOH peaks remained about the same.


    To change voltage I sent to the Geiger counter, in sequence through the Arduino serial interface passthrough:

    Code
    1. 'stop\r\n'
    2. 'set hvg=xx\r\n'
    3. 'go\r\n'
    4. 'save\r\n'

    With xx being a decimal number representing GM tube voltage divided by 5.7.


    The 'stop' and 'go' commands stop and interrupt the 1Hz CPM output from the counter, which can potentially interfere with configuration commands. These are optional, though. The 'save' command saves the new configuration into the GC's integrated controller's EEPROM, making it persistent across resets


    To check if the settings have been applied (besides actually measuring the voltage, which I cannot properly do with my equipment), it is possible to use the 'show' command as done for the other ones mentioned above. A typical output/response from the counter would then be—LFCR sequences omitted:

    Code
    1. ttc: 1771
    2. gms: 165
    3. atc: 1500
    4. hvg: 105


    hvg here shows the tube voltage setting, which should correspond to the one previously configured. Here, 105×5.7=598.5V.


    Other information:

    • gms: the CPM conversion rate to obtain the displayed µS/h value
    • atc: A threshold CPM value above which an alarm sounds (I've never tested this)
    • ttc: The total GM counts recorded since the counter was last reset. This is a kind of undocumented function. An alternative mode of operation could be extracting this instead of using the 1Hz CPM value. In this case turning off CPM output with the 'stop' command can be useful. After that, one would periodically monitor for the response obtained from the counter after sending the 'show' command.