Pages: [1]   Go Down
Author Topic: (Erledigt) HC-SR04 Millimeter genau anzeigen lassen?  (Read 450 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 34
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
« Last Edit: November 08, 2013, 07:23:42 am by power-dodge » Logged

Offline Offline
Edison Member
*
Karma: 38
Posts: 1152
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
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;
}
« Last Edit: November 08, 2013, 03:12:56 am by guntherb » Logged

Grüße
Gunther

Offline Offline
Newbie
*
Karma: 0
Posts: 34
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi,

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

Code:
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ß
Logged

Offline Offline
Edison Member
*
Karma: 38
Posts: 1152
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Code:
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:
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");
Logged

Grüße
Gunther

Offline Offline
Newbie
*
Karma: 0
Posts: 34
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi,

danke dir.
Werede das gleich testen.

Edit: Funkionuert tadellos!

Danke schön  smiley-wink

MfG
« Last Edit: November 08, 2013, 07:23:27 am by power-dodge » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 34
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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  smiley-wink

Gruß
Logged

Offline Offline
Edison Member
*
Karma: 38
Posts: 1152
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Code:

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

Logged

Grüße
Gunther

Offline Offline
Newbie
*
Karma: 0
Posts: 34
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Offline Offline
Newbie
*
Karma: 0
Posts: 34
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi,

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

Danke dir noch mal!!!  smiley-cool

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

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

Germany
Offline Offline
Edison Member
*
Karma: 46
Posts: 2310
Arduino rocks
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Dein Codeschnipsel sollte ja jetzt funktionieren, ich erweitere ihn mal eben:
Code:
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.");
Logged

Mein Arduino-Blog: http://www.sth77.de/ - letzte Einträge: Teensy 3.0 - Teensyduino unter Window 7 - Teensyduino unter Windows 8

Pages: [1]   Go Up
Jump to: