Ich habe Code für einen Ultraschallsensor, den ich von einer Site gefunden habe. Hier ist der Code:
#define trigPin 12
#define echoPin 13
void setup() {
Serial.begin (9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
}
void loop() {
int duration, distance;
digitalWrite(trigPin, HIGH);
delayMicroseconds(1000);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = (duration/2) / 29.1;
if (distance >= 200 || distance <= 0){
Serial.println("Out of range");
}
else {
Serial.print(distance);
Serial.println(" cm");
}
delay(500);
}
Ich verstehe die pulseIn()
Funktionsweise jedoch nicht. Ich möchte wissen, wann die Zeitzählung beginnt und wann sie endet. Beginnt in diesem Code beispielsweise die Zeit bei digitalWrite(trigPin, HIGH);
oder beginnt die Zeit bei der pulseIn()
Funktion?
Wenn es das zweite ist, wenn es stoppt, wie gibt uns die Zeit dann die Entfernung eines Hindernisses, wenn ich bereits 1000 Mikrosekunden verzögere, nachdem ich einen Ping in der Luft gesendet habe?
arduino-uno
sensors
pulsein
shajib0o
quelle
quelle
How can i do this code in assembly languaje
- Was hat das mit dieser Frage zu tun?Antworten:
Aus den Dokumenten:
In diesem Fall
pulseIn(echoPin, HIGH)
beginnt die Anzahl der Mikrosekunden zu zählen, bis sieechoPin
auf HIGH geht, und speichert sie induration
.Es beginnt und endet in dieser Zeile, es ist eine sogenannte Blockierungsfunktion. Es wird wirklich dort sitzen, bis es
echoPin
hoch geht und Ihnen sagt, wie lange es gedauert hat (es sei denn, Sie geben eine Zeitüberschreitung an).Dies bedeutet auch, dass Verzögerungen vor oder nach dem
pulseIn
Anruf keine Auswirkungen haben.Die Art und Weise, wie Sie Abstand von dieser Zeit erhalten, ist durch die folgende Gleichung:
Sie teilen durch zwei, weil es hin und zurück geht, so dass die Zeit doppelt so lang ist wie bei einer Einwegfahrt. Die 29.1 ist die Schallgeschwindigkeit (343,5 m / s => 1 / 0,03435 = 29,1). Beachten Sie also, dass das Ergebnis in CMs und nicht in Zoll angegeben ist. Sie könnten es wahrscheinlich herausfinden, indem Sie sich das Datenblatt des Sensors ansehen oder einfach viele Proben erhalten, die die Dauer mit der Entfernung in Beziehung setzen (Sie würden die Entfernung manuell messen) und eine Gleichung erhalten, die sehr ähnlich ist.
quelle
pulseIn(echoPin, HIGH)
misst die Zeit, bis der ECHO-Pin auf LOW geht.In der Tat wäre es ein Problem, wenn Sie 1000 Mikrosekunden nach dem Start mit der Messung der Pulslänge beginnen würden. Der HC-SR04-Sensor funktioniert jedoch nicht so:
Der Sensor wird durch die fallende Flanke von TRIG bei ausgelöst
digitalWrite(trigPin, LOW);
Der ECHO-Impuls beginnt ca. 0,3 ms nach dem Trigger
Deshalb hat eine Verzögerung von 1 ms keinen Einfluss auf das Messergebnis.
pulseIn(echoPin, HIGH)
wartet tatsächlich, bis der ECHO-Pin auf HIGH geht, und beginnt dann mit der Messung der Pulslänge, bis er wieder auf LOW geht. Daher kann die Dauer des TRIG-Impulses auf 10 Mikrosekunden reduziert werden (minimale TRIG-Dauer für HC-SR04), um die Messungen zu beschleunigen.quelle
Es ist wichtig zu wissen, dass Sie die Zeit vom Start des Triggers bis zum Echo-Signal nicht messen, indem Sie den Trigger-Pin auf HIGH setzen.
Der Sensor HC-SR04 startet die Messung, indem er am Trigger-Eingang ein HIGH empfängt und kurze Zeit später die Zeit sendet, die als Länge des HIGH-Pegels am Echo-Pin codiert ist.
Wenn Sie
pulseIn()
nach dem Auslösen 2 ms, dh 2000 μs, verwenden, sollte dies einwandfrei funktionieren.quelle
Seien Sie nicht verwirrt, da das Ultraschallmodul eine bestimmte Arbeitsweise hat. Zuerst setzen Sie einen Impuls in den Trigpin. Wenn es endet, sendet das Modul 8 Bursts mit 40-kHz-Impulsen (und genau das wird zum Messen der Entfernung verwendet, nicht Ihr Impuls im Trigpin, der nirgendwo hin führt). Genau in dem Moment, in dem der erste Burst gesendet wird, setzt sich der Echo-Pin auf HIGH. Wenn dies geschieht, befindet sich das Programm in der Zeile von pulsIn, und da sich Echopin in HIGH befindet, startet es das Timing (da pulsIN (Echopin, HIGH) darauf wartet, dass Echopin für das Start-Timing HIGH ist). Wenn der erste Impuls der 40 kHz im Objekt abprallt und zum Empfänger zurückkehrt, setzt sich das Echopin auf LOW. Dann stoppt die pulsIn-Funktion die Zeit und gibt sie zurück. Dann läuft das Programm weiter. Dieses Modul ist etwas knifflig, um die Arbeitsweise von pulsIn zu erlernen.
quelle