Wsparcie JSN-SR20-Y1 wodoszczelny i pyłoszczelny zamiennik i alternatywa w miejsce HC-SR04

dobo
Posts: 1050
Joined: Sun Apr 07, 2019 8:14 pm
Location: Nadarzyn

Post

Zakupiłem czujnik, który według Chińczyka w miał być zamiennikiem HC-SR04. Pasują do niego uchwyty HC-SR04 ponadto czujnik jest wodo i pyłoszczelny co na pewno przemawia na plus w porównaniu do tego co było pisane negatywnie pod względem zastosowania HC-SR04 w rożnych zasobnikach czy studzienkach.
JSN-SR20-Y1 posiada 6 trybów działania w trybie 0 ma właśnie działać jak HC-SR04 no ale nie działa sprawdzone na GG i na testerze zdjęcie poniżej (czujnik pokazuje różne pomiary od 888 przez 078, 079, 083, 035). Pomyślałem, że może mam walniętą sztukę i możliwe, że tak jest ale pogrzebałem trochę i znalazłem różnicę w długości impulsu wyzwalającego HC-SR04 ma 10uS, a JSN-SR20-Y1 ma 20uS i tu dopatruję się istoty problemu w nieprawidłowym działaniu tego czujnika.

I tu kieruję swoje pytanie do @krycha88 czy jest możliwość skompilowania dla mnie wersji z tą zmianą, a jeśli okaże się ona trafna dodania jej do GG z możliwością zaznaczania w ustawieniach 10uS i 20uS.

Chyba, że pozostałe tryby komunikacji będą lepsze do implementacji tego czujnika w GG :D
Poniżej zdjęcie z działania czujnika i karty czujników w załączniku.

.
czujniki.jpg
.
karty czujników.zip
You do not have the required permissions to view the files attached to this post.
dobo
Posts: 1050
Joined: Sun Apr 07, 2019 8:14 pm
Location: Nadarzyn

Post

Znalazłem rozwiązanie bawiąc się z arduino nano. I mój trop był prawidłowy.
zmieniając delayMicroseconds(20); miałem odczyty ale czasem w odczycie była luka 0 cm
dlatego ustawiłem jak w poniższym kodzie delayMicroseconds(40); i teraz nie było problemu z odczytem.
Wartość dla HC-SR04 10uS jest wartością minimalną tak jak dla JSN-SR20-Y1 ta wartość wynosi 20uS.
Po wpisaniu 40uS prawidłowo działały oba czujniki.

Więc mam prośbę aby w GG dokonać zmiany tego parametru na 40 mikrosekund.

PS. Fajna też była by możliwość ręcznego wpisywania parametru dla Delay_timer przy ustawieniach w GG dla HC-SR04 o czym wspomniano w HC-SR04 - częstotliwość pomiarów

Code: Select all

#include <Arduino.h>
const int TriggerPin = 8;
const int EchoPin    = 9;
long  Duration       = 0;
int   Delay_timer    = 100; 


void setup() {
  pinMode(TriggerPin, OUTPUT);
  pinMode(EchoPin, INPUT);
  Serial.begin(9600);
}

long Distance(long time){
  long DistanceCalc;
  DistanceCalc = ((time * 0.034) / 2); // centimeters
  return DistanceCalc;
}

void loop() {
  // put your main code here, to run repeatedly:
  digitalWrite(TriggerPin, LOW);
  delayMicroseconds(2);
  digitalWrite(TriggerPin,HIGH);
  delayMicroseconds(40);
  digitalWrite(TriggerPin, LOW);
  Duration = pulseIn(EchoPin,HIGH);
  long Distance_cm = Distance(Duration); 
  Serial.print("Distance = "); 
  Serial.print(Distance_cm); 
  Serial.println (" cm");
  delay(Delay_timer); 
}
User avatar
klew
Posts: 9704
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław

Post

dobo wrote: Tue Jan 10, 2023 11:38 pm Znalazłem rozwiązanie bawiąc się z arduino nano. I mój trop był prawidłowy.
zmieniając delayMicroseconds(20); miałem odczyty ale czasem w odczycie była luka 0 cm
dlatego ustawiłem jak w poniższym kodzie delayMicroseconds(40); i teraz nie było problemu z odczytem.
Wartość dla HC-SR04 10uS jest wartością minimalną tak jak dla JSN-SR20-Y1 ta wartość wynosi 20uS.
Po wpisaniu 40uS prawidłowo działały oba czujniki.

Więc mam prośbę aby w GG dokonać zmiany tego parametru na 40 mikrosekund.

PS. Fajna też była by możliwość ręcznego wpisywania parametru dla Delay_timer przy ustawieniach w GG dla HC-SR04 o czym wspomniano w HC-SR04 - częstotliwość pomiarów

Code: Select all

#include <Arduino.h>
const int TriggerPin = 8;
const int EchoPin    = 9;
long  Duration       = 0;
int   Delay_timer    = 100; 


void setup() {
  pinMode(TriggerPin, OUTPUT);
  pinMode(EchoPin, INPUT);
  Serial.begin(9600);
}

long Distance(long time){
  long DistanceCalc;
  DistanceCalc = ((time * 0.034) / 2); // centimeters
  return DistanceCalc;
}

void loop() {
  // put your main code here, to run repeatedly:
  digitalWrite(TriggerPin, LOW);
  delayMicroseconds(2);
  digitalWrite(TriggerPin,HIGH);
  delayMicroseconds(40);
  digitalWrite(TriggerPin, LOW);
  Duration = pulseIn(EchoPin,HIGH);
  long Distance_cm = Distance(Duration); 
  Serial.print("Distance = "); 
  Serial.print(Distance_cm); 
  Serial.println (" cm");
  delay(Delay_timer); 
}
Mógłbyś sprawzić czy przy 25 lub 30 mikro sekund też działa stabilnie?
Kiedy będzie Supla Offline Party / SOP#2025 ?
dobo
Posts: 1050
Joined: Sun Apr 07, 2019 8:14 pm
Location: Nadarzyn

Post

Przy 25 potrafi od czasu do czasu pokazać 0 cm ale zauważam wtedy, że następuje również lekkie zacięcie przy wysyłaniu wartości na serial.
Czujnik ten ma 4 krotnie większy kąt pomiaru i zauważyłem dzisiaj, że ma problem z pomiarem bliskich odległości i potrafi również wskazać machając przed nim ręką, że pomiar jest większy niż może on dokonać i podaje 491cm choć jest skierowany na sufit do którego ma 192 cm.

Jutro postaram się zrobić mały test i dokonam przełożenia czujników na płytkach PCB może to da lepszy efekt.
User avatar
YoMan
Posts: 2718
Joined: Thu Apr 30, 2020 5:18 pm
Location: Częstochowa

Post

Z twojego opisu wynika, że ten czujnik zachowuje się podobnie jak jsn-sr04t (nadajnik i odbiornik w jednej obudowie) i jest podobnie skonstruowany. Generalnie sieje dużo szerzej i zbiera masę niepotrzebnych odbić (w porównaniu do hc-sr504). Walczę od pewnego czasu ale ideału nie ma. W zmiękczaczu jest sporo odbić w małym zbiorniku i działa tyle o ile jak się spędzi dużo czasu i go idealnie ustawi. Lekkie "tyknięcie" i znowu wariuje. Drugi taki mam w szambie i działa lepiej z racji większego zbiornika ale też potrafi bzdurę pokazać. kolega @arkadp wskazał drogę do poprawy działania viewtopic.php?p=138612#p138612 no ale w zmiękczaczu to raczej nie zadziała z racji małej ilości miejsca.
Jedna uwaga: jeśli dobrze pamiętam ze specyfikacji to mój czujnik ma większą minimalną odległość działania - 20 cm vs 10cm (hc-sr504). Sprawdź specyfikację tego twojego czy też nie ma minimum 20 cm.
YoMan
________________________________________
Wziąłem udział w SOP2023 & SOP2024
krycha88
Posts: 5417
Joined: Fri Nov 16, 2018 7:25 am

Post

Coś czuję, że problem dla tego sensora jest gdzie indziej i wynika on z delay(16) w loop. Umiesz sam skompilować projekt usuwając to opóźnienie?

https://github.com/krycha88/GUI-Generic ... c.ino#L736
https://gui-generic-builder.supla.io/
User avatar
klew
Posts: 9704
Joined: Thu Jun 27, 2019 12:16 pm
Location: Wrocław

Post

krycha88 wrote: Fri Jan 13, 2023 4:33 pm Coś czuję, że problem dla tego sensora jest gdzie indziej i wynika on z delay(16) w loop. Umiesz sam skompilować projekt usuwając to opóźnienie?

https://github.com/krycha88/GUI-Generic ... c.ino#L736
Odczyt sensora odległości jest blokujący, więc ten delay nie powinien mieć wpływu
Kiedy będzie Supla Offline Party / SOP#2025 ?
krycha88
Posts: 5417
Joined: Fri Nov 16, 2018 7:25 am

Post

Tylko ja używam biblioteki NewPing więc może być to istotne. Ale nie mam trochę czasu aby to przetestowac.
https://gui-generic-builder.supla.io/
dobo
Posts: 1050
Joined: Sun Apr 07, 2019 8:14 pm
Location: Nadarzyn

Post

krycha88 wrote: Fri Jan 13, 2023 4:33 pm Umiesz sam skompilować projekt usuwając to opóźnienie?
https://github.com/krycha88/GUI-Generic ... c.ino#L736
Spróbuję ale pewnie sporo bibliotek będzie mi brakowało bo już na starcie przy weryfikuj i kompiluj wyskoczył mi brak podstawowej biblioteki SuplaDeviceGUI.h :D
Od zabawy w Primary GUI mnie to zawsze denerwowało ciągłe szukanie i dopasowywanie brakującej biblioteki :evil:


Na razie do NANO udało mi się dosztukować kod na obsługę OLEDA 128x32 i chcę sprawdzić jak to będzie się zachowywać na wolnej przestrzeni bo w pokoju pomiary nie są takie stabilne jak w HC-SR04.
Ponadto uchwyt na zdjęciu z pierwszego posta powoduje brak pomiarów - najprawdopodobniej przenosi drgania z nadajnika do odbiornika widziałem podobne czujniki z nakładką gumową na cały czujnik ten ma nakładkę gumową od strony PCB. Pewnie trzeba to będzie zamontować w uchwycie za pomocą śrubek.

.
1673629719287.jpg
YoMan wrote: Thu Jan 12, 2023 8:56 am Sprawdź specyfikację tego twojego czy też nie ma minimum 20 cm.
Według specyfikacji minimum to 2cm, a max to 500cm
Jsn-sr04t u mnie działał dość dobrze i stabilnie (oczywiście wymagał chwili aby się w zbiorniku ustabilizować po wybraniu szamba) ale zbierające się skropliny na czujniku powodowały, że czujnik wariował dlatego pomyślałem, że jak będą dwa osobne nie będzie takiego problemu.

Zastanawiam się czy brak kwarcu w tym modelu i korzystaniu tylko z wewnętrznego oscylatora nie powoduje, że pomiar nie jest stabilny.
You do not have the required permissions to view the files attached to this post.
krycha88
Posts: 5417
Joined: Fri Nov 16, 2018 7:25 am

Post

Wszystko jest na moim githubie nic nie musisz szukać
https://github.com/krycha88/GUI-Generic/tree/master/lib
https://gui-generic-builder.supla.io/

Return to “GUI Generic”