Difference between revisions of "Boe Boy"
From RoboWiki
					
										
					
					m  | 
				|||
| (11 intermediate revisions by one other user not shown) | |||
| Line 3: | Line 3: | ||
| − | '''Author(s):'''   | + | '''Author(s):'''   Artemis Adami, Cristina Nicoleta Iordachi, Liubov Negodayeva   <BR>    | 
| − | '''Country:'''   Greece Romania Russia                             <BR>  | + | '''Country:'''   Greece, Romania, Russia                             <BR>  | 
'''Date:''' 13.08.2009                              <BR>  | '''Date:''' 13.08.2009                              <BR>  | ||
'''Activity:''' [http://www.centrobot.eu/rss09 Centrobot Robotic Summer School 2009]<BR>  | '''Activity:''' [http://www.centrobot.eu/rss09 Centrobot Robotic Summer School 2009]<BR>  | ||
'''Location:''' Vienna, Austria         	      <BR>  | '''Location:''' Vienna, Austria         	      <BR>  | ||
| − | '''Hardware:'''   | + | '''Hardware:''' BoeBot     <BR>  | 
| + | == Abstract ==  | ||
| + | I am Boe Boy …“what can i do for u ?“  | ||
| − | + | - Follow the line [ 3 QTI Line sensor detecting white or black –programmed with specific commands in every case] <BR>  | |
| + | - Capability of detecting obstacles and avoiding them …[ one ParallaxPingSensor –watch out it is not headspeakers lol- detecting the obstacles in front ]  | ||
| − | + | -----------------------------------------------------------------------------  | |
| − | + | he can not fly … but he will always be capable of walking that Austrian line  | |
| + | -----------------------------------------------------------------------------  | ||
== Project Files ==  | == Project Files ==  | ||
| − | [[Image:  | + | [[Image:BoeBoy.jpg | thumb | left | 300 pixels]]  | 
| + | |||
| + | |||
| + | The source code:   | ||
| + | |||
| + | <source lang="basic">  | ||
| + | '{$STAMP BS2}  | ||
| + | '{$PBASIC 2.5}  | ||
| + | FREQOUT 4, 2000, 3000  | ||
| + | |||
| + | ' -----[ I/O Definitions ]-------------------------------------------------  | ||
| + | |||
| + | Ping            PIN     14  | ||
| + | qti VAR Nib  | ||
| + | pulseCount VAR Byte  | ||
| + | |||
| + | |||
| + | ' -----[ Constants ]-------------------------------------------------------  | ||
| + | |||
| + | #SELECT $STAMP  | ||
| + |   #CASE BS2, BS2E  | ||
| + |     Trigger     CON     5                       ' trigger pulse = 10 uS  | ||
| + |     Scale       CON     $200                    ' raw x 2.00 = uS  | ||
| + |   #CASE BS2SX, BS2P, BS2PX  | ||
| + |     Trigger     CON     13  | ||
| + |     Scale       CON     $0CD                    ' raw x 0.80 = uS  | ||
| + |   #CASE BS2PE  | ||
| + |     Trigger     CON     5  | ||
| + |     Scale       CON     $1E1                    ' raw x 1.88 = uS  | ||
| + | #ENDSELECT  | ||
| + | |||
| + | RawToIn         CON     889                     ' 1 / 73.746 (with **)  | ||
| + | RawToCm         CON     2257                    ' 1 / 29.034 (with **)  | ||
| + | |||
| + | IsHigh          CON     1                       ' for PULSOUT  | ||
| + | IsLow           CON     0  | ||
| + | |||
| + | |||
| + | ' -----[ Variables ]-------------------------------------------------------  | ||
| + | |||
| + | rawDist         VAR     Word                    ' raw measurement  | ||
| + | inches          VAR     Word  | ||
| + | cm              VAR     Word  | ||
| + | |||
| + | ' -----[ Program Code ]----------------------------------------------------  | ||
| + | |||
| + | DO  | ||
| + | |||
| + | '------[ Reading ] --------------------------------------------------------  | ||
| + |  HIGH 3  | ||
| + |  HIGH 15  | ||
| + |  HIGH 8  | ||
| + |  PAUSE 1  | ||
| + |  qti.BIT0 = IN2  | ||
| + |  qti.BIT1 = IN9  | ||
| + |  qti.BIT2 = IN7  | ||
| + | '-------------------------------------------------------------------------  | ||
| + | |||
| + | '-----[ Decision of following the line ] ----------------------------------  | ||
| + | SELECT qti  | ||
| + | |||
| + | CASE %000 ' Forward  | ||
| + |   PULSOUT 12, 850  | ||
| + |   PULSOUT 13, 650  | ||
| + | CASE %010 ' Forward  | ||
| + |   PULSOUT 12, 850  | ||
| + |   PULSOUT 13, 650  | ||
| + | CASE %011 ' Pivot right  | ||
| + |   PULSOUT 12, 750  | ||
| + |   PULSOUT 13, 650  | ||
| + | CASE %001 ' Rotate right  | ||
| + |   PULSOUT 12, 850  | ||
| + |   PULSOUT 13, 850  | ||
| + | CASE %110 ' Pivot Left  | ||
| + |   PULSOUT 12, 750  | ||
| + |   PULSOUT 13, 650  | ||
| + | CASE %100 ' Rotate Left  | ||
| + |   PULSOUT 12, 650  | ||
| + |   PULSOUT 13, 650  | ||
| + | CASE %101 ' Forward  | ||
| + |   PULSOUT 12, 850  | ||
| + |   PULSOUT 13, 650  | ||
| + | |||
| + | ENDSELECT  | ||
| + | '--------------------------------------------------------------------------  | ||
| + | |||
| + | '------[ Reading ] --------------------------------------------------------  | ||
| + | |||
| + | PAUSE 50  | ||
| + | GOSUB Get_Sonar                             ' get sensor value  | ||
| + | inches = rawDist ** RawToIn                 ' convert to inches  | ||
| + | cm = rawDist ** RawToCm                     ' convert to centimeters  | ||
| + | '-------------------------------------------------------------------------  | ||
| + | |||
| + | '------[ Avoiding the obstacle ] -----------------------------------------  | ||
| + | IF ( cm < 10 AND cm > 7 ) THEN  | ||
| + |   FREQOUT 4, 2000, 2500, 3000  | ||
| + |   GOSUB Turn_Left  | ||
| + |   GOSUB Stopp  | ||
| + |   GOSUB Forward_Pulse  | ||
| + |   GOSUB Stopp  | ||
| + |   GOSUB Turn_Right  | ||
| + |   GOSUB Stopp  | ||
| + |   GOSUB Forward_Pulse  | ||
| + |   GOSUB Stopp  | ||
| + |   GOSUB Turn_Right  | ||
| + | ENDIF  | ||
| + | '------------------------------------------------------------------------  | ||
| + | |||
| + | LOOP  | ||
| + | '------------------------------------------------------------------------  | ||
| + | |||
| + | |||
| + | '------[ Subroutines ] ---------------------------------------------------  | ||
| + | |||
| + | |||
| + | Get_Sonar:  | ||
| + | ' This subroutine triggers the Ping sonar sensor and measures  | ||
| + | ' the echo pulse.  The raw value from the sensor is converted to  | ||
| + | ' microseconds based on the Stamp module in use.  This value is  | ||
| + | ' divided by two to remove the return trip -- the result value is  | ||
| + | ' the distance from the sensor to the target in microseconds.  | ||
| + |   Ping = IsLow                                  ' make trigger 0-1-0  | ||
| + |   PULSOUT Ping, Trigger                         ' activate sensor  | ||
| + |   PULSIN  Ping, IsHigh, rawDist                 ' measure echo pulse  | ||
| + |   rawDist = rawDist */ Scale                    ' convert to uS  | ||
| + |   rawDist = rawDist / 2                         ' remove return trip  | ||
| + | |||
| + | RETURN  | ||
| + | |||
| + | Forward_Pulse: ' Send a single forward pulse.  | ||
| + | FOR pulseCount = 0 TO 240  | ||
| + |   PULSOUT 12,850  | ||
| + |   PULSOUT 13,650  | ||
| + | NEXT  | ||
| + | |||
| + | FOR pulseCount = 0 TO 80  | ||
| + |   PULSOUT 12,850  | ||
| + |   PULSOUT 13,650  | ||
| + | NEXT  | ||
| + | |||
| + | RETURN  | ||
| + | |||
| + | Turn_Left: ' Left turn, about 90-degrees.  | ||
| + | FOR pulseCount = 0 TO 140  | ||
| + |   PULSOUT 12, 650  | ||
| + |   PULSOUT 13, 650  | ||
| + | NEXT  | ||
| + | |||
| + | RETURN  | ||
| + | |||
| + | Turn_Right: ' Right turn, about 90-degrees.  | ||
| + | FOR pulseCount = 0 TO 100  | ||
| + |   PULSOUT 12, 850  | ||
| + |   PULSOUT 13, 850  | ||
| + | NEXT  | ||
| + | |||
| + | RETURN  | ||
| + | |||
| + | Rotate: ' Rotating about 180-degrees  | ||
| + | FOR pulseCount = 0 TO 230  | ||
| + |   PULSOUT 12, 850  | ||
| + |   PULSOUT 13, 850  | ||
| + | NEXT  | ||
| + | |||
| + | RETURN  | ||
| + | |||
| + | Stopp: '  Send a single stop pulse.  | ||
| + |   PULSOUT 12, 750  | ||
| + |   PULSOUT 13, 750  | ||
| − | + | RETURN  | |
| + | </source>  | ||
Go back to the [http://virtuallab.kar.elf.stuba.sk/robowiki/index.php?title=Summer_School_2009 List of the projects]  | Go back to the [http://virtuallab.kar.elf.stuba.sk/robowiki/index.php?title=Summer_School_2009 List of the projects]  | ||
Latest revision as of 22:12, 13 August 2009
Overview
Author(s):   Artemis Adami, Cristina Nicoleta Iordachi, Liubov Negodayeva   
 
Country:   Greece, Romania, Russia                             
Date: 13.08.2009                              
Activity: Centrobot Robotic Summer School 2009
Location: Vienna, Austria         	      
Hardware: BoeBot     
Abstract
I am Boe Boy …“what can i do for u ?“
- Follow the line [ 3 QTI Line sensor detecting white or black –programmed with specific commands in every case] 
- Capability of detecting obstacles and avoiding them …[ one ParallaxPingSensor –watch out it is not headspeakers lol- detecting the obstacles in front ]
he can not fly … but he will always be capable of walking that Austrian line
Project Files
The source code: 
'{$STAMP BS2}
'{$PBASIC 2.5}
FREQOUT 4, 2000, 3000
' -----[ I/O Definitions ]-------------------------------------------------
Ping            PIN     14
qti VAR Nib
pulseCount VAR Byte
' -----[ Constants ]-------------------------------------------------------
#SELECT $STAMP
  #CASE BS2, BS2E
    Trigger     CON     5                       ' trigger pulse = 10 uS
    Scale       CON     $200                    ' raw x 2.00 = uS
  #CASE BS2SX, BS2P, BS2PX
    Trigger     CON     13
    Scale       CON     $0CD                    ' raw x 0.80 = uS
  #CASE BS2PE
    Trigger     CON     5
    Scale       CON     $1E1                    ' raw x 1.88 = uS
#ENDSELECT
RawToIn         CON     889                     ' 1 / 73.746 (with **)
RawToCm         CON     2257                    ' 1 / 29.034 (with **)
IsHigh          CON     1                       ' for PULSOUT
IsLow           CON     0
' -----[ Variables ]-------------------------------------------------------
rawDist         VAR     Word                    ' raw measurement
inches          VAR     Word
cm              VAR     Word
' -----[ Program Code ]----------------------------------------------------
DO
'------[ Reading ] --------------------------------------------------------
 HIGH 3
 HIGH 15
 HIGH 8
 PAUSE 1
 qti.BIT0 = IN2
 qti.BIT1 = IN9
 qti.BIT2 = IN7
'-------------------------------------------------------------------------
'-----[ Decision of following the line ] ----------------------------------
SELECT qti
CASE %000 ' Forward
  PULSOUT 12, 850
  PULSOUT 13, 650
CASE %010 ' Forward
  PULSOUT 12, 850
  PULSOUT 13, 650
CASE %011 ' Pivot right
  PULSOUT 12, 750
  PULSOUT 13, 650
CASE %001 ' Rotate right
  PULSOUT 12, 850
  PULSOUT 13, 850
CASE %110 ' Pivot Left
  PULSOUT 12, 750
  PULSOUT 13, 650
CASE %100 ' Rotate Left
  PULSOUT 12, 650
  PULSOUT 13, 650
CASE %101 ' Forward
  PULSOUT 12, 850
  PULSOUT 13, 650
ENDSELECT
'--------------------------------------------------------------------------
'------[ Reading ] --------------------------------------------------------
PAUSE 50
GOSUB Get_Sonar                             ' get sensor value
inches = rawDist ** RawToIn                 ' convert to inches
cm = rawDist ** RawToCm                     ' convert to centimeters
'-------------------------------------------------------------------------
'------[ Avoiding the obstacle ] -----------------------------------------
IF ( cm < 10 AND cm > 7 ) THEN
  FREQOUT 4, 2000, 2500, 3000
  GOSUB Turn_Left
  GOSUB Stopp
  GOSUB Forward_Pulse
  GOSUB Stopp
  GOSUB Turn_Right
  GOSUB Stopp
  GOSUB Forward_Pulse
  GOSUB Stopp
  GOSUB Turn_Right
ENDIF
'------------------------------------------------------------------------
LOOP
'------------------------------------------------------------------------
'------[ Subroutines ] ---------------------------------------------------
Get_Sonar:
' This subroutine triggers the Ping sonar sensor and measures
' the echo pulse.  The raw value from the sensor is converted to
' microseconds based on the Stamp module in use.  This value is
' divided by two to remove the return trip -- the result value is
' the distance from the sensor to the target in microseconds.
  Ping = IsLow                                  ' make trigger 0-1-0
  PULSOUT Ping, Trigger                         ' activate sensor
  PULSIN  Ping, IsHigh, rawDist                 ' measure echo pulse
  rawDist = rawDist */ Scale                    ' convert to uS
  rawDist = rawDist / 2                         ' remove return trip
RETURN
Forward_Pulse: ' Send a single forward pulse.
FOR pulseCount = 0 TO 240
  PULSOUT 12,850
  PULSOUT 13,650
NEXT
FOR pulseCount = 0 TO 80
  PULSOUT 12,850
  PULSOUT 13,650
NEXT
RETURN
Turn_Left: ' Left turn, about 90-degrees.
FOR pulseCount = 0 TO 140
  PULSOUT 12, 650
  PULSOUT 13, 650
NEXT
RETURN
Turn_Right: ' Right turn, about 90-degrees.
FOR pulseCount = 0 TO 100
  PULSOUT 12, 850
  PULSOUT 13, 850
NEXT
RETURN
Rotate: ' Rotating about 180-degrees
FOR pulseCount = 0 TO 230
  PULSOUT 12, 850
  PULSOUT 13, 850
NEXT
RETURN
Stopp: '  Send a single stop pulse.
  PULSOUT 12, 750
  PULSOUT 13, 750
RETURN
Go back to the List of the projects