Wie bekomme ich einen seriellen Messwert von einem Ultraschall-Entfernungsmesser auf einem Raspberry 3 B+?

Ich versuche, einen Maxbotix-Ultraschall-Entfernungsmesser (LV-EZ0) mit einem Raspberry Pi 3 B+ einzurichten.

Ich habe alle Tipps ausprobiert, die ich finden konnte:

raspi-config

Deaktivieren Sie die serielle Schnittstelle für die Shell, lassen Sie sie jedoch für die Port-Hardware aktiviert

/boot/config.txt

Ich habe dafür gesorgt, dass diese Zeilen vorhanden sind, oder ich habe sie selbst hinzugefügt:

enable_uart=1
dtoverlay=disable-bt (also tried dtoverlay=pi3-miniuart-bt)

# services
Stopped / Disabled bluetooth, serial-getty@ttyAMA0

Ich habe es auch versucht: sudo cat /dev/serial0 > catReading.txtin einem ssh-Fenster und sudo echo -en "test\n" > /dev/serial0in einem anderen, aber catReading.txt bleibt leer, weil ich ein "Permission denied" bekomme, um etwas auf serial0 zu schreiben.

Befehlsausgaben

sudo dmesg | grep tty => [ 0.000901] Konsole [tty1] aktiviert [ 1.023127] 3f201000.serial: ttyAMA0 bei MMIO 0x3f201000 (irq = 81, base_baud = 0) ist ein PL011 rev2

ls -l /dev/* =>

lrwxrwxrwx  1 root root           7 Jan 31 16:57 serial0 -> ttyAMA0
lrwxrwxrwx  1 root root           5 Jan 31 16:57 serial1 -> ttyS0

cat /boot/cmdline.txt =>
console=tty1 root=/dev/mmcblk0p7 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait

Verdrahtung

  • Sensor VCC an 5V Pin auf Raspi
  • Sensor GND zu GND am Raspi
  • Sensor TX to TX on raspi (Ich habe versucht, es auch an Raspis RX anzuschließen, weil ich einfach nicht weiß, was ich hier mache 😁. Wenn ich das getan habe, kann ich ein paar Bytes lesen, keines davon beginnt mit 'R' einmal in utf-8 dekodiert, also wahrscheinlich keine vom Sensor gesendeten Daten).

Ich habe nach oben geschaut, um zu sehen, ob es eine Möglichkeit gibt, einen PWM-Eingang auf dem Raspi 3 zu lesen, aber es ist anscheinend nicht möglich, es sei denn, ich füge zusätzliche Hardware hinzu.

Irgendwelche Vorschläge von dort?

Willkommen bei EE.SE, Garys. Ich habe versucht, den Abschlag in Ihrem Beitrag so gut wie möglich zu korrigieren. Können Sie überprüfen? Es gibt eine Hilfe-Schaltfläche in der Editor-Symbolleiste, die den größten Teil der allgemeinen Syntax enthält.
Danke, dass Sie den Abschlag korrigiert haben, es ist alles gut, nichts hinzuzufügen.

Antworten (1)

Zunächst einmal ist der TX-Pin des Sensors ein Sendeausgang, daher muss er mit dem RasPi RX-Pin verbunden werden, der ein Empfangseingang ist - Das Verbinden von TX mit TX ist normalerweise falsch. Aber in diesem Fall ist das nicht so einfach, also tun Sie das jetzt noch nicht.

Die TX-Ausgangsspannungspegel des Sensors sind die gleichen wie die Versorgungsspannung, sodass 5-V-Logikpegel verwendet werden. Der RasPi-RX-Pin toleriert keine 5-V-Logikpegel, er muss 3,3-V-Logikpegel verwenden, daher ist eine gewisse Konvertierung erforderlich. Glücklicherweise ist der Ausgang möglicherweise so schwach, dass der RasPi RX-Pin ihn tolerieren kann, aber das ist definitiv nicht gut, um 5-V-Signale an Dinge zu treiben, die 3,3-V-Signale erwarten.

Schließlich ist der TX-Ausgang des Sensors tatsächlich direkt mit RS232-Spannungspegelempfängern kompatibel, was bedeutet, dass er invertiert werden muss, bevor er an einen UART ohne RS232-Spannungsempfänger wie RasPi angeschlossen wird. Aus diesem Grund erhalten Sie keine korrekten Zeichen.

Lösungen bestehen darin, einen USB-RS232-Adapter an RasPi anzuschließen oder einen Wechselrichter mit Spannungspegelumwandlung dazwischen zu schalten. Zum Beispiel ist ein 74LVC04 ein Inverter, er kann mit 3,3 V Versorgungsspannung verwendet werden, um den RasPi RX-Eingang mit 3,3 V Logikpegel anzusteuern, und er kann 5 V Logikpegel an Eingängen tolerieren.

Dies sind jedoch nicht die einzigen Lösungen. Der Sensor kann mit einer Versorgungsspannung von 3,3 V verwendet werden, sodass Sie den Sensor und den Wechselrichter sowohl bei 3,3 V verwenden können, sodass jeder Wechselrichter verwendet werden kann, der mit 3,3 V betrieben wird, z. B. 74HC04. Sie könnten auch eine RS232-auf-3,3-V-TTL/CMOS-Pegel-Empfängerplatine erhalten, die mit 3,3 V läuft, um die Inversion und Pegelumwandlung durchzuführen.

Sehr klare Erklärung zur RS232-Spannung, ich hatte nicht bemerkt, dass der Sensor ein Wechselstromsignal über TX ausgibt, ganz zu schweigen von der logischen Differenz von 3 V gegenüber 5 V. Danke!
@garys Es gibt keinen Wechselstrom aus. Invertieren bedeutet, den 5-V-Pegel auf 0 V und den 0-V-Pegel auf 5 V zu tauschen, um den Sensorausgang direkt mit Standard-RS232-Empfängern kompatibel zu machen (die das Signal invertieren).
Ok, ein weiteres Missverständnis meinerseits, nochmals vielen Dank für die Klarstellung.