Eine praktische Anwendung des Ultraschallsensormoduls

HC-SR04 ist ein Sensor, die Längemessung ohne Berührung durchführen kann.

Der Messbereich ist von 2cm - 4m.

Dieser Sensor wird von 5V betrieben.

Untere Abbildung zeigt, wie der Sensor aussieht.

 Abbildung 1: Ultraschallsensormodul

Quelle: HC-SR04 Ultraschall Modul Entfernungsmesser Sensor für Raspberry Pi – AZ-Delivery

Wie man gesehen habe, es insgesamt 4 Anschlüsse gibt. Der mit Vcc bzw. Gnd gekennzeichneter Anschluss ist die Stromversorgung bzw. die Masse. Trig und Echo sind für TTL Signal also Steuersignal und Rücksignal.

Hier ist das Arbeitsprinzip des Sensors:

 Abbildung 2:Arbeitsprinzip des Sensors

Die Abbildung zeigt, ein 10-mus High-Level-TTL Signal notwendig ist. Nachdem das Signal von Sensor erhalten hat, sendet der Sensor 8-Zyklus 40 kHz Impuls. Greift der Sensor die rücklaufende Welle, gibt er ein Signal in der Form von PWM-Signal zurück. Die Dauer der High-Level-Zeit des Signals entsprechend die Zeit, die hinlaufende Zeit und die rücklaufende Zeit addiert.

Jetzt würde ich Ihnen den Code zeigen, es gibt zwei Möglichkeiten.Eine davon ist, dass wir die von Arduino bietete Bibliothek benutzen. Die andere ist, eigenes Steuersignal zu schreiben.

Zunächst ist der Code mit Arduino-Bibliothek:

// Head-Dokument einfügen, alle notwendige Funktionen werden enthalten
#include<SR04.h>
// GPIO 12 und 11 werden definiert für Trigger-Signal und Rücksignal
#define Trigger 12
#define Echo 11
// Sensor Objekt mit dem Name sr definieren
// Zwei Parameters ,ein für Rücksignal,anderes für Trigger-Signal
SR04 sr = SR04(Echo,Trigger);
 
void setup() {
  // put your setup code here, to run once:
  // Baut einstellen
  Serial.begin(9600);
 
  delay(1000);
}
//Schleife,jedes Mal wird der Abstand gemessen und im Bildschirm gedruckt
void loop() {
  // put your main code here, to run repeatedly:
  // sr.Distance()ist die Funktion,den Abstand messt
  Serial.print(sr.Distance());
  Serial.println(" cm");
  delay(1000);
}

Unten ist der Code, den wir selbst geschrieben haben:

// GPIO 12 und 11 werden definiert für Trigger-Signal und Rücksignal
#define Trigger 12
#define Echo 11
// GPIO 10 wird definiert für Schalter
#define s 10
// Funktion wird definiert, sie ermittelt den Abstand
// 3 Parameters sind Pin-Nummer für Trigger-Signal,Rücksignal und Schallgeschwindigkeit
double messung(int tri,int ech,double v);
 
void setup() {
  // put your setup code here, to run once:
  // GPIO initialisieren
  pinMode(Trigger,OUTPUT);
  pinMode(Echo,INPUT);
  pinMode(s,INPUT_PULLUP);
 
  digitalWrite(Trigger,LOW);
  Serial.begin(9600);
 
  delay(500);
}
 
void loop() {
  // put your main code here, to run repeatedly:
  // Entscheiden,ob den Schalter gedrückt wird.
  // Nach einer Messung und dem Druck wird eine Verzögerung von 500 ms genommen.
  // Damit vermeidet,zu viel Mals Messungen bei einem Druck des Schalters
  if(digitalRead(s) == LOW)
  {
    Serial.print(messung(Trigger,Echo,343.0));
    Serial.println(" cm");
    delay(500);
  }
}
 
// Die gegebene Schallgeschwindigkeit hat die Einheit von m/s
double messung(int tri,int ech,double v){
  long t;
  // Die Einheit der Schalgeschwindigkeit von m/s in cm/mus umgewandelt
  v *= 1e-4;
  // Zuerst wird Pin für TTL-Signal auf LOW-Pegel eingesetzt
  // Dann wird 10 mus TTL Signal erzeugt
  digitalWrite(tri,LOW);
  delayMicroseconds(2);
 
  digitalWrite(tri,HIGH);
  delayMicroseconds(10);
  digitalWrite(tri,LOW);
 
  // Ermitteln die Laufzeit der hinlaufende Welle und rücklaufende Welle
  t = pulseIn(ech,HIGH);
  // 计算出距离并返回
  return (double)(t)*v/2;
}
 
 
 
 
 
 
 

Bisher kann die Entfernung schon ermittelt. Aber die Genauigkeit kann noch verbessert werden.

Der Sensor besitzt schon eine sehr gute Auflösung, aber der Parameter der Schallgeschwindigkeit kann duch folgende Gleichung korrigiert werden:

C_{Luft}\approx (331.5+0.6\times \vartheta) m/s

 Dabei sind alles für Ultraschallsensormodul. Ich danke Ihnen für das Lesen.

Ich freue mich, wenn Sie mir den Fehler zeigen und darüber diskutieren.

Viel Spaß beim lernen und schönen Tag.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值