Tuesday, February 14, 2012

Project 2

In our final project we attempted to search four rooms and extinguish a lit candle. To extinguish the candle we used a smacking type device which was controlled by two motors.





#pragma config(Sensor, in1,    firesensor,          sensorPotentiometer)
#pragma config(Sensor, in5,    Ultrasonic,          sensorSONAR, int1)
#pragma config(Sensor, in3,    leftEncoder,         sensorRotation)
#pragma config(Sensor, in2,    rightEncoder,        sensorRotation)
#pragma config(Motor,  port2,  rightMotor,    tmotorNormal, openLoop,reversed)
#pragma config(Motor,  port3,  leftMotor,     tmotorNormal, openLoop)
#pragma config(Motor, port7,   rightarm,      tmotorNormal, openLoop)
#pragma config(Motor, port8,   leftarm,       tmotorNormal, openLoop)
//*!!Code automatically generated by 'ROBOTC' configuration wizard               !!*//

  //turn left
  //Look for the fire
  //If you find the fire gofoward
  //If you don't find the fire turn left more (repeat)
//to get out of the room use ultrasonic to find the empty wall

void goforward(int distance)
{
  SensorValue(leftEncoder)=0;
  SensorValue(rightEncoder)=0;
  while(SensorValue[leftEncoder]<distance && SensorValue(rightEncoder)<distance)
    {
      if (SensorValue(Ultrasonic)>2)
        {
          motor[port3]=60;
          motor[port2]=60;
         }
      }
   motor[port3]=0;
   motor[port2]=0;
}
void raisearm(int time10)
{
  motor[port7]=-34;
  motor[port8]=34;
  wait10Msec(15);
}


void findflame2(int time10)
{
  SensorValue[leftEncoder] = 0;
  bool flamenotfound2 = true;
  while(flamenotfound2)  //Play with number 180
      {
        if (SensorValue(firesensor)<100 && SensorValue[leftEncoder]<520)//search
          {
            motor[port2]=-60;
            motor[port3]=60;
            wait10Msec(5);
            motor[port2]=0;
            motor[port3]=0;
            wait10Msec(1);
          }

        if (SensorValue(firesensor)>100 && SensorValue(firesensor)<200)// first go find it
          {
            motor[port2]=60;
            motor[port3]=60;
            wait10Msec(10);
            motor[port2]=0;
            motor[port3]=0;
            wait10Msec(1);
          }
        if (SensorValue(firesensor)>200 && SensorValue(firesensor)<450)
          {
            motor[port2]=-60;
            motor[port3]=60;
            wait10Msec(5);
            motor[port2]=0;
            motor[port3]=0;
            wait10Msec(1);
           }
        if (SensorValue(firesensor)>450 && SensorValue(Ultrasonic)>6)
          {
            motor[port2]=60;
            motor[port3]=60;
            wait10Msec(5);
            motor[port2]=0;
            motor[port3]=0;
            wait10Msec(1);
          }

        if (SensorValue(firesensor)>850 && SensorValue(Ultrasonic)<6)
          {
            SensorValue(leftEncoder)=0;
            SensorValue(rightEncoder)=0;
            while(SensorValue(leftEncoder)<200 && SensorValue(rightEncoder)<200)
            {
              motor[port2]=0; //Stop
              motor[port3]=0;
              wait10Msec(5);
              motor[port7]=127;  //commence wacking
              motor[port8]=-127;
              wait10Msec(50);
              motor[port7]=-127; //return wacker
              motor[port8]=127;
              wait10Msec(50);
              motor[port2]=-60; // Spin by time !Not Good!
              motor[port3]=60;
              wait10Msec(7);
              motor[port2]=0; //Stop
              motor[port3]=0;
              wait10Msec(5);
              motor[port7]=127;  //commence wacking
              motor[port8]=-127;
              wait10Msec(50);
              motor[port7]=-127; //return wacker
              motor[port8]=127;
              wait10Msec(50);
              motor[port2]=60; //  Good!
              motor[port3]=-60;
              wait10Msec(7);
            }
          }
            // Signal that the flame is found
        if (SensorValue(firesensor)<=60 && SensorValue(leftEncoder)>=520)
          {
            flamenotfound2 = false;
          }
        }
      }


void goleft(int distance)
{
  SensorValue(leftEncoder)=0;
  SensorValue(rightEncoder)=0;
  while(SensorValue[leftEncoder]<distance && SensorValue(rightEncoder)<distance)
    {
      motor[port3]=-60;
      motor[port2]=60;
    }
   motor[port3]=0;
   motor[port2]=0;
}

void goright(int distance)
{
  SensorValue(leftEncoder)=0;
  SensorValue(rightEncoder)=0;
  while(SensorValue[leftEncoder]<distance && SensorValue(rightEncoder)<distance)
    {
      motor[port3]=60;
      motor[port2]=-60;

    }
   motor[port3]=0;
   motor[port2]=0;
}

void findflame1(int time10)
{
  SensorValue[leftEncoder] = 0;
  bool flamenotfound1 = true;
  while(flamenotfound1)  //Play with number 180
      {
        if (SensorValue(firesensor)<100 && SensorValue[leftEncoder]<507)//search
          {
            motor[port2]=-60;
            motor[port3]=60;
            wait10Msec(5);
            motor[port2]=0;
            motor[port3]=0;
            wait10Msec(1);
          }

        if (SensorValue(firesensor)>100 && SensorValue(firesensor)<200)// first go find it
          {
            motor[port2]=60;
            motor[port3]=60;
            wait10Msec(10);
            motor[port2]=0;
            motor[port3]=0;
            wait10Msec(1);
          }
        if (SensorValue(firesensor)>200 && SensorValue(firesensor)<450)
          {
            motor[port2]=-60;
            motor[port3]=60;
            wait10Msec(5);
            motor[port2]=0;
            motor[port3]=0;
            wait10Msec(1);
           }
        if (SensorValue(firesensor)>450 && SensorValue(Ultrasonic)>6)
          {
            motor[port2]=60;
            motor[port3]=60;
            wait10Msec(5);
            motor[port2]=0;
            motor[port3]=0;
            wait10Msec(1);
          }

        if (SensorValue(firesensor)>850 && SensorValue(Ultrasonic)<5)
          {
            SensorValue(leftEncoder)=0;
            SensorValue(rightEncoder)=0;
            while(SensorValue(leftEncoder)<200 && SensorValue(rightEncoder)<200)
            {
              motor[port2]=0; //Stop
              motor[port3]=0;
              wait10Msec(5);
              motor[port7]=127;  //commence wacking
              motor[port8]=-127;
              wait10Msec(50);
              motor[port7]=-127; //return wacker
              motor[port8]=127;
              wait10Msec(50);
              motor[port2]=-60; // Spin by time !Not Good!
              motor[port3]=60;
              wait10Msec(10);
              motor[port2]=0; //Stop
              motor[port3]=0;
              wait10Msec(5);
              motor[port7]=127;  //commence wacking
              motor[port8]=-127;
              wait10Msec(50);
              motor[port7]=-127; //return wacker
              motor[port8]=127;
              wait10Msec(50);
              motor[port2]=60; //  Good!
              motor[port3]=-60;
              wait10Msec(10);
            }
          }
            // Signal that the flame is found
        if (SensorValue(firesensor)<=60 && SensorValue(leftEncoder)>=507)
          {
            flamenotfound1 = false;
          }
        }
      }

task main()
{
   while(true)
   {
    wait10Msec(200);//searches first room
    raisearm(10);
    wait10Msec(100);
    goforward(373);
    wait10Msec(10);
    goright(97);
    wait10Msec(10);
    goforward(320);
    wait10Msec(10);
    goright(96);
    wait10Msec(10);
    goforward(135);
    wait10Msec(10);
    findflame1(150);//looks for flame ans if found puts it out
    wait10Msec(10);
    goforward(135);//gets out of the room
    wait10Msec(10);
    goleft(93);
    wait10Msec(10);//goes to the next room
    goforward(301);
    wait10Msec(10);
    goright(100);
    wait10Msec(10);
    goforward(415);
    wait10Msec(10);
    goright(95);
    wait10Msec(10);
    goforward(220);//enters room in front
    wait10Msec(10);
    findflame2(150);
    wait10Msec(10);
    goforward(215);
    wait10Msec(10);
    goleft(91);
    wait10Msec(10);
    goforward(170);
    wait10Msec(10);
    goright(90);
    wait10Msec(10);
    goforward(240);
    wait10Msec(10);
    findflame1(150);
    wait1Msec(10);
    goforward(120);
    wait10Msec(10);
    goright(90);
    wait10Msec(10);
    goforward(200);
    wait10Msec(10);
    goright(90);
    wait10Msec(10);
    goforward(200);
    wait10Msec(10);
    goleft(90);
    wait10Msec(10);
    goforward(120);
    wait10Msec(10);
    findflame1(150);
    wait10Msec(10);
   }
}

Wednesday, February 8, 2012

Find the Flame/Robot moving into room one

Here is a video demonstrating how our robot moves from the starting point into room one as it detects and extinguishes the flame.



Monday, February 6, 2012

Ultrasonic Rangefinder and other Sensors

In this experiment we were able to demonstrate how our robot implements the flame, and ultrasonic sensors work. We did this by programming the ROBOTC software and affixing the sensors to our bot. The video shows how the flame sensor detects the heat of the flame while the ultrasonic sensor detects the range of the box.









Thursday, February 2, 2012

Building a Sensor for your Robot

For the Building a Sensor experiment, we used a phototransistor to detect the heat, via infrared, a candle emitted. Once the circuit was made using a bread board, wires, and resistor we lit up a candle and placed it in front of the sensor moving it back and forth.








Wednesday, February 1, 2012

Vex Programming

In the Vex Programming experiment, my partner and I had two objectives: 1) program the vex bot to operate properly in the labyrinth using time, and 2) program the vex bot using encoders. We used the ROBOTC program for both parts. In the first objective, we used time as the main source to control the bot, such as 3000ms = 3 seconds. In the second part we had to control the bot using the encoder which counts rotation instead of time.

                                                                   timing program



                                                                 encoder program







Thursday, January 26, 2012

Project 1

In project number one I had to manipulate  a toys motor, and sound functions by using picaxe software. Initially, I had to locate the wires that were connected to the motor, and to the speaker. Once the wires were located I then provided it with power to be certain the motor was functioning properly. Next, I started to program the software that would control the motor and speaker by using picaxe. After spending some time tweaking with the program I decided on using the pwmout for the motors and the tune command for the sound. After the program was completed and downloaded to the microcontroller I then connected my toy to the circuit board. The circuit board used was from the previous experiment; however, a piezo sounder was added to the circuit to establish the sound of the tones. Both the motor control and sound worked after the power was plugged in.













Wednesday, January 25, 2012

Interfacing to a microcontroller

In this experiment I worked on a lamp circuit controlled by a microcontroller. After completing the circuit and programming the apex software I was able to get the lamp bulb to flash off and on with a pause