Isaac's Patience Value
Isaac was my Senior Project at DeVry, and is a self-contained, autonomous robotic pet. Isaac wanders about his environment, guided by ultrasonic sensors and collision-detecting bumpers. He reacts to his environment according to four basic behaviors:
The user can determine which behavior mode Isaac is in by reading his LCD display. If Isaac is in Explore mode, his LCD screen will be blank. If he is in Play mode, the LCD screen will display "Let's play!". If he is resting, his LCD screen will display "zzzzzzzz".
The user can program how "patient" Isaac is via the Patience Modification Menu. Isaac's patience affects his behavior in many ways. If Isaac is in Explore mode, he will go forward until he either encounters an obstacle or until his patience is spent. If he becomes impatient with a straight path, he will decide to either change his behavior mode or change his direction. If Isaac is in Play mode, his patience works as it does in Explore mode, but it also determines how long he plays with an obstacle he encounters. If Isaac is in Rest mode, his patience determines how long his nap will last.
Isaac's patience value can range from 1 (impatient) to 9 (very patient). If he does not encounter an obstacle within a certain period of time, his patience value will decrement. If he encounters an obstacle, his patience value will reset to the user-determined level and the process would begin again. If he does not encounter an obstacle by the time his patients reaches zero, Isaac will decide to either enter a different mode or change direction by generating a random number. (The smaller his patience value, the more likely he will enter a different mode.) Which mode he enters or new direction he takes will be decided by generating another random number.
Isaac's user interface consists of a power switch (located on his backside), a 16-character LCD (located on his top side), the reset button (located on his top side), and four menu keys: Menu, Select, Up, and Down (located on his top side).
Once Isaac is turned on or his reset button is pressed, he executes a Power On Self-Test (POST) to make sure there are no errors in either his volatile (RAM) or non-volatile (EPROM) memory. Isaac displays the results of each test on his display. If no errors are detected, Isaac proceeds to the Selection Menu.
Once Isaac passes the POST test, the LCD screen will clear and display the word "Go". If the user presses the Select button at this point, Isaac will begin moving in Explore mode. If either the Up or Down buttons are pressed, the display will change between "Go" and "Modify Patience" for each button press. If the Select button is pressed while "Modify Patience" is displayed, Isaac will enter the Patience Modification Menu.
In the Patience Modification Menu, the LCD screen will display "Patience: 5" if this is the first time it has been activated. The user can modify the patience value by pressing the Up and Down buttons. Pressing Up will increase the patience value and pressing Down will decrease the patience value. The new patience value will be displayed each time the user presses either the Up or Down buttons. The patience value ranges from 1 to 9. (The most patient level is at 9.) Once the patience level is set to the desired level, the user should press the Select button to return to the Selection Menu, which will cause the LCD to display "Go" once again. The Selection Menu will operate as described above.
NOTE: When Isaac is in motion, he will only respond to the Reset and Menu buttons.
There are two conditions when Isaac knows he needs help.
The first condition is when his batteries become too low for him to safely operate. If his batteries are too low, Isaac will stop moving, display "FEED ME!" on his LCD, and beep at one second intervals to get the user's attention.
The second condition is when Isaac believes he has positioned himself in a corner he cannot get out of. This will occur if he detects obstacles in front of him and behind him. In this case, Isaac will stop moving, display "HELP!!" on his LCD, and beep at 700 millisecond intervals to get the user's attention. Once Isaac has been moved to a better location or his path has been cleared, push the Menu button and select "Go" for continued operation.
Microprocessor: Zilog Z-80
Software: Z-80 Assembler language, assembled by TASM; ~821 lines of code (including comments)
Clock Speed: 120kHz (divided by 3 to provide 40kHz driving frequency for ultrasonic transducers)
System RAM: 2k by 8Byte SRAM
System ROM: 32k by 8Byte EPROM
Power Supply: 4 "C" size Alkaline batteries for the motors (2 for the drive motor, 2 for the steering motor); 1 9VDC Alkaline battery (regulated to 5VDC to supply power to the electronics)--electrically isolated from the "C" cells
Circuit Construction: Constructed on two 4.25" by 8.5" pieces of VectorBoard (wire-wrap connections), mounted horizontally within a 5" by 9.5" by 3" aluminum box using four 1.25" standoffs.
Propulsion: 1 DC motor provides propulsion (forwards and backwards) and 1 DC motor provides steering. Four-wheel drive powertrain.
Overall Length (front bumper to rear bumper): 13.125"
Overall Width (at widest point = bumper width): 8"
Overall Height (ground to highest point = LCD cover): 7.625"
BOM Cost: ~$233.85 (some items, such as the chassis, were salvaged--therefore not included in the total cost)
These pictures aren't exactly the best, but they'll do for now.