NEWS
Ultaschallsensor SR04T über Pi auslesen
-
Hallo zusammen,
bin relativ frisch mit iobroker, habe vorher viel mit OpenHAB gemacht und hatte während des Lockdowns Zeit in iobroker einzusteigen. Bislang hat alles gut geklappt, nun hänge ich aber schon lange an einem Problem.
Ich versuche den Ultraschallsensor SR04T direkt am Pi zu betreiben und mit Blockly auszulesen. Leider gibt es Probleme beim Messen der Länge des Echo Impulses.
Hier der Code:
var tStart, dT; // Setze Trigger für 10ms setState("rpi2.0.gpio.2.state"/*GPIO 2*/, true); setStateDelayed("rpi2.0.gpio.2.state"/*GPIO 2*/, false, 10, false); // Warte auf High von Echo while (getState("rpi2.0.gpio.3.state").val == false) { } tStart = (new Date().getTime()); // Impulslänge von Echo = Signallaufzeit while (getState("rpi2.0.gpio.3.state").val == true) { } // Warte auf High von Echo dT = (new Date().getTime()) - tStart; console.log(('Differenzzeit: ' + String(dT)));
Ich schätze, dass es eine bessere Lösung gibt um das Echosignal zu ermitteln? Code is prinzipiell 1:1 von Python Kopiert.
Wenn ich das Skript starte schießt sich die js Instanz ab, mit der Meldung:
-
instance system.adapter.javascript.0 terminated with code NaN ()
-
list iteminstance system.adapter.javascript.0 terminated due to SIGABRT
-
list itemCaught by controller[0]: FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory.
Danke schonmal
Albert -
-
@SahnAlbert sagte:
Wenn ich das Skript starte schießt sich die js Instanz ab
wiederhole solange erzeugt Endlosschleifen.
Javascript kann nur ms auflösen. Verwende "rpi2.0.gpio.3.state" als Trigger:
on("rpi2.0.gpio.3.state", function(dp) { if(!dp.state.val) { let dt = dp.state.lc - dp.oldState.lc; // Impulsdauer in ms log('Impulsdauer: ' + dt); } });
-
@SahnAlbert bleib beim python skript, ich hab das schon mal versucht und bin zur Ereknntnis gelangt das JS für diesen Anwendungsfall nicht geeignet ist.
Ich hab mir die Ergebnisse vom skript per simple-api in den ioBroker geholt. Das hat git funktioniert.
-
@Jey-Cee Die Auflösung in ms scheint wirklich das Limit zu sein, außer eine Auflösung von 34cm genügt. Danke!
-
@paul53 Auf jeden Fall eine deutlich schönere Lösung. Wies aussieht aber leider zu ungenau für meine Anwendung. Brauche dt wohl in us.