Ultraschallsensor: Unterschied zwischen den Versionen

Aus FHEMWiki
(FHEM(R))
(Anpassung von <source>-Tags nach <syntaxhighlight>)
 
(3 dazwischenliegende Versionen von 3 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
Anleitung zum Einsatz eines '''Utraschallsensors''' zur Füllstandsmessung mit FHEM.
Anleitung zum Einsatz eines '''Utraschallsensors''' zur Füllstandsmessung mit FHEM.
{{Todo|Nachdem nicht klar ist, wer der ursprüngliche Autor dieses Artikels ist, sollte er von Ich-Form auf neutrale Ausdrucksweise umgeschrieben werden.}}


== Analog ==
== Analog ==
[[File:Srf06.jpg|right|thumb|SRF06 Ansicht fertig bestückte Platine (Bild robot-electronics.co.uk)]]
[[File:Srf06.jpg|right|thumb|SRF06 Ansicht fertig bestückte Platine (Bild robot-electronics.co.uk)]]
Eine Analogversion für den Ultraschallsensor läßt sich mit [http://www.robot-electronics.co.uk/acatalog/Ultrasonic_Rangers.html SRF06 - 4-20mA Current Loop Ultrasonic Range Finder] aufbauen.
Eine Analogversion für den Ultraschallsensor lässt sich mit [http://www.robot-electronics.co.uk/products/sensors/ultrasonics/srf06-4-20ma-current-loop-range-finder.html SRF06 - 4-20mA Current Loop Ultrasonic Range Finder] aufbauen.
Dieser stellt je nach Messweite einen Ausgangsstrom von 4-20mA bereit. Mittels A/D Wandler ([[1-Wire]], z.&nbsp;B. DS2438) kann das Signal bequem eingelesen werden.
Dieser stellt je nach Messweite einen Ausgangsstrom von 4-20mA bereit. Mittels A/D Wandler ([[1-Wire]], z.B. DS2438) kann das Signal bequem eingelesen werden.
Deutsche Distributoren sind z.&nbsp;B.:
Deutsche Distributoren sind z.B.:
* [http://www.exp-tech.de/Sensoren/SRF06-4-20mA-Current-Loop-Ultrasonic-Ranger-Finder.html http://www.exp-tech.de/Sensoren/SRF06-4-20mA-Current-Loop-Ultrasonic-Ranger-Finder.html]
* [http://www.exp-tech.de/Sensoren/SRF06-4-20mA-Current-Loop-Ultrasonic-Ranger-Finder.html http://www.exp-tech.de/Sensoren/SRF06-4-20mA-Current-Loop-Ultrasonic-Ranger-Finder.html]
* [http://de.manu-systems.com/SRF06.shtml http://de.manu-systems.com/SRF06.shtml]
* [http://de.manu-systems.com/SRF06.shtml http://de.manu-systems.com/SRF06.shtml]
Zeile 13: Zeile 11:
* [http://nodna.de/Devantech-SRF06-Current-Loop-Ultraschall-Sensor http://nodna.de/Devantech-SRF06-Current-Loop-Ultraschall-Sensor]
* [http://nodna.de/Devantech-SRF06-Current-Loop-Ultraschall-Sensor http://nodna.de/Devantech-SRF06-Current-Loop-Ultraschall-Sensor]


Nach folgendem Plan wird der Sensor an einen A/D Wandler angeschlossen, das OriginalHandbuch ist [http://www.robot-electronics.co.uk/htm/srf06tech.htm hier] zu finden.
Nach [[:File:Srf06_connect.gif|folgendem Plan]] wird der Sensor an einen A/D Wandler angeschlossen, das Original Handbuch ist [http://www.robot-electronics.co.uk/htm/srf06tech.htm hier] zu finden.


[[File:Srf06_connect.gif|mini|320px|rechts|SRF06 Beschaltungsplan (Bild robot-electronics.co.uk)]]
[[File:Srf06_connect.gif|mini|320px|rechts|SRF06 Beschaltungsplan (Bild robot-electronics.co.uk)]]


== Digital ==
== Digital ==
Bei [http://www.icplan.de] habe ich den [http://www.icplan.de/seite21.htm Minisensor] (Achtung, wird nicht mehr gebaut, Drucksonde als Alternative dort verfügbar) geordert, um diesen über eine serielle Schnittstelle (Pegelwandlung erforderlich, z.B. mit separater Platine vom selben Hersteller) abzufragen.
Eine Drucksonde (z.B. http://www.icplan.de/seite27.htm) soll in Abhängigkeit vom Füllstand mit einer [http://www.pollin.de/shop/dt/MTQ5OTgxOTk-/Bausaetze_Module/Bausaetze/Bausatz_AVR_NET_IO.html Ethernet-Platine] über Ethersex/[[ECMD]]] ein  Magnetventil zur Nachspeisung schalten. Damit soll ein Trockenlaufen der Pumpe vermieden werden und auch in Trockenzeiten Wasser über die Brauchwasserleitung zur Verfügung stehen.
 
In Abhängigkeit des Füllstandes soll dieser mit  
[http://www.pollin.de/shop/dt/MTQ5OTgxOTk-/Bausaetze_Module/Bausaetze/Bausatz_AVR_NET_IO.html] über Ethersex/[[ECMD]]] ein  Magnetventil zur Nachspeisung schalten. Damit soll ein Trockenlaufen der Pumpe vermieden werden und auch in Trockenzeiten Wasser über die Brauchwasserleitung zur Verfügung stehen.


Das Protokoll ist ziemlich einfach (5 Ziffern im Abstand von ca. 100 ms senden und die Ausgabe des Sensors seriell einlesen), sodass eine Verarbeitung mit FHEM, Nagios/Icinga oder Cacti jederzeit möglich ist.
Das Protokoll ist ziemlich einfach (5 Ziffern im Abstand von ca. 100 ms senden und die Ausgabe des Sensors seriell einlesen), sodass eine Verarbeitung mit FHEM, Nagios/Icinga oder Cacti jederzeit möglich ist.
Zeile 27: Zeile 22:
Durch den (Mindest-)Abstand von 100 ms zwischen den Zeichen verbietet sich der Einsatz von ECMD, da dieses Modul die Zeichen immer mit der vollen Baudrate sendet und bisher kein "Pausenzeichen" (delay) dort möglich ist.
Durch den (Mindest-)Abstand von 100 ms zwischen den Zeichen verbietet sich der Einsatz von ECMD, da dieses Modul die Zeichen immer mit der vollen Baudrate sendet und bisher kein "Pausenzeichen" (delay) dort möglich ist.


Deshalb habe ich ein kleines (aber nicht sehr elegantes) Pearl-Skript für die serielle Schnittstelle geschrieben, welches momentan zwar im Verzeichnis /usr/share/fhem/FHEM/ liegt, aber noch nicht in FHEM eingebunden ist. Ich verwende dieses aber bereits für das [[:Kategorie:Statusdisplay|Statusdisplay]].
Deshalb hier ein kleines (aber nicht sehr elegantes) Perl-Skript für die serielle Schnittstelle, welches im Verzeichnis ''/usr/share/fhem/FHEM/'' liegen muss.


''Anmerkung: Falls es jemand hinbekommt, über ECMD die 100ms Pausenzeiten zwischen den Zeichen zu setzen, kann man die Sensoren direkt aus fhem ohne das Skript abfragen.''
''Anmerkung: Falls es jemand hinbekommt, über [[ECMD]] die 100ms Pausenzeiten zwischen den Zeichen zu setzen, können die Sensoren direkt aus FHEM ohne das Skript abgefragt werden.''


<nowiki>#!/usr/bin/perl
<syntaxhighlight lang="Perl">
#!/usr/bin/perl
#
#
#  Ultrasonic sensor value retrieval using Mini3-Sensor from icplan.de  
#  Ultrasonic sensor value retrieval using Mini3-Sensor from icplan.de  
Zeile 88: Zeile 84:
print "\n";
print "\n";
#
#
exit(0);</nowiki>
exit(0);</syntaxhighlight>
 
Verwendet man an Stelle der Zeichenfolge '1 2 0 0 0' die Zeichenfolge '1 1 0 0 0' bekommt man die Temperatur des Sensors angezeigt.
Verwendet man an Stelle der Zeichenfolge '1 2 0 0 0' die Zeichenfolge '1 1 0 0 0' bekommt man die Temperatur des Sensors angezeigt.


Das Skript muss zwingend verbessert werden, da derzeit nur der Abstand in cm zum Wasserspiegel ausgegeben wird und nicht das enthaltene Volumen. Hierzu braucht man entweder (da meist liegende Zylinder oder Kugeln zum Einsatz kommen) etwas Mathematik oder man nutzt eine Tabelle in Form einer CSV-Datei. Ich habe bereits letzteres in Vorbereitung aber noch nicht in das Skript eingebaut.
Das Skript muss zwingend verbessert werden, da derzeit nur der Abstand in cm zum Wasserspiegel ausgegeben wird und nicht das enthaltene Volumen. Hierzu braucht man entweder (da meist liegende Zylinder oder Kugeln zum Einsatz kommen) etwas Mathematik, oder man nutzt eine Tabelle in Form einer CSV-Datei.


[[Kategorie:Other Components]]
[[Kategorie:Other Components]]
[[Kategorie:HOWTOS]]
[[Kategorie:HOWTOS]]
[[Kategorie:Füllstandsmesser]]
[[Kategorie:Füllstandsmesser]]

Aktuelle Version vom 26. Juli 2017, 19:01 Uhr

Anleitung zum Einsatz eines Utraschallsensors zur Füllstandsmessung mit FHEM.

Analog

SRF06 Ansicht fertig bestückte Platine (Bild robot-electronics.co.uk)

Eine Analogversion für den Ultraschallsensor lässt sich mit SRF06 - 4-20mA Current Loop Ultrasonic Range Finder aufbauen. Dieser stellt je nach Messweite einen Ausgangsstrom von 4-20mA bereit. Mittels A/D Wandler (1-Wire, z.B. DS2438) kann das Signal bequem eingelesen werden. Deutsche Distributoren sind z.B.:

Nach folgendem Plan wird der Sensor an einen A/D Wandler angeschlossen, das Original Handbuch ist hier zu finden.

SRF06 Beschaltungsplan (Bild robot-electronics.co.uk)

Digital

Eine Drucksonde (z.B. http://www.icplan.de/seite27.htm) soll in Abhängigkeit vom Füllstand mit einer Ethernet-Platine über Ethersex/ECMD] ein Magnetventil zur Nachspeisung schalten. Damit soll ein Trockenlaufen der Pumpe vermieden werden und auch in Trockenzeiten Wasser über die Brauchwasserleitung zur Verfügung stehen.

Das Protokoll ist ziemlich einfach (5 Ziffern im Abstand von ca. 100 ms senden und die Ausgabe des Sensors seriell einlesen), sodass eine Verarbeitung mit FHEM, Nagios/Icinga oder Cacti jederzeit möglich ist.

Durch den (Mindest-)Abstand von 100 ms zwischen den Zeichen verbietet sich der Einsatz von ECMD, da dieses Modul die Zeichen immer mit der vollen Baudrate sendet und bisher kein "Pausenzeichen" (delay) dort möglich ist.

Deshalb hier ein kleines (aber nicht sehr elegantes) Perl-Skript für die serielle Schnittstelle, welches im Verzeichnis /usr/share/fhem/FHEM/ liegen muss.

Anmerkung: Falls es jemand hinbekommt, über ECMD die 100ms Pausenzeiten zwischen den Zeichen zu setzen, können die Sensoren direkt aus FHEM ohne das Skript abgefragt werden.

#!/usr/bin/perl
#
#  Ultrasonic sensor value retrieval using Mini3-Sensor from icplan.de 
#  Copyright (C) 2011 Jens Wagner
#  
#  This program is free software: you can redistribute it and/or modify
#  it under the terms of the GNU General Public License as published by
#  the Free Software Foundation, either version 3 of the License, or
#  (at your option) any later version.
#
#  This program is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
#  GNU General Public License for more details.
#
#  You should have received a copy of the GNU General Public License
#  along with this program. If not, see &lt;[http://www.gnu.org/licenses/ http://www.gnu.org/licenses/]&gt;.
#
#
use strict;
use Device::SerialPort; 
#
my $seriel = Device::SerialPort-&gt;new('/dev/ttyS1') || die "Kann /dev/ttyS1 nicht öffnen! ($!)\n";
#
$seriel-&gt;baudrate(9600);
$seriel-&gt;parity("none");
$seriel-&gt;databits(8);
$seriel-&gt;stopbits(1);
#
print "Entfernung Sensor 1: ";
#
$seriel-&gt;write('1');
select(undef, undef, undef, 0.2);
$seriel-&gt;write('2');
select(undef, undef, undef, 0.2);
$seriel-&gt;write('0');
select(undef, undef, undef, 0.2);
$seriel-&gt;write('0');
select(undef, undef, undef, 0.2);
$seriel-&gt;write('0');
#
#
$|=1;
my $exit=0;
while($exit &lt; 2000)
{
my ($cin, $sin) = $seriel-&gt;read(1);
if($cin)
{
 print $sin;
 $exit=0;
}
else
{$exit++}
}
print "\n";
#
exit(0);

Verwendet man an Stelle der Zeichenfolge '1 2 0 0 0' die Zeichenfolge '1 1 0 0 0' bekommt man die Temperatur des Sensors angezeigt.

Das Skript muss zwingend verbessert werden, da derzeit nur der Abstand in cm zum Wasserspiegel ausgegeben wird und nicht das enthaltene Volumen. Hierzu braucht man entweder (da meist liegende Zylinder oder Kugeln zum Einsatz kommen) etwas Mathematik, oder man nutzt eine Tabelle in Form einer CSV-Datei.