Additional information at : http://patrickmccabemakes.com/hardware/Maze_Solvin...

In this instructable I will be showing you how to build a maze solving robot. This is actually my 3rd attempt at making one. The first was a complete failure. The second was alright at finding the end of the maze, but it could not go back and drive the quickest path. This is my current and 3rd one. It is able to find the end of the maze and then, when put back at the start, drive the shortest path to the end of the maze without going down any dead ends. What surprises me is that it really does not mess up.

This was just a short introduction, everything else from theory, building, and programming will be explained in later steps.

Parts list:

General Parts:

  • 3 1in Spacers (Home Depot)
  • Bolts and nuts that fit the spacers (Home Depot)
  • Hook up wire ( I use 22 gauge)
  • Solder
  • .100" Female and Male headers
  • Velcro


  • Soldering Iron
  • Philips Screw driver
  • Wire Strippers
  • Something to cut the wire with

Step 1: The Theory Part 1

What are the steps In maze solving?
There are basically 2 steps. The first is to drive through the maze and find the end of it. The second is to optimize that path so your robot can travel back through the maze, but do it perfectly with out going down any dead ends.

How does the robot find the end of the maze?
I use a technique called the left hand on the wall. Imagine you are in a maze and you keep your left hand on a the edge of the wall at all times. Doing this would eventually get you out of a non-looping maze. This instructable will only deal with mazes that do not loop back on themselves.

This left hand on wall algorithm can be simplified into these simple conditions:
- If you can turn left then go ahead and turn left,
- else if you can continue driving straight then drive straight,
- else if you can turn right then turn right.
- If you are at a dead end then turn around.

The robot has to make these decisions when at an intersection. An intersection is any point on the maze where you have the opportunity to turn. If the robot comes across an opportunity to turn and does not turn then this is consider going straight. Each move taken at an intersection or when turning around has to be stored.

L = left turn
R= right turn
S= going straight past a turn
B= turning around

So let us apply this method to a simple maze and see if you can follow it. View the photos to see this method in action.
The red circle will be the robot.  

As you can see in the photos for this example, the final path is LBLLBSR.
Mr Patric, I like your project. I want to make it but haven't analogsensor. can I use Digital sensor QTR-8RC
<p>Sir,I had tried working Hard to make this BOT and it turned out pretty well.It took more than a month and a half to make it.Finally made it.I just made minute changes in the code.The results were actually amazing.....here is the link of the vid.....Sorry about the middle finger in the video.Those were for my friends they thought that I couldn't make it.....Would soon write Instructable on it....Thank you for this....</p><p><a href="https://drive.google.com/open?id=0B-f1xWTJwulda2QwQVYwMm1scXM&authuser=0" rel="nofollow">https://drive.google.com/open?id=0B-f1xWTJwulda2Qw...</a></p>
<p>can you please give me the code. i have tried making my robot find the shortest path. i would appreciate some help.</p><p>please mail the code alokgrao@gmail.com</p><p>thanks</p>
<p>BTW Ajay, where did you find those sensor arrays?</p>
<p>pololu.com qtr-8ra I think is the model number for the analog sensors.</p>
<p>Nice job!</p>
<p>Dear Patrick,</p><p>Nice work !!!</p><p>I'm trying to make this robot but getting problem with related to algo i think there is some error in code. can you send me the modified code so ill complete my project.</p>
<p>I made this robot but with slightly different parts, (used uno and 12v motor).</p><p>The problem is that my bot is not running fine. While debugging and viewing the output of rightcenter sensor the reading is constant at 1023 and does not change regardless of what I do. </p><p>I think the sensor is faulty.</p>
<p>I made this robot but with slightly different parts, (used uno and 12v motor).</p><p>The problem is that my bot is not running fine. While debugging and viewing the output of rightcenter sensor the reading is constant at 1023 and does not change regardless of what I do. </p><p>I think the sensor is faulty.</p>
<p>very helpful post..thanks !</p>
<p>Got code?</p>
<p>i want to know how would i convert the long path &quot;LLLBSR.....&quot;</p><p>into the direct path in coding</p><p>and thanks for this great post</p>
<p>Now make it so you can place the robot on any point of the maze after it has found the end and it works out where in the maze it is (drives around until it finds a bit it recognizes) then drives straight to the exit once it has got its bearings.</p>
Hii sir can you send me the full code because I'm trying to making this my email id is pratikjaiswal.pj28@gmail.com<br>Thanks in advance
<p>well, the instructions were pretty useful but i am facing a problem with this.</p><p>what should i do if a maze have a single solution(exit) but multiple paths. my bot used two different paths when i used right and left in different runs.</p><p>and definitely the both the paths are of different lengths hence not traversing the shortest one.</p>
<p>if there are white lines and black background instead of black lines and white background where i have to make changes in program..</p>
<p>i wanted use arudino cc intstead of arduino RBB</p><p>will it work if i use external IR sensors </p>
<p>Hey man. I think I found a way to solve (some) looping mazes as well. If the robot has turned left/right (depending on the rule) more than 4 times in a row (which would be the case in a loop), then switch the rule. If it was left-hand rule, switch to right-hand rule and vice versa. This would enable certain looping mazes to be solved.</p>
<p>Please someone mail me the code, please i cant get it dominguezfernandez94@gmail.com please i will apreciate that</p>
<p>Could you repost the code. </p>
<p>brilliant work you have done.. can this project use only 5 sensor.. help is needed..</p>
<p>urgent help... can i use arduino mega, and digital line sensor instead of analog line sensor, also can i use 12v dcmotor for for this project .. i provide link of component that i want to use and need your advice does it can be use..</p><p><a href="http://cytron.com.my/p-mdd10a" rel="nofollow">http://cytron.com.my/p-mdd10a</a></p><p><a href="http://cytron.com.my/p-lss05" rel="nofollow">http://cytron.com.my/p-lss05</a></p>
hi. I dont get the exact parts which you used. firstly, can i use a arduino uno instead of the one which you used?<br><br>can i use regular DC motors? (http://www.rhydolabz.com/index.php?main_page=product_info&amp;cPath=121&amp;products_id=815)<br><br>and can i use a motor driver (http://www.rhydolabz.com/index.php?main_page=product_info&amp;cPath=108&amp;products_id=858)<br><br>if yes, could you please guide me through the process, it would be of great help.<br>thanks
<p>dear can you send me its complete codes ?</p>
That motor driver will work, but you do not want that motor. That motor operates at 12 volts. You would have to get a 12v battery pack and regulate it down to 5v for the other parts. I would find a 5v motor.
<p>need its complete codding please .</p>
<p>I can't get the code. Can somebody reupload it please.</p>
<p>To which pin in arduino should we connect the 2nd pin right next to VCC </p>
<p>Sir,you didn't mentioned the value of the Cap on the Motor Controller Ckt.Also you have not included that in your PCB.Is is not necessary??</p>
<p>Plz give me code with atmega avr 16/32..if it's teotorial i'll highly appreciate that.</p>
<p>Hey Patrick, the link for the code has expired. Do you think we can get an updated one?</p>
<p>the code not download, please help me!!</p>
<p>Mate can u explain the this value for me ? because im not using the same sensor </p><p>(leftCenterReading&gt;200 || <br>rightCenterReading&gt;200 <br>why is 200? </p>
<p>Well done. Honestly I have to say that was the best tutorial I could find on a line solving robot but I have one question. Where can I get the code because the code no longer exist anymore. Can you help me out there. Thanks. :)</p>
<p>Nevermind I found the code I believe something must be wrong with my internet. Wish me good luck improving it. :)</p>
<p>Great Work...<br>Can i use EEPROM library to store the path?<br>U didn't used an LCD... So, were u testing the path and storing the character using serial monitor all the time?</p>
<p>A question:</p><p>how is your PWM pin?</p>
<p>A question:</p><p>I have a l298 driver and Arduino Uno V3</p><p>can you help me to change the code for my robot?</p>
<p>Hi, </p><p>Did you use the 30:1 motor or a different ratio? mMy robot is extremely fast (almost out of control)</p><p>Thanks</p>
<p>Hello,</p><p>The robot I have built does not move in a straight line i.e. it keeps getting off the black line always. </p><p>Can you provide me a solution for this?</p>
hey <br>i also wannna do a similar stuff. i want to design a robot for surveillance where the robot will be fully autonomous and it wil move for point A to point B autonomously. <br>i want u to help me in designing the autonomous motion planning system to go form one given place to the other using sensors n stuff...i m stuck pls help <br> <br>i have bought the rover system from here just for making prototype of the actual system since i got it at a good price... <br>http://danuc.com/index.php?main_page=index&amp;cPath=6 <br>http://danuc.com/index.php?main_page=index&amp;cPath=4 <br>http://danuc.com/index.php?main_page=index&amp;cPath=1 <br>http://danuc.com/index.php?main_page=index&amp;cPath=7 <br>http://danuc.com/index.php?main_page=product_info&amp;cPath=8&amp;products_id=52 <br> <br>pls reply
Hey, nice work. I'm building a maze solver myself but I have one question if I leave the start point and have a L shaped turn to the right, according to the algorithm I can't make left so leaves my 2 options go straight or turn right, my issue is how do I detect if I can go straight or not, since all the sensor are on the same line, they will be both true for right and straight even if in fact i can't go straight because it's a turn. I tought using another sensor ahead, offseted forward from the line sensors array. Waiting for an answer. Thanks :)
You have to drive forward some to see if the line continues on (i.e. you can go straight) only then does the robot make the decision. This motion is kind of disguised because the robot has to drive forward anyway in order to turn in place and end up centered on the line.
Good ideea, will try that. Thank's for the input. :)
Can u give the PCB layout of ine sensor array?
I did not make the line sensor array. You should be able to get more information about it by visiting the Pololu website.
Hi. .do you have a &quot;C&quot; program for this? I need it for my school project. We're using ATmega32u4 as our microprocessor. I would be very thankful of you. :)
can i use a arduino uno to do this project..<br>and could you plz tell more specifically how to make the motor controller?
Any Arduino should work. The motor controller is outlined on step 8. I provided the schematic in the photos. A schematic is about as clear as I can make it. You can also google for L293D or SN754410, both have the same pinout and are pretty common so there are probably other articles on them.
how to get motor controller from dorkbot..? <br>plz help me.! <br>

About This Instructable


185 favorites


More by patrickmccb: Maze Solving Robot Pong
Add instructable to: