PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Arduino HC-SRO4 Werte übergeben



akjra
30.12.2014, 10:45
Hallo Leute,

dies ist mein erster Beitrag hier und entdecke seid ein paar Tagen die Welt der Mikrocontroller.

Folgenden Sketch habe ich auf meinem UNO-R3 an laufen.



int pingPin = 13;
int inPin = 12;

void setup() {
Serial.begin(9600);
}

void loop()
{
// establish variables for duration of the ping,
// and the distance result in inches and centimeters:
long duration, inches, cm;

// The PING))) is triggered by a HIGH pulse of 2 or more microseconds.
// Give a short LOW pulse beforehand to ensure a clean HIGH pulse:
pinMode(pingPin, OUTPUT);
digitalWrite(pingPin, LOW);
delayMicroseconds(2);
digitalWrite(pingPin, HIGH);
delayMicroseconds(10);
digitalWrite(pingPin, LOW);

// The same pin is used to read the signal from the PING))): a HIGH
// pulse whose duration is the time (in microseconds) from the sending
// of the ping to the reception of its echo off of an object.
pinMode(inPin, INPUT);
duration = pulseIn(inPin, HIGH);

// convert the time into a distance
inches = microsecondsToInches(duration);
cm = microsecondsToCentimeters(duration);

Serial.println(cm, DEC);

delay(100);
}

long microsecondsToInches(long microseconds)
{
// According to Parallax's datasheet for the PING))), there are
// 73.746 microseconds per inch (i.e. sound travels at 1130 feet per
// second). This gives the distance travelled by the ping, outbound
// and return, so we divide by 2 to get the distance of the obstacle.
return microseconds / 74 / 2;
}

long microsecondsToCentimeters(long microseconds)
{
// The speed of sound is 340 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 / 29 / 2;

}


jetzt verzweifel ich an der Fragestellung die Werte zu nutzen. Hierfür wollte ich eine LED an Pin 3 auf HIGH setzen wenn der Messwert unter 15cm fällt.

Folgender Code fiel mir dazu ein.


if (digitalRead(inPin)<=435){ // 15cm * 29 microseconds per centimeter (sollte die Distanz beschreiben)
digitalWrite(3, HIGH);
} else {
digitalWrite(3, LOW);
}


Diesen Code habe ich am Ende angefügt.



int pingPin = 13;
int inPin = 12;

void setup() {
Serial.begin(9600);
pinMode(3, OUTPUT);

}

void loop()
{
// establish variables for duration of the ping,
// and the distance result in inches and centimeters:
long duration, inches, cm;

// The PING))) is triggered by a HIGH pulse of 2 or more microseconds.
// Give a short LOW pulse beforehand to ensure a clean HIGH pulse:
pinMode(pingPin, OUTPUT);
digitalWrite(pingPin, LOW);
delayMicroseconds(2);
digitalWrite(pingPin, HIGH);
delayMicroseconds(10);
digitalWrite(pingPin, LOW);

// The same pin is used to read the signal from the PING))): a HIGH
// pulse whose duration is the time (in microseconds) from the sending
// of the ping to the reception of its echo off of an object.
pinMode(inPin, INPUT);
duration = pulseIn(inPin, HIGH);

// convert the time into a distance
inches = microsecondsToInches(duration);
cm = microsecondsToCentimeters(duration);

Serial.println(cm, DEC);

delay(100);
}

long microsecondsToInches(long microseconds)
{
// According to Parallax's datasheet for the PING))), there are
// 73.746 microseconds per inch (i.e. sound travels at 1130 feet per
// second). This gives the distance travelled by the ping, outbound
// and return, so we divide by 2 to get the distance of the obstacle.
return microseconds / 74 / 2;
}

long microsecondsToCentimeters(long microseconds)
{
// The speed of sound is 340 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 / 29 / 2;

if (digitalRead(inPin)<=435){ // 15cm * 29ms/cm
digitalWrite(3, HIGH);
} else {
digitalWrite(3, LOW);
}

}


Kann mir jemand Helfen mein Problem zu lösen?

Dank in Voraus. :)

Schachmann
30.12.2014, 11:38
Hallo,

Du kannst nicht einfach den Wert digital einlesen, wie Du das hier: if (digitalRead(inPin)<=435) probiert hast, sondern Du musst die Laufzeit messen.

Vielleicht willst Du Dir hier: http://www.elektronik-bastelkeller.de/wordpress/?p=504 mal durchlesen, wie der Sensor angeschlossen und benutzt wird. Am Ende des Sketches wird die Entfernung in Millimetern berechnet, da könntest Du Deine Abfrage einbauen.

Gruß (und guten Rutsch),
Ralf

Sisor
30.12.2014, 18:06
Hast du diesen Sketch (http://www.instructables.com/id/Simple-Arduino-and-HC-SR04-Example/3/?lang=de) schon gesehen?

akjra
30.12.2014, 19:33
Hi Schamann,
Hi Sisor,

danke für die schnelle Antwort.

Sisor, so habe ich mir das vorgestellt. Ich verstehe es noch nicht ganz aber das kommt noch. :)

Danke an beide.