030 - Infrared Proximity sensing - 360 degrees

Summary - 360 degrees Infrared Proximity sensing 

Syntax:

30 <BYTE2> <BYTE3> <BYTE4>  (decimal format)

Where:
BYTE1: 30 (the command)

BYTE2: Zone (default zone =10) - See description for details

BYTE3: 01 = Decimal Output
BYTE3: 02 = Ascii Output
BYTE3: 03 = Ascii Output - Delimited

BYTE4: 0= single shot operation
BYTE4: 2
55 = continuous operation-


Response from IRCF360:

Average proximity readings from each direction:

Decimal format:  <N>   <NE> <E> <SE> <S> <SW> <W> <NW> 
Ascii Format:       N= <N>NE= <NE>, E<E>, SE<SE>, S<S>, SW=<SW>, W<W>NW= <WN>, 013 (Carrage return)
Ascii Delimited:   N= <N>;<NE>;<E>;<SE>;<S>;<SW>;<W>;<NW>  013  (Carrage return)

Circular Display Feedback:

If an object is detect in any direction the corresponding LED will illuminate (see videos)

Description:

360 degree proximity sensing. All 8 IR transmitters are triggered in turn and the results are interpreted for proximity information.  

Byte 2 determines the zone of the reading. sensitivity of the readings. This is useful when filtering of objects at certain distances need to be made. 

The value adjust the carrier frequency of the infrared signal and influences the sensitivity of the IR receiver. The peak sensitivity frequency of the infrared receiver is 38KHz (see notes 
Zones ). The default value is 10,  which gives best readings for smaller robots with a proximity sensing range of about 100mm, which depends greatly on colour of material. . 

The values between  9-11 should be entered. If 0 is entered then the default value of 10 us used. Experimentation with different values should take place to see what works best with your own robot project. See more discussion of zones on the following webpage- > Zones


Byte 3 determines the output format, either decimal, ASCII or ASCII delimited.

Byte 4 determines whether the scanning should stop (0) after one loop or continue (255). 

8 raw bytes of serial data (proximity information) are transmitted to the serial port.  


Values from 0 to 100 are returned for each direction starting with the N (north) direction and then NE, E, SE, S, SW, W, NW.  In total 8 bytes of data are returned. each byte depicting the reading in each direction.

The command can be used for: 
  • Used in swarms and flocks. Specifically within flocks where a constant distance to a neighbouring flock member needs to be maintained to ensure collective patterns
  • proximity sensing when travelling in a direction and at the same time monitoring objects that may be moving towards it. 
  • executed when in a stationary position to make assessment of the stationary objects or object that are moving.  
  • Determine and avoid possible attacks when in robot gaming mode

Technical Features
The IRCF360 receives a 12-bit infrared package which is split between button code and device code. Sony also use a 15-bit version which does not work correctly with this command as 3 bits of information will be missing. See "Principle of IR remote control" for more details

Example Code:

For PICAXE
The PICAXE 18X does not have a 'time-out' function, so it will 'hang' if the timing of the serial communication is not correct. With the new X2 parts these have a time-out routine so the command can be retransmitted. For examples see the attachments at the end of this section

Example Programming Code for PICAXE

IRPD:
' on port b.2 send one-shot 360 degree infrared sensing command, at 9600 baud,  for zone 10 with decimal output
SEROUT b.2,T9600_8, (30,10,01,0) 
SERIN   2,T9600_8, N, NE, E, SE, S, SW, W, NW
RETURN



Example Programming code for Basic Stamp

For Basic Stamp
'On port 2 send one-shot 360 degree infrared sensing command, at 9600 baud,  for zone 10 with decimal output
SEROUT 2, 84, [30,10,1,0]  

' On pin 3 receive 8 bytes of data at 9600 baud. go to label timeout after 1 second if no data arrives. 
SERIN   3, 84, 1000, TIMEOUT, [N, NE, E, SE, S, SW, W, NW] 

TIMEOUT:
SEROUT 2, 84, ["Timeout"]  Exmaple



Videos:

This next video shows the IRCF360 sensor module mounted onto of a robot controller (in this case a PICAXE 18x). The robot controller is sending the command 30 to the IRCF360 sensor to trigger the 360 degree proximity sensing mode.

Via the 
via the RS232 serial interface the sensors replies back to the robot controller with information of all the proximity values from all 8 directions The robot controller can then decide which direction to turn. 




Command 50 - Infrared Proximity Sensing


The main robot controller routine written in PICAXE basic is as follows (The full listing is attached in section below):

'------------------------------------------------------------
' Main Program
'------------------------------------------------------------
backup_count =0

MAIN:


GOSUB IRPD

IF  NE > 30 then 
GOSUB turn_right
PAUSE 500
ENDIF

IF  NW > 30 then 
GOSUB turn_left
PAUSE 500
ENDIF


IF  SE > 20  then 
 GOSUB turn_right
 PAUSE 500
ENDIF
IF  SW > 20  then 
GOSUB turn_left
PAUSE 500
ENDIF


IF  E > 20 then 
   GOSUB turn_right
      PAUSE 500
ENDIF

IF  W > 20  then 
      GOSUB turn_left
PAUSE 500
ENDIF  
  

IF  N  <=44 then 
GOSUB forwards
PAUSE 100
ENDIF

 
IF  N >=45 then 
GOSUB back_up
PAUSE 200
inc backup_count
'This next part counts how many times the robot is hunting backwards and forwards. If it does it 3 times then it must be stuck so 
' turn in a direction based on the highest sensor readings.
IF backup_count > 3 then 
 if NW > NE then gosub turn_left
 if NW <= NE then gosub turn_right
 backup_count =0
ENDIF  
ENDIF

'if there is something behind the robot then go forward

IF  S > 20 then  GOSUB forwards
GOSUB blink ' Blink the LED to indicate power-up
GOTO MAIN


In this next demo, just the the NW, N, NE and South directions were being checked for obstacles by a robot controller with a PICAXE (reved) microcontroller installed and a pololu motor controller. 

A very simple program was written which just moves the robot in the opposite direction of the obstacle and then stop. 

IRCF360 - Command 30




References:
Subpages (1): IRCF360 - Zones
Comments