The iRobot Roomba

At the end of my sophomore year, I had the immense pleasure of taking ISU’s Introduction to Embedded Systems class (CprE 288). The class itself introduced us to the inner-workings of the C programming language, how to read technical manuals, interact with hardware registers, and effectively utilize different types of hardware (see below).


Throughout the semester we had been using the iRobot Create platform and the Atmel128 micro-controller within our labs, mainly to reinforce our understanding of the concepts taught in class. At the end of the semester, we were to build a Mars rover using the iRobot which was capable of navigating through a field of randomly placed obstacles without the drivers being able to see the robots position, or the field itself. The goal was to navigate the rover through the field without crossing out of bounds, hitting objects, or falling in holes. Only data gathered by the rover would be available to us. All communication with the rover was to be done wirelessly.


Our valiant steed was equipped with the following equipment:

  • Atmel128 micro-controller
  • iRobot Create
  • Cerebot II
  • Hitachi LCD Screen
  • IR Distance Sensor
  • Bluetooth (BAM)
  • Parallax Ping))) Sonar sensor
  • Parallax Standard Servo
  • USART port

It should also be noted that the iRobot Create platform was capable of 360 degrees of movement and was equipped with cliff detection, brightness detection, and collision detection sensors


Our team decided to split the task into two parts: the rover and the control center. We knew that we would need to use Bluetooth in order to send instructions and receive data from the sensors, so our first action was to develop a communication protocol for controlling the robot.

  • w = forward
  • d = turn CW
  • a = turn CCW
  • s = backward
  • e = scan/display data
  • m = play song