Forum: Compiler & IDEs SRF05 ist mein Quellcode richtig


von Andreas H. (andy78)


Lesenswert?

Hallo

Habe einen SRF05 in ein Edelstahl rohr verpflanzt dieses soll den 
Füllstand eines Tanks Messen.

Mein Problem er zeigt ca 2 zentimeter zu viel an.

der Abstand vom Sensor bis zum Grund ist 29cm er zeigt mir 32cm an

Atmega 48 mit 16Mhz.

#define trigger()    DDRD |= ( 1 << 0);
#define trigger_high()  PORTD|=(1<<0); //HEIGH TRIGGER
#define trigger_low()  PORTD&=~(1<<0); //LOW TRIGGER



while(1)
{
  wert=abstand();
  _delay_ms(50);
  wert+=abstand();
  _delay_ms(50);
  wert+=abstand();
  _delay_ms(50);
  wert+=abstand();
  _delay_ms(50);
  wert+=abstand();
  _delay_ms(50);
  wert+=abstand();
  wert/=6;
  if(wert>30000)wert=0;

wert=(((wert/2))/5.8); //in mm

}


void init_timer(void)
{
TCCR1A =0x00;
TCCR1B =(1<<CS11);
}


unsigned int abstand(void)
{
   trigger_high();
   _delay_us(20);
   trigger_low();
   while(!(PIND & (1<<1)));
   TCNT1 = 0;                            //Counter Register auf 0 setzen
   while(PIND & (1<<1));                 //warten bis Signalende
   ergebnis=TCNT1;                       //Signallänge auslesen
   return  ergebnis;
}


ist das so IO.

Stimmen die Timer????

Danke

Gruß
Andy

von Reset (Gast)


Lesenswert?

> wert=(((wert/2))/5.8); //in mm

float wert; mit -lm gelinkt

oder

int wert; ohne -lm gelinkt?
=> Ausdruck ist identisch zu: wert=(((wert/2))/5)

Vermute #2, da Ergebnis exakt Faktor 5,8/5 zu groß ist.

von Reset (Gast)


Lesenswert?

Sorry, Kommando zurück. Habe mich verrechnet. Ist nicht exakt 5,8/5.

von Andreas H. (andy78)


Lesenswert?

Hallo

Was heißt das nun???

Gruß

Andy

von Reset (Gast)


Lesenswert?

Alle anderen sind klüger als ich und äussern keine vorschnelle 
Vermutungen auf deine angegebenen Daten.

Wenn die drei cm (10% der Messung) wichtig sind, würde ich an deiner 
Stelle versuchen, die Problematik genauer zu erklären.

von Reset (Gast)


Angehängte Dateien:

Lesenswert?

Ich habe jetzt das "Datenblatt" für den SRF05 gelesen 
(http://www.robot-electronics.co.uk/htm/srf05tech.htm). Leider steht 
nicht viel zur Genauigkeit dabei (Q. What is the accuracy of the 
ranging?
A.  We quote 3-4cm.).

Und den Code soweit ergänzt, so dass man ihn simulieren kann (16 MHz, 
-Os). Ich finde aber keine Softwareprobleme.

Bleiben also Hardwareprobleme. Man müsste ein Oszilloskop an den PD1-Pin 
hängen und nachmessen, wie lange der Echopuls wirklich ist.

Hast du schon geprüft, ob Echos von der Wand des "Edelstahlrohrs" das 
Ergebnis verfälschen? Die Sonarkeule ist beim SRF05 ja nicht i der FAQ 
angegeben, bei anderen Sonaren kann die schon breit sein.

Hast du schon geprüft, ob die Fehlmessung nur beim Echo von der 
Flüssigkeitsoberfläche im Tank auftritt oder auch beim Echo von anderen 
Flächen?

von df1as (Gast)


Lesenswert?

Also ... es wird doch wohl die Echozeit gemessen. Für die Entfernung 
muss die Schallgeschwindigkeit verrechnet werden und die ist alles 
andere als konstant (Dichte, hervorgerufen durch Luftdruck, Temperatur, 
Schwebstoffe).

http://de.wikipedia.org/wiki/Schallgeschwindigkeit#Temperaturabh.C3.A4ngigkeit_in_Luft

Wir haben derzeit niedrige Außentemperaturen, die Schallgeschwindigkeit 
ist kleiner, darum werden größere Zeiten gemessen.

Oder hat das SRF05 dafür eine Korrekturfunktion? In der Beschreibung 
finde ich dazu nichts. Temperatur allein wäre schon ein guter Ansatz.

Ansonsten würde ich in solchen Fällen immer auf corriger la fortune 
setzen. Solange die Messergebnisse wenigstens konstant sind, Nullpunkt 
und Steigung ermitteln (zwei Messwerte möglichst weit auseinander), 
Temperatur berücksichtigen und dann passt die Sache auch. Vermutlich 
passt es jetzt schon, wenn die niedrigere Temperatur berücksichtigt 
würde.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.