Thursday, 15 November 2012

Final Post

The Final Year Project was a success. i would like to thank to my Advisor Sir Razak, and my friend, Shahnizam, Alif, Zuhaili, Kamarul,Fazreen and to my senior. i hope this project can help others in anyway it would. The FYP demonstration is coming near. i hope everything will go well and hope the assessor go easy on me. it was a great journey in doing this project. thanks to all the reader who read this, chireo! :)

Final Year Project Poster 25


video 24

Assembling and attaching the components with the hardware. 23

there are only a few photos here. sorry for the inconvenience. Im just too excited in finishing this project that i forgot to takes pictures. luckily i still manage to capture few of them!

attaching the motor with the prospect.
Almost done with the Robot part.
attaching the GP2D12 
the controller part. the transmitter is being attached to the controller
full view of the controller when it finished.

Making hardware for the robot 22

After finish making the circuit, it is time to make the hardware or the body of the robot. here are some photo in making the body of the robot.

The cutting of prospect process.
the desired size of prospect
making holes for the prospect to fit the push button,LED, or bolts and nuts.

Source Code for Mobile Robot Tracking System (Receiver) 21

**Coding for Receiver(Robot)**


#include <16f877A.h> //use pic16f877a
#device adc=10    //set 10-bit adc
#use delay(clock = 20000000)  //clock=20mhz
#fuses hs, noprotect, nowdt  //default setting

#byte PORTA=5  //port a address
#byte PORTB=6  //port b address
#byte PORTC=7  //port c address
#byte PORTD=8  //port d address
#byte PORTE=9  //port e address

//system variables
long int mymax;
long int rxir;
long int rxir_org;
int speed1=100;
int speed2=100;
int turn_en=0;
int run=0;
int on_timer=0;      
int en_robot=0;

//modules to drive motor1
void motor1_fwd();
void motor1_rev();
void motor1_stop();

//modules to drive motor2
void motor2_fwd();
void motor2_rev();
void motor2_stop();

void main()
{
   //setup io for each pic pin
   set_tris_a(0b00000101);
   set_tris_b(0b11000000);
   set_tris_c(0b00000000);
   set_tris_d(0b00000000);
   set_tris_e(0b00000000);
   setup_ccp1(CCP_PWM);
   setup_ccp2(CCP_PWM);
   setup_timer_2(T2_DIV_BY_16, 100, 1);
   setup_port_a(ALL_ANALOG);
   setup_adc(ADC_CLOCK_INTERNAL);
   set_pwm1_duty(speed1);
   set_pwm2_duty(speed1);

   //stop robot
   motor1_stop();
   motor2_stop();

   output_high(pin_d7);  //on red led
   output_high(pin_d6);  //on green led
   output_high(pin_d5);  //on blue led
   delay_ms(1000);
   output_low(pin_d7);  //off red led
   output_low(pin_d6);  //off green led
   output_low(pin_d5);  //off blue led
   delay_ms(1000);

   set_adc_channel(2);
   delay_ms(10);
   rxir_org=read_adc();
   rxir_org=rxir_org+10;

   do
   {    
      set_adc_channel(0);
      delay_ms(10);
      mymax=read_adc();

      set_adc_channel(2);
      delay_ms(10);
      rxir=read_adc();
 
      if(rxir>rxir_org) //if transmitter signal detected
      {
         output_high(pin_d5);  //on blue led
         on_timer=20;      
         en_robot=1;
      }
      else  //if transmitter data not detected
      {
         if(on_timer>0) //if timer >0
         {
            on_timer=on_timer-1; //count down
         }
         else  //if timer =0
         {
            output_low(pin_d5);  //off blue led            
            en_robot=0;
         }
      }

      if(input(pin_b7)==0) //if green button pressed
      {
         set_adc_channel(2);
         delay_ms(10);
         rxir_org=read_adc();
         rxir_org=rxir_org+20;
         delay_ms(10);
         run=1;    
      }

      if(input(pin_b6)==0) //if red button pressed
      {
         run=0;    
      }

      if(run==1)  //under run mode
      {
         output_low(pin_d7);   //off red led
         output_high(pin_d6);  //on green led

         if(en_robot==1)   //if robot enabled
         {
            //start robot
            set_pwm1_duty(speed1);
            set_pwm2_duty(speed1);

            if(mymax<=240)   //if no obstacle in range
            {
               //forward robot
               motor1_fwd();
               motor2_fwd();      

               if(turn_en==1)
               {
                  turn_en=0;
               }
               else
               {
                  turn_en=1;
               }
            }
            else if(mymax>240 && mymax<320)   //if obstacle just in range
            {
               //stop robot
               motor1_stop();
               motor2_stop();                
            }      
            else if(mymax>=320)   //if obstacle too close
            {
               //reverse robot
               motor1_rev();
               motor2_rev();                
            }      
         }
         else
         {
            set_pwm1_duty(speed2);
            set_pwm2_duty(speed2);

            if(turn_en==1)
            {
               //turn to left
               motor1_fwd();
               motor2_rev();                
            }
            else
            {
               //turn to right
               motor1_rev();
               motor2_fwd();                            
            }
         }
      }
      else  //under stop mode
      {
         output_high(pin_d7);  //on red led
         output_low(pin_d6);  //off green led
   
         //stop robot
         motor1_stop();
         motor2_stop();
      }

      delay_ms(250);

   }while(1);
}

void motor1_fwd() //module to forward motor1
{
   output_high(PIN_C3);
   output_low(PIN_C0);
}

void motor1_rev() //module to reverse motor1
{
   output_low(PIN_C3);
   output_high(PIN_C0);
}

void motor1_stop()   //module to stop motor1
{
   output_low(PIN_C3);
   output_low(PIN_C0);
}
void motor2_fwd() //module to forward motor2
{
   output_high(PIN_D0);
   output_low(PIN_D1);
}

void motor2_rev() //module to reverse motor2
{
   output_low(PIN_D0);
   output_high(PIN_D1);
}

void motor2_stop()   //module to stop motor2
{
   output_low(PIN_D0);
   output_low(PIN_D1);
}

Source code for Mobile Robot Tracking System Controller 20

**Coding for Controller ( Transmitter **


#include <16f877A.h> //use pic16f877a
#use delay(clock = 20000000)  //clock=20mhz
#fuses hs, noprotect, nowdt  //default setting

#byte PORTA=5  //port a address
#byte PORTB=6  //port b address
#byte PORTC=7  //port c address
#byte PORTD=8  //port d address
#byte PORTE=9  //port e address

void main()
{
   int entx=0;

   //setup io for each pic pin
   set_tris_a(0b00000000);
   set_tris_b(0b11000000);
   set_tris_c(0b10000000);
   set_tris_d(0b00000000);
   set_tris_e(0b00000000);
   output_low(pin_c6);  //off ir transmitter    

   output_high(pin_c1);  //on blue led
   delay_ms(1000);
   output_low(pin_c1);  //off blue led
   delay_ms(1000);

   do
   {
      if(input(pin_b7)==0) //if green button pressed
      {
         entx=1;    
      }

      if(input(pin_b6)==0) //if red button pressed
      {
         entx=0;    
      }

      if(entx==1)  //under run
      {
         output_high(pin_c6);  //on ir transmitter
         output_high(pin_c1);  //on blue led
         delay_ms(50);
         output_low(pin_c1);  //off blue led
         delay_ms(50);      
      }
      else  //under stop mode
      {
         output_low(pin_c1);  //off blue led    
         output_low(pin_c6);  //off ir transmitter    
      }

   }while(1);
}