Introduction: ANDROID CONTROLLED MINE DETECTION ROBOT

We had successfully made a robot with an application of metal detection and surveillance which can be extended to many other applications. Basically to build this robot we had decided to use car as a chassis for the receiving circuit ,whose motion can be controlled by an android app because smart phones play a key role in our lives by becoming all in one device with many essential features like Bluetooth ,GPS , accelerometer which can be used to control robots very easily .Hence , mobile phone is used as a control system in our project . To give a modular approach to our project we have divided our project into two sections : transmitter & receiver . Both these sections were coupled and the final product works very efficiently.

To build the robot ,we need the following components :

1.Android app

2.Bluetooth module HC05

3.Atmega 328 PU (2 ICs)

4. RF transmitter and receiver modules

5. Chassis

6.DC motors

7.Tyres

8.Metal detection hobby circuit

9.Wireless pinhole camera

10.9V battery

Lots of apps are available in google play store which can be downloaded but in our project we have obtained a source code and modifed it by using only 4 motions :forward,backward,right and left.In addition to this, we had added a stop button and a light on/off button. The app was developed using android studio . A screenshot of our app is shown.

TRANSMITTER SECTION :

The transmitting unit comprises of an android app which consists of the directions to be moved and buttons for led on and off. The signals are transmitted from the device via Bluetooth to be decoded by a microcontroller and sent to the RF modules. We have used RF modules as a solution to increase the range as for a device to work in RF system; they need not be in the line of sight. In other words, the transmission section consists of:

·Android app

·Bluetooth module

·Encoder IC

·RF transmitter

RECEIVER SECTION :

The data received by the RF receiver is sent to the decoder IC which is coupled to the motor driver IC .The decoded output is given to the motor driver IC that drives the motors of the car in the desired direction. The receiving section of the RC car has ports where we can introduce additional peripherals. In this project, we have interfaced two features: a metal detector circuit and a wireless pinhole camera. The receiving section comprises of:

·RF receiver

·Decoder IC

·Motor driver IC

·DC geared motors

·Metal detector module

Wireless pinhole spy camera

The receiver section is placed in the chassis of the car model which we had designed and made using acrylic sheet with dimension 20 x 12 x 5 cm that can be opened from the upper side .

We had purchased a wireless pinhole camera from ebay along with a usb adapter to monitor the videos taken by the robot in laptop.It can be connected to TV as well.

The metal detector circuit is soldered with the available components in the hobby circuit and powered with the 9V battery and checked .Then this circuit is placed inside the chassis along with the RF receiver circuit and the camera which is independently powered using another 9V battery. The receiving circuit of the comprises the Atmega IC and the motor driver IC to control the motion of the robot . The metal detector circuit has a buzzer which sounds when the robot detects a metal. The sensitivity range of our metal detector is 1 inch.

The transmitter and receiver circuits are shown in figure . We will be attaching the source codes soon for the transmitter and receiver Atmega ICs.

The future work of our project can only be limited by our imagination. This highly customizable chassis was designed so that the user can easily add on parts. By adding an infrared or ultrasonic sensor an autonomous mode can be implemented and the robot will drive around collecting data. We can also run the app over wifi so it can connect to a website, this will allow security workers to watch multiple robots driving around a facility. The phone's microphone can be used to detect and transmit audio to alert the user. A picture capture mode could also be implemented so you can save footage. Another benefit of repurposing a phone as an IP camera, is one could make use of the broad range of features an average smart phone contains such as light sensor, GPS, compass and even a flash light. All these features could be implemented into our app.

SOFTWARE CODES

TRANSMITTER SECTION

/*

Arduino driver for Android app remote control.

This sketch listens to instructions on the Serial port

then sends the appropriate instructions to the RF receiver through an RF transmitter

*/

#include

SoftwareSerial bluetooth(10, 11); //this function is used to change the RX,TX pins

int const FWD = 2; of arduino to 10th and 11th pin

int const BWD = 4;

int const RIG = 7;

int const LEF = 8;

void setup() {

pinMode(FWD , OUTPUT);

pinMode(BWD, OUTPUT); //initializing pins as input and output

pinMode(RIG, OUTPUT);

pinMode(LEF, OUTPUT);

//initial set up straight forward, no speed

digitalWrite(FWD, LOW);

digitalWrite(BWD,LOW);

digitalWrite(RIG, LOW); //setting initial values for pins

digitalWrite(LEF, LOW);

Serial.begin(9600);

bluetooth.begin(9600); //setting baudrate

}

void loop() {

// see if there's incoming serial data:

if (bluetooth.available() > 0) {

// read the oldest byte in the serial buffer:

int incomingByte = bluetooth.read();

// action depending on the instruction

// as well as sending a confirmation back to the app

switch (incomingByte) {

case 'F':

moveForward(true);

Serial.println("Going forward");

break;

case 'R':

turnR(true);

Serial.println("Turning right");

break;

case 'L':

turnL(true);

Serial.println("Turning left");

break;

case 'B':

moveBackward(true);

Serial.println("Going backwards");

break;

case 'S':

moveStops(true);

Serial.println("Stopping");

break;

case 'X':

Ledon(true);

Serial.println("light ON");

break;

case 'Y':

Ledoff(true);

Serial.println("Light OFF");

break;

default:

// if nothing matches, do nothing

break;

}

}

}

void moveForward(boolean forward){

//boolean forward controls motor direction

if (forward)

{

digitalWrite(FWD, HIGH);

digitalWrite(BWD,LOW);

digitalWrite(RIG, LOW);

digitalWrite(LEF, LOW);

Serial.println("Going UP");

}

}

void Ledon(boolean on){

//boolean led light control of bot

if (on)

{

digitalWrite(FWD, HIGH);

digitalWrite(BWD,HIGH);

digitalWrite(RIG, LOW);

digitalWrite(LEF, LOW);

Serial.println("LED ON");

}

}

void Ledoff(boolean offF){

//boolean led light control of bot(turning off)

if (offF)

{

digitalWrite(FWD, HIGH);

digitalWrite(BWD,HIGH);

digitalWrite(RIG, HIGH);

digitalWrite(LEF, LOW);

Serial.println("LED OFF");

}

}

void moveBackward(boolean backward){

//boolean backward controls motor direction

if (backward)

{

digitalWrite(FWD, LOW);

digitalWrite(BWD,HIGH);

digitalWrite(RIG, LOW);

digitalWrite(LEF, LOW);

Serial.println("Going DOWN");

}

}

void moveStops(boolean stops){

//boolean stop for stoping the motor

if (stops)

{

digitalWrite(FWD, LOW);

digitalWrite(BWD,LOW);

digitalWrite(RIG, LOW);

digitalWrite(LEF, LOW);

Serial.println("STOPS");

}

}

void turnR(boolean rightR){

//boolean right controls motor direction

if (rightR){

digitalWrite(FWD, LOW);

digitalWrite(BWD,LOW);

digitalWrite(RIG, HIGH);

digitalWrite(LEF, LOW);

Serial.println("Going RIGHT");

}

}

void turnL(boolean rightL){

//boolean left controls motor direction

if (rightL){

digitalWrite(FWD, LOW);

digitalWrite(BWD,LOW);

digitalWrite(RIG, LOW);

digitalWrite(LEF, HIGH);

Serial.println("Going LEFT");

}

}

int const PP = 0;

int const P1 = 1;

int const P2 = 2;

int const P3 = 3;

int const P4 = 4;

int const P5 = 5;

int const P6 = 6;

int const P7 = 7;

int const P8 = 8;

int const P9 = 9;

int const P10 = 10;

int const P11 = 11;

int const P12 = 12;

int const P13 = 13;

RECEIVER SECTION

/*this program will receive the instructions that is send by the RF transmitter and controls the bot accordingly*/

int const PP = 0;

int const P1 = 1;

int const P2 = 2;

int const P3 = 3;

int const P4 = 4;

int const P5 = 5;

int const P6 = 6;

int const P7 = 7;

int const P8 = 8;

int const P9 = 9;

int const P10 = 10;

int const P11 = 11;

int const P12 = 12;

int const P13 = 13;

void setup() {

pinMode(PP , INPUT);

pinMode(P1 , INPUT);

pinMode(P2 , INPUT);

pinMode(P3 , INPUT);

pinMode(P4, OUTPUT);

pinMode(P5, OUTPUT);

pinMode(P6, OUTPUT);

pinMode(P7, OUTPUT);

pinMode(P8, OUTPUT);

pinMode(P9, OUTPUT);

pinMode(P10, OUTPUT);

pinMode(P11, OUTPUT); //initializing as input and output

pinMode(P12, OUTPUT);

digitalWrite(PP, LOW);

digitalWrite(P1, LOW);

digitalWrite(P2, LOW);

digitalWrite(P3, LOW);

digitalWrite(P4, LOW);

digitalWrite(P5, LOW); //setting initial values of pins

digitalWrite(P6, LOW);

digitalWrite(P7, LOW);

digitalWrite(P8, LOW);

digitalWrite(P9, LOW);

digitalWrite(P10, LOW);

digitalWrite(P11, LOW);

digitalWrite(P12, LOW);

}

void loop() {

int C1 = digitalRead(PP);

int C2 = digitalRead(P1);

int C3 = digitalRead(P2); //reading data obtained by RF reciever

int C4 = digitalRead(P3);

int C5 = digitalRead(P9);

if(C1==HIGH && C2==LOW){

if(C3==LOW){

digitalWrite(P4, HIGH);

digitalWrite(P5, LOW); //condition for forward motion

digitalWrite(P6, HIGH);

digitalWrite(P7, LOW);

}

}

if(C2==HIGH && C1==LOW){

if(C3==LOW){

digitalWrite(P4, LOW);

digitalWrite(P5, HIGH); //backward

digitalWrite(P6, LOW);

digitalWrite(P7, HIGH);

}

}

if(C3==HIGH && C2==LOW){

if(C1==LOW){

digitalWrite(P4, HIGH);

digitalWrite(P5, LOW);

digitalWrite(P6, LOW); //right

digitalWrite(P7, HIGH);

}

}

if(C4==HIGH && C3==LOW){

if(C2==LOW && C1==LOW){

digitalWrite(P4, LOW);

digitalWrite(P5, HIGH);

digitalWrite(P6, HIGH); //left

digitalWrite(P7, LOW);

}

}

if(C1==HIGH && C2==HIGH){

if(C3==LOW && C4 == LOW)

{

digitalWrite(P8, HIGH); //led on

}

}

if(C1==HIGH && C2==HIGH){

if(C3==HIGH

&& C4 == LOW){

digitalWrite(P8, LOW); //led off

}