JSN-SR04T wasserdichter Ultraschallsensor an einem Pi 3 liefert für unseren Wasserspeicher im Wohnheim 0 cm oder Timeouts
Von English mit KI übersetzt ·
Hallo zusammen, Student, mein erstes richtiges Projekt. Der Wasserspeicher auf dem Dach unseres Wohnheims läuft alle paar Tage leer, und die Heimleitung wünscht sich eine Warnung. Ich habe einen Raspberry Pi 3 auf dem Dach (in einer Box) und einen wasserdichten Ultraschallsensor JSN-SR04T v2.0, der von oben in den Tank zeigt.Ich habe den Standard-Python-Code für den HC-SR04 mit RPi.GPIO verwendet: 10 us Trigger, dann While-Schleifen, die auf Echo high und low warten. Das Echo läuft über einen 1k/2k-Spannungsteiler. Ergebnisse: etwa die Hälfte der Messwerte ist 0.0 cm, der Rest sind Timeouts, sehr selten ein echter Wert wie 87 cm. Mit einem HC-SR04 auf dem Labortisch funktioniert derselbe Code einwandfrei.
dist: 0.0
dist: timeout
dist: timeout
dist: 87.4
dist: 0.0
Sobald es funktioniert, möchte ich den Füllstand an Hermetry senden und bei niedrigem Stand einen Alarm erhalten.
Hi all, student, first real project. Our hostel’s overhead water tank runs dry every few days and the warden wants a warning. I have a Raspberry Pi 3 on the roof (in a box) and a JSN-SR04T v2.0 waterproof ultrasonic sensor looking down into the tank.
I used the standard HC-SR04 Python code with RPi.GPIO: 10 us trigger, then while loops waiting for echo high and low. Echo goes through a 1k/2k divider. Results: about half the readings are 0.0 cm, the rest are timeouts, very rarely a real number like 87 cm. With an HC-SR04 on the bench the same code works perfectly.
dist: 0.0
dist: timeout
dist: timeout
dist: 87.4
dist: 0.0
Once it works I want to send the level to Hermetry and get an alarm when it’s low.
Von English mit KI übersetzt ·
Teiler am Echo, gut. Wie weit ist der Sensor vom Wasser entfernt, wenn der Tank voll ist?
Divider on echo, good. How far is the sensor from the water when the tank is full?
Von English mit KI übersetzt ·
Der Tank ist jetzt voll, vielleicht 15-20 cm?
Tank is full now, maybe 15-20 cm?
Von English mit KI übersetzt ·
Welche Platinenversion ist auf Ihrer aufgedruckt? Die v2 und v3 verhalten sich unterschiedlich.
Which board version is printed on yours? The v2 and v3 behave differently.
Von English mit KI übersetzt ·
Auf der Rückseite steht JSN-SR04T-2.0.
It says JSN-SR04T-2.0 on the back.
Von English mit KI übersetzt ·
Vielleicht zwischen den Messungen ein time.sleep(0.5) einfügen? Ich habe gelesen, dass sie Zeit brauchen, um sich einzupendeln.
Maybe add a time.sleep(0.5) between readings? I read they need time to settle.
My pool sensor did weird stuff when there was condensation on the face, worth wiping it.
The JSN has a blind zone of roughly 20-25 cm. Anything closer and it either returns nonsense or nothing. HC-SR04 goes down to 2 cm, that’s why the bench test lies to you.
Jessica nailed the main issue: at 15-20 cm you’re inside the blind zone. Mount it higher, a short PVC pipe section as a stand-off works, so full tank is at least 30 cm away.
Second issue is the Python timing. Busy-wait loops on a Pi 3 miss edges whenever the scheduler steps in. Use gpiozero with the pigpio pin factory, it timestamps edges in the daemon:
from gpiozero import DistanceSensor
from gpiozero.pins.pigpio import PiGPIOFactory
import statistics, time
s = DistanceSensor(echo=24, trigger=23, max_distance=4.5,
pin_factory=PiGPIOFactory())
def level_cm():
vals = []
for _ in range(7):
vals.append(s.distance * 100); time.sleep(0.1)
return statistics.median(vals)
Median of 7 throws away the odd echo off the tank wall. Then send {"distance_cm": d, "level_pct": ...} as numbers and put an alarm rule on level_pct below 20 with a debounce of 3 readings, so one bad echo doesn’t wake the warden.
Raised it on a 20 cm pipe piece and switched to your gpiozero code. Now steady readings, 43-45 cm when full, no zeros. Alarm rule is set at level_pct < 20 with 3 readings. Warden got his first real warning yesterday at 6 am.
- Du musst angemeldet sein, um auf dieses Thema antworten zu können.
Mitdiskutieren
Melde dich an, um Fragen zu stellen und zu beantworten, hilfreiche Beiträge mit „Gefällt mir“ zu markieren und die Antwort zu kennzeichnen, die dein Problem gelöst hat. Jeder Beitrag bringt Punkte und Stufen.

