Subterranean investigation device

A platform for exploration of underground places.

Similar projects worth following
This project is a rolling platform for a camera and lights that i want to send down a rubble floored tight passage in a castle, i wont go in to particulars but i believe there to be an unrecorded basement. For the drive system i wanted tracks, wheels would of done and i ended up with bike chain with center holes and resin cast nodules. In controlled conditions the nodules allow it to climb anything to the point where it rolls over backward. The camera, a webcam is on a 2 Dof base. Electro-luminescence will come from super bright low wattage LED's. Or infrared LED's seeing as the camera can see in that light range. As for control; wifi, bluetooth or radio will do, with my phone or laptop as the controller. We will see.

Is this the place to post code? Who cares, here it is, respectfully stolen of the net and tweaked to suit my own fiendish desires, a lot of the old stuff is in there from the original code and lots of test code slashed out, man alive i cut corners! My coding is nearly as messy as my workshop :) It should compile on an arduino.

Here is the Transmitter code;

#include <Servo.h>
#include <JeeLib.h>  //from
#include <Wire.h>
//#include "nunchuck_funcs.h"

#define myNodeID 10          //node ID of tx (range 0-30)
#define network     210      //network group (can be in the range 1-250).
#define freq RF12_868MHZ     //Freq of RF12B can be RF12_433MHZ, RF12_868MHZ or RF12_915MHZ. Match freq to module
byte byteRead;
typedef struct // create structure - a neat way of packaging data for RF comms
  int jx, jy, acy, acx, zButton, cButton; // data from the controller. these have to match.

PayloadTX wiichuck;  
byte accx,accy,zbut,cbut,joyx,joyy; // names of the nunchuck data

// constants won't change. They're used here to 
// set pin numbers:
const int right = 4;     // the number of the pushbutton pin
const int backward = 5;
const int forward = 6;
const int left = 7;
int p = 0;
int t = 0;
int r = 0;
int potpin0 = 5;
int potpin1 = 4;
int potpin2 = 3;
int val0;
int val1;
int val3;
//const int ledPin =  13;      // the number of the LED pin

// variables will change:
//int buttonState = 0;         // variable for reading the pushbutton status
int Right = 0;
int Backward = 0;
int Forward = 0;
int Left = 0;

//int cbut = 0;

void setup() {
  // initialize the LED pin as an output:
 // pinMode(ledPin, OUTPUT);      
  // initialize the pushbutton pin as an input:
  pinMode(right, INPUT);     
  pinMode(backward, INPUT); 
  pinMode(forward, INPUT); 
  pinMode(left, INPUT); 
//  accx = 90;
//  accy = 90;
//  zbut = 90;

  //Stuff here for reading the three pots.

void loop(){
      Serial.print(" 1pan ");  
//  Serial.print("\n");  
  Serial.print(" 1tilt ");  
//  Serial.print("\n");  
  Serial.print(" 1raise ");  
  p = analogRead(potpin0);            // reads the value of the potentiometer (value between 0 and 1023) 
  accx = map(p, 0, 1023, 0, 179);     // 
  t = analogRead(potpin1);            // reads the value of the potentiometer (value between 0 and 1023) 
  accy = map(t, 0, 1023, 0, 179);     //

  r = analogRead(potpin2);            // reads the value of the potentiometer (value between 0 and 1023) 
  zbut = map(r, 0, 1023, 0, 179);     //   
  // read the state of the pushbutton value:
  Right = digitalRead(right);
  Backward = digitalRead(backward);
  Forward = digitalRead(forward);
  Left = digitalRead(left);
  // check if the pushbutton is pressed.
  // if it is, the buttonState is HIGH:
  //Serial.print("cbut val\n");  
  Serial.print(" pan ");  
//  Serial.print("\n");  
  Serial.print(" tilt ");  
//  Serial.print("\n");  
  Serial.print(" raise ");  

  if (Left == HIGH) {     
    // turn LED on: 
    cbut = 4; 
    //digitalWrite(ledPin, HIGH);  
  else if (Forward == HIGH) {     
    // turn LED on: 
    cbut = 1;  
    //digitalWrite(ledPin, HIGH);  
  else if (Backward == HIGH) {     
    // turn LED on: 
    cbut = 2; 
    //digitalWrite(ledPin, HIGH);  
  else if (Right == HIGH) {     
    // turn LED on: 
    cbut = 3; 
    //digitalWrite(ledPin, HIGH);  
  else {
    // turn LED off:
    //Serial.print("right off\n"); 
    //digitalWrite(ledPin, LOW); 
  //cbut = 1;// nunchuck_cbutton(); 
  //accx  = 71; //nunchuck_accelx(); // ranges from approx 70 - 182
  //accy  = 65;// nunchuck_accely(); // ranges from approx 65 - 173
  //zbut = 2;//nunchuck_zbutton();
  joyx = 3...
Read more »

  • New power source

    PJK03/30/2015 at 13:48 0 comments

    The heavy lead acids are being reassigned in favour of Li ion 18650's. A set of chargers were built around the mcp73831t 5 pin chip and the batteries sourced from old or unused laptop batteries packs.

    The feet for the tracks are also under consideration for a redesign.

    There simply are not enough hours in the day.

  • Fat little sid

    PJK10/10/2014 at 18:42 0 comments

    The fat little bastrd needed some time at fat camp, holes were drilled in the heavy steel cogs as one can see in the photo's. ( What a mess, i made an oil cooler that circulated oil from a tub to the hole cutter and back to the tub. The cog would catch, flinging oil everywhere. Oh, and its used engine oil. Messy messy messy. Did the job though. )

    Two 12v 2.1A or such lead acid batteries for power.

    Its very slow, works via radio control and has very good night vision. So far so good.

  • Mechanicals nearly done

    PJK09/16/2014 at 20:53 0 comments

    As one can see above, we have a heavy duty tracked replacement for sid the weedy. Metal chain and feet await some kind of foot and the gear box nears completion. Its been a brutal time cutting the boss's off gears, machining shafts and trying to delicately weld the gears with a horrifically over the top welder.  

  • Testing phase. fail.

    PJK08/17/2014 at 21:07 0 comments

    The radio control system was finally completed. Ill post the code and circuits here because the whole thing was a ball ache to get working. The vehicle that i had made could not handle the battery needed to make it work. It was too heavy and the tracks kept slipping off. A big no no. So im building bigger, better tracks. So in conclusion; electrics good. Mechanics bad.

  • Control

    PJK06/23/2014 at 10:36 0 comments

    Working on the wireless control. 2 sets of Uno and rfm12b doing the chatting. Nearly there. The video feed is via a FPV system. The camera plugs in to the tx. The rx is fed through a video to usb converter and viewed on the laptop. 

View all 5 project logs

Enjoy this project?



B_S wrote 10/02/2014 at 15:59 point
Great job so far. Could you please take some close up pictures of the chains? I'm planing on making a simmilar vehicle that would follow me around carrying some stuff. Without access to a cnc mill or lathe the bike chain solution seems very nice and easy.

  Are you sure? yes | no

PJK wrote 10/10/2014 at 19:05 point
I purchased some square metal section to suit the chain. Sliced it in half and spot welded it to every other link. I now need to slap some kind of grip on to the feet. What i should have done is purchased attachment chain. Google it. comes in all sorts of variety's. ( never priced it though and welding took less time than i thought. As crap as it is :) so ....)

  Are you sure? yes | no

hyratel wrote 09/20/2014 at 00:13 point
is there room for a breadcrumb string spool?

  Are you sure? yes | no

Simon wrote 09/19/2014 at 23:38 point
Great project! I would suggest though testing out your video link thoroughly before investigating the basement, though. I assume that with all the walls and passages in the basement, you'll get a lot of multipathing of the video RF signal. Not to mention attenuation through the walls. The FPV video transmitters generally don't work well indoors for these exact reasons. Maybe try it out first in a similar building where you can recover the robot if the video signal disappears?

  Are you sure? yes | no

PointyOintment wrote 06/08/2014 at 00:18 point
If you can, consider adding a depth camera of some kind. A Kinect would probably be too big, but there are lots of smaller ones these days (e.g. Structure Sensor). It would enable you to construct an accurate 3D map of the rooms you explore (and avoid driving off ledges/down too-steep slopes).

  Are you sure? yes | no

PointyOintment wrote 06/08/2014 at 00:19 point
You could even just use a line laser and sweep it across the room, using the webcam to pick up its deviation from a straight line. That technique has been used for ages and is really cheap. The disadvantages are that it's slow and you get some shadows, but it should be fine for your application.

  Are you sure? yes | no

PJK wrote 05/21/2014 at 21:12 point
Im not going to get attached to this thing. I can imagine sending it in the first time, only to have it fall off a ledge, never to be seen again. Maybe i should etch a ' If found, please return to ....' plate on it. It might confuse archaeologists in a thousand years if found. As for the place i intend to send it, no roots, just spiders and lumps of rock on the floor. As im building this thing the image of the pyramid robot is always in the back of my mind.

  Are you sure? yes | no

davedarko wrote 05/24/2014 at 21:37 point
couldn't you attach a robe so you could pull it back and install a ledge detection like a down pointing LED and an LDR to check how much light is reflected?

  Are you sure? yes | no

Christoph wrote 05/20/2014 at 21:52 point
Great reason to build that thing. Are you going to hide anything that could become entangled with roots and stuff like that? Once it's stuck in a place where you can't go, you're probably not going to get it out again. Same for wireless control...

  Are you sure? yes | no

davedarko wrote 05/19/2014 at 20:50 point
reminds me of those robots for the pyramids, sounds like a little adventure, awesome!

  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