Ultraschall entfernungsmesser BAUEN

Gast #2168220
Lesenswert?
• ▲
▼
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 !!
Gast #2168316
Lesenswert?
• ▲
▼
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.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.