glenjoy said:What do you mean light follower? A robot that follows a light source?
arash_micro said:No
It has a head and turn it to light source
glenjoy said:arash_micro said:No
It has a head and turn it to light source
Then you need a good photodetector with very high dynamic range, because most phototransistor saturates very quick.
arash_micro said:I use 4 FOTOCELL and cover them with a dark papre
It work's
can i use them in this new project or not. why?
metal said:Hello
I have designed my own Line Follower Robot, I wrote the program for PIC using PICBasic Pro.
The Code:
'****************************************************************
'* Name : Path Finder Robot.BAS *
'* Author : Omar Udai Shacker *
'* Notice : Copyright (c) 2005 *
'* Date : 3/27/2005 *
'* Version : 1.8 *
'****************************************************************
'****************************************************************
'*************** Special Registers Setup ***************
'****************************************************************
@ DEVICE XT_OSC, WDT_ON, PWRT_OFF, PROTECT_OFF
' RA0 & RA1 Are Inputs, RA2-RA4 Are Outputs
TRISA = %00000011
' RB0-RB3 Are Inputs, RB4-RB7 Are Outputs
TRISB = %00001111
' PortB Pull-ups Are Disabled, Interrupt on Rising Edge at RB0
OPTION_REG = %11000000
'****************************************************************
'*********************** External Interrupt *****************
'********************* Setup in PICBasic Pro ****************
'****************************************************************
' Global Interrupt Enable, RB0 External Interrupt Enabled
INTCON = %10010000
'****************************************************************
'***************** Global Variables & Conts **************
'****************************************************************
YES CON 0 ' Line Detected, or Obstacle Detected
NO CON 1 ' No Line Detected, or No Obstacle Detected
'****************************************************************
' Switch ON Button Routine For PortA.1
SW_ON VAR PORTA.1
'****************************************************************
' PhotoDiode Receiver Variables "Bit Sized"
L_RX VAR PORTB.1
M_RX VAR PORTB.2
R_RX VAR PORTB.3
'****************************************************************
' Direction Monitor LED Varibles "Bit sized"
L_LED VAR PORTA.2
M_LED VAR PORTA.3
R_LED VAR PORTA.4
GoSub LED_INIT
'****************************************************************
' L293 Motor Driver Variables "Bit Sized"
MOTOR_1A_PLUS VAR PORTB.7
MOTOR_2A_MINUS VAR PORTB.6
STEER_3A_PLUS VAR PORTB.5
STEER_4A_MINUS VAR PORTB.4
GoSub MOTOR_INIT
'****************************************************************
'****************************************************************
'****************************************************************
'********************* Main Program *****************
'****************************************************************
'****************************************************************
'****************************************************************
'****************************************************************
'*************** Enable Interrupts in PBPro ***************
'***************** Switch ON Routine ********************
'****************************************************************
' Enable Interrupt in PICBasic Pro
ON INTERRUPT GoTo SW_OFF
SWITCH_ON :
IF SW_ON == 0 Then SWITCH_ON
'****************************************************************
'**************** Variables Initialization **************
'****************************************************************
' General Variable Initialization
MAIN :
GoSub MOTOR_INIT
GoSub LED_INIT
'****************************************************************
'****************** Line Follower Routine ***************
'****************************************************************
' Line Follower PhotoDiode Check Routine
LINE_FOLLOWER :
IF ( L_RX == NO ) AND ( M_RX == NO ) AND ( R_RX == NO ) Then ERROR
IF ( L_RX == NO ) AND ( M_RX == NO ) AND ( R_RX == YES ) Then RIGHT
IF ( L_RX == NO ) AND ( M_RX == YES ) AND ( R_RX == NO ) Then FORWARD
IF ( L_RX == NO ) AND ( M_RX == YES ) AND ( R_RX == YES ) Then RIGHT
IF ( L_RX == YES ) AND ( M_RX == NO ) AND ( R_RX == NO ) Then LEFT
IF ( L_RX == YES ) AND ( M_RX == NO ) AND ( R_RX == YES ) Then ERROR
IF ( L_RX == YES ) AND ( M_RX == YES ) AND ( R_RX == NO ) Then LEFT
IF ( L_RX == YES ) AND ( M_RX == YES ) AND ( R_RX == YES ) Then FORWARD
'****************************************************************
'********************* Forward Routine ******************
'****************************************************************
' Forward Routine
FORWARD :
L_LED = L_RX
M_LED = M_RX
R_LED = R_RX
LOW MOTOR_2A_MINUS
LOW STEER_3A_PLUS
LOW STEER_4A_MINUS
PWM MOTOR_1A_PLUS, 122, 1
LOW MOTOR_1A_PLUS
IF ( L_RX == NO ) AND ( M_RX == YES ) AND ( R_RX == NO ) Then FORWARD
IF ( L_RX == YES ) AND ( M_RX == YES ) AND ( R_RX == YES ) Then FORWARD
IF ( L_RX == NO ) AND ( M_RX == NO ) AND ( R_RX == NO ) Then FORWARD
GoTo MAIN
'****************************************************************
'********************** Right Routine *******************
'****************************************************************
' Turn Right Routine
RIGHT :
L_LED = L_RX
M_LED = M_RX
R_LED = R_RX
LOW MOTOR_2A_MINUS
HIGH STEER_3A_PLUS
LOW STEER_4A_MINUS
PWM MOTOR_1A_PLUS, 126, 2
LOW MOTOR_1A_PLUS
IF ( L_RX == NO ) AND ( M_RX == NO ) AND ( R_RX == YES ) Then RIGHT
IF ( L_RX == NO ) AND ( M_RX == YES ) AND ( R_RX == YES ) Then RIGHT
IF ( L_RX == NO ) AND ( M_RX == NO ) AND ( R_RX == NO ) Then right
GoTo MAIN
'****************************************************************
'********************** Left Routine ********************
'****************************************************************
' Turn Left Routine
LEFT :
L_LED = L_RX
M_LED = M_RX
R_LED = R_RX
LOW MOTOR_2A_MINUS
LOW STEER_3A_PLUS
HIGH STEER_4A_MINUS
PWM MOTOR_1A_PLUS, 126, 2
LOW MOTOR_1A_PLUS
IF ( L_RX == YES ) AND ( M_RX == NO ) AND ( R_RX == NO ) Then LEFT
IF ( L_RX == YES ) AND ( M_RX == YES ) AND ( R_RX == NO ) Then LEFT
IF ( L_RX == NO ) AND ( M_RX == NO ) AND ( R_RX == NO ) Then left
GoTo MAIN
'****************************************************************
'********************** Error Routine *******************
'****************************************************************
' Error Routine
ERROR :
L_LED = L_RX
M_LED = M_RX
R_LED = R_RX
LOW MOTOR_2A_MINUS
LOW STEER_3A_PLUS
LOW STEER_4A_MINUS
PWM MOTOR_1A_PLUS, 122, 1
LOW MOTOR_1A_PLUS
GoTo MAIN
'****************************************************************
'***************** MOTOR Initailization ******************
'****************************************************************
MOTOR_INIT :
' L293 Motor Driver Initialization
LOW MOTOR_1A_PLUS
LOW MOTOR_2A_MINUS
LOW STEER_3A_PLUS
LOW STEER_4A_MINUS
Return
'****************************************************************
'************** LED Direction Initailization *************
'****************************************************************
LED_INIT :
HIGH L_LED
HIGH M_LED
HIGH R_LED
Return
'****************************************************************
'****************** Interrupt Handler Routine *****************
'****************************************************************
Disable
SW_OFF :
GoSub MOTOR_INIT
GoSub LED_INIT
INTCON.1 = 0
Resume SWITCH_ON
Enable
'****************************************************************
'********************* The End *******************
'****************************************************************
End
arash_micro said:THANKS metal for your code and glenjoy for your advocate
but i haven't receive my answer yet
can my robot turn to human
pleas don't contest
sorry for my english
arash_micro said:Hi gidimiz
thanks for your guid
but i have done all of them in analog
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?