[GO] [EV3 MicroPython] Entfernungsmessung mit DIST-ToF-Sensor (& I2C-Kommunikation)

DIST-ToF

Von mindsensors, das LEGOs Produkte von Drittanbietern herstellt und vertreibt, ToF-Abstandssensor (DIST-ToF) / ev3-and-nxt / 210-hochpräziser Flugzeit-Entfernungssensor-für-nxt-oder-ev3)) wird zum Verkauf angeboten.

ToF ist eine Abkürzung für "Time of Flight" und eine Technologie, die die Entfernung von der Zeit bis zum (Infrarot-) Licht reflektiert [^ 1]. Die ToF-Technologie hat es ermöglicht, die Position eines Objekts genau und genau zu messen.

Die meisten von Mindsensoren verkauften Sensoren werden von ev3dev unterstützt, der Basis von EV3 MicroPython [^ 2]. Und die von ev3dev unterstützten Sensoren können problemlos von der Klasse "Ev3devSensor" des Moduls "iodevices" von EV3MicoroPythoh (pybricks2.0) gesteuert werden.

Dieser DIST-ToF-Sensor unterstützt ev3dev jedoch nicht (Befehl ist nicht implementiert). Dieser Sensor kann jedoch durch I2C-Kommunikation gesteuert werden.

Daher werde ich dieses Mal vorstellen, wie die I2C-Kommunikation direkt mit EV3 MicroPython gehandhabt wird. Anschließend können wir den DIST-ToF-Sensor mit Ev3 MicroPython handhaben.

I2C-Kommunikation

I2C ist ein serieller Bus (eine Art serielle Kommunikation), der von Phillips (derzeit NXP) entwickelt wurde und zwei Leitungen verwendet, eine serielle Datenleitung (SDA) und eine serielle Taktleitung (SCL), um zwischen Geräten zu kommunizieren. Es ist eine Methode zu tun. Da es mit einer kleinen Anzahl mit mehreren Geräten kommunizieren kann, wird es in eingebetteten Geräten und Mobiltelefonen verwendet.

Der Grund, warum die Kommunikation zwischen "mehreren Geräten" mit zwei Leitungen möglich ist, besteht darin, dass die Adresse für jedes Gerät festgelegt wird [^ 4].

Darüber hinaus verwendet die I2C-Kommunikation die Master-Slave-Methode [^ 3]. In diesem Fall ist EV3 der Master und DIST-ToF der Slave.

In EV3MicroPython (Pybricks2.0) wird die Klasse "I2CDevice" im Modul "iodevices" als Klasse für die I2C-Kommunikation bereitgestellt. Klicken Sie hier, um die Spezifikationen der Klasse "I2CDevice" anzuzeigen (Datei: ///Users/asahi/.vscode/extensions/lego-education.ev3-micropython-2.0.0/resources/docs/iodevices.html#i2c-device) )Bitte beziehen Sie sich auf.

I2C-Kommunikation mit EV3MicoPython

Der folgende Quellcode ist ein Implementierungsbeispiel für ein Programm, das den Sensorwert von DIST-TOF mithilfe der Klasse "I2CDevice" in EV3MicroPython erfasst. Der erfasste Wert wird auf dem LCD-Bildschirm von EV3 angezeigt. Das implementierte Programm basiert auf dem für RobotC veröffentlichten Code von GitHub.

ms-dist-tof.py


#!/usr/bin/env pybricks-micropython
from pybricks.hubs import EV3Brick
from pybricks.parameters import Port
from pybricks.tools import wait
from pybricks.media.ev3dev import Font
from pybricks.iodevices import I2CDevice

# Write your program here
ev3 = EV3Brick()
ev3.speaker.beep()
font = Font(size=20)

dist = I2CDevice(Port.S4, 0x02 >> 1)

def get_ms_dist(dist):
    data = dist.read(0x42, length=2)
    return (0xFF & data[0]) + ((0xFF & data[1]) << 8)

ev3.screen.set_font(font)
while True:
    ev3.screen.clear()
    ev3.screen.print("DIST :", get_ms_dist(dist))
    wait(100)

Erstellen Sie zunächst eine dist-Instanz (Klassenobjekt) aus der I2CDevice-Klasse (Zeile 14). Geben Sie im Argument des Konstruktors den Port ein, um den Sensor (Port-Klasse) und die Adresse des Sensors (Hexarzahl) zu verbinden.

Hier ist die (Standard-) Adresse von DIST-ToF "0x02". Stellen Sie jedoch sicher, dass Sie die um 1 Bit nach rechts verschobene Adresse eingeben [^ 4].

Die Funktion get_ms_dist (Zeilen 16-18) führt die folgende Verarbeitung durch.

  1. Übergeben Sie ein Klassenobjekt der Klasse "I2CDevice" als Argument (unter der Annahme einer "dist" -Instanz).
  2. Rufen Sie die Funktion "Lesen" der Klasse "I2CDevice" auf, um den Sensorwert zu erhalten.
  1. Fügen Sie 2 Datenbytes hinzu, um Daten zu erstellen. Dies wird als Entfernungsdaten zurückgegeben.

Es scheint ein intelligenteres Programm zu sein, eine Klasse für DIST-ToF vorzubereiten und die Funktion "get_dist" in der Klasse zu implementieren.

Wie oben erwähnt, verwendet DIST-ToF I2C als Kommunikationsmethode. Durch die Kombination mit anderen Sensoren mit unterschiedlichen Adressen können mehrere Sensoren mit einem EV3-Port gesteuert werden.

[^ 1]: In letzter Zeit ist es möglich geworden, eine Schaltung einzubauen, die eine solche Messung auf Elementebene des Sensors durchführt, und sie wird häufig als ToF bezeichnet, einschließlich dieser.

[^ 2]: Für Sensoren, die von ev3dev unterstützt werden (einschließlich der von Dritten hergestellten), hier Siehe /sensors.html).

[^ 3]: Master-Slave-Methode: Wenn mehrere Geräte zusammenarbeiten, eine "Master" -Maschine, die mehrere Geräte steuert und betreibt, und eine "Slave" -Maschine, die unter der einseitigen Steuerung der Master-Maschine arbeitet. Es ist eine Methode zum Teilen von Rollen zwischen Computern (obwohl dieser Name kürzlich ein Problem war ...).

[^ 4]: Denken Sie an eine "E-Mail-Adresse". Viele Geräte sind weltweit mit dem Internet verbunden, E-Mails können jedoch nur an die als Ziel festgelegte E-Mail-Adresse (Server) zugestellt werden.

[^ 5]: Bei der I2C-Kommunikation der 8-Bit-Daten sind die oberen 7 Bits die "Slave-Adresse" und das untere 1 Bit das "Sende- / Empfangsbezeichnungsbit". Da hier nur die "Slave-Adresse" benötigt wird, geben Sie den Wert ohne das untere 1-Bit ein.

Recommended Posts

[EV3 MicroPython] Entfernungsmessung mit DIST-ToF-Sensor (& I2C-Kommunikation)
SRF02 Ultraschallsensor, der von Pyton mit i2c angetrieben wird