SRF05 ist mein Quellcode richtig

#2043881
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
Gast #2044317
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.
Gast #2045740
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.
Gast #2045925
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?
Angehängte Dateien:
Gast #2046075
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren