Subject:
|
Re: IR-based proximity measurement
|
Newsgroups:
|
lugnet.robotics.rcx.nqc
|
Date:
|
Sun, 11 Jun 2006 18:31:49 GMT
|
Viewed:
|
10580 times
|
| |
| |
Brian, thanks for your advice. it has told me what is happening physically.
i build a one shot measurement program to answer your questions.
here is the measurement result:
Distance to wall: 26 cm (at night)
7740 7696 7666 7641 7639 7613 7613 7593 7585 Battery millivolt
24 24 24 23 23 23 23 23 23 Ambient baseline
58 53 57 56 58 57 51 51 49 1 Start of burst
52 50 49 53 52 55 57 57 54 2
57 50 49 49 57 54 23 52 49 3
50 51 55 26 26 29 24 50 26 4
52 57 25 55 28 55 52 52 53 5
24 50 49 54 52 49 57 56 49 6 End of burst
24 24 23 23 23 23 23 23 23
24 24 23 23 23 23 23 23 23
24 24 24 23 23 23 23 23 23
24 24 24 23 23 23 23 23 23
24 24 24 23 23 23 23 23 23 Ambient baseline, night
58 57 57 56 58 57 57 57 54 Maximum bright
Distance to wall: 52 cm (at day)
9000 7838 7810 7782 7771 7754 7750 7704 7725 Battery millivolt
37 37 37 37 37 37 37 37 37 Ambient baseline
47 48 48 47 45 45 46 47 45 1 Start of burst
37 45 38 46 45 47 38 37 37 2
47 45 45 45 47 46 44 44 46 3
47 45 45 44 41 44 46 47 46 4
38 47 45 37 44 37 44 38 46 5
47 37 45 44 47 46 46 44 46 6 End of burst
37 37 37 37 37 37 37 37 37
37 37 37 37 37 37 37 37 37
38 37 37 37 37 37 37 37 37
37 37 37 37 37 37 37 37 37
37 37 37 37 37 37 37 37 37 Ambient baseline, day
47 48 48 47 47 47 46 47 46 Maximum bright
As you see, after measuring the ambient baseline, we only need six samples to
hunt the burst bright maximum.
Could imagine an algoritm as an IR-based proximity measurement device
taking only six samples during IR burst.
--------------------------------------------------------------------
And here is the code:
--------------------------------------------------------------------
/*
mea1pulse.nqc /cr 2006 June 9 /lm 2006 June 11 / Ralph Toepper
proximity sensor development / measure one pulse
derivied from SerialPing.nqc by Matt Jones, Sept 2005, regarding advice from
Brian Davis June 2006
note: start and stopbit are vice versa, giving serial data electronic
opportunity to syncronise.
estimation of burst duration: assuming 1 startbit and 1 stopbit (didnt find the
real settings, but only 2 stopbits are possible otherwise) we get 10 bit per
byte:
t=1/f 1/2400Hz=416.67us (microseconds) per bit
416.67us per bit * 10 bit per byte * 16 bytes = 66.67 ms burst duration
furthermore i guess, burst brightness depends on battery power. because any
regulation unit would burn and thus waste power. but i dont know what is
implemented in the RCX.
*/
int eyeoff; // passive light sensor reading
int eyeon; // active light sensor reading
int cnt;
task main()
{
CreateDatalog(12);
// Set up sensors & IR Tx
SetSensorType(SENSOR_1, SENSOR_TYPE_LIGHT);
SetSensorMode(SENSOR_1, SENSOR_MODE_PERCENT);
SetTxPower(TX_POWER_HI);
SetSerialComm( (SERIAL_COMM_DEFAULT) ); // 2400 Baud, 50% duty cycle
SetSerialPacket(SERIAL_PACKET_DEFAULT); // plain data bytes
// initialize the 16 byte serial data buffer with all 0's. Sending all 16 bytes
in a row should give a long IR blast
SetSerialData(0, 0x00); // compiler (version 2.2 r1) says, buffer index
argument must be a constant
SetSerialData(1, 0x00);
SetSerialData(2, 0x00);
SetSerialData(3, 0x00);
SetSerialData(4, 0x00);
SetSerialData(5, 0x00);
SetSerialData(6, 0x00);
SetSerialData(7, 0x00);
SetSerialData(8, 0x00);
SetSerialData(9, 0x00);
SetSerialData(10, 0x00);
SetSerialData(11, 0x00);
SetSerialData(12, 0x00);
SetSerialData(13, 0x00);
SetSerialData(14, 0x00);
SetSerialData(15, 0x00);
AddToDatalog( BatteryLevel() );
eyeoff = SENSOR_1;
AddToDatalog( eyeoff );
cnt = 0;
SendSerial(0,15);
while( cnt<10 )
{
eyeon = SENSOR_1;
AddToDatalog( eyeon );
cnt = cnt + 1;
}
}
|
|
Message has 1 Reply: | | Re: IR-based proximity measurement
|
| (...) You're welcome - it's a fun problem. At least partially because it's one of the few times I've had to worry about the speed of bytecode execution under the standard firmware (see below). (...) Given what you are transmitting and how you are (...) (18 years ago, 11-Jun-06, to lugnet.robotics.rcx.nqc)
|
Message is in Reply To:
| | Re: IR-based proximity measurement
|
| (...) Well, there were a couple of typos, but only one I found that was critical. If you are using a "max-picking LIDAR" method, you do *not* want to divide by the number of samples. The variable "eyeon" in your code should end up with the brightest (...) (18 years ago, 9-Jun-06, to lugnet.robotics.rcx.nqc)
|
13 Messages in This Thread:
- Entire Thread on One Page:
- Nested:
All | Brief | Compact | Dots
Linear:
All | Brief | Compact
This Message and its Replies on One Page:
- Nested:
All | Brief | Compact | Dots
Linear:
All | Brief | Compact
|
|
|
|