hallo !! Ich habe mir so ein paar ultraschallsensoren gekauft und wollte euch fragen ob ihr ein paar seiten kennt , wo und wie erklärt wird , wie man sich nur aus den sensoren und paar mikrochips ein entfernungsmesser für meinen Roboter Bauen lässt ?!? Danke für eure Tipps XD !!
BITTTE HELFT MIR !!!!!! Noch ein paar angaben : ich benutze atmega8-32 AVR controller ., habe außreichend grundwissen um einiges in elektronik zu kapieren
Jackenkoffer schrieb: > BITTTE HELFT MIR !!!!!! Dazu müsste man wissen, was genau du eigentlich eingekauft hast Ansonsten: Google "ultraschall entfernungsmesser" ist doch nicht so schwer.
Ich habe vor einiger Zeit sowas gebaut um den Füllstand in einem Regenwassertank zu messen. Verwendet habe ich dieses Ultraschallmodul: http://projet.de/produkte-bauteile.html Soweit ich weiss gibt noch einige ähnliche Module, bei denen war es aber nicht möglich das eigentliche Ultraschallmodul wasserdicht abzuschliessen, Das war der Grund für das Projet-Modul. Die Software ist relativ einfach. Das ganze hatte ich mit einem atmega8 zusammengebaut. Die CPU-Frequenz lag bei 8Mhz. Das Ultraschallmodul ist mit dem Datenpin (mittlerer Anschluss) am PB2 angeschlossen. Wenn die Messung fertig ist wird der Abstand in Millimetern zurückgeliefert (mehr oder weniger genau). Hier ist der Code für die Routine die die Messung macht:
1 | volatile uint16_t measure(void){ |
2 | uint16_t restime = 0; |
3 | uint8_t tmp_sreg; |
4 | tmp_sreg = SREG; // Status Register sichern |
5 | cli(); // Interrupts global deaktivieren |
6 | |
7 | DDRC |= (1<<DDC2); // Port auf Ausgang setzen |
8 | PORTC &= ~(1<<PC2); // Port auf Low ziehen |
9 | _delay_us(180); // Pegel kurz auf Low halten |
10 | DDRC &= ~(1<<DDC2); // Port auf Eingang schalten |
11 | _delay_us(850); // Noch etwas warten |
12 | |
13 | restime = 0; |
14 | while(1){ // diese Schleife läuft solange bis der Sensor das Signal wieder auf HIGH-Level zieht |
15 | |
16 | _delay_us(4); |
17 | asm volatile("NOP"); |
18 | asm volatile("NOP"); |
19 | asm volatile("NOP"); |
20 | asm volatile("NOP"); |
21 | asm volatile("NOP"); |
22 | asm volatile("NOP"); |
23 | asm volatile("NOP"); |
24 | asm volatile("NOP"); |
25 | asm volatile("NOP"); |
26 | asm volatile("NOP"); |
27 | asm volatile("NOP"); |
28 | asm volatile("NOP"); |
29 | |
30 | if(!(PINC & (1<<PINC2))){ |
31 | break; |
32 | }
|
33 | if (restime < 65534){ |
34 | restime++; |
35 | }
|
36 | else { |
37 | break; |
38 | }
|
39 | }
|
40 | SREG = tmp_sreg; |
41 | return restime; |
42 | }
|
Das ganze blockiert natürlich während der Messung die CPU. Das lässt sich sicher alles noch optimieren. Der Code entstand während ich mich erstmalig mit dem Modul beschäftigt habe. Ich hoffe es hilft bei einem ersten Einstieg weiter. Viel Spass damit.
Die Kernkomponenten für die Signalaufbereitung von US-Entfernungsmessern gibt es fertig in Form des PW0268
Es gibt auch komplette Module mit TTL-Ausgang (UART/I2C) in Form des SRF02. Erhältlich bei www.lipoly.de. Für den Preis ist selberbauen nicht nötig.
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.