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.