So, hier nun das versprochene Programm. Ich habe dieses Programm geschrieben, um zu testen, ob ich den UT390B+ als Sensor an den Arduino anschließen kann. Der Versuchsaufbau besteht aus dem Arduino, dem UT390B+ und einer Taste. Drückt man die Taste, schaltet das Programm den UT390B+ ein und führt permanent Messungen durch und gibt die Messwerte über die serielle Schnittstelle aus. Drückt man die Taste erneut, wird der UT390B+ wieder ausgeschaltet.
Die Kontrolle des UT390B+ über die Ansteuerung seiner READ-Taste und OFF/CLEAR-Taste über I/O-Pins ist kein Problem. Der UT390B+ läuft prima mit 5V Versorgungsspannung. Um den verbauten 3,3V-Mikroprozessor nicht unnötig zu stressen, habe ich darauf verzichtet, die OUTPUT-Pins auf OUTPUT und HIGH zu schalten. Da die Eingänge des UT390B+ aktiv LOW sind, schalte ich die Pins auf INPUT und nur zum Aktivieren kurzfristig auf OUTPUT (LOW). Das hat auch noch den Vorteil, dass ich über OFF/CLEAR prüfen kann, ob der UT390B+ eingeschaltet ist.
Der UT390B+ zeigt die gemessene Entfernung auf dem Display an. Dabei interessiere ich mich nur für die unterste Zeile. Zweimal in der Sekunde sendet der STM32 68 Byte an das Display. Einzelne Bits dieser Nachricht stehen dabei für konkrete Segmente des LCDs. Ich musste also nur den Bitstrom mitlesen und herausfinden, welche Bits für welche Segmente in der untersten Zeile stehen.
Drei Signalleitungen habe ich identifiziert und sie Clock, Data und ByteSequenz getauft. Ich habe auch noch das Piepsersignal abgegriffen, einen wirklichen Mehrwert bringt das aber nicht. Genauso gut könnte man die Anzeige auf der untersten Zeile überwachen.
Der Bitstrom wird über Int0 und Int1 mitgelesen. Der Rest des Programms arbeitet nach dem Handball-Strafminuten-Prinzip. Ich habe mich immer gefragt, woher weiß der Schiedsrichter beim Handball, wann ein Spieler seine Strafminuten abgesessen hat und wieder mitspielen darf. Der Spieler bekommt eine Zeitkarte. Ist diese Spielzeit erreicht, darf er wieder mitspielen. Nach diesem Prinzip vermeide ich delay() und brauche auch keine Timer um bestimmte Zeitabstände einzuhalten. Den einzelnen Prozessschritten werden Status zugeordnet. Tritt ein Ereignis ein, wechselt der Status und der Prozess bekommt eine Zeitmarke, an dem die Verarbeitung weitergeht.
Wer eine Anwendung für solch einen Sensor hat, kann sie günstig - keine 20 Euro - realisieren, man muss nur sehr fein löten können
Laser_Entfernungsmesser.ino (18.8 KB)
Bild.pdf (487 KB)