Autonomous robot that scans floors for radioactive contamination, saves the data, and then dumps it to a smartphone via BLE.

Similar projects worth following
Up to 6 pancake Geiger tubes are mounted in the brush compartment of a Roomba vacuum cleaner robot. There will be 2 phases:
In the first phase, NukeBot will use Roomba's default random navigation and stop every once in a while to do a count. If radioactive contamination is found, NukeBot stops and waits for a technician.
In the second phase, NukeBot's navigation will be controlled by a smartphone and the phone will be aware of NukeBot's position.
I'm not sure how we'll build position awareness on the phone. NukeBot will be used inside, where there is no GPS. Maybe we can use the phone's camera to map the room? There are some projects like that, using a Raspberry Pi and Kinect. But, I'd prefer to stay with a phone. Has anyone in Hackaday Land played with Project Tango and is willing to share? Ultrasound? Lidar? Suggestions?


BotSpine provides most of the functionality required for this project:

  • Single chip computer, running a BASIC interpreter, for easy high-level programming.
  • Flash based file system for data storage.
  • Bluetooth Low Energy (BLE) connectivity for writing the BASIC program and for sending the stored data to the phone.
  • Serial communication to control Roomba.
  • GPIOs to turn on the high voltage to the Geiger tubes and to count the pulses.

For phase 1, all the smarts will be in BotSpine itself. For phase 2, the smartphone will directly control NukeBot by sending commands to BotSpine via BLE. One of the advantages of using a BASIC interpreter, rather than a compiled programming environment, is that you can run a program or send one command at a time. So, switching between stand-alone mode and tethered is seamless. You can even send a direct command, while a program is running.


The picture shows the BotSpine board connected to a DIN connector, which plugs into Roomba's serial port. Underneath BotSpine (can't see it in the picture) is a board of the same size as BotSpine, which provides the High Voltage (500V) to the Geiger tubes. Roomba provides the power. Roomba's voltage is too high (up to 19V) for BotSpine and our High Voltage board. That's why there is an extra regulator/capacitor sticking out the bottom.

This picture shows the bottom of NukeBot. There is room for 6 Geiger tubes. But, for testing, I'm only using 1.

Here is NukeBot on the floor. BotSpine and the HV board are inside the plastic case, velcroed to the top of Roomba.


Phase 1 took about 50 lines of BASIC code:

// "run" will start data collection. "goto 3000" will dump data. 
12 N = 50 // Number of spots where a measuremen is to be taken
13 V = 100 //delay between sending serial commands
14 X = 10000 // driving time in ms
15 Y = 10000  //short count in ms (reduced for demo video)
17 Z = 10000  //additional count time in ms (reduced for demo video)
110 T = 50   //short count threshold
111 U = 150  //long count threshold
112  L = 0   // measurement counter
113 pinmode P1(7) output
114 P1(7) = 1  //turn on HV 
115 pinmode P0(7) output
117 P0(7) = 0  //wake up roomba strobe low 
119 Delay 250  
121 P0(7) = 1 //roomba should now be awake 
122 Delay 500 // just wait a bit to make sure roomba is ready
124 SERIAL 115200,N,8,1,H // initialize serial
127 WRITE # SERIAL,128  // tell roomba to expect data
130 OPEN 0, APPEND "A" // open a file to be written to. 
160 delay V
170 WRITE # SERIAL,135        // Start Stop = Start
180 delay X		// drive around for X ms
1100 WRITE # SERIAL,135          // Start Stop = Stop 
1110 L = L + 1 // Increment measurement counter
1120 M = 0   // initialize pulse counter
1130 interrupt attach P0(6) rising gosub 1500  // start pulse counting
1150 delay Y   // count for Y ms
1160 IF M > T  // check if short count threshold exceeded
1170 DELAY Z    // count for another Z ms if first count was kinda high
1180 END   // END IF
1190 interrupt detach P0(6)  // done counting 

1195 IF M > 65535
1196 M = 65535
1197 END
1198 K=M/256
1199 B=M-K*256
1200 WRITE #0, L , B , K  // write the measurement number and the contamination reading (in 2 bytes) to file 0 

1210 OLED clear 
1220 OLED M   // Might as well display every measurement result. At least for initial testing.
1250 IF M > U 
1252 GOTO 4000 //contamination was found. Stop here.
1254 end
1260 IF L > N 
1262 GOTO 4000 // took all the measurements we wanted to take. Stop here
1264 END
1270 GOTO 170   //Start diriving to a new location and take another count
1500 M = M + 1   //increment pulse counter

3000 CLOSE 0 // close flie 0 just in case the data collection got interrupted without closing the  program 
3010 OPEN 0, READ "A" // open the file to read from. 
3012 PRINT "Here is the contamination data"

3015 IF EOF(0)  //check for End of Data
3017 GOTO 3900
3018 END
3020 READ #0, L , B , K
3023 M = K*256 + B   //reconstruct the reading from 2 bytes
3030 PRINT M, " ", L
3035 DELAY 3
3040 GOTO 3015

3900 PRINT "No more data"
4000 CLOSE 0 //...
Read more »

  • The Big Picture

    kai07/24/2017 at 02:29 0 comments

    NukeBot is a demonstration project of our vision of future autonomous robot development:

    1) Mobile computing, including mobile robots, will be done on mobile computing devices (i.e. smartphones). This is an inexpensive and fast way of incorporating advanced functionality (GPS, computer vision, speech recognition etc.) into the robot.

    2) Standard equipment (e.g. Roomba, Geiger tubes) will be used to move the robot and sense and manipulate its surroundings.

    3) Simple tools (e.g. BotSpine, Espruino) will be used to connect the mobile computing device to the sensors and effectors.

    All 3 of the above will become commodities. Robot design then becomes a simple process of: 

    1) Select your mobile device and decide on the functionality it needs.

    2) Select your sensors and moving parts.

    3) Select your connector.

    4) Write a few lines of code.

    ...and you are done.

  • How does NukeBot Make Life Easier for Humans?

    kai07/24/2017 at 02:04 0 comments

    NukeBot was originally designed to scan trucks hauling uranium concentrate for pre-existing radioactive contamination, before the concentrate drums are loaded. 

    Scanning a 40 foot trailer manually (at - 40 degrees) is not a particularly coveted job. Automating it is an obvious improvement. 

  • What is a Robot?

    kai07/24/2017 at 01:51 0 comments

    To me (and all of popular culture: think Rosie on the Jetsons or Bender on Futurama), robots are autonomous. Robots function in the normal environment, without requiring any special adaptations to the environment. They move freely and are not bolted to a work station. Robots should perform a useful task.

    By that definition, there are very few robots around today. I think robots are now on the threshold of becoming much closer to what popular culture has been describing for half a century and what technology has largely failed to deliver.

    NukeBot fits this definition of a robot. It moves around an area to be scanned for radiation and performs these scans autonomously. 

  • NukeBot Video

    kai01/22/2016 at 21:39 0 comments

View all 4 project logs

Enjoy this project?



Rob Wohleb (TiSpork) wrote 07/30/2017 at 08:07 point

Look into the NorthStar navigation cube for the iRobio Braava. My understanding is that it projects a specific pattern of IR light on the ceiling, and then an upward facing camera on the robot can calculate position from it. You could always do this on the cheap by taping QR codes to the ceiling. 

  Are you sure? yes | no

kai wrote 07/30/2017 at 15:12 point

Sounds like a good idea. I'll check it out. Thanks!

  Are you sure? yes | no

alex downs wagner wrote 01/16/2016 at 16:45 point

What inspired this project? I'm interested to know.

  Are you sure? yes | no

kai wrote 01/16/2016 at 19:22 point

Hi Alex, I was looking for a cool project to demonstrate the capabilities of our BotSpine board. 

A customer approached us with the idea of putting a radiation detector on a Roomba. Currently, they have technicians manually checking trailers for contamination. This will make it a lot easier.

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates