Maker Pro
Maker Pro

Arduino ultrasonic range detector

mollekake

Jun 30, 2014
37
Joined
Jun 30, 2014
Messages
37
Hello!

So for some time i've been on and off with this small project i have. I started out with programming it with assembly and PIC, got done and put it aside.
Now i got myself a couple ardunio's uno and nano.

I can get the range detector to detect distances and turn on different leds for each distance and so on.

what i want to do now is to make it blink faster the closer an object is, and slower the further away an object is.
I can't seem to make that work.

Got any tips?
 

hevans1944

Hop - AC8NS
Jun 21, 2012
4,739
Joined
Jun 21, 2012
Messages
4,739
Sounds like a fun project! Are you pulsing an ultrasonic transmitter transducer and measuring the arrival time interval of the echo? Do you use a narrow range gate that sweeps from minimum range to maximum range to allow you to acquire the echo? How does the range detector work? How do you discriminate multiple simultaneous reflections from targets at different ranges? Please upload schematics and pictures.
 

Gryd3

Jun 25, 2014
4,098
Joined
Jun 25, 2014
Messages
4,098
Hello!

So for some time i've been on and off with this small project i have. I started out with programming it with assembly and PIC, got done and put it aside.
Now i got myself a couple ardunio's uno and nano.

I can get the range detector to detect distances and turn on different leds for each distance and so on.

what i want to do now is to make it blink faster the closer an object is, and slower the further away an object is.
I can't seem to make that work.

Got any tips?
Well. Sounds like you can currently detect distance.
You could try storing the value of distance into a variable, and then using that variable for the duration of a sleep command. The greater distance will cause a longer delay which will slow the rate at which you turn the LED on and off.

There are other methods, but this sounds the easiest right off the bat. Of course, sharing code will help ;)
 

mollekake

Jun 30, 2014
37
Joined
Jun 30, 2014
Messages
37
I'm using an HC-SR04 ultrasonic transmitter. It sends a signal on one pin, receives on another. I'm using the built in pulseIn function to determine the time and distance, which times out when the ping takes too long to come back.
here is my current blinking version, but this makes it blink more/less only on given distances, i want it to be smooth, if you understand.

Code:
void setup(){
Serial.begin(9600);
  pinMode(A0, OUTPUT);
  pinMode(A5, INPUT);
  pinMode(13, OUTPUT);
}

long avg = 0;
int i = 0;
int j = 0;
int rate = 0;

void loop(){
  long duration = 0;
  long distance = 0;
 
  //Pulse
  digitalWrite(A0, HIGH);
  delayMicroseconds(10); //minimum delay
  digitalWrite(A0, LOW);
  duration = pulseIn(A5, HIGH, 15000);//starts timer, will time out
  distance = (duration/2) / 29.1; //getting distance in cm
 
  //Getting average
  i++;
  avg += distance;
  //delay(2);
  if(i == 5){
   j = avg / 5;
   i = 0;
   avg = 0;
   Serial.print(j);//printing average distance to serial
   Serial.println();
  }
 
 

  //Setting blink "rate"
  if(j < 10){
   rate = 25;
  }else if(j > 10 && j < 30){
   rate = 50;
  }else if(j > 30 && j < 50){
   rate = 75;
  }else if(j > 50 && j < 100){
   rate = 100;
  }else if(j > 100){
   rate = 0;
  }
 
  //Blink
  if(rate > 0){
    digitalWrite(13, HIGH);
    delay(15);
    digitalWrite(13,LOW);
    delay(rate);
  }
     
  delayMicroseconds(50);//delay to prevent false detect from ping too far away
}
 

Gryd3

Jun 25, 2014
4,098
Joined
Jun 25, 2014
Messages
4,098
You could try simply changing delay(rate) to delay(j)
Or you can do something like rate = j / 2
 

mollekake

Jun 30, 2014
37
Joined
Jun 30, 2014
Messages
37
Thanks for the input! Seems like i just needed to get someone to kickstart me :p it works pretty well now, reduced the average calculating to only 2 cycles to prevent too much delay, and changed to: rate = j*2
Now it works pretty well! The downside to ultrasound is the sound, on clothes and things that have an angle, it gives of a false reading, because the sound doesn't return.
Any ideas on how to get around that? Could always look at the possiblity of 2 sensors
 

Gryd3

Jun 25, 2014
4,098
Joined
Jun 25, 2014
Messages
4,098
Thanks for the input! Seems like i just needed to get someone to kickstart me :p it works pretty well now, reduced the average calculating to only 2 cycles to prevent too much delay, and changed to: rate = j*2
Now it works pretty well! The downside to ultrasound is the sound, on clothes and things that have an angle, it gives of a false reading, because the sound doesn't return.
Any ideas on how to get around that? Could always look at the possiblity of 2 sensors
I'm not aware of any way to possibly detect soft sound absorbing materials with Ultrasound.
I would first look at any sensitivity adjustments that can be made, as cloth should return 'some' sound. If it was imperative to detect the distance from a soft material like that, you may need to look into an optical solution. Unfortunately though, I can only hypothesise as I have no experience with range detection other than a simple IR LED / Detector threshold detector.
 

mollekake

Jun 30, 2014
37
Joined
Jun 30, 2014
Messages
37
Yeah i was thinking about IR, how does it do on distances? I assume it doesn't work very well above 1m
 
Top