2

I am working on a project that records the elevation changes of a 1 foot wide section using sonar distance measurement. I have 10 HC-SR04 sensors arranged in a straight line over this 1 foot section.

The issue I am having is that when I send an output from my sonar sensor, I must wait until the return signal is recorded before I can trigger the next sonar sensor to take a measurement. This is rather slow and decreases the sampling frequency significantly. I need each sonar sensor to take 1000 measurements per second for my project.

Is there a way to have the HC-SR04 sensors simultaneously output and listen for the return signal? I would want all 10 sensors to send a 40 kHz pulse at the same time, and then when a return signal is recorded, another 40 kHz pulse is sent out.

The average distance to the 1 foot wide section is about 11 inch. If the Arduino is limited and there are other control boards that can accomplish this, it would help a lot if you can point me in the right direction.

1 Answer 1

7

1000 measurement for 10 sensors per seconds, it means there are 10000 measurement per sec with 0.1 mS time slot for each measurement.

According to SRF-04 Documentation,

(1)

If nothing is detected then the SRF04 will lower its echo line anyway after about 36mS.

So, time slot for each reading is 36 mS ("if" nothing is detected), which means for 10 SRF04 x 1000 reading, it will take 360000 mS = 360 Sec.

(2)

I would want all 10 sensors to send a 40kHz pulse at the same time, and then when a return signal is recorded, another 40kHz pulse is sent out.

Its seems reasonable. But, enter image description here According to the timing diagram, 1 cycle minimum period consist of :

  1. 100 us Trigger pulse ==> 0.0001 s
  2. 8 Cycle burst at 40 kHz = (1/40000)*8 s ==> 0.0002 s
  3. 100 us Echo pulse ==> 0.0001 s
  4. 10 ms delay time ==> 0.01 s

Total for 1 cycle is 0.0104 s, so for 1000 readings x 10 sensors (object to detect is present) will be 104 s.

All sensor burst at the same frequency, great idea. However it's not advised (or rather not possible) because that will disturb each sensor reading unless you successfully change each sensors frequency or doing sound modulation. Even if you success in modulating 10 sensors frequency, the needed time is still not met 1 s interval

  1. 100uS for 10 sensors trigger pulse at once ==> 0.0001 s
  2. 8 Cycle burst at 40 kHz = (1/40000)*8 s ==> 0.0002 s
  3. 100 us (minimum) Echo pulse --> 0.0001 s x 10 sensors ==> 0.001 s, because Arduino does not support threading, which mean there is no way you can read all at same time
  4. 10 ms delay time ==> 0.01 s

Time for 1 cycle (10 sensors reading): 0.0113, 1000 readings : 11.3 s

(3)

"How about changing the beam pattern?"

Changing beam pattern and beam width
You can't! This is a question which crops up regularly, however there is no easy way to reduce or change the beam width that I'm aware of. The beam pattern of the SRF04 is conical with the width of the beam being a function of the surface area of the transducers and is fixed.

So, rather than trying to modify the ultrasonic, more reasonable solution is changing the way you do elevation measurement.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.