Amateurfunk verbindet Menschen in der ganzen Welt

Ultraschall-Sensor-Wifi

Um den Ultraschallsensor auch abgesetzt vom PC betreiben zu können, habe ich ihm ein Wifi-Modul (ESP8266-12F) verpasst. Damit ist man jetzt um einiges flexibler. Außerdem habe ich noch ein elektronisches Relais vorgesehen, mit dem man dann auch große Lasten, wie z.B. eine Pumpe, schalten kann. Das Layout des Solid-State-Relais passt für viele kommerzielle elektronische Relais, wie z.B. das RP1A23D5 von Reichelt. Man kann natürlich auch das hierfür vorgesehene Selbstbau-Relais verwenden, welches hier vorgestellt wird. Das Ultraschall-Modul gibt es auch in wasserdichter Ausführung, sodass der Sensor - bei entsprechendem Einbau - auch draußen oder in feuchter Umgebung verwendet werden kann.


Ultraschall-Sensor mit Wifi-Modul und Solid-State-Relais


Schaltbild des Nano Ultraschall-Sensors

Die Funktion ist identisch zum bereits bestehenden US-Sensors (also bitte dort nachlesen). Nur die Alarm-Funktion wurde geringfügig erweitert. Ich habe eine Hysterese eingefügt. Wenn der Referenzwert erreicht wird, wird der Ausgang aktiv geschaltet und z.B. eine Pumpe eingeschaltet. Abgeschaltet wird aber jetzt erst, nachdem ein Differenzwert (Hysterese) erreicht wird.
Ein Beispiel: Als Referenzwert wurde ein Abstand von 30cm zum Sensor, durch Tastendruck, festgelegt. Wird dieser Abstand dann unterschritten, wird der Schalt-Ausgang aktiv und beispielsweise eine Pumpe eingeschaltet. Ein Rücksetzen erfolgt aber erst, nachdem ein Hysteresewert zum Referenzwert wieder unterschritten wird. Dieser Wert ist an den Referenzwert gekoppelt und kann im EEPROM programmiert werden. Als Default-Wert werden ansonsten 50cm eingetragen. Ausgeschaltet wird also erst, nachdem die Distanz zum Referenzwert sich wieder um 50cm vergrößert hat.


US-Sensor mit angestecktem Display

Die Platine ist doppelseitig. Zwei Durchkontaktierungen müssen hergestellt werden. Am einfachsten geht das mit 0,8mm Kontaktnieten oder einfach ein Stück Draht. Die Platinen für Sensor, Display und Solid-State-Relais gibt es bei Dirk, DH4YM.

Software
Zur Auswertung des Sensors kann die recht komfortable PC-Software "Comvisu", von Janik Österle, genutzt werden. Für private Anwendungen ist dieses Programm Freeware.


Screenshot der Benutzeroberfläche von "Comvisu"

Im obigen Beispiel sieht man links die absolute Distanz in cm und in der Mitte die relative Distanz zum Referenzwert. Dieser wurde hier auf 100cm festgelegt. Rechts wird noch die Umgebungstemperatur angezeigt. Für die Temperatur kann ein Korrekturwert im EEPROM abgelegt werden, da der interne Sensor des ATMega328P verwendet wird und diese Messung nicht sehr genau ist. Für die Laufzeitberechnung ist das aber ok, da der Einfluss der Temperatur nicht so gravierend ist und selbst einige Grad Celsius Abweichung nicht viel am Ergebnis ändern.

Das Datenformat für Comvisu sieht wie folgt aus:

                 Wert1;Wert2;Wert3;
                 Distanz; Relative-Distanz; Temperatur;

Beispiel:   #1F134,2;#2F-34,2;#3F24;

Grün Formatzeichen:
   #     = Begin Messwert
   1-3 = Nummerierung Messwert
   F     = Zahlenwert folgt
Rot  = Feldtrenner:
   ;
Blau
= Messwerte

Der Sensor generiert die Messwerte alle 100ms. Im Display aktualisiert werden sie jede Sekunde. Via Wifi gesendet werden die Werte alle 10s. Die Zeiten sind als Konstanten abgelegt und können bei Bedarf angepasst werden. Der Wert für die Wifi-Übertragung kann im EEPROM abgelegt werden und jederzeit angepasst werden.

Der Nano-US-Sensor-Wifi arbeitet im Home-Netz als Client. Die Messdaten werden per UDP-Protokoll an die IP-Adresse 192.168.178.101, Port 45000 gesendet. Das ist der Adressbereich, den die meisten Router abbilden. Dem Nano-US-Sensor-Wifi wird vom DHCP des Routers eine IP-Adresse zugewiesen. Dem Empfänger muss manuell die Adresse 192.168.178.101 zugewiesen werden. Das ist im Router einstellbar und auch, dass immer die gleiche IP zugeordnet wird. Sollte jemand einen anderen Adressbereich als 192.168.178.xxx benötigen, muss das im Programm geändert werden. In diesem Fall bitte bei mir melden, ich generiere dann eine entsprechende Version.

Der Nano-US-Sensor-Wifi sendet über die ihm - vom DHCP des Routers - zugewiesene IP-Adresse und den eigenen Port 45000.


Einstellung der UDP-Verbindung in ComVisu

Das obige Bild zeigt die erforderlichen Einstellungen. Beide IP-Adressen und die Ports eingeben, fertig.

Das UDP-Protokoll ist - anders als TCP - ein verbindungsloses Protokoll und für zeitkritische Übertragungen gut geeignet. ComVisu erkennt also nicht, ob die Gegenstelle überhaupt vorhanden ist. Das Programm "lauscht" einfach am angegebenen Port und wartet auf Daten. Im Fehlerfall werden - im Gegensatz zu TCP - auch keine neue Pakete angefordert.

Damit das Programm verwendet werden kann, müssen zunächst alle Zugangsdaten - AT-Kommando, SSID, Password und CRLF - im EEPROM abgelegt werden. 
 Im Detail sieht das dann so aus:
          AT+CWJAP_CUR="HeimNetz","SicheresPassword"CRLF

HeimNetz = SSID (in ASCII)
SicheresPassword = Password (in ASCII) 

Die Länge der gesamten Zeichenkette ist auf  60 Zeichen begrenzt.

Ursprünglich wollte ich nur SSID und Password im EEPROM ablegen. Offenbar gibt es im Compiler aber Probleme bei der String-Verarbeitung. Wenn der komplette String aus dem EEPROM gelesen wird funktioniert es. Wenn ich den String zusammensetze, funktioniert es nicht, obwohl im Test auf dem Display alles richtig ausgegeben wird. 

Am einfachsten erledigt man den Eintrag in ein Intel-Hex-File für das EEPROM mit einem entsprechenden Editor, der ein entsprechendes Hex-File für die Programmierung erzeugen kann.

Einen guten Editor findet man hier. Damit kann man ein entsprechendes Intel-Hex-File erzeugen. Das Programm "Ponyprog" ist zwar ein Programmiertool, aber der EEPROM Editor kann standalone verwendet werden.


Bildschirm-Dump Ponyprog, EEPROM-Editor

EEPROM Belegung
An Adresse 0x0010  muss der Anmeldestring eingetragen werden (max. 60 Zeichen).
Der Anmeldestring kann in einem Zug eingegeben werden. Lediglich CR (0x13) und LF (0x0A) müssen einzeln eingegeben werden.


PonyProg-Maske für die String-Eingabe

An Adresse 0x0000 des EEPROM kann ein Korrekturwert für die Temperaturanzeige eingegeben werden (Integer-Wert mit Vorzeichen, 1 Byte). Wird hier nichts eingetragen, wird als Default-Wert "0" angewendet.
Der Eintrag muss als Short-Integerwert im Sedezimalformat - mit Vorzeichen - eingetragen werden (Zweierkomplement). Wertebereich -128 bis 127.
Ein Beispiel:
Die Anzeige muss um 5 °C nach oben korrigiert werden. Eintrag: 0x05.
Die Anzeige muss um 5 °C nach unten korrigiert werden. Eintrag: 0xFB.
Die Erklärung:
Positive Werte (0 - 127) können einfach als Hex-Wert eingetragen werden.
Bei den negativen Werten (-1 bis -128) muss das Zweierkomplement gebildet werden. Im Prinzip ist das auch nicht schwer. Es wird das Einerkomplement gebildet und 1 addiert. Am Einfachsten geht das, wenn man mit Binärzahlen arbeitet.
Rechenbeispiel mit Binärzahlen:
                            5 = 0000 0101 = 0x05
Einerkomplement   = 1111 1010 = 0xFA
Zweierkomplement = 1111 1010 + 1 = 1111 1011 = 0xFB.
Am Einfachsten geht das mit dem Windows-Rechner. Dezimalzahl eingeben, Auf „BIN“ drücken. Das lässt sich dann einfach invertieren und 1 dazu addieren ist dann auch kein Hexenwerk mehr.

An Adresse 0x0001+2 kann die Pause zwischen der Wifi-Übertragung eingestellt werden. Hier kann ein Sekunden-Wert zwischen 1 und 1600 eingegeben werden. Wird nichts eingetragen, erfolgt die Übertragung alle 10 Sekunden.
An Adresse 0x0008+9 kann ein Differenzwert zwischen 1 - 400 cm eingetragen werden. Dieser Wert ist die Hysterese zwischen Ein- und Ausschaltung des Alarmausganges. Dieser Wert ist fest an den Referenzwert gekoppelt. Wird hier nichts eingetragen, wird die Differenz mit einem Default-Wert von 50 cm eingestellt.

Ob die Übertragung funktioniert, kann man mit der Terminalfunktion von Comvisu recht einfach überprüfen.


Terminal-Funktion von Comvisu

Wer kein Hex-File für den Programmer erzeugen kann, der kann mir die Zugangsdaten senden und bekommt ein HEX-File zurück.

Ohne einen Eintrag im EEPROM startet das Programm nicht und die LED an D13, blinkt im Sekundentakt.

Wer einen Nano-US-Sensor-Wifi mit dem Wifi-Modul ESP8266-12F und dem Programm "ComVisu", betreiben möchte, kann die Software hier herunter laden.
Für Comvisu gibt es hier auch eine Setup-Datei mit dem Layout des oben gezeigten Screenshot.

Hier noch einige Anmerkungen zum Wifi-Modul ESP8266-12F:
Das Modul bietet sich an, wenn man "irgendwas" via Wifi anbinden will. Der Preis für dieses Modul liegt fast überall unter 5€. Das Beste aber ist, man kann das Modul komplett über die serielle Schnittstelle steuern. Und zwar - wie in uralten Telefon-Modem-Zeiten - über AT-Befehle.

Hier noch die Initialisierungssequenz für die hier beschriebene Anwendung:

AT+RST
AT+CWMODE_CUR=1                            (1=Client, 2=AP, 3=AP + Client)
AT+CWJAP_CUR="SSID","PSWWD"      (Anmeldung am Heim-Netz)
AT+CIPMODE=0                                     (0=normal, 1=Passthrough Mode)
AT+CIPMUX=0                                        (Nur Einzelverbindung)
AT+CIPSTART="UDP","Ziel-IP",Ziel-Port,Source-Port,UDP-Mode

Diese Sequenz muss nur einmal beim Start absolviert werden.
Die Messwerte werden danach mit folgendem Befehl gesendet:

AT+CIPSEND=Paketlänge   (Anzahl Bytes)

Nach diesem Befehl antwortet das Modul mit ">" und alles, was dann über die serielle Schnittstelle gesendet wird, wird mittels UDP-Protokoll an die - im AT+CIPSTART-Befehl - angegebene IP gesendet. Aber erst, wenn die Paketlänge aus dem AT+CIPSEND-Befehl erreicht ist.  Jedes weitere Daten-Paket wird erneut mit AT+CIPSTART und der Paketlänge gestartet.

Alle Kommandos müssen jeweil mit CR/LF abgeschlossen werden!

Sicherheitshinweise:
Wird der Ultraschall-Sensor mit dem Solid-State-Relais am 230V Niederspannungsnetz betrieben, Ist darauf zu achten, dass die Schutzmaßnahme für den Berührungsschutz eingehalten wird.

Idealerweise wird die wasserdichte Version des US-Wandlers verwendet, da diese Ausführung voll gekapselt ist. Der Distanz-Sensor muss dann auch in ein entsprechendes Kunststoff-Gehäuse eingebaut werden. Ansonsten muss die Masse mit dem Schutzleiter des Versorgungsnetzes verbunden werden.

Es muss auch darauf geachtet werden, dass das Solid-State-Relais nicht überlastet wird. Das in der Stückliste aufgeführte Relais RP1A23D5 ist für einen Dauer-Laststrom von 5A ausgelegt. Das Selbstbau-Relais kann bis 12A schalten, aber aufgrund fehlender Kühlung kann es natürlich nicht so hoch belastet werden. Ausschlaggebend ist hier natürlich auch immer die Betriebsdauer.

Die Beschreibung des Nano-Ultraschall-Sensors als PDF findet man hier.