2017-01-06 113 views
0

我正在修补一个简单的Arduino草图,使用超声波传感器检测距离。从我所了解的情况来看,触发器发送了一个ping。回声监听回来的回声以计算距离。这是以微秒为单位测量的。使用超声波传感器在Arduino中获得英寸距离和Cm从超声波传感器获取距离

如果这是正确的,问题是,如何确定英寸和厘米从平(这是微秒)?这只是基本的数学/物理学,并且这只是一个基本的公式吗?

void loop() { 
digitalWrite(trigPin, LOW); 
delayMicroseconds(2); 
digitalWrite(trigPin, HIGH); 
delayMicroseconds(10); 
digitalWrite(trigPin, LOW); 

duration = pulseIn(echoPin, HIGH); 

这是我遇到的问题。我想鸿沟微秒至英寸的ping时间,然后厘米:

distance_in = duration ????; 
distance_cm = duration ????; 

Serial.print(distance_in); 
Serial.print(" in, "); 
Serial.print(distance_cm); 
Serial.print(" cm"); 
Serial.println(); 
delay(1500); 
} 

任何帮助,以尽可能多的解释,将不胜感激。我是一个新手,Arduino的(而不是重升降数学)

回答

0
distance_cm = duration/29/2; 
distance_in = distance_cm * 0,393701;  

声音传播以每秒343米,这意味着它需要每厘米29.155微秒。因此,我们必须将持续时间除以29,然后减去2,因为声音必须两次行进。它传播到物体,然后回到传感器。

1厘米= 0,393701中

+0

这很有道理。谢谢! –

1

我已经在这个问题上找到的最好的文章其实是在Arduino的。 https://www.arduino.cc/en/Tutorial/Ping

/* Ping))) Sensor 

    This sketch reads a PING))) ultrasonic rangefinder and returns the 
    distance to the closest object in range. To do this, it sends a pulse 
    to the sensor to initiate a reading, then listens for a pulse 
    to return. The length of the returning pulse is proportional to 
    the distance of the object from the sensor. 

    The circuit: 
    * +V connection of the PING))) attached to +5V 
    * GND connection of the PING))) attached to ground 
    * SIG connection of the PING))) attached to digital pin 7 

    http://www.arduino.cc/en/Tutorial/Ping 

    created 3 Nov 2008 
    by David A. Mellis 
    modified 30 Aug 2011 
    by Tom Igoe 

    This example code is in the public domain. 

*/ 

// this constant won't change. It's the pin number 
// of the sensor's output: 
const int pingPin = 7; 

void setup() { 
    // initialize serial communication: 
    Serial.begin(9600); 
} 

void loop() { 
    // establish variables for duration of the ping, 
    // and the distance result in inches and centimeters: 
    long duration, inches, cm; 

    // The PING))) is triggered by a HIGH pulse of 2 or more microseconds. 
    // Give a short LOW pulse beforehand to ensure a clean HIGH pulse: 
    pinMode(pingPin, OUTPUT); 
    digitalWrite(pingPin, LOW); 
    delayMicroseconds(2); 
    digitalWrite(pingPin, HIGH); 
    delayMicroseconds(5); 
    digitalWrite(pingPin, LOW); 

    // The same pin is used to read the signal from the PING))): a HIGH 
    // pulse whose duration is the time (in microseconds) from the sending 
    // of the ping to the reception of its echo off of an object. 
    pinMode(pingPin, INPUT); 
    duration = pulseIn(pingPin, HIGH); 

    // convert the time into a distance 
    inches = microsecondsToInches(duration); 
    cm = microsecondsToCentimeters(duration); 

    Serial.print(inches); 
    Serial.print("in, "); 
    Serial.print(cm); 
    Serial.print("cm"); 
    Serial.println(); 

    delay(100); 
} 

long microsecondsToInches(long microseconds) { 
    // According to Parallax's datasheet for the PING))), there are 
    // 73.746 microseconds per inch (i.e. sound travels at 1130 feet per 
    // second). This gives the distance travelled by the ping, outbound 
    // and return, so we divide by 2 to get the distance of the obstacle. 
    // See: http://www.parallax.com/dl/docs/prod/acc/28015-PING-v1.3.pdf 
    return microseconds/74/2; 
} 

long microsecondsToCentimeters(long microseconds) { 
    // The speed of sound is 340 m/s or 29 microseconds per centimeter. 
    // The ping travels out and back, so to find the distance of the 
    // object we take half of the distance travelled. 
    return microseconds/29/2; 
} 
相关问题