Hallo zusammen, bis jetzt konnte ich die entfernung ganz genau zwischen meinem sensor und jedem objekt messen und die messwerte in einer LCD darstellen. schaltung: my Avr board(atmega8) +2 SRF02 sensoren meine frage jetzt: ich will nur die enfernung zwischen den sensoren messen? ich habe so eine idee und zwar eine srf02 als sender und ein zweite als empfänger. srf02-1 sendet ein thon(signal) mit dem befehl 0x5C und der srf02-2 empfängt es aber in microsekunde( befehl 0x58) und dann habe ich die zeit und dei shall-geschwindigkeit, daraus kann man die entfernung berechnen. x=v.t ich habe es so programmiert aber leider ich mache irgendwas falsch ich bekomme nur waiting....wartend auf den wert.. ich habe die slaveId der sensoren geändert:sender 0xE2/ empfänger 0xF2 mein code ich benutze lib von fleury) ……… #define USaddrS 0xE2 //Sender-adresse #define USaddrR 0xF2 //Empfänger-adresse //sender i2cStart(USaddrS); i2cWrite(USaddrS); i2cWrite(0); i2cWrite(0x5C);//ein thon senden nch datenblatt i2cStop(); //empfänger i2cStart(USaddrR); i2cWrite(USaddrR); i2cWrite(0); i2cWrite(0x58);//zeit in mics i2cStop(); i2cStart(USaddrR); i2cWrite(USaddrR); distance2=i2cReadNak(); warten bis die messung fertig ist while( i2cReadNak()==255) { lcdClear(); lcdGoto(1,1); lcdWriteText("waiting..."); } i2cStop(); //empfänger i2cStart(USaddrR); i2cWrite(USaddrR); distance1=i2cReadAck(); distance2=i2cReadNak(); lcdClear(); lcdGoto(1,1); lcdWriteText(toString(distance1)); lcdGoto(2,0); lcdWriteText(toString(distance2)); ………. vielen dank im voraus. sorry für doppel..
hallo ich bin es wieder ich habe hier ein paar fehler beseitigt: jetzt blinken die 2 sensoren aber ich bekomme nur 0. #define USaddrS 0xE2 //Sender-adresse #define USaddrRR 0xF2+1 // Empfänger-adresse(nur lesemodus ist aktiv) #define USaddrRW 0xF2 // schreib-modus ....... ........ while(1){ //sender i2cStart(USaddrS); i2cWrite(0); i2cWrite(0x5C);//ein thon senden i2cStop(); //emfänger i2cStart(USaddrRW); i2cWrite(0); i2cWrite(0x58); i2cStop(); wait(65); i2cStart(USaddrRW); i2cWrite(2); i2cStop(); i2cStart(USaddrRR); distance1=i2cReadAck(); distance2=i2cReadNak(); i2cStop(); lcdClear(); lcdGoto(1,1); lcdWriteText(toString(distance1)); lcdGoto(2,0); lcdWriteText(toString(distance2)); wait(1000); } return 0; } ich hoffe dass jemand mir helfen kann.. danke im voraus
Hi Ich hoffe, das ich das richtige Teil im Kopf habe. Aber wie soll dein Empfänger wissen, wann der Sender das Signal losgeschickt hat? MfG Spess
spess53 schrieb: spess53 schrieb: > Ich hoffe, das ich das richtige Teil im Kopf habe. Aber wie soll dein > Empfänger wissen, wann der Sender das Signal losgeschickt hat? hallo spess53, danke dir erstmal füe deine antwort. ja nach der erzeugung des signals teile ich dem empfänger mit: //emfänger i2cStart(USaddrRW); i2cWrite(0); i2cWrite(0x58); i2cStop(); sovoiel ich weiss der befehl 0x58 dient zur: timer-start des sensors und mesunngen in microsec. jetzt eigentlich bekomme ich werten aber nur in bestimmten positionen von den sensoren. mfg.
Beide Sensoren sind an den gleichen uC angeschlossen ? Es gibt also nur 1 Zeitbasis ? Dann kann man sowas lösen. Ich habe hier eine Lösung fertig, die einen "Fuchs" ortet, der ein Funksignal absetzt und ein 3ms-Ultraschallsignal, daß der Empfänger dann ortet (inkl. Richtung).
hallo ja die beiden sensoren sind an den gleichen uC angeschlossen mit verschieden slaveid E2 und F2. ja die zeit wird nur von dem emfänger gezählt(timer) bis er das echo bekommt. ist deine lösung hier zu finden wäre ich dir sehr dankbar. bei mir die werte sind ganz komisch. ist mein programmteil gesund?:) noch eine kleine frage bei der entfernung man liest die highbyte und die lowbyte und durch die entfernung=H*256+L rechnet man den abstand, wie ist es mit der zeit? man liest aus register 2 und 3 und dann? mfg.
Nenene... so einfach kannst Du meine Lösung nicht nutzen. Ich arbeite auch nicht mit den Modulen, da sie mir nicht helfen. Wenn Du erst den Sender startest und dann den Empfänger - kann das US-Signal ja schon durch sein, bevor der Empfänger startet. Starte doch erst den Empfänger, sende dann ein Signal und sieh nach, wann das Signal ankommt. Von der Zeit mußt Du dann eine Konstante abziehen, die sich aus der Verarbeitungszeit der Sensoren ergibt. Du schreibst aber wieder von dem Empfang eines Echos. Das verstehe ich nicht ganz, weil Du die Entfernung der 2 Sensoren messen willst.
hallo Bernd danke dir für die antwort, ahso ok. ja obwohl die befehl-ausführung vlt. nicht mal eine ms. kostet, scheint es besser zu funktionieren.wenigstens bekomme ich mehr messwerten(bei mehr positionen meinte ich). ich habe den befehl 0x57 für "cm" anstatt 0x58, die werten, die ich bekomme stimmen leider nicht(die abweichung ist zu gross). zb wenn die sensoren einandergegenüber(20cm) sind, bekome ich 141cm >Du schreibst aber wieder von dem Empfang eines Echos. Das verstehe ich > nicht ganz, weil Du die Entfernung der 2 Sensoren messen willst. sorry mit Echo meinte ich wenn das vom sender gesendete signal an einem objekt reflektiert und vom emfänger angefangen ist. os sieht der code aus jetzt: while(1){ //empfänger i2cStart(USaddrRW); i2cWrite(0); i2cWrite(0x57); // Empfangen in Cm i2cStop(); //sender i2cStart(USaddrS); i2cWrite(0); i2cWrite(0x5C);//ein ton senden i2cStop(); wait(100); i2cStart(USaddrRW); i2cWrite(2); i2cStop(); i2cStart(USaddrRR); distance1=i2cReadAck(); distance2=i2cReadNak(); i2cStop(); distance= (distance1*256) + distance2; lcdClear(); lcdGoto(1,1); lcdWriteText("mesure"); lcdGoto(2,0); lcdWriteText(toString(distance)); wait(1000); }
Wenn Du bei 20cm Abstand ganze 141cm mißt, dann zieh doch einfach immer 121cm (ca. 3,5ms) vom Ergebnis ab. Ach ja, Du sitzt sicher in einem Haus mit Wänden. Evtl. mißt Du auch Reflektionen.
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.