DYP-ME007TX Ultraschall Entfernungsmesser

Im Sinne der „Mein Paket…“ Artikelreihe auf Arduino-Hannover.de kommt hier mein Posting zum DYP-ME007TX. Das gute Stück ist die dritte Lieferung aus einer ganzen Reihe von versandkostenfreien eBay-China-Bestellungen. Verbaut wird, was kommt :)

Mein Paket (2) DYP-ME007TX

Was haben wir denn da also? Einen drei-Pin Ultraschall Entfernungsmesser, 5V Speisespannung, 3cm bis 4m Reichweite laut Datenblatt. Aber Moment mal – nur drei Pins? Die Mehrzahl der Ultraschall Sensoren hat neben Speisespannung und Masse zwei weitere Pins, einen um eine Abstandsmessung zu triggern und einen weiteren, um nach dem Trigerimpuls die Signallaufzeit zu messen und diese dann umrechnen zu können.

DYP-ME007TX am RoboterarmDer kleine Zusatz „TX“ im Namen der Sensors liefert den entscheidenden Hinweis: Dieses Ding spricht seriell. Typischerweise mit 9600 Baud, 8N1 quatscht es fleißig und ohne Unterbrechung die Schnittstelle zu. Gesendet werden immer vier Byte, zunächst ein #FF als Startbyte, dann Highbyte und Lowbyte des gemessenen Abstandes. Als viertes gibt’s dann noch eine Checksumme aus Low- und Highbyte (ohne Übertrag) und dann geht es wieder von vorne los.

Als alter Optimist habe ich den TX Anschluss des Sensors einfach auf den Pin 0 (RX) der Arduino Hardware Schnittstelle geklemmt und dann eine Weile geflucht. Ich habe nicht nachgemessen, vermute aber, dass das Ausgangssignal am TX Pin des Sensors nicht ausreicht, um den über 1kOhm ebenfalls an Pin2 des Mikrocontrollers angeschlossenen USB-to-Serial Converter zu „übersprechen“. Mit dem dadurch entstehenden Signalgemisch kam ich zu keinem Ergebnis.

Also einen SoftwareSerial Port definiert – und siehe da: klappt sofort. Das mir bei Verwendung der SoftwareSerial Library die Servos „weggeflogen“ sind, weil Servo.h und SoftwareSerial.h sich nicht vertragen, sei hier nur am Rande erwähnt.

Zur Ausgabe des Messwertes verwende ich nicht Serial (da sollte ja der Sensor dran) sondern das 16*2 LCD aus dem ersten Paket :)

So sieht der Code aus:

#include <LiquidCrystal.h>
#include <SoftwareSerial.h>
 
//TX Pin3 wird vom Sensor nicht wirklich genutzt
SoftwareSerial mySerial(5, 3);

long millimeter = 0;
byte myBuffer[2] = {0};
byte myByte=0;
 
LiquidCrystal lcd(12, 13, 8, 7, 4, 2);

void setup() {
  lcd.begin(16, 2);
  lcd.setCursor(0, 1);
  lcd.print("Dist");
  mySerial.begin(9600);
}

void loop() {
  lcd.setCursor(5, 1);
  // DIST  
  if (mySerial.available()>3) //Wenn mindestens 4 Zeichen (komplettes Telegramm) im Puffer
  {
    myByte=mySerial.read();
    if (myByte==0xFF) //Start-Byte erkennen
    {             
      myBuffer[0]= mySerial.read(); //HighByte einlesen
      myBuffer[1]= mySerial.read(); //LowByte einlesen
      mySerial.flush();             //Checksumme und ggf. weitere aufgelaufene Messungen verwerfen
    }
  }

  millimeter = myBuffer[0]<<8 | myBuffer[1]; //HighByte und LowByte verodern
  lcd.print(millimeter);
  lcd.print("            ");
}

 

Ein Gedanke zu „DYP-ME007TX Ultraschall Entfernungsmesser

  1. Hi,

    wie hast du den DYP-ME007TX denn nun angeschlossen?
    Hängt der nun am PIN3 oder am PIN2 oder gar an PIN1?

    Wurde leider nicht ganz schlau aus deinen Ausführungen.

    Und wie hast du das LCD-Display rangehängt?

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.