Introduction: How to Build CubeSat With Arduino and Geiger Counter Sensor

Ever wondered about whether or not Mars is radioactive? And if it’s radioactive, are the radiation levels high enough to be considered harmful to humans? These are all questions that we hope can be answered by our CubeSat with Arduino Geiger Counter.

Radiation is measured in sieverts, which quantifies the amount of radiation absorbed by human tissues, but due to their immense size we usually measure in millisieverts (mSV). 100 mSV is the lowest annual dose at which any increase in cancer risk is evident, and a single dose of 10,000 mSV is fatal within weeks. Our hopes are to determine where this simulation lands Mars on the radioactive scale.

Our physics class started off by studying the forces of flight during first quarter through a lab in which we designed our own airplane and then created it out of Styrofoam plates. We would then proceed to launch in order to test drag, lift, thrust, and weight of the plane. After the first set of data we would then make changes to the plane to try and get the furthest distance possible.

Then second quarter we focused on building a water rocket to further observe and test the concepts we learned during first quarter. For this project we used 2L bottles and other materials to build our rocket. When we were ready to launch we would fill the bottles with water, go outside, place the rocket on a launch pad, pressurize the water and release. The goal was to launch the rocket the furthest possible in a vertical direction and have it come down safely.

Our third final “big” project was building a CubeSat that would carry an Arduino and a sensor safely to our classroom model of Mars. The main goal for this project was to determine the amount of radioactivity in Mars and determine whether it’s harmful to humans. Some other side goals were to create a CubeSat that would withstand the shake test and be able to fit all the materials necessary inside of it. The side goals go hand and hand with the constraints. The constraints we had for this project were the dimensions of the CubeSat, how much it weighs, and the material which it is built from. Other constraints not related to the CubeSat were the amount of time we had to 3D print since we only got one day to get it done; the sensors we used were also a constraint since there were sensors that the class didn’t have available or couldn’t purchase. On top of this we had to pass the shake test to determine the stability of the CubeSat and the weight test to make sure we didn’t surpass 1.3kg.


Step 1: Materials List

3D printed CubeSat- Miniaturized satellite which has the dimensions of 10cm x 10cm x 10cm and can’t weigh more than 1.3Kg. This is where we are putting all our wires and sensors, serves as a space probe

Wires- Used to connect the Geiger Counter and Arduino to one another and make them function

Arduino- Used to run the code on the Geiger Counter

Geiger Counter- Used to measure radioactive decay, this is what our whole project depends on to determine radioactivity

Batteries- Used to power the Geiger Counter which will power the Arduino once connected

Micro sd Reader- Used to collect and record the data gathered with the Geiger Counter

Screws- Used to tighten the top and bottom of CubeSat to ensure it doesn’t break down

Uranium ore- Radioactive material which is what the Geiger Counter uses to determine radioactivity

Computer- Used to find/create the code you will be using for the Arduino

USB Cord- Used to connect your Arduino to the computer and run the code

Step 2: Build Your CubeSat

The first thing you're going to need is your CubeSat.

(If you would like a detailed explanation of what a CubeSat is checkout

When designing your CubeSat you have two main options, build your own out of whatever material you have or 3D print one.

My group decided to 3D print our CubeSat so all we had to do was look up "3D CubeSat" and we found several templates but we decided to grab the file from the NASA website. From there you're gonna need to download the file; then, you're gonna need a flash drive to unzip the file and load it up to a 3D printer.

From there, just go ahead and 3D print the CubeSat to proceed with the rest of the steps.

When creating our 3D CubeSat model we realized that our Arduino and cords wouldn't fit inside of it. We all had to create a strategy and figure out how to put everything inside. We had to rotate and put our cover top and bottom face up. After that, we had to drill holes and be able to screw the nails and find the good size.While putting all Arduino,SD card and everything in it, we had “too much” space so we had to add some bubble wraps inside so when we were testing it wouldn't go everywhere because it was all wired and connected.

Step 3: Sketch Your Design

Once you get all your materials you're going to want to make a sketch of what your design is going to look like.

Some find this step more useful than others so it can be as detailed or as plain as you like, but it's good to get a general idea of how you're going to organize everything.

Our group personally used it to sort of brainstorm how we would organize our sensors and all the wires but from there we didn't find much use for it as we were constantly changing things and so our sketches only served as a starting point since we didn't really stick with them.

Once you have a general idea of what everything is going to look like you can move to the next step

Step 4: Learn How the Geiger Counter Works

Once we got the Geiger Counter delivered to us we had to learn how it worked as none of us had ever used one.

The first thing we learned is that the Geiger Counter is super sensitive. The sensors on the back would make an extremely loud noise as well as the Geiger tube itself whenever we touched. If we kept our finger on the tube it would make one long constant beep and we took our fingers off and on and it would beep according to the duration of our fingers on the tube.

Then we tested the Geiger Counter using bananas. We realized that the closer the radioactive material was to the Geiger Counter, the more it would tick and vice-versa.

Step 5: Tools/Safety Practices

  1. The first thing that is needed is a CubeSat. To make that, you will need a 3d printer and the files to print or you can build your own using whatever materials you feel will work; remember, the CubeSat must be 10cm x 10cm x 10cm (Skip part 2 if you’re building your own)

  2. Next you will need to drill holes into the top and bottom shells of the 3d printed CubeSat to put screws in it. Go ahead and screw the bottom shell ( Make sure you’re wearing goggles to prevent any debris from going into your eyes)

  3. Get some batteries and put them in a battery pack, then wire the batteries to the Geiger Counter and wire the Geiger Counter to the Arduino. Make sure that a Micro SD reader is wired in as well.

  4. Turn the Geiger Counter on to make sure everything is functioning properly. Put everything inside the CubeSat.

  5. Test flight your CubeSat to make sure

  6. After collecting your data, make sure that nothing in the CubeSat is overheating. If there is, unplug it immediately and asses the problem

  7. Test everything to check if data is being collected

  8. Make sure to wash your hands after dealing with the Uranium used to gather data

Step 6: Wiring Arduino

The only power supply needed is AA batteries

Connect the batteries straight to the Geiger Counter, then wire the VVC pin to the positive column of the breadboard.

Run another wire on the same column in the breadboard to the 5V slot on the Arduino. This will power the Arduino.

Then, run a wire from the 5V pin on the arduino to the SD Card adapter.

Next, wire the VIN on the geiger counter to an analog pin on the Arduino.

After that, wire the GND to the negative column on the breadboard.

Wire the negative column to the GND on Arduino.

SD card to Arduino:

Miso goes to 11

Miso goes to 12

SCK goes to 13

CS goes to 4

Step 7: Coding

The easiest way to code Arduino is to download the ArduinoCC app, which allows you to write code and upload it to the Aduino. We had a very hard time finding a complete code that would work. Lucky for you, our code includes recording the CPM (clicks per minute) and the data on the SD card.




/* * Geiger.ino * * This code interacts with the Alibaba RadiationD-v1.1 (CAJOE) Geiger counter board

* and reports readings in CPM (Counts Per Minute). *

* Author: Mark A. Heckler (@MkHeck, *

* License: MIT License *

* Please use freely with attribution. Thank you!


* * Edited** */

#define LOG_PERIOD 5000 //Logging period in milliseconds, recommended value 15000-60000.

#define MAX_PERIOD 60000 //Maximum logging period

volatile unsigned long counts = 0; // GM Tube events

unsigned long cpm = 0; // CPM

const unsigned int multiplier = MAX_PERIOD / LOG_PERIOD; // Calculates/stores CPM

unsigned long previousMillis; // Time measurement

const int pin = 3;

void tube_impulse() {

// Captures count of events from Geiger counter board counts++;



File myFile;

void setup() {


SD.begin(4); // Open serial communications and wait for port to open:



void loop() { // nothing happens after setup

unsigned long currentMillis = millis();

if(currentMillis - previousMillis > LOG_PERIOD) {

previousMillis = currentMillis;

cpm = counts * multiplier;"test.txt",FILE_WRITE);

if(myFile) {





counts = 0;

pinMode(pin, INPUT); // Set pin to input for capturing GM Tube events interrupts(); // Enable interrupts (in case they were previously disabled) attachInterrupt(digitalPinToInterrupt(pin), tube_impulse, FALLING); // Define external interrupts



The picture we have is of the first code we used which was incomplete so that was the first of our problems with coding. From there on we couldn't really move on with the project until our teachers helped us with the code. This code was derived from another code which worked with the Geiger Counter alone but not once it was paired with the SD card.

Step 8: Test Code

Once you have your code go ahead and test the code to make sure you can collect data.

Make sure all the settings are correct so check your ports and your wires to make sure everything is correct.

Once you've checked everything run the code and see the data you're getting.

Also note the units for the radiation you're collecting as will determine the actual radiation that is being emitted.

Step 9: Test Your CubeSat

Once you've got your coding figured out and all your wiring is done your next step is to fit everything inside the CubeSat and test it to make sure nothing will fall apart on your final testing.

The first test you will need to complete is the flight test. Get something to hang your CubeSat from and spin it to test if it'll go flying off or not and to make sure it spins in the right direction.

Once you've completed the first preliminary test you'll need to complete two shake tests. The first test will simulate the turbulence the CubeSat would experience getting out of earth's atmosphere and the second shake test would simulate the turbulence in space.

Make sure all your parts stayed together and that nothing fell apart.

Step 10: Final Testing and Results

Data collected on table at different distances away from geiger counter

Collection intervals at 5 seconds 0 72 24 36 48 612 348 60 48 48 24 36 36

Before our final testing we collected data by turning the Geiger Counter on and putting the radioactive material at different distances. The higher the number the closer the Geiger Counter was to the radioactive material.

Data collected during actual Testing

0 0 0 0 0 0 0 0 0 0 0 0

For our actual testing the radioactive material turned out to be too far away from the Geiger Counter for it to even measure.

What does the data mean? Well using the readings chart we can determine that the higher the number the more dangerous the radiation is to humans.We can then turn out Click Per Minute into mSV which are the actual units for radiation. And so, based on our experiment, Mars is perfectly save to humans!

Sadly, reality is often disappointing. Mars' radiation is actually 300 mSv which is 15x higher than what a nuclear plant worker is exposed annually.

Other data for our flight includes:

Fc: 3.101 Newtons

Ac: 8.072 m/s^2

V: 2.107 m/s

m: .38416 kg

P: 1.64 seconds

F: .609 Hz

Step 11: Problems/Tips/Sources

The major problem we had were finding the code that would work for the Geiger and the SD card so if you have the same problem feel free to use our code as a base. Another option would be to go the Arduino forums and ask for help there (be ready to pay however as we noticed people are less likely to help if there's no compensation).

One thing we would advice for others is to try and find a way for the Geiger Counter to be as close to the radiation as possible in order to be able to get more certified data.

Here are the sources we consulted for anyone interested:

Arduino Contest 2019

Participated in the
Arduino Contest 2019