|
| Home / Projects / Land |
 | SIPOC Jeff Clayton 24 Oct 2000
|
Project Outline sipoc is my first "working" robot. It is made from spare parts I had. the robot is built on
a zip disk jewel case. the microcontroller is the OOPIC. i used a simple IR proximity
detector circuit that gives the OOPIC a right and left controlled modulated IR sensor.
Photoresistors give the robot its phototropic behaviors for finding the brightest
spot in a room. the bumpers are made from legos and pivots at the center of the assembly.
this bumper set up works great until the robot hits a chair leg dead on center, then
its up to the IR to see it and react. the drive motors are modified servos that rotate continuously.
this is an extremely simple robot that was my platform for code trials that eventualy led to
the creation of my second robot scorch.
|
Latest Journal Entry| C++ code for SIPOC 15 Dec 2000 | since i have seen no C++ code for the oopic, i thought i would write one and post it.
// C++ code for SIPOC
// BUMPER, IR object avoidance, and PHOTOTROPIC ability
// 2 SERVOS for drive
oServo Right = new oServo;
oServo Left = new oServo;
odio1 eyeRight = new odio1;
odio1 eyeLeft = new odio1;
Odio1 IRDetect = new odio1;
Odio1 bumperright = new odio1;
Odio1 bumperleft = new odio1;
oA2D looklightright = new oA2D;
oA2D looklightleft = new oA2D;
obyte n = new obyte;
sub void Main(void)
{
setup;
n = 1;
do \{
forward;
checkbumperleft;
checkbumperright;
lookright;
lookleft;
lightright;
lightleft;
} while (n != 0);
}
sub void stop(void)
{
right = 21;
left = 21;
}
sub void forward(void)
{
right = 0;
left = 0;
}
sub void backward(void)
{
right = 64;
left = 64;
}
void softRight(void)
{
right = 28;
left = 0;
}
sub void softLeft(void)
{
right = 0;
left = 28;
}
sub void hardright(void)
{
right = 64;
left = 0;
}
sub void hardLeft(void)
{
right = 0;
left = 64;
}
void checkbumperleft(void)
{
if (bumperleft == cvunpressed)
{
backward;
oopic.delay = 50;
hardright;
oopic.delay = 75;
}
}
sub void checkbumperright(void)
{
if (bumperright == cvunpressed)
{
backward;
oopic.delay = 50;
hardleft;
oopic.delay = 75;
}
}
sub void lookright(void)
{
eyeRight = 1;\tab
if (IRDetect == 0)
{
hardLeft;
oopic.delay = 50;
}
else
{
forward;
}
eyeRight = 0;\tab
}
sub void lookleft(void)
{
eyeleft = 1;\tab
if (IRDetect == 0)
{
hardright;
oopic.delay = 50;
}
else
{
forward;
}
eyeleft = 0;\tab
}
sub void lightright(void)
{
while (looklightright.value + 50 < looklightleft.value)
softleft;
oopic.delay = 15;
}
}
void lightleft(void)
{
while (looklightleft + 50 < looklightright)
softright;
oopic.delay = 15;
}
}
sub void setup(void)
{
Right.IOLine = 24;
Left.IOLine = 31;
left.invertOut = cvtrue;
Right.center = 28;
Left.center = 28;
Right.operate = cvTrue;
Left.operate = cvTrue;
eyeRight.IOLine = 13;
eyeRight.Direction = cvOutput;
eyeLeft.IOLine = 12;
eyeLeft.Direction = cvOutput;
IRDetect.IOLine = 11;
IRDetect.Direction = cvInput;
Bumperright.IOLine = 14;
Bumperleft.IOLine = 15;
bumperright.direction = cvInput;
bumperleft.direction = cvInput;
looklightright.IOLine = 1;
looklightleft.IOLine = 2;
looklightright.operate = cvTrue;
looklightleft.Operate = cvTrue;
oopic.ExtVRef = 0;
}}
|
Other Journal Entries
| |
|
|