Arduino Projects

Wall Climbing Robot Car using Arduino, Bluetooth & Android App

Description:

 

Wall Climbing Robot using Arduino, Bluetooth & Android App- In this tutorial, you will learn how to make a lightweight, low cost and highly efficient Wall Climbing Robot using a custom made controller board based on the Atmega328 microcontroller, this is the same microcontroller which is used in the Arduino Uno, HC-05 or HC-06 Bluetooth Module, L298N motor driver, 6v Mini Dc Gear Motors, and high RPM Quadcopter Brushless Dc Motor.

The Forward, Back, Left, and Right movement of the Wall Climbing Robot is controlled wirelessly using a specially designed Android cell phone application. The high RPM Quad Copter Brushless Dc Motor is used to create the vacuum by sucking the air due to which the Robot sticks to the wall. This is going to be a very detailed tutorial, explaining everything, so that you can make the one by yourself.  You can watch the demonstration video given at the end of this article.

Without any further delay let’s get started!!!


Amazon Purchase Links:

6v 60RPM Mini Dc Gear Motors

Atmega328 micro controller:

16Mhz crystal:

22pf capacitors:

10k Resistor:

10uf capacitors:

L298N motor driver:

1000KV Brushless Motor, 30A Speed controller, and Propellers

Top Brushless Motors

3s Lipo Batteries

4s Lipo Batteries

Bluetooth Module: Hc-05:

Arduino Uno

Arduino Nano

Other Tools and Components:

Top Arduino Sensors:

Super Starter kit for Beginners

Digital Oscilloscopes

Variable Supply

Digital Multimeter

Soldering iron kits

PCB small portable drill machines

*Please Note: These are affiliate links. I may make a commission if you buy the components through these links. I would appreciate your support in this way!


Wall Climbing Robot:

A Robot is an electro-mechanical machine that is controlled remotely using wireless technology and is able to do tasks on its own. The majority of the Robots are Semi-automatic and are designed to perform different tasks depending on the instructions defined by the programmers. A Robot can be used for security purposes, it can capture Video & Audio information from the surroundings which can be then sent to a remote monitoring station through wireless communication. The aim of this project is to design and fabricate a Wall Climbing Robot using vacuum technology. The vacuum is created by the high RPM Brushless Dc Motor, the one used in Quad Copters. So far, four types of adhesion techniques have been investigated,

  • Magnetic devices for climbing ferrous surfaces.
  • Vacuum suction techniques for smooth and nonporous surfaces.
  • Attraction force generators based on aerodynamic principles.
  • Bio-mimetic approaches inspired by climbing animals.

Some of the most famous Wall Climbing Robots,

  • City Climber: Wall climbing Robot
  • Mecho-gecko: Wall climbing Robot
  • Hyperion: Wall Climbing Robot
  • Lemur- Weight shifting rock climber style bot
  • Ninja-2 articulated leg Wall Climber Robot
  • C-Bot Wall Climbing Robot Prototype
  • Capuchin Weight Shifting Climbing Bot “Wall climber”
  • Robot Window Shade
  • The Stanford Sticky Bot
  • RiSE: the Amazing Insect Like Climbing Robot
  • Vortex RRAM Mobile Robot Platform
  • Flexible Finger magnetic Climbing Robot
  • SRI Static Electric Wall Climbing Robot
  • Sucker based independent limb wall climber
  • SPIBOT- Self-contained power source and vacuum pump


The Things you need to take care of while making a Wall Climbing Robot:

One of the most important things that you really need to take care of is the weight of the Robot. Use lightweight parts. Instead of using the large controller boards, like Arduino Uno or Mega2560 make a custom made controller board. This way you can reduce the price, size, and weight of the circuit board. Use very small Dc Gear Motors. While working on this project the only thing that I focused on was the weight of the Robot. For the best understanding, I designed a basic 3D model of the Wall Climbing Robot using SolidWorks 2016.

Wall Climbing Robot

I recorded the dimensions of all the electronic parts using a Vernier Caliper and then designed each part in the SolidWorks. I roughly started with a 12×12 inch base frame. Luckily a frame of this size could accommodate all the parts. Then I started searching for a 12×12 inch lightweight sheet and luckily I found a PCB Copperplate of the same dimensions. To overcome the bending problem I cut the corner edges of the Copperplate and then fixed the 6v 60RPM Mini Dc Geared motors.

Wall Climbing Robot

I used thermocol at the bottom side of the Copperplate to reduce the Air gap. This is just a 360 degrees wall ring, which you can easily make from a thermocol sheet. Smaller the gap, greater will be the suction. In case of high suction, you can reduce the motor speed using the Variable resistor which I will explain in the circuit diagram. After I was satisfied with the vacuum then I practically installed all the components. The final Wall Climbing Robot,

Wall Climbing Robot

Wall Climbing Robot

Before I am going to explain the circuit diagram and Programming, first I would like to explain about the different electronic components used in this project.


Mini Dc Gear Motor:

Wall Climbing Robot

This is a 6V 60RPM Mini Dc Gear Motor

Operating Voltage is 6 Volts

RPM (Rated Maximum) 60 ~ 100 RPM

Torque, Effective 1.1 Kg/cm

Dimensions:

Depth: 10mm

Height: 24.3mm

Width: 12.1mm

Product Weight: 9.5g

L298N Motor Driver:

Wall Climbing Robot

This is the L298N dual H-bridge motor driver. This motor driver can be used to control Dc motors that have voltages between 5 and 35volts, with a peak current of up to 2amps. As this is a dual H-Bridge motor driver, it can be used to control the speed and direction of two DC motors at the same time.

Now let’s take a closer look at the Pinout of L298N module.

Wall Climbing Robot

This module has three terminal blocks. terminal block1 will be used for motor A and is clearly labeled with out1 and out2, this is where we connect the two wires of the dc motor. Terminal block2 will be used for motor B  and is clearly labeled with out3 and out4.

Wall Climbing Robot

While the terminal block3 is labeled with 12v, ground and +5v.

Wall Climbing Robot

The 12v terminal is used to supply the voltage to the dc motors, this voltage can be from 5 to 35volts. The ground terminal is connected with the ground of the external power supply and is also connected with the ground of the controller board, which in my case is Arduino board which is based on the atmega328 microcontroller, while the +5v terminal will be connected with the Arduino’s 5v.

Wall Climbing Robot

As you can see this motor driver also have some male headers which are clearly labeled with ENA…IN1…IN2…IN3…IN4 and ENB. The ENA and ENB are used to enable both the motors. Jumper caps mean that both the motors are enabled by default and the motors will rotate at maximum speed. If the jumper caps are removed and the ENA and ENB pins are connected with the PWM pins of the Arduino, the motors speed can be controlled using the pulse width modulation which I will explain in the programming. Then IN1 and IN2 pins are used for controlling the direction of motor A while the IN3 and IN4 are used to control the direction of motor B. now let’s start the interfacing.


For a detailed study read the article.

HC05/HC06 Bluetooth Module:

 I already have a very detailed tutorial on how to use the HC05 or HC06 Bluetooth Module.

Wall Climbing Robot Android application:

 The Android cell phone application is protected with a username and password. The default username and password is “admin”, which later you can replace with a new username and password. Click on the Download button given below to download the APK files.

Download: wallclimbing


Circuit Diagram of the Wall Climbing Robot:

Wall Climbing Robot

The circuit diagram of the Wall Climbing Robot is very simple. At the very top in the circuit diagram is the 5v regulated Power Supply which is based on the LM7805 voltage regulator. The 5 volts from this regulator is used to power up the Atmega328 microcontroller and is also connected with the +5v pins of the L298N Motor Drivers. The 5volts from the LM7805 are also used to power up the HC05 Bluetooth Module. The entire circuit is powered up using the Lipo Battery.

The Bluetooth module is connected with the Atmega328 TX and RX pins. The TX pin of the Bluetooth Module is connected with the RX pin of the Atmega328 microcontroller while the RX pin of the HC05 Bluetooth Module is connected with the TX pin of the Atmega328 microcontroller. While uploading the program into the Atmega328 microcontroller disconnect the TX and RX pins. Otherwise, you won’t be able to upload the program.

As you know each L298N Motor Driver can be used to control 2 motors. As you know in this project 4 motors are used, so, it means we will need two L298N motor drivers. All the 4 motors are connected with the outputs of the Motor Drivers” L298N” which can be clearly seen in the circuit diagram. The input pins of the L298N Motor Driver are connected with the Atmega328 microcontroller. All the pins are clearly labeled.

The PWM pin of the Brushless Motor is connected with the Atmega328 pin number 11 which is the PWM pin. Pin number 11 is used to control the speed of the Brushless Motor. A variable resistor is connected with the Analog pin of the Atmega328 controller, this variable resistor is used to control the speed of the Brushless motor. By rotating the Knob of the Variable Resistor the speed can be adjusted.


Atmega328 Microcontroller PCB Board Layout:

Wall Climbing Robot

This PCB is designed in Cadsoft Eagle. The PCB board file of the Atmega328 microcontroller can be downloaded by clicking on the link given below.

Download: atmega328 board file eagle

Wall Climbing Robot Arduino Programming:

#include <SoftwareSerial.h>
SoftwareSerial Blue(0, 1);
long int data;
int nob = 0; // variable resistor connected to analog pin A0
int nobdata = 0;
long int password1 = 92;// forward
long int password2 = 91;// reverse
long int password3 = 71; // right 
long int password4 = 79;// left
long int password5 = 89; // stop

char state = 0;

int urmw1 = 2; // up right motor wire 1 
int urmw2 = 3; // up right motor wire2 

int drmw1 = 4; // down right motor wire1
int drmw2 = 5; // down right motor wire2 

int ulmw1 = 6; // up left motor wire1
int ulmw2 = 7; // up left motor wire2

int dlmw1 = 8; // down left motor wire1
int dlmw2 = 9; // down left motor wire2

int bdm = 11; // brushless dc motor
void setup()
{
pinMode(bdm, OUTPUT);
pinMode(nob, INPUT);
pinMode(urmw1, OUTPUT);
pinMode(urmw2, OUTPUT);
pinMode(drmw1, OUTPUT); 
pinMode(drmw2, OUTPUT); 

pinMode(ulmw1, OUTPUT); 
pinMode(ulmw2, OUTPUT); 
pinMode(dlmw1, OUTPUT); 
pinMode(dlmw2, OUTPUT); 

// keep all the motors off by default
digitalWrite(urmw1, LOW);
digitalWrite(urmw2, LOW);
digitalWrite(drmw1, LOW);
digitalWrite(drmw2, LOW);

digitalWrite(ulmw1, LOW);
digitalWrite(ulmw2, LOW);
digitalWrite(dlmw1, LOW);
digitalWrite(dlmw2, LOW);


Serial.begin(9600);
Blue.begin(9600);

delay(1000);

}

void loop()
{

 // while(Blue.available()==0) ;

nobdata = analogRead(nob);
nobdata = map(nobdata, 0, 1024, 0, 255);
analogWrite(bdm,nobdata);
//Serial.println(nobdata);
delay(20);

 if(Blue.available()>0) 
{
data = Blue.parseInt();

delay(200);
} 
//delay(1000);
//Serial.print(data);

if (data == password1)  // forward
{
digitalWrite(urmw1, HIGH);
digitalWrite(urmw2, LOW);
digitalWrite(drmw1, HIGH);
digitalWrite(drmw2, LOW);

digitalWrite(ulmw1, LOW);
digitalWrite(ulmw2, HIGH);
digitalWrite(dlmw1, LOW);
digitalWrite(dlmw2, HIGH);
  
  data = 45; // garbage value to stop repetition
  Serial.println("Forward");


   }
   
   if( data == password2) // reverse
   {

digitalWrite(urmw1, LOW);
digitalWrite(urmw2, HIGH);
digitalWrite(drmw1, LOW);
digitalWrite(drmw2, HIGH);

digitalWrite(ulmw1, HIGH);
digitalWrite(ulmw2, LOW);
digitalWrite(dlmw1, HIGH);
digitalWrite(dlmw2, LOW);
 data = 45; // garbage value to stop repetition
  Serial.println("Reverse");

   } else

   if( data == password3) // right
   {
 digitalWrite(urmw1, LOW);
digitalWrite(urmw2, HIGH);
digitalWrite(drmw1, LOW);
digitalWrite(drmw2, HIGH);

digitalWrite(ulmw1, LOW);
digitalWrite(ulmw2, HIGH);
digitalWrite(dlmw1, LOW);
digitalWrite(dlmw2, HIGH);
    data = 45; // garbage value to stop repetition
     
  Serial.println("right");

   }
else


   if( data == password4) // left
   {

digitalWrite(urmw1, HIGH);
digitalWrite(urmw2, LOW);
digitalWrite(drmw1, HIGH);
digitalWrite(drmw2, LOW);

digitalWrite(ulmw1, HIGH);
digitalWrite(ulmw2, LOW);
digitalWrite(dlmw1, HIGH);
digitalWrite(dlmw2, LOW);
  data = 45; // garbage value to stop repetition
 Serial.println("Left");

   }
   else
      if( data == password5) // stop
   {
 digitalWrite(urmw1, LOW);
digitalWrite(urmw2, LOW);
digitalWrite(drmw1, LOW);
digitalWrite(drmw2, LOW);

digitalWrite(ulmw1, LOW);
digitalWrite(ulmw2, LOW);
digitalWrite(dlmw1, LOW);
digitalWrite(dlmw2, LOW);
  data = 45; // garbage value to stop repetition
Serial.println("stop");

   }
 
 }


Wall Climbing Robot Arduino Program explanation:

I started off with the SoftwareSerial Library. The SoftwareSerial library is used for creating multiple Serial ports. As you know in Arduino Uno we have only one Serial port which is available on Pin number0 and Pin number1. Currently, I am using the Arduino’s default Serial port.

#include <SoftwareSerial.h>

I defined a Serial port on pin number 0 and pin number 1. You can change these pins, you can use 2 and 3 or any other pins. Just change the numbers. As I am using only one device” Bluetooth Module” which supports Serial communication, so that’s I am using the Arduino’s default Serial port.

SoftwareSerial Blue(0, 1);

Defined some variables.

long int data;

int nob = 0; // variable resistor connected to analog pin A0

this variable resistor is used to control the speed of the QuadCopter Brushless Dc Motor. Set the speed which best suits your requirements.

int nobdata = 0;

The following are the commands which are used to control the Forward, Reverse, Right, and Left movement of the Wall Climbing Robot. The purpose of using the Long int data type is that you can use large numbers which can be 6 digits long, this will increase the security. Nobody will be able to find which commands are used to control the Robot. So each command acts as the password. These commands are sent from the Android cell phone application.


long int password1 = 92;// forward

long int password2 = 91;// reverse

long int password3 = 71; // right

long int password4 = 79;// left

long int password5 = 89; // stop

char state = 0;

Then I defined pins for the 4 motors.

int urmw1 = 2; // up right motor wire 1

int urmw2 = 3; // up right motor wire2

int drmw1 = 4; // down right motor wire1

int drmw2 = 5; // down right motor wire2

int ulmw1 = 6; // up left motor wire1

int ulmw2 = 7; // up left motor wire2

int dlmw1 = 8; // down left motor wire1

int dlmw2 = 9; // down left motor wire2

The speed controller is connected with the Arduino’s pin number 11.

int bdm = 11; // brushless dc motor

in the void Setup() we do the basic settings, we tell the controller which are the input pins and which are the output pins. We activate the Serial communication using the Serial.begin(). In this project I am using 9600 as the baud rate. This is the communication speed.



void setup()

{

pinMode(bdm, OUTPUT);

pinMode(nob, INPUT);

pinMode(urmw1, OUTPUT);

pinMode(urmw2, OUTPUT);

pinMode(drmw1, OUTPUT);

pinMode(drmw2, OUTPUT);

pinMode(ulmw1, OUTPUT);

pinMode(ulmw2, OUTPUT);

pinMode(dlmw1, OUTPUT);

pinMode(dlmw2, OUTPUT);

// keep all the motors off by default

digitalWrite(urmw1, LOW);

digitalWrite(urmw2, LOW);

digitalWrite(drmw1, LOW);

digitalWrite(drmw2, LOW);

digitalWrite(ulmw1, LOW);

digitalWrite(ulmw2, LOW);

digitalWrite(dlmw1, LOW);

digitalWrite(dlmw2, LOW);

Serial.begin(9600);

Blue.begin(9600);

delay(1000);

}

Void loop() executes infinite times, the main code is kept inside this function. void means that this function has no return type and the empty parenthesis means that this function is not taking any arguments as the input.

void loop()

{

// while(Blue.available()==0) ;

nobdata = analogRead(nob);

The above instruction is used to read the Variable resistor connected with the analog pin A0 of the Arduino and store the value in variable nobdata.

nobdata = map(nobdata, 0, 1024, 0, 255);

using the map function the data is mapped. The minimum and maximum value can be 0 and 255. This is used to control the speed of the Brushless Dc Motor.

analogWrite(bdm,nobdata);

//Serial.println(nobdata);

delay(20);

if(Blue.available()>0)  // if the Arduino has received data from the Bluetooth module.

{

Store the incoming values in variable data.

data = Blue.parseInt();

delay(200);

}

//delay(1000);

//Serial.print(data);

 

The following conditions are used to compare the received value with the pre-defined values. If the received value is similar to the pre-defined value then the motors are controlled accordingly.

if (data == password1)  // forward

{

digitalWrite(urmw1, HIGH);

digitalWrite(urmw2, LOW);

digitalWrite(drmw1, HIGH);

digitalWrite(drmw2, LOW);

digitalWrite(ulmw1, LOW);

digitalWrite(ulmw2, HIGH);

digitalWrite(dlmw1, LOW);

digitalWrite(dlmw2, HIGH);

data = 45; // garbage value to stop repetition

Serial.println(“Forward”);

}

if( data == password2) // reverse

{

digitalWrite(urmw1, LOW);

digitalWrite(urmw2, HIGH);

digitalWrite(drmw1, LOW);

digitalWrite(drmw2, HIGH);

digitalWrite(ulmw1, HIGH);

digitalWrite(ulmw2, LOW);

digitalWrite(dlmw1, HIGH);

digitalWrite(dlmw2, LOW);

data = 45; // garbage value to stop repetion

Serial.println(“Reverse”);

} else

if( data == password3) // right

{

digitalWrite(urmw1, LOW);

digitalWrite(urmw2, HIGH);

digitalWrite(drmw1, LOW);

digitalWrite(drmw2, HIGH);

digitalWrite(ulmw1, LOW);

digitalWrite(ulmw2, HIGH);

digitalWrite(dlmw1, LOW);

digitalWrite(dlmw2, HIGH);

data = 45; // garbage value to stop repetion

Serial.println(“right”);

}

else

if( data == password4) // left

{

digitalWrite(urmw1, HIGH);

digitalWrite(urmw2, LOW);

digitalWrite(drmw1, HIGH);

digitalWrite(drmw2, LOW);

digitalWrite(ulmw1, HIGH);

digitalWrite(ulmw2, LOW);

digitalWrite(dlmw1, HIGH);

digitalWrite(dlmw2, LOW);

data = 45; // garbage value to stop repetition

Serial.println(“Left”);

}

else

if( data == password5) // stop

{

digitalWrite(urmw1, LOW);

digitalWrite(urmw2, LOW);

digitalWrite(drmw1, LOW);

digitalWrite(drmw2, LOW);

 

digitalWrite(ulmw1, LOW);

digitalWrite(ulmw2, LOW);

digitalWrite(dlmw1, LOW);

digitalWrite(dlmw2, LOW);

data = 45; // garbage value to stop repetition

Serial.println(“stop”);

}

}

Wall Climbing Robot Tests:

After uploading the program and installing the Android application. I powered up the Wall Climbing Robot using the Lipo Battery and adjusted the speed of the Brushless Dc Motor. My first test was to test the suction created by the Brushless Dc Motor. The Wall Climbing Robot stuck to the Wall Surface. I could feel that force.

Wall Climbing Robot

My initial test was a great success. Then I performed some tests on Wooden sheets, Walls, and Glass. On the Wall and Wooden sheet surfaces the Wall Climbing Robot could move without any problem, but on the Mirror surface there was the sliding problem. For the extremely smooth surfaces, the suctions cups can be used.


Wall Climbing Robot in Action:

Engr Fahad

My name is Shahzada Fahad and I am an Electrical Engineer. I have been doing Job in UAE as a site engineer in an Electrical Construction Company. Currently, I am running my own YouTube channel "Electronic Clinic", and managing this Website. My Hobbies are * Watching Movies * Music * Martial Arts * Photography * Travelling * Make Sketches and so on...

12 Comments

  1. Hi, many thanks for your sharing and great work. I am just wondering the ralationship between the command password you set and the android control app. I mean if I change the password for different command, do I also need to change the android app? Thanks very much and look forward to hearing from you.

    1. Actually, these commands are already defined on the app side. if you want to make your own android app, then read my article on how to design your own android cell phone app. Search on my website.

      1. Thank you very much, but I do not have an android phone, could you also please provide how could I make an app for ios ?

  2. Can you please describe the solidworks model of this wall climbing bot. I means its dimension and top,side,back view.

  3. Can you please provide me the solidworks part of this bot.I mean the top,back,side view and dimensions.

  4. Could you please provide the source code for your android app? I am working on a similar project and your code would help understand the working of the software.

  5. Can please Provide the Source code for the application I am Working on same project But I am facing Difficulty in App development

  6. Hi, thank you for sharing your valuable experience, I am a person who is new to this kind of machine making, pls is the code provided in this post is all the program of this project.

Leave a Reply

Your email address will not be published. Required fields are marked *

Back to top button