Ent­fer­nun­gen auf dem LCD anzei­gen

Lese­zeit: 5 Minu­ten
Navi­ga­ti­on

Ein Ultra­schall­sen­sor misst die Ent­fer­nung zu einem Objekt und zeigt die Ent­fer­nung auf einem LCD an.

LCD

So sieht es aus:

Der Ultra­schall­sen­sor arbei­tet nach einem ein­fa­chen Prin­zip:

„Der Ultra­schall­sen­sor strahlt zyklisch einen kur­zen, hoch­fre­quen­ten Schall­im­puls aus. Die­ser pflanzt sich mit Schall­ge­schwin­dig­keit in der Luft fort.
Trifft er auf ein Objekt, wird er dort reflek­tiert und gelangt als Echo zurück zum Ultra­schall­sen­sor. Aus der Zeit­span­ne zwi­schen dem Aus­sen­den des Schall­im­pul­ses und dem Emp­fang des Echo­si­gnals berech­net der Ultra­schall­sen­sor intern die Ent­fer­nung zum Objekt.“

Quel­le: ➨https://​www​.micro​so​nic​.de/​d​e​/​s​e​r​v​i​c​e​/​u​l​t​r​a​s​c​h​a​l​l​s​e​n​s​o​r​e​n​/​p​r​i​n​z​i​p​.​htm (abge­ru­fen am 12.6.20)

Der Sen­der schickt das Signal und es wird vom Echo emp­fan­gen.
Die Geschwin­dig­keit des Schalls in der Luft beträgt 343,2 m/s.
Der Ardui­no bestimmt die Zeit in Mil­li­se­kun­den (1 Sekun­de = 1000 Mil­li­se­kun­den), des­halb muss der Wert in cm pro Mil­li­se­kun­de berech­net wer­den:

Umrech­nung in cm343,2 m • 100 = 34.320 cm
Stre­cke pro Sekun­de343.000 : 1.000 = 34,32 cm
Stre­cke pro Mil­li­se­kun­de: 34,3 : 1.000 = 0,03432 cm

Der Ardui­no bie­tet nicht nur die Text­aus­ga­be mit ➨Serial.print(), er kann auch Ereig­nis­se oder Mess­wer­te mit einem Plot­ter auf­zeich­nen.

Den Seri­el­len Plot­ter fin­dest du unter Werk­zeu­ge → Seri­el­ler Plot­ter.

Damit der Ultra­schall­sen­sor ord­nungs­ge­mäß arbei­ten kann, musst du ihn so ein­ste­cken, dass Sen­der und Emp­fän­ger nach vorn zei­gen, damit das Signal unge­hin­dert gesen­det und emp­fan­gen wer­den kann.

Benö­tig­te Bau­tei­le:

  • Ultra­schall­sen­sor HC-SR04
  • LCD-Display I2C 1602
  • Lei­tungs­dräh­te

Baue die Schal­tung auf.
(Fah­re mit der Maus über das Bild, um die Bezeich­nun­gen der Bau­tei­le zu sehen)

Benö­tig­te Biblio­thek:
Sketch → Biblio­thek ein­bin­den → Biblio­the­ken ver­wal­ten

Das Bei­spiel­pro­gramm zeigt die Ent­fer­nung im Seri­el­len Monitor/Seriellen Plot­ter an. Beach­te die Kom­men­ta­re.

// statt 
// int SENDEN = 6; 
// int ECHO =  7; 
# define SENDEN 6 
# define ECHO 7 

// Variable für Zeit und Entfernung initialisieren 
long Zeit;
long Entfernung;

void setup() 
{ 
  Serial.begin(9600); 
  pinMode(SENDEN, OUTPUT); 
  pinMode(ECHO, INPUT); 
} 

void loop() 
{  
  // Sender kurz ausschalten um Störungen des Signals zu vermeiden   
  digitalWrite(SENDEN, LOW);
  delay(10); 

  // Signal für 10 Mikrosekunden senden 
  digitalWrite(SENDEN, HIGH); 
  delayMicroseconds(10);

  // Sender ausschalten
  digitalWrite(SENDEN, LOW); 

  // pulseIn → Zeit messen, bis das Signal zurückkommt 
  Zeit = pulseIn(ECHO, HIGH);

  /*
    Entfernung in cm berechnen   
    Zeit/2 → nur eine Strecke soll berechnet werden      
    Umrechnung in cm  
  */ 
  Entfernung = (Zeit / 2) * 0.03432;   

  // 400 cm ist die maximal messbare Entfernung 
  if (Entfernung < 400) 
  {  
    // Ausgabe auf dem Seriellen Monitor 
    Serial.print ("Entfernung: ");     
    Serial.print(Entfernung); 
    Serial.println(" cm"); 
    delay(1000);  
  }
}

Ergän­ze das Pro­gramm für die Aus­ga­be auf dem LCD:

Im Kopf des Pro­gramms wird das LCD defi­niert:

include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);

Im setup-Teil wird das LCD gestar­tet ...

  lcd.init();
  lcd.backlight();

... und der loop-Teil wird durch die Aus­ga­be auf dem LCD ergänzt.

    // Ausgabe auf dem LCD  
    lcd.setCursor(0, 0);
    lcd.print("Entfernung messen");
    lcd.setCursor(0, 1);
    lcd.print("--------------------");
    lcd.setCursor(0, 2);
    lcd.print("Entfernung: ");
    lcd.print(Entfernung);
    lcd.print(" cm    ");

Für den Ent­fer­nungs­mes­ser ist auch eine Biblio­thek ver­füg­bar:

# include <NewPing.h>  
# define SENDEN 6  
# define ECHO 7  
# define MAX_ENTFERNUNG 200  
NewPing sonar(SENDEN, ECHO, MAX_ENTFERNUNG);  

void setup()  
{ 
  Serial.begin(9600);
}

void loop()   
{  
  delay(50);  
  Serial.print("Entfernung: "); 
  Serial.print(sonar.ping_cm());  
  Serial.println("cm"); 
  delay(1000);
}

Abge­wan­del­tes Bei­spiel aus: ➨https://​play​ground​.ardui​no​.cc/​C​o​d​e​/​N​e​w​P​ing (exter­ner Link)



Ver­wand­te Auf­ga­ben:


Letzte Aktualisierung: 23. Aug 2020 @ 22:48