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
> 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.
Sorry, Kommando zurück. Habe mich verrechnet. Ist nicht exakt 5,8/5.
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.
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?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.