Title: IR Communication
1IR Communication
2Sources
- Lindsay, Andy. IR Remote for the Boe-Bot. v 1.0
2004.
3How Does a TV Remote Work?
- On a button press, the remote flashes its IR LED
on/off at 38.5 kHz to broadcast a code for that
button. - The code is produced by controlling the brief
amounts of time the IR LED flashes on and off. - It flashes a signal to indicate the start of
transmission. - For a SONY TV, the remote has to broadcast IR for
2.4 ms o indicate start. - The message that follows consists of a
combination of 1.2 ms (binary-1) and 0.6 ms
(binary-0) broadcasts. - The IR detector on the Boe-Bot sends low signals
that match the time pattern broadcast by the
remote.
4How Does the TV Dectector Work?
- In many cases IR detector/receiver on your
Boe-Bot is the same detector found in many TVs
and VCRs. - This detector sends a low signal whenever it
detects IR flashing on/off at 38.5 kHz and a high
signal the rest of the time. - When the IR detector sends low signals, the
processor inside a TV or VCR measures how long
each of the low signals lasts. - These are used to figure out which key was
pressed on the remote. - BASIC Stamp 2 can be programmed to detect,
measure, store, and interpret the sequence of low
pulses it receives from the same IR detector.
5Timing Diagram
- This message consists of thirteen negative pulses
that the BASIC Stamp can easily measure. - 1 the start pulse, which lasts for 2.4 ms.
- 2-13 will either last for 1.2 ms (binary-1) or
0.6 ms (binary-0). - 2-8 indicates which key is pressed.
- 9-13 indicate if the message is being sent to a
TV, VCR, CD, DVD player, etc. - Pulses are transmitted in least significant bit
first fashion. - the first data pulse is bit-0.
- the next data pulse is bit-1
- Etc.
- If you press and hold a key on the remote, the
same message will be sent over and over again
with a 20 to 30 ms rest between messages.
6Timing Diagram
7PULSIN Command
- Complementary command to PULSOUT
- The syntax for the PULSIN command is
- PULSIN Pin, State, Variable
- Pin the I/O pin for measuring the pulse.
- State is used to determine whether the pulse is a
high pulse (1) or a low pulse (0). - Variable stores the pulse duration measured by
the BASIC Stamp.
8- ' IR Remote for the Boe-Bot - RecordAndDisplayPwm.
bs2 - ' Measure all data pulses from SONY IR remote set
to control a TV. - ' STAMP BS2
- ' PBASIC 2.5
- time VAR Word(12) ' SONY TV remote variables.
- index VAR Nib
- ' Display heading.
- DEBUG "time ARRAY", CR,
- "PWM MEASUREMENTS", CR,
- "Element Duration, 2-us", CR,
- "------- --------------"
- DO ' Beginning of main loop.
- DO ' Wait for rest between messages.
- PULSIN 9, 0, time(0)
- LOOP UNTIL time(0) gt 1000
9- PULSIN 9, 0, time(0) ' Measure/store data
pulses. - PULSIN 9, 0, time(1)
- PULSIN 9, 0, time(2)
- PULSIN 9, 0, time(3)
- PULSIN 9, 0, time(4)
- PULSIN 9, 0, time(5)
- PULSIN 9, 0, time(6)
- PULSIN 9, 0, time(7)
- PULSIN 9, 0, time(8)
- PULSIN 9, 0, time(9)
- PULSIN 9, 0, time(10)
- PULSIN 9, 0, time(11)
- FOR index 0 TO 11
- ' Display 12 pulse measurements.
- DEBUG CRSRXY, 0, 4 index, "time(", DEC
index, - ")",
- CRSRXY, 9, 4 index, DEC time(index)
- NEXT
- LOOP ' Repeat main loop.
10A Sample Dataset
- Test data for 5 second press of each key 0-9,
vol, vol-, ch, ch-, power and enter. - Dataset
11(No Transcript)
12(No Transcript)
13' IR Remote for the Boe-Bot - 2BitRemoteBoeBot.bs2
' Control your Boe-Bot with an IR remote set to
control a ' SONY TV with the 1-4 or CH/- and
VOL/- keys. 'STAMP BS2 'PBASIC 2.5 time
VAR Word(2) ' SONY TV remote
variables. DEBUG "Press hold a digit key (1-4)
or CH/- and VOL/-" FREQOUT 4, 2000, 3000
' Start/reset indicator. DO
' Beginning of main loop. DO
' Wait for rest between messages.
PULSIN 9, 0, time(0) LOOP UNTIL time(0) gt 1000
PULSIN 9, 0, time(0) ' Measure/store data
pulses. PULSIN 9, 0, time(1) ' Decide which
maneuver to execute depending on the '
combination of pulse durations stored in the
first ' two pulse measurements. IF (time(1)
lt 500) AND (time(0) lt 500) THEN PULSOUT 13,
850 ' Forward
PULSOUT 12, 650
14 ELSEIF (time(1) lt 500) AND (time(0) gt 500)
THEN PULSOUT 13, 650
' Backward PULSOUT 12, 850 ELSEIF (time(1)
gt 500) AND (time(0) lt 500) THEN PULSOUT 13,
850 ' Right rotate
PULSOUT 12, 850 ELSEIF (time(1) gt 500) AND
(time(0) gt 500) THEN PULSOUT 13, 650
' Left rotate PULSOUT 12, 650
ENDIF LOOP '
Repeat main loop.