User Tools

Site Tools


oak:tutorials:ultrasonic

This is an old revision of the document!


Oak: Using an Ultrasonic Sensor

Currently a Work in Progress


{{http://digistump.com/wiki/_media/oak/tutorials/us-100_ultrasonic_2.png?500

In this lesson, we will connect an ultrasonic sensor to the Oak. An ultrasonic sensor, using the properties of sound, not only detect an object, but also how far away the object is. The sensor generates a high frequency sound, then listens to the echo received back to the sensor. The time interval from send to receive allows you to calculate the distance.

Components

Part Quantity Identification
Oak with soldered headers 1
Breadboard1
Ultrasonic Sensor1US-100 Y401
Jumper wires6

Note: The HC-SR04 sensor is NOT being used in this tutorial as it uses 5v. Instead a US-100 sensor, which operates from 3v - 5v is used.

Particle.publish will be used to send the sensor data to the cloud. To view the data, you will need a free Particle account, which you can get here if you done have one already: https://build.particle.io/signup.

Concepts

pulseIn

Particle.publish

Circuit

The US-100 Ultrasonic sensor has a number of configurations available. In this example we will be configuring it for digital (PWM) mode. In order to do so first remove the jumper on the back of the sensor (with the jumper engaged, the sensor will be in analog mode). The rest of the connections are straight forward:

  • Connect the VCC pin to the Oak VCC
  • Connect both GND pins to the Oak GND (via GND rail)
  • Connect the Trig pin to Oak pin #2
  • Connect the Echo pin to Oak pin #4


{{http://digistump.com/wiki/_media/oak/tutorials/us-100_ultrasonic_2.png?500

Here's a picture of the actual setup. Note the differences from the sketch: The sensor is facing outward from the breadboard, and the Oak is rotated 180 degrees. You can also see here that the jumper does NOT connect the 2 rear pins, thereby enabling digital mode.


{{http://digistump.com/wiki/_media/oak/tutorials/ultrasonic_actual.jpg?500|

Code

The first part of our sketch is the variable declaration:

/*
 US-100 Ultrasonic distance sensor:
 VCC to Oak vcc
 GND x2 to Ground Rail to Oak Ground
 Trig to Oak Pin 2
 Echo to Oak Pin 4
 */


int trigPin = 2; // Trigger Pin
int echoPin = 4; // Echo Pin
int LEDPin = 1; // Onboard LED

unsigned long Time_Echo_us = 0; // container for PulseIn data
unsigned long Len_mm  = 0; // variable for length conversion

char post_Distance[16]; //particle post variable

Next we tell the Oak what the pins will be doing in the setup section:

void setup() {
 
 pinMode(trigPin, OUTPUT);
 pinMode(echoPin, INPUT);
 pinMode(LEDPin, OUTPUT); // Use onboard LED for visual feedback
 
}

Now the loop portion. First we tell the sensor to send a sound:

void loop() {

 //Make sure the trigger pin is off
 digitalWrite(trigPin, LOW); 
 delay(100); 

//tell the sensor to send its pulse 
 digitalWrite(trigPin, HIGH);
 delay(10); 
 
 //end trigger
 digitalWrite(trigPin, LOW);

Then listen for the echo:

// pulseIn HIGH starts measuring the time until it hears the echo
Time_Echo_us = pulseIn(echoPin, HIGH);  
 
// Calculate distance to object. Divide by 2 because echo time is roundtrip
 Len_mm = (Time_Echo_us*34/100)/2;

Now that we have our data, let's use it:

//Send distance to cloud for viewing by Particle dashboard, and OakTerm
 sprintf(post_Distance, "%04d", Len_mm); //convert int to string for Particle.publish
  Particle.publish("distance in mm:", post_Distance); //invoke Particle.publish
 
/*
Use onboard LED for visual feedback: off for out of range, on for in range
Hook up and RGB LED to change colors based on distance           
*/
 if((Len_mm < 3000) && (Len_mm > 1)) {   // Length effective range (1, 3000).
  
digitalWrite(LEDPin, HIGH); 
 }
 else { 
 digitalWrite(LEDPin, LOW); 
 }                           
   
 delay(1000);                                
 
}


{{http://digistump.com/wiki/_media/oak/tutorials/ultrasonic.gif?400

Conclusion

oak/tutorials/ultrasonic.1469836262.txt.gz · Last modified: 2016/07/29 16:51 by brohan