Return to this week's Bulletin

 

 



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. There’s 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. Here’s the original schematic from John’s 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 counter’s case and connects to a pulse output test point inside the counter. To use this circuit with another model of Geiger counter, you’ll 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 didn’t 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 don’t 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 it’s 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. I’ve included the source code so others can adjust the program to suit their own needs.