07 December 2001
Interfacing a Heathkit RM-4
Radiation Monitor to a PC Serial Port.
by Jim Frank
I
built a Heathkit Geiger counter that I found at a yard sale for $10.00
(made my day!) and wanted to be able to keep track of long term background
radiation counts. Theres a project at www.fourmilab.ch
called Hotbits, where the object is to generate truly random
numbers by using a radiation source to generate random intervals. I
liked the interface design, which just happened to connect to the exact
model of Geiger counter that I own. Heres the original schematic
from Johns site.
|

(click
image to enlarge)
|
My design omits the reed
relay that drives the power to the counter, since I just want to turn
it on and record pulse counts. In addition, I used two inverters back
to back in order to get the polarity of pulse output that my software
needed. The tip lead referred to in the schematic goes to
a subminiature (3/32) phono plug. The matching jack is installed in
the counters case and connects to a pulse output test point inside
the counter. To use this circuit with another model of Geiger counter,
youll have to locate a point where a pulse output can be tapped
off to go to the hex inverter input. I highly recommend the website
referred to above for a complete explanation of the operating details
of this circuit.
I decided to write a Visual
Basic application to access the interface, since my computer operates
in the Win98 OS, and VB is the simplest language that gives me direct
access to the CTS line on a serial port. Following is the code for this
project.
These variables are declared
at the Module level. All of the dedicated VB programmers will probably
growl at my profligate use of global variables, but for a simple app
like this, I didnt think it would be a problem
Public PreviousPulseCount As Integer
Public CurrentPulseCount As Integer
Public PulseCount As Integer
Public AverageCPM As Integer
Public ElapsedMinutes As Integer
Public ElapsedSeconds As Integer
Public CurrentMinPulseCount As Integer
Public PreviousMinPulseCount As Integer
The following code is in
the single Form of the project. The controls are; MSCOMM, two TIMERS,
and a COMMAND BUTTON
Private Sub Command1_Click()
PulseCount = 0
ElapsedMinutes = 0
ElapsedSeconds = 0
PreviousPulseCount = 0
CurrentPulseCount = 0
AverageCPM = 0
CurrentMinPulseCount = 0
PreviousMinPulseCount = 0
Print #1, "reset", Now
End Sub
Private Sub Form_Load()
With MSComm1
.CommPort = 1
.Handshaking = 2 - comRTS
.RThreshold = 0
.RTSEnable = True
.Settings = "57600,n,8,1"
.SThreshold = 1
.PortOpen = True
' Leave all other settings as default values.
End With
Open "radsamples.txt" For Output As #1
Print #1, "Counts per minute from geiger counter at one minute intervals"
Print #1, Now 'timestamp start time in output file
End Sub
Private Sub MSComm1_OnComm()
Select Case MSComm1.CommEvent
Case comEvCTS ' Change in the CTS line.
PulseCount = PulseCount + 1
'CountIncrement is defined at module level
End Select
End Sub
Private Sub Form_Unload(Cancel As Integer)
MSComm1.PortOpen = False
' Closes Com1 before leaving
Close #1
End Sub
Private Sub Timer1_Timer() 'updates every second
CurrentPulseCount = PulseCount - PreviousPulseCount 'gets number of
counts this second
'CPM = CurrentPulseCount * 60 ' then calculates instantaneous CPM
Cls
'Print "Instantaneous counts per minute"; CPM
Print "Total count"; PulseCount
Print "Average counts per minute"; AverageCPM
Print "Elapsed time"; ElapsedMinutes; " Minutes"; ElapsedSeconds;
" seconds"
Print "Pulse count this minute"; CurrentMinPulseCount
Print "Exposure rate, mR/hr "; CurrentMinPulseCount / 1000
PreviousPulseCount = PulseCount
ElapsedSeconds = ElapsedSeconds + 1
End Sub
Private Sub Timer2_Timer()
' 60 second timer
CurrentMinPulseCount = PulseCount - PreviousMinPulseCount
ElapsedMinutes = ElapsedMinutes + 1
ElapsedSeconds = 0
AverageCPM = PulseCount / ElapsedMinutes
PreviousMinPulseCount = PulseCount
Print #1, CurrentMinPulseCount
End Sub
For those who dont
have the VB6 required to compile this program, it can be obtained here:
www.coloradoradio.com\radmon.zip.
Here are a couple of pictures
of the project. The first is the ugly style interface attached
to a RS232 tester for debugging. It will go into a connector shell when
its finished.
|

(click
image to enlarge)
|
The second picture is the
interface connected to the radiation monitor, with a chunk of uranium
ore near the detector tube to provide higher counts.
|

(click
image to enlarge)
|
The third picture is showing
the needle on the counter at a relatively stable level of about 0.4
mR/hr. At this level, the software shows a level of 420 CPM which agrees
nicely with the counter.
|

(click
image to enlarge)
|
This project saves the
minute by minute count information in a text file called radsamples.txt.
Ive included the source code so others can adjust the program
to suit their own needs. 