Mulag
25.10.2013, 13:49
Moin zusammen,
ich habe den Distance Sensor SainSmart HC-SR04 an das Breadboard angeschlossen, mithilfe des Arduino Mega 2560 versuche ich die Werte nun auszulesen. An VCC klemme ich 5V an, an GND natürlich GND, an Echo und Trig gehe ich jeweils auf einen Digitalen Pin.
Mithilfe des Codes lasse ich nun die Entfernung berechnen. Klappt wunderbar! Jedoch nicht, wenn ich dem Sensor einen zu weiten "Spielraum" gebe, also vor dem Fliegenauge NICHTS habe und seine Ultraschallwellen einen weiten Raum lasse -oder- schnelle Bewegungen vor ihm mache. Daraus resultieren verrückte Werte. Zu allererst gibt er vernünftige Werte von ca. 45...50 wieder. Dann auf einmal schießt er die Werte auf 4000 hoch und der sofortige nächste Wert ist 4..5 und dann wieder 45...50-iger Werte! Meine angeschlossenen Schrittmotoren laufen dadurch NICHT flüssig!
Wie kann ich das unterbinden? Evtl Pulldown Widerstand? Wo muss ich den anschließen? Oder doch was ganz anderes? Liegt das nur am Programmcode?
Programmcode (nur HC-SR04):
int trigPin = 46;
int echoPin = 47;
int gLed = 31;
int rLed = 30;
long duration, distance;
int distance_counter;
void setup()
{
Serial.begin(9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(gLed, OUTPUT);
pinMode(rLed, OUTPUT);
}
void loop()
{
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = microsecondsToCentimeters(duration);
Serial.println(distance, DEC);
if(distance <= 10)
{
distance_counter++;
if(distance_counter == 3)
{
digitalWrite(gLed, LOW);
digitalWrite(rLed, HIGH);
}
}
else if(distance > 10) {
digitalWrite(gLed, HIGH);
digitalWrite(rLed, LOW);
distance_counter = 0;
}
//delay(100);
}
long microsecondsToCentimeters(long duration)
{
float c_luft = 0.03435;
return c_luft * duration * 1/2;
}
Danke im voraus für eure Hilfe!
ich habe den Distance Sensor SainSmart HC-SR04 an das Breadboard angeschlossen, mithilfe des Arduino Mega 2560 versuche ich die Werte nun auszulesen. An VCC klemme ich 5V an, an GND natürlich GND, an Echo und Trig gehe ich jeweils auf einen Digitalen Pin.
Mithilfe des Codes lasse ich nun die Entfernung berechnen. Klappt wunderbar! Jedoch nicht, wenn ich dem Sensor einen zu weiten "Spielraum" gebe, also vor dem Fliegenauge NICHTS habe und seine Ultraschallwellen einen weiten Raum lasse -oder- schnelle Bewegungen vor ihm mache. Daraus resultieren verrückte Werte. Zu allererst gibt er vernünftige Werte von ca. 45...50 wieder. Dann auf einmal schießt er die Werte auf 4000 hoch und der sofortige nächste Wert ist 4..5 und dann wieder 45...50-iger Werte! Meine angeschlossenen Schrittmotoren laufen dadurch NICHT flüssig!
Wie kann ich das unterbinden? Evtl Pulldown Widerstand? Wo muss ich den anschließen? Oder doch was ganz anderes? Liegt das nur am Programmcode?
Programmcode (nur HC-SR04):
int trigPin = 46;
int echoPin = 47;
int gLed = 31;
int rLed = 30;
long duration, distance;
int distance_counter;
void setup()
{
Serial.begin(9600);
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(gLed, OUTPUT);
pinMode(rLed, OUTPUT);
}
void loop()
{
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = microsecondsToCentimeters(duration);
Serial.println(distance, DEC);
if(distance <= 10)
{
distance_counter++;
if(distance_counter == 3)
{
digitalWrite(gLed, LOW);
digitalWrite(rLed, HIGH);
}
}
else if(distance > 10) {
digitalWrite(gLed, HIGH);
digitalWrite(rLed, LOW);
distance_counter = 0;
}
//delay(100);
}
long microsecondsToCentimeters(long duration)
{
float c_luft = 0.03435;
return c_luft * duration * 1/2;
}
Danke im voraus für eure Hilfe!