PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Ultraschall Sensor



secsempro
04.07.2012, 12:50
Hallo Community =)

nen paar freunde und ich sind gerade dabei einen Roboter zu konstruieren. Dieser soll als Hinderniserkennung einen Ultraschall Sensor haben. Dieser Roboter wird durch ein ATMega32 gesteuert.

Ich habe für den Ultraschall-Sensor jetzt schon ein paar Sensoren herausgesucht:

http://www.conrad.de/ce/de/product/114456/Kemo-Ultraschall-Abstandswarner-Bausatz-9-12-VDC-Erfassungsweite-10-80-cm/SHOP_AREA_17362&promotionareaSearchDetail=005

http://www.pollin.de/shop/dt/NTg5OTE0OTk-/Bausaetze_Module/Bausaetze/Ultraschall_Abstandswarner_Bausatz.html

Oder den SR05:

http://www.rn-wissen.de/index.php/Sensorarten
__________________________________________________ __________________________________________________ ___


Dazu habe ich jetzt noch ein paar Fragen:

Was könnt ihr empfehlen?
Ist es besser einen analogen oder digitalen Output für den US zu nehmen?
Lassen sich die Bausätze leicht verändern zur Hinderniserkennung?

Freue mich über eure Antworten :)

tucow
07.07.2012, 21:51
Hallo secsempro,

ich würde euch zum SRF05 raten, besondern für Anfänger ist er gut geeignet. Ihr sendet einen trigger Impuls über 10µs und wartet dann auf das Signal, die Länge des signals ist proportional zur Entfernung, je nachdem ob Ihr das Ergebnis in Inch oder cm wollt gibt es noch einen Divisor durch welchen Ihr Euer ergebnis teilen müsst.
PulsDauerInUs/58=cm
PulsDauerInUs/148=Inch

Um bei den anderen, von Dir verlinkten, Sensoren wird es schwieriger. Laut Beschreibung liefern sie nur ein Signal an/aus, an eine LED wenn ein Hindernis im Bereich von 10-80cm auftaucht. die genaue entfernung habt Ihr damit noch nicht.


Gruß
Andreas

secsempro
31.07.2012, 10:24
Danke tucow für deine Antwort =)
Wir haben uns jetzt den SRF05 bestellt und sehen dann mal wie wir vorankommen :)

Gruß
secsempro

secsempro
02.08.2012, 13:42
Bei der Programmierung habe ich diesen Source Code gefunden:


uint16_t getAbstand(uint8_t sensor) { //Ultrschallsensoren abfragen
uint8_t tmp_sreg;
tmp_sreg = SREG;
cli();
uint16_t ergebnis;

DDRC |= sensor; //Ausgang high
PORTC |= sensor;
_delay_us(20);
PORTC &= ~sensor; //Pin auf Eingang setzen
DDRC &= ~sensor;
while(!(PINC & sensor)); //auf Sensorantwort warten
TCNT1 = 0; //Counter Register auf 0 setzen
while(PINC & sensor); //warten bis Signalende

ergebnis=TCNT1; //Signallänge auslesen
ergebnis=ergebnis*20; //Abstand berechnen
SREG=tmp_sreg;
return (uint16_t) ergebnis/29;
}


Dazu habe ich mir Gedanken gemacht ob der so richtig ist weil hier anstatt durch 58 durch 29 geteilt wird? :/

der code ist von robo junior und der meinte auch dass ein Prescaler von 64 benutzt wird und das ergebnis dann in mm ist, in wie fern beeinflusst denn die Prescaler Angabe das Ergebnis?