Jump to content

[PHP] Windmesser mit dem Flankenzähler auslesen


[[Template core/global/global/poll is throwing an error. This theme may be out of date. Run the support tool in the AdminCP to restore the default theme.]]

Recommended Posts

Hallo

Ich habe mir die Wetterstation vor ein paar Wochen auf der Interradio in Hannover gekauft.

Die Sensoren lese ich mit meinem RPi und PHP-CLI aus.

Die Daten schreibe ich dann ich eine RRD-DB.

Ich habe eine Windgeschwindigkeitssensor von Theodor Friedrichs den ich mit dem "Industrial Digital In 4" Briklet auslesen will.

Der Flankenzähler wird mit "setEdgeCountConfig(int $selection_mask, int $edge_type, int $debounce)" konfiguriert.

Wie frage ich den Flankenzähler ab und wie ist sicher gestellt das die Flanken immer in einer bestimmten Zeit gezählt werden?

Über ein kleine Script würde ich mich freuen.

Gruß NetFritz

Link zu diesem Kommentar
Share on other sites

Hallo NetFritz,

 

eigentlich sollte eine 0 ausreichen. So ist es zu mindestens in Java.

Ich nutze das IO4 zum auslesen eines Davis Windmessers http://www.davisnet.com/weather/products/weather_product.asp?pnum=06410

 

Hier mal die setEdgeCountConfig aus Java

 

io4.setEdgeCountConfig((short)0, BrickletIO4.EDGE_TYPE_FALLING, (short)20);

 

Das (short) kannst du einfach weg lassen.

 

 

 

Link zu diesem Kommentar
Share on other sites

Hallo

Vielen Dank, besonders an borg.

Hallo thunderbird.

Das Dir das nicht aufgefallen ist, liegt wohl daran das die Eingänge schon vorbelegt sind.

Siehe hier eine abfrage von Eingang 3, den ich nicht gesetzt habe.

$CountConfig = $idi4->getEdgeCountConfig(3); # Pin 3
var_dump($CountConfig);


array(2) {
  ["edge_type"]=>
  int(0)
  ["debounce"]=>
  int(100)
}

Ich hatte "debounce" auf 20 gesetzt und eine Abfrage lieferte immer 100.

Gruß NetFritz

Link zu diesem Kommentar
Share on other sites

Hallo NetFritz,

ja ganz genau ich habe mich nur gewundert warum ich immer nur maximal 25 Events in 5 Sekunden bekommen habe...

Aber ich bin nie auf die Idee gekommen das hier was nicht richtig gesetzt worden ist. Schön wäre hier natürlich eine Exception wenn die Angabe(0) außerhalb des Bereichs ist.

Link zu diesem Kommentar
Share on other sites

  • 1 month later...

Hallo

 

Habe heute mal mit dem Ozi. die H/L Levels angeschaut.

Bei L zeigt er ca.1,7 Volt und bei H 5Volt an.

Das Signal zeit ein gleichmäßiges Rechtecksignal.

 

Ich habe unten den "Step-Down Power Supply" und darauf 2 Master Bricks.

In welchen Master Brick steckt mann dann am besten den "Industrial Digital In 4" wenn er die Flanken zählen soll?

 

Gruß NetFritz

Link zu diesem Kommentar
Share on other sites

Hallo

Hier der Code vom Industrial Digital In 4.

#PHP-CLI
# wird jede Minute von cron aufgerufen
require_once('Tinkerforge/IPConnection.php');
require_once('Tinkerforge/BrickletIndustrialDigitalIn4.php');
$host = 'localhost';
$port = 4223;
use Tinkerforge\IPConnection;
$ipcon = new IPConnection(); // Create IP connection
$ipcon->connect($host, $port); // Connect to brickd

# ----------- Windstärke --------------
$uid_DIn = 'hwx'; // BrickletIndustrialDigitalIn4 UID
use Tinkerforge\BrickletIndustrialDigitalIn4;
$idi4 = new BrickletIndustrialDigitalIn4($uid_DIn, $ipcon); // Create device object
$CountConfig = $idi4->getEdgeCountConfig(0); # Pin 0
# var_dump($CountConfig);
  $selection_mask = 1; # Pin 0 = 1 = 2Hoch0
  $edge_type = 0;
  $debounce = 1;
if($CountConfig["edge_type"] == $edge_type AND $CountConfig["debounce"] == $debounce){
  # echo "setEdgeCountConfig i.o. \n";
}else{
  $idi4->setEdgeCountConfig($selection_mask,$edge_type,$debounce);
}
#$test1 = $idi4->getEdgeCountConfig(0); # Pin 0
$digi1 = $idi4->getEdgeCount(0,1); 

$CountConfig = $idi4->getEdgeCountConfig(1); # Pin 1
# var_dump($CountConfig);
  $selection_mask = 2; # Pin 0 = 1 = 2Hoch0
  $edge_type = 2;
  $debounce = 100;
if($CountConfig["edge_type"] == $edge_type AND $CountConfig["debounce"] == $debounce){
  # echo "setEdgeCountConfig i.o. \n";
}else{
  $idi4->setEdgeCountConfig($selection_mask,$edge_type,$debounce);
}
$digi2 = $idi4->getEdgeCount(1,0); # auslesen nicht zurueksetzen

 

Aufstellung der Bricks:

Ich habe unten den "Step-Down Power Supply" und darauf 2 Master Bricks.

An den unteren Masterbrick habe ich den Raspberry Pi per mini USB angeschlossen.

An den Masterbricks habe ich 2x Analog In, 1x Industrial Digital In 4,

1x Ambient Light Bricklet,1x Barometer Bricklet und 1x Humidity Bricklet angesteckt.

Ich weis jetzt aber nicht aus den Kopf welcher Sensor an welches Masterbrick angeschlossen ist.

Heute Mittag habe ich mal Debounce auf 1 gesetzt, da hat er bis zu 2200 Impulse/Minute angezeigt.

Wir erwarten heute Nacht einen Sturm, wollen mal sehen ob er an eine Grenze ankommt.

Der Windsensor hat ein Hallgenerator eingebaut.

Gruß NetFritz

Link zu diesem Kommentar
Share on other sites

Dein Programm sieht gut aus. Was mir aber auffällt, ist dass für setEdgeCountConfig() nicht dokumentiert ist, dass dies den Zähler zurücksetzt. Dies ist aber nicht dein Problem, da du ja setEdgeCountConfig() nur aufruft wenn die Konfiguration nicht so ist wie sie sein sollte. Daher sollte setEdgeCountConfig() nur einmal aufgerufen werden.

 

Bedingt durch die Art und Weise wie unser System arbeitet ist die maximale Abtastrate beschränkt. Ich habe hier gerade nochmal mit einem 250Hz Rechtecksignal mit 50% Dutycycle getestet und da verliert der Flankenzähler keine Flanke. Debounce war auf 1 gestellt.

 

Du solltest also grundsätzlich deutlich mehr als 2200 Impulse/Minute (ca. 36Hz) erkennen können mit dem IDI4 Bricklet.

 

Was aber ein Problem sein könnte ist die Länge des High-Pegels des Hallsensors im Windmesser. Wenn dieser zu kurz ist, dann kann das Bricklet ihn im Zweifelsfall nicht mehr erkennen. Wenn dein Windmesser jetzt am Rad nur an einer Stelle einen Magneten hat dann kann dies durchaus dein Problem hier sein.

 

Um diese Problem zu beheben, falls es wirklich das Problem ist, dann müsstest du die Länge der High-Pegels verlängern. Eine Möglichkeit wäre mehr Magneten anzubringen, falls das der Windmesser zulässt. Das Ziel ist dann das Verhältnis von Magnet-Über-Sensor zu Kein-Magnet-Über-Sensor pro Umdrehung mehr in Richtung 50:50 zu verschieben und so die Länge des High-Pegels pro Umdrehung zu verlängern.

Link zu diesem Kommentar
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Reply to this topic...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...