Embedded Maze Solver

Project Description

An embedded robot that navigates a maze by following a right wall. After a first itteration, optimizes the path used to solve the maze with a shorter path. System utilizes RTOS for interupt handling, and implements a PID algorithm for motor control. System was programmed on a TIVAC TM4C123GXL microcontroller.

Skills used in project

  • Microcontroller
  • Embedded Systems
  • PID controller
  • Drivers
  • Soldering
  • C
  • PuTTY
Figure 1: Blackbox diagram of maze solver robot

The microcontroller had two IR sensors and a light sensor connected to analog input pins, as well as recieved power from a 5[V] voltage regulator. The microcontroller output to a motor controller to control the two motors using PWM. A bluetooth reciever was utilized for debugging, sending percision control commands, and to recieve data for logging distance from walls. PuTTY was used to make a connection with the robot to transmit data over bluetooth.

Figure 2: Layout of bluetooth, 5[V] regulator, and motor controller

The robot was programmed to follow the right wall, utilizing a PID algorithm to adjust its distance. The control algorithm would only active once the the robot passed a 2 inch black line (electrical tape on the ground) and would stop once it passed a second 2 inch black line.

After navigating the course a first time the robot would optimize the path it took, ie. 3 right turns would be recognized as a dead end. The robot was then placed back in the course to navigate with an optimal solution.

Figure 3: Debug console waiting for input commands"

I was personally incharge of writing the software for the drivers, communication to the different devices and enabling specific register. I also wrote the console and specific commands that could be interpretted for debugging. A few of the debugging commands I wrote were also used for opperation, such as adjusting the PWM for motor speed and setting motor dirrections. My group unforntantly forgot to take pictures of the final robot, complete code can be found on my Github however.