140 likes | 295 Views
IR Communication. October 27, 2004. Sources. Lindsay, Andy. IR Remote for the Boe-Bot . v 1.0 2004. How 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.
E N D
IR Communication October 27, 2004
Sources • Lindsay, Andy. IR Remote for the Boe-Bot. v 1.0 2004.
How 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.
How 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.
Timing 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.
PULSIN 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.
' 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) > 1000
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.
A Sample Dataset • Test data for 5 second press of each key 0-9, vol+, vol-, ch+, ch-, power and enter. • Dataset
' 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) > 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) < 500) AND (time(0) < 500) THEN PULSOUT 13, 850 ' Forward PULSOUT 12, 650
ELSEIF (time(1) < 500) AND (time(0) > 500) THEN PULSOUT 13, 650 ' Backward PULSOUT 12, 850 ELSEIF (time(1) > 500) AND (time(0) < 500) THEN PULSOUT 13, 850 ' Right rotate PULSOUT 12, 850 ELSEIF (time(1) > 500) AND (time(0) > 500) THEN PULSOUT 13, 650 ' Left rotate PULSOUT 12, 650 ENDIF LOOP ' Repeat main loop.