(Erledigt) HC-SR04 Millimeter genau anzeigen lassen?

Hallo,

möchte das mein Sensor Millimeter genau misst. Meiner sollte 0,3cm genau sein also 3mm.
In dem Monitor sehe ich immer nur volle Zahlen (CM).
Was muss man machen um Millimeter genau zu messen (0,3 genau), oder
eher gesagt anzeigen lassen und die Werte verwenden lassen.

Danke schön

Ein paar Zeilen Code wären hilfreich, um beurteilen zu können wo das Problem liegt.

Edit: meine Glaskugel meint, dass du wahrscheinlich die Längenvariable cm als int oder long deklariert hast.

edit2: probiers doch mal damit:

double microsecondsToMillimeters(long microseconds)
{
// The speed of sound is 344 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 / 5.81;
}

Hi,

danke für deine Antwort. BEi mir sieht es so aus:

void loop() {
  
  int duration, distance;
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(500);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = (duration/2) / 29.1;
 
    Serial.print(distance);
    Serial.println(" cm");

Wäre schön wenn es geheg würde.

Gruß

Nach dem du distance als int declariert hast, kann distance auch keine Nachkommastellen haben.
Probier mal:

void loop() {
  
  int duration;
  float  distance;
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(500);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = (duration/2.0) / 29.1;
 
    Serial.print(distance);
    Serial.println(" cm");

oder:

void loop() {
  
  int duration;
  float  distance;
  digitalWrite(trigPin, HIGH);
  delayMicroseconds(500);
  digitalWrite(trigPin, LOW);
  duration = pulseIn(echoPin, HIGH);
  distance = (duration/2.0) / 2.91;
 
    Serial.print(distance);
    Serial.println(" mm");

Hi,

danke dir.
Werede das gleich testen.

Edit: Funkionuert tadellos!

Danke schön :wink:

MfG

Hi,

habe mich für die Millimeter anzeige entschieden. Funktioniert echt toll.
Kann man aber die komma zahlen jetzt weg machen? Das ist schon zuviel des guten :wink:

Gruß

power-dodge:
Kann man aber die komma zahlen jetzt weg machen? Das ist schon zuviel des guten :wink:

    Serial.print(distance,0);
    Serial.println(" mm");

Hi,

du bist ja super! Danke schön. Irgendwie verstehe ich es noch nicht warum aber es fnktioniert.

Er misst jetzt aber sehr oft hintereinander. Hab da doch ne Pause von 1 Secunde drin.
Aber der misst 20 mal in der Sekunde. Habe ich was falsch gemacht?:

int duration;
float distance;
digitalWrite(trigPin, HIGH);
delayMicroseconds(1000);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = (duration/2) / 2.91;

Serial.print(distance,0);
Serial.println(" mm");

Hi,

hat sich erledigt. Später im Code hatte ich keien Pause eingebat gehabt.

Danke dir noch mal!!! 8)

Hast du ne Idee, wie man etwas automatisch berechnen kann?:

http://forum.arduino.cc/index.php?topic=197495.msg1460529#msg1460529

power-dodge:
Hast du ne Idee, wie man etwas automatisch berechnen kann?:

Dein Codeschnipsel sollte ja jetzt funktionieren, ich erweitere ihn mal eben:

int duration;
float  distance;
float umfang;
digitalWrite(trigPin, HIGH);
delayMicroseconds(1000);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = (duration/2) / 2.91;
umfang = distance*3.141592653;     // duerfte in erster Naeherung fuer Pi ausreichen...
Serial.print("Ein Kreis des Durchmessers ");
Serial.print(distance,0);
Serial.print(" mm hat einen Umfang von ");
Serial.print (umfang,0);
Serial.println(" mm.");