Robotic Stock Car - How to Guide |
A single chip modulated IR detector, such as the Sharp IS1U60 , will allow your robot to detect a modulated IR signal. The Handy Board comes with one of these automatically, and you can also buy them from Jaycar, Dick Smith, etc. It is a small square device with an oval bubble on the front, made of green plastic, with three pins - 1: control, 2: ground, 3: Vcc.
The diagram below is taken from the Handy Board's schematic list. TIC1 is a pin of the CPU (a M68HC11). The 47k resistor is to pull the normal control voltage up to +5v (read FALSE), as the output of the beacon is active low. When a beacon is detected, the control pin will be 0v (read TRUE). The beacon transmits in pulses - on for 1ms and off for 1ms repeatedly. The Handy Board will actually decode a valid Sony transmission (read on below). For other circuits you may be content to check for a change in the control signal from FALSE to TRUE and back.
Handy Board instructionsTo use the infrared function, the file sony-ir.icb must be loaded into Interactive C. This file may be added to the Handy Board default library file, lib_hb.lis. Please make sure that the file r22_ir.lis is not present in the lib_hb.lis file.The sony-ir.icb file adds the capability of receiving infrared codes transmitted by a Sony remote, or a universal remote programmed to transmit Sony infrared codes.
The infrared sensor is the dark green component in the Handy Board's lower right hand corner.
The sony-ir.icb file and its accompanying sony-ir.txt are available for downloading. The file works with my copy of Interactive C (version 2.86) but I haven't tested it with earlier versions. Basically my "main" from the robot code that used the beacon to start went like this:
void main() { int pid1, pid2; sony_init(1); while(1) { beep(); /* Wait for start IR signal */ while(!ir_data(1)); /* Perform sumo behaviour */ pid1=start_process(arbitrate()); pid2=start_process(motor_module()); /* Wait for stop button */ while(!stop_button()); while(stop_button()); /* Kill processes */ kill_process(pid1); kill_process(pid2); rest(); } } Don't forget to load the sony-ir.icb file - either load it manually each time with "load [path]/sony-ir.icb" at the IC prompt, or add it to the "lib_hb.lis" file that comes with IC, so that it will be loaded each time IC starts.
|
  |