我正在开展一个由两个超声波,LCD和Arduino组成的项目。
超声波也用于流速测量。这背后的概念是通过第一次超声波向第二次发送波,计算时间1。接下来,从第二个发送波,第一个将接收波并计算时间2。
如果没有流量,time1必须等于time2。 但我不确定我的arduino代码是否正确,因为它没有向我显示真实的结果。
这是概念 http://www.universalmetering.co.uk/images/mobile/ultrasonic-diagram.gif
请你检查一下,如果你有代码给它..
感谢..
LiquidCrystal LCD(11,10,9,2,3,4,5);
//Create Liquid Crystal Object called LCD
#define trigPin1 12 #define echoPin1 13
#define trigPin2 8
#define echoPin2 7
//Simple program just for testing the HC-SR04 Ultrasonic Sensor with LCD dispaly //URL:
void setup()
{
pinMode(trigPin1, OUTPUT);
pinMode(echoPin1, INPUT);
pinMode(trigPin2, OUTPUT);
pinMode(echoPin2, INPUT);
LCD.begin(16,2);
//Tell Arduino to start your 16 column 2 row LCD
LCD.setCursor(0,0); //Set LCD cursor to upper left corner, column 0, row 0
LCD.print("Difference in time:"); //Print Message on First Row
}
void loop()
{
long duration1, duration2, diff;
digitalWrite(trigPin1, LOW);
delayMicroseconds(2);
digitalWrite(trigPin1, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin1, LOW);
duration1 = pulseIn(echoPin2, HIGH);
digitalWrite(trigPin2, LOW);
delayMicroseconds(2);
digitalWrite(trigPin2, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin2, LOW);
duration2 = pulseIn(echoPin1, HIGH);
diff = (duration2) - (duration1);
LCD.setCursor(0,1); //Set cursor to first column of second row
LCD.print(" "); //Print blanks to clear the row
LCD.setCursor(0,1); //Set Cursor again to first column of second row
LCD.print(diff); //Print measured distance
LCD.print(" sec"); //Print your units.
delay(250); //pause to let things settle
}
答案 0 :(得分:1)
SR-04在触发时提供回波响应。这在同一模块中发生。即使用trigPin1
触发一个模块并使用echoPin2
读取另一个模块会带来几乎随机且无关的结果。
在触发echoPin1
后读取trigPin1
。
SR-04可以记录在空中20厘米或更远处返回的声音。大约需要最短时间。 0.6ms(588ns)。对于SR-04来说,没有什么比这没什么了。
声音在水中传播的速度是空气中传播速度的5倍。另外,SR-04中的接收器和发射器之间的距离很小。同样,管子宽度很窄,不是为SR-04设计的。
因此,如果甚至使用1英寸宽的管道将发射器和接收器放在10厘米远的地方,在水中的预期返回时间约为0.1毫秒(100 ns)。这是SR-04进行注册的原因。
但是,您可能希望使用TDC-GP22模块加上分离的超声波接收器和发射器以及适当的电源管理来构建自己的TOF表。 该项目非常复杂(并且不比SR-04便宜),这得益于无创液体流量测量。