Arduino Geiger Counter




Introduction: Arduino Geiger Counter

Build a Geiger counter out of an Arduino

Step 1: What You Will Need

What you'll need:
-Arduino (Can be any type but must have 5V capabilities to work with Geiger counter and LCD)
-Sparkfun Geiger Counter (Other geiger counter boards might work the same but I do not know)
-LCD display
-Piezo Buzzer
-9V Battery & Battery Clip
-Slider switch
-Project Box ~ (129mm*64mm*45mm)

Step 2: Prep

Solder wires to the RX, GND, and VDD of the LCD display

Also solder wires to the 5V, TX, and GND of the geiger counter.

Step 3: Wiring

Here is the circuit diagram for the Geiger counter

Step 4: Program

// Copy paste the following code into the Arduino program:
// Note: You need to have the RX and TX unplugged from the Arduino to program it
// To program an Arduino Pro Mini with an Arduino UNO follow this link

// Geiger Counter
// Eric Bookless
// Introduction
// Uses a Sparkfun Geiger Counter to measure radiation and converts it to counts
// per minute. The calculated counts per minute is displayed on an LCD screen.
// Each count is registered with an audible and visual signal by the use of a
// piezo speaker and an LED.
// Setup:
// - Connect the LED and piezo speaker to pins 9 and 8 respectively
// - Attach pins RX, GND, and VDD from the LCD display to pins 2, GND, and VCC on
//   the Arduino.
// - Attach Geiger counter to power source with pins VCC and GND and connect the
//   TX pin to the RX pin on the Arduino

#include <SoftwareSerial.h>

int i;
int count;
int old = -1;
int check;
float CPM;
float now;
float time;
int start;
int piezo = 8;
int led = 9;
char OnesString[10];
char DecimalString[10];
char TimerString[10];

SoftwareSerial mySerial(3, 2);

void setup(){
  pinMode(piezo, OUTPUT);
  pinMode(led, OUTPUT);

  mySerial.write(254); // move cursor to beginning of first line
  mySerial.write("                "); // clear display
  mySerial.write("                ");

void loop(){
  i = 0;
  count = 0;
  start = millis();
  while (i < 30){
    digitalWrite(led, LOW);
    digitalWrite(piezo, LOW);
    if (Serial.available() > 0) {  // If information available
      check =;       // Read serial input
      if (check > 0){
        count++;                    // If it is a hit, increment counter
        digitalWrite(piezo, HIGH);  // Makes audible sount when there is a hit
        digitalWrite(led, HIGH);    // Blinks LED when there is a hit
   i = millis();
   i = i - start;
   i = i/1000;

   sprintf(TimerString, "%2d", 30-i);

   mySerial.write(254); // cursor to 7th position on second line



  CPM = count*2;
  old = count;                 // Resets 'if' statement
  int cpm = CPM;
  int temp = CPM*1000;
  int decimal = temp % (cpm*1000);

  sprintf(OnesString, "%3d", cpm);

  mySerial.write(254);         // Displays CPM
  mySerial.write("CPM: ");

Step 5: Designing the Project Box

1.  With the project box I was using there was extra plastic around the edges preventing the Geiger counter from going all of the way to    
      the edge of the box. I fixed this by simply chiseling away at it.

2.  Next I cut the holes for the switch and drill a hole for the tube.

3.  Then drill screw holes for the standoffs on the geiger counter.

4.  Cut a hole for the master power switch.

5.  To cut the slot for the lcd screen I drilled several holes about the same size as the screen and carefully removed the remaining      
      material with a sharp chisel. I positioned the screen so that the top left screw hole of the project box would go through the top left
      mounting hole of the screen.

6.  You may need to trim some parts of the project box to insure a good fit.

7.  Once you have the LCD screen where you want it you can drill holes for the LED and Piezo speaker.

Step 6: Assembly

1.  Glue the LED and Piezo speaker into the top of the project box. (Hot glue works particularly well)

2.  Mount the main power switch first (Since it will be below the geiger tube board). I added hot glue to protect the solder joints.

3.  Attach the LCD screen to the top of the project box Fit Geiger tube in the box ( I found the mini fit well if I put the exposed pins below
     the geiger tube)

4.  Close 'er up and your done!!

5.  Test to make sure it works!!!

Be the First to Share


    • Anything Goes Contest

      Anything Goes Contest


    Manoj Eswaran

    I Have a doubt. .. .. can it detect cosmic rays, it has frequency up to 160 ghz and if not can you name a senser which can detect its frequency??????? plz reply it's urgent..


    Reply 7 years ago on Introduction

    Unfortunately I do not have the Geiger anymore, it was a gift for someone but from what i remember the output looked something like this:

    CPM: ### ##

    (Displays CPM) (Countdown timer until next reset)

    The display you are looking at should work fine though, i would recommend looking at any tutorials they might offer as I suspect the display functions will be a bit different than the ones in the script I provided.


    8 years ago on Introduction


    We are having some trouble getting it going. We thought the "Friday" video on Sprakfun used analog port, but some tuts we've found use serial port (Tx on Geiger, Rx on Ardunio Uno). Like wherein he uses a serial 16x2 LCD to see data. We want to see it on our serial monitor AND log it to SD card. We get something like 214K for a value, and no, this place doesn't glow in the dark. Suggestions? Has anyone logged this to SD card (with other sensors?)


    8 years ago on Introduction

    Nice work! Just asking what wires do we use for step 2?


    Reply 8 years ago on Introduction

    Thanks! The VCC, 5V and GNDs are to power the geiger counter and LCD display while TX and RX are what the Arduino uses to receive information from the Geiger tube and transmit information to the LCD display.


    Reply 8 years ago on Introduction

    Thanks! Followed you! :) 3rd follower! :3


    Reply 8 years ago on Introduction

    Could i also use the arduino uno instead of the mini?


    Reply 8 years ago on Introduction

    Yes, just make sure your project box is big enough to fit the Uno


    9 years ago on Introduction

    Thank you, it displays a counts per minute instead of counts per second. Measuring half life would be pretty cool and I haven't tried that yet, thanks for the suggestion.

    nice work. i would have some idea of how to make the detection apparatus of the geiger-marsden tube but very well done on building a system that appears to give you a counts or counts per second(becquerels) reading. you may wish to use it to measure the half life of the source in a smoke alarm but unless it is a very sensitive system you will have to wait a long time(432 years for the count rate to halve but some calculations based on A=A0 x e^(-L x t) would allow a measurement of the half life without waiting so long.).