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: 255 = 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.

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.