Le capteur ultrasonique étanche JSN-SR04T sur un Pi 3 donne 0 cm ou des timeouts pour le réservoir d'eau de notre résidence
Traduit de English par IA ·
Bonjour à tous, étudiant, mon premier vrai projet. Le réservoir d’eau en hauteur de notre résidence universitaire se vide tous les quelques jours et le responsable veut une alerte. J’ai un Raspberry Pi 3 sur le toit (dans un boîtier) et un capteur ultrasonique étanche JSN-SR04T v2.0 qui regarde vers le bas, dans le réservoir.J’ai utilisé le code Python standard du HC-SR04 avec RPi.GPIO : déclencheur de 10 us, puis des boucles while qui attendent que l’écho passe à l’état haut puis bas. L’écho passe par un diviseur 1k/2k. Résultats : environ la moitié des mesures donnent 0.0 cm, le reste sont des timeouts, et très rarement une vraie valeur comme 87 cm. Avec un HC-SR04 sur la paillasse, le même code fonctionne parfaitement.
dist: 0.0
dist: timeout
dist: timeout
dist: 87.4
dist: 0.0
Une fois que ça marche, je veux envoyer le niveau à Hermetry et recevoir une alarme quand il est bas.
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.
Traduit de English par IA ·
Diviseur sur l’écho, c’est bien. À quelle distance se trouve le capteur de l’eau lorsque le réservoir est plein ?
Divider on echo, good. How far is the sensor from the water when the tank is full?
Traduit de English par IA ·
Le réservoir est plein maintenant, peut-être 15-20 cm ?
Tank is full now, maybe 15-20 cm?
Traduit de English par IA ·
Quelle version de carte est imprimée sur la vôtre ? Les versions v2 et v3 ne se comportent pas de la même façon.
Which board version is printed on yours? The v2 and v3 behave differently.
Traduit de English par IA ·
Il est écrit JSN-SR04T-2.0 au dos.
It says JSN-SR04T-2.0 on the back.
Traduit de English par IA ·
Peut-être ajouter un time.sleep(0.5) entre les lectures ? J’ai lu qu’ils ont besoin de temps pour se stabiliser.
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.
- Vous devez être connecté pour répondre à ce sujet.
Rejoignez la discussion
Connectez-vous pour poser et répondre à des questions, aimer les messages utiles et marquer la réponse qui a résolu votre problème. Chaque contribution rapporte des points et des niveaux.

