Go Down

Topic: (Erledigt) HC-SR04 Millimeter genau anzeigen lassen? (Read 553 times) previous topic - next topic

power-dodge

Nov 08, 2013, 08:08 am Last Edit: Nov 08, 2013, 01:23 pm by power-dodge Reason: 1
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

guntherb

#1
Nov 08, 2013, 08:48 am Last Edit: Nov 08, 2013, 09:12 am by guntherb Reason: 1
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:
Code: [Select]

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;
}
Grüße
Gunther

power-dodge

Hi,

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

Code: [Select]
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ß

guntherb

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

Code: [Select]
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:

Code: [Select]
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");
Grüße
Gunther

power-dodge

#4
Nov 08, 2013, 01:17 pm Last Edit: Nov 08, 2013, 01:23 pm by power-dodge Reason: 1
Hi,

danke dir.
Werede das gleich testen.

Edit: Funkionuert tadellos!

Danke schön  ;)

MfG

power-dodge

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  ;)

Gruß

guntherb

Kann man aber die komma zahlen jetzt weg machen? Das ist schon zuviel des guten  ;)


Code: [Select]

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


Grüße
Gunther

power-dodge

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?:

Quote
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");

power-dodge

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

sth77


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


Dein Codeschnipsel sollte ja jetzt funktionieren, ich erweitere ihn mal eben:
Code: [Select]

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.");
Mein Arduino-Blog: http://www.sth77.de/ - letzte Einträge: Teensy 3.0 - Teensyduino unter Window 7 - Teensyduino unter Windows 8

Go Up