Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki

KURS HOME ASSISTANT

Chcesz zautomatyzować swój dom bez skomplikowanego kodowania?
Zastanawiasz się nad wyborem sprzętu, oprogramowania i aplikacji?
Od czego zacząć przygodę z HA w 2025? Co będzie najlepsze na start?

Nasz kurs Home Assistant nauczy Cię krok po kroku, jak łatwo zautomatyzować swój dom i oszczędzić na rachunkach za prąd i ogrzewanie. Bez chmur, bez zbędnych abonamentów. Twoja przygoda z Home Assistant zaczyna się tutaj!

↓↓↓

    Szanujemy Twoją prywatność. Możesz wypisać się w dowolnym momencie.




    Teraz jest 21 maja 2025, o 09:27


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 26 ] 
    Autor Wiadomość
    PostNapisane: 28 maja 2014, o 15:23 
    Offline
    Nowy
    Avatar użytkownika

    Dołączył(a): 27 maja 2014
    Posty: 11
    Pomógł: 0

    Witam,
    mam nadzieje że nie zostanę zjedzony przez starych wyjadaczy;)
    Z tego co wiem fora są po to żeby pytać a wujek google nie chce pomóc:)

    Mam problem natury matematycznej a mianowicie chodzi mi o to że chcę wyświetlać poziom wilgotności z czujnika
    http://botland.com.pl/czujniki-wilgotno ... gleby.html
    na arduino.
    Sam program i podłączenie to nie problem. Problem stanowi to co się wyświetla ponieważ przy zerowej wilgotności czujnik ma stan wysoki a przy wilgotności 100% stan niski.
    Inaczej mówiąc 1024 to 0%
    a 0 to 100%.
    Jakie równanie muszę wpisać w komendzie Serial.println(odczyt) aby wyświetlało poziom wilgotności w procentach?

    Obecnie mam:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    Kod wklejamy w znaczniki SYNTAX C rezasurmar będę pamiętał:)

    próbowałem Serial.print(odczyt/1024.00); pokazuje 1.00% i przy wzroście wilgotności spada a chcę żeby przy wzroście wilgotności(spadku na pinie analogowym) procenty rosły i nie wiem jak odwrócić działanie matematyczne lub coś w tym stylu.

    Mam nadzieję że wytłumaczyłem na tyle mój problem aby znalazł się ktoś kto pomoże.
    (w kodzie nie ma wpisanych linii z wyświetlaczem bo chcę narazie wyświetlić to w monitorze portu szergowego)

    Pozdrawiam forumowiczów

    Obrazek

    _________________
    sig off ;(



    Ostatnio edytowano 29 maja 2014, o 11:46 przez Holandianin, łącznie edytowano 1 raz

    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 28 maja 2014, o 15:40 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 19 lut 2013
    Posty: 223
    Zbananowany użytkownik

    Pomógł: 21

    Serial.print(100.00-odczyt/1023.00);

    _________________
    Nie pisz komentarzy - dobry kod komentuje się sam.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 28 maja 2014, o 15:40 
    Offline
    Użytkownik

    Dołączył(a): 22 sty 2014
    Posty: 1806
    Zbananowany użytkownik

    Pomógł: 168

    Witam, spróbuj tak:

    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język cpp
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 28 maja 2014, o 15:43 
    Offline
    Użytkownik

    Dołączył(a): 17 lut 2013
    Posty: 90
    Pomógł: 8

    Proste działanie matematyczne:

    ((1024-odczytana wartość)/1024)*100%



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 28 maja 2014, o 15:43 
    Offline
    Użytkownik

    Dołączył(a): 22 sty 2014
    Posty: 1806
    Zbananowany użytkownik

    Pomógł: 168

    barney napisał(a):
    Serial.print(100.00-odczyt/1023.00);


    Trochę bez sensu od stu odejmwać np 1023 bo tyle wyniesie przy minimalnej wilgotnosci. Poza tym po co te kropki przy liczbie 100 skoro i tak posługujemy się liczbą całkowitą?

    ------------------------ [ Dodano po: 5 minutach ]

    Holandianin spróbuj wgrać ten kod który wcześniej podałem, to bardzo proste matematyczne działanie ale rozumiem że czasem każdy się może zawiesić:) ważne że coś tam próbujesz:) jak masz jakieś pytania wal śmiało;)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 28 maja 2014, o 15:53 
    Offline
    Nowy
    Avatar użytkownika

    Dołączył(a): 27 maja 2014
    Posty: 11
    Pomógł: 0

    żeby nie cytować po kolei każdego to piszę:
    pierwszy przykład pokazuje cały czas 99-100% (Serial.print(100.00-odczyt/1023.00);)
    drugi -28772% (((1023 - odczyt)/1023) * 100)
    trzeci pokazuje 0% i % nie przechodzi w równaniu ((1024-odczytana wartość)/1024)*100%

    ------------------------ [ Dodano po: 1 minucie ]

    Nefarious19 napisał(a):
    barney napisał(a):
    Serial.print(100.00-odczyt/1023.00);


    Trochę bez sensu od stu odejmwać np 1023 bo tyle wyniesie przy minimalnej wilgotnosci. Poza tym po co te kropki przy liczbie 100 skoro i tak posługujemy się liczbą całkowitą?

    ------------------------ [ Dodano po: 5 minutach ]

    Holandianin spróbuj wgrać ten kod który wcześniej podałem, to bardzo proste matematyczne działanie ale rozumiem że czasem każdy się może zawiesić:) ważne że coś tam próbujesz:) jak masz jakieś pytania wal śmiało;)


    przecinek jest po to aby wynik był z 2 miejscami po przecinku np:2,55% i nie przeszkadza w równaniu

    _________________
    sig off ;(



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 28 maja 2014, o 15:55 
    Offline
    Użytkownik

    Dołączył(a): 22 sty 2014
    Posty: 1806
    Zbananowany użytkownik

    Pomógł: 168

    Holandianin napisał(a):
    drugi -28772% (((1023 - odczyt)/1023) * 100)


    a skopiowałeś dokładnie kod który Ci napisałem?



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 28 maja 2014, o 15:59 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 19 lut 2013
    Posty: 223
    Zbananowany użytkownik

    Pomógł: 21

    Ops, przecinek mnie dopadł :) powinno być:
    Serial.print(100.00-odczyt/10.23);

    Nefarious19 napisał(a):
    Trochę bez sensu od stu odejmwać np 1023 bo tyle wyniesie przy minimalnej wilgotnosci.
    ? Trochę nie rozumiem o co Ci tutaj chodzi, brzmi jakbyś zapomniał o kolejności wykonywania operatorów.

    Nefarious19 napisał(a):
    Poza tym po co te kropki przy liczbie 100 skoro i tak posługujemy się liczbą całkowitą?
    Fakt, z matematycznego punktu widzenia 100 jest zawsze liczbą całkowitą i dowolna liczba 0 po przecinku tego nie zmieni. Ale tutaj jest ona przedstawiona w postaci zmiennoprzecinkowej.

    _________________
    Nie pisz komentarzy - dobry kod komentuje się sam.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 28 maja 2014, o 16:00 
    Offline
    Nowy
    Avatar użytkownika

    Dołączył(a): 27 maja 2014
    Posty: 11
    Pomógł: 0

    Nefarious19 napisał(a):
    barney napisał(a):
    Serial.print(100.00-odczyt/1023.00);


    Trochę bez sensu od stu odejmwać np 1023 bo tyle wyniesie przy minimalnej wilgotnosci. Poza tym po co te kropki przy liczbie 100 skoro i tak posługujemy się liczbą całkowitą?

    ------------------------ [ Dodano po: 5 minutach ]

    Holandianin spróbuj wgrać ten kod który wcześniej podałem, to bardzo proste matematyczne działanie ale rozumiem że czasem każdy się może zawiesić:) ważne że coś tam próbujesz:) jak masz jakieś pytania wal śmiało;)


    ten kod nie wchodzi:)

    oto błedy:

    sketch_may28a.ino: In function 'void loop()':
    sketch_may28a:17: error: expected `;' before 'Serial'
    sketch_may28a.ino: At global scope:
    sketch_may28a:23: error: expected constructor, destructor, or type conversion at end of input

    _________________
    sig off ;(



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 28 maja 2014, o 16:01 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 11 lut 2013
    Posty: 376
    Lokalizacja: Kłopoty-Stanisławy
    Pomógł: 33

    100 - ( (odczyt / 1024) * 100 )

    nawiasy SĄ ważne

    _________________
    50 znaków Atnela ....



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 28 maja 2014, o 16:05 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 19 lut 2013
    Posty: 223
    Zbananowany użytkownik

    Pomógł: 21

    Cytuj:
    100 - ( (odczyt / 1024) * 100 )

    nawiasy SĄ ważne
    Ten wzór zawsze zwróci 100. Nawiasy faktycznie są ważne, ale potrzebne są tylko wtedy, kiedy kolejność wykonywania obliczeń jaką chcemy osiągnąć nie pokrywa się z priorytetami i łączliwością operatorów.

    _________________
    Nie pisz komentarzy - dobry kod komentuje się sam.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 28 maja 2014, o 16:06 
    Offline
    Nowy
    Avatar użytkownika

    Dołączył(a): 27 maja 2014
    Posty: 11
    Pomógł: 0

    acid3 napisał(a):
    100 - ( (odczyt / 1024) * 100 )

    nawiasy SĄ ważne


    tak jak piszesz i jest cały czas 100%

    _________________
    sig off ;(



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 28 maja 2014, o 16:07 
    Offline
    Użytkownik

    Dołączył(a): 22 sty 2014
    Posty: 1806
    Zbananowany użytkownik

    Pomógł: 168

    barney napisał(a):
    ? Trochę nie rozumiem o co Ci tutaj chodzi, brzmi jakbyś zapomniał o kolejności wykonywania operatorów.


    Masz racje, zapomniałem o kolejności wykonywania działań. zawsze przecież dzielenie się wykona najpierw później odejmowanie:) ja się przyzwyczaiłem że zawsze daje coś w nawiasy na wszelki wypadek i ten nawyk mnie zmylił trochę.

    barney napisał(a):
    Fakt, z matematycznego punktu widzenia 100 jest zawsze liczbą całkowitą i dowolna liczba 0 po przecinku tego nie zmieni. Ale tutaj jest ona przedstawiona w postaci zmiennoprzecinkowej.


    Zapomniałem że nie wyswietlasz zawartości zmiennej która jest int tylko obliczoną wartość. Wybacz:)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 28 maja 2014, o 16:07 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 19 lut 2013
    Posty: 223
    Zbananowany użytkownik

    Pomógł: 21

    Jak tam ten mój poprawiony? Nie napisałeś...

    Serial.print(100.00-odczyt/10.23);

    _________________
    Nie pisz komentarzy - dobry kod komentuje się sam.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 28 maja 2014, o 16:09 
    Offline
    Użytkownik

    Dołączył(a): 22 sty 2014
    Posty: 1806
    Zbananowany użytkownik

    Pomógł: 168

    Wybacz, w kodzie nie było jednego średnika, z resztą kompilator Cie o tym oinformował chyba nie :)?
    Składnia: [ Pobierz ] [ Ukryj ] [ Zaznacz wszystko ]
    język cpp
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    spróbuj teraz



    Ostatnio edytowano 28 maja 2014, o 16:10 przez Nefarious19, łącznie edytowano 1 raz

    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 28 maja 2014, o 16:10 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 11 lut 2013
    Posty: 376
    Lokalizacja: Kłopoty-Stanisławy
    Pomógł: 33

    barney, ja tylko napisałem z jakiego matematycznego wzoru powinno uzyskać się właściwy wynik, nie zważając na sposób zapisu liczb typu float w Arduino, na którym kompletnie się nie znam.
    Więc myślę że po adaptacji powinno to zadziałać.

    _________________
    50 znaków Atnela ....



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 28 maja 2014, o 16:16 
    Offline
    Nowy
    Avatar użytkownika

    Dołączył(a): 27 maja 2014
    Posty: 11
    Pomógł: 0

    ok mam:)))))))))))
    sam jakoś wpadłem na to :)
    Składnia: [ Pobierz ] [ Ukryj ]
    język cpp
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    dzięki za pomoc!!!:)

    _________________
    sig off ;(



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 28 maja 2014, o 18:20 
    Offline
    Użytkownik

    Dołączył(a): 13 maja 2014
    Posty: 135
    Pomógł: 11

    Witam

    Może rozważ "wciągnięcie" tego "-1" do nawiasu poprzez zamianę
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
    na
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
    , tak jest chyba czytelniej.

    Pozdrawiam


    Autor postu otrzymał pochwałę


    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 28 maja 2014, o 19:33 
    Offline
    Użytkownik

    Dołączył(a): 16 maja 2012
    Posty: 349
    Lokalizacja: Legnica
    Zbananowany użytkownik

    Pomógł: 23

    Tak na marginesie 1024 mieści się na 11bitach a chyba autor chce odczytywać przetwornik ADC w trybie 10bitowym czyli odczyt to max 1023 a nie 1024 jak w temacie. Tak więc przedmówcy jak i sam autor podając wzory z 1024 chyba popełniali błąd. Dla operacji na liczbach całkowitych wzór (100*(1023-odczyt))/1023 da dobry wynik od 0 do 100 z dokładnością do 1 (jeden %).

    _________________
    sig off ;(



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 28 maja 2014, o 20:28 
    Offline
    Nowy
    Avatar użytkownika

    Dołączył(a): 27 maja 2014
    Posty: 11
    Pomógł: 0

    perlon napisał(a):
    Tak na marginesie 1024 mieści się na 11bitach a chyba autor chce odczytywać przetwornik ADC w trybie 10bitowym czyli odczyt to max 1023 a nie 1024 jak w temacie. Tak więc przedmówcy jak i sam autor podając wzory z 1024 chyba popełniali błąd. Dla operacji na liczbach całkowitych wzór (100*(1023-odczyt))/1023 da dobry wynik od 0 do 100 z dokładnością do 1 (jeden %).


    dokładnie tak jak piszesz 1023 ale w tym przypadku to nie istotne ponieważ chodzi o sam wzór i czy tam będzie 1023 czy 1024 jest nie istotne. Chodziło o to żeby działało :)

    ------------------------ [ Dodano po: 8 minutach ]

    JanuszT napisał(a):
    Witam

    Może rozważ "wciągnięcie" tego "-1" do nawiasu poprzez zamianę
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
    na
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
    , tak jest chyba czytelniej.

    Pozdrawiam


    Na początku chciałem napisać że nie zadziała ale w momencie gdy do wzorów podstawiłem liczbę np 700 wyszły identyczne wyniki więc wzór można faktycznie uprościć.
    Ale pojawił się kolejny problem!!!
    Po włożeniu czujnika do szklanki czyli wilgotność 100% wartość wysyłana przez czujnik nie wynosi 0 (wielkie zdziwienie) tylko +-250 i teraz dopiero zaczną się schody bo zero nie jest zerem tylko +-250... he he chyba dzisiaj nie zasnę :)

    _________________
    sig off ;(



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 29 maja 2014, o 07:37 
    Offline
    Użytkownik

    Dołączył(a): 16 maja 2012
    Posty: 349
    Lokalizacja: Legnica
    Zbananowany użytkownik

    Pomógł: 23

    To dosyp trochę soli do szklanki i sprawdź wynik. Myślisz, że czysta kranówka i woda słona ma tą samą wilgotność?

    _________________
    sig off ;(



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 29 maja 2014, o 10:02 
    Offline
    Nowy
    Avatar użytkownika

    Dołączył(a): 27 maja 2014
    Posty: 11
    Pomógł: 0

    perlon napisał(a):
    To dosyp trochę soli do szklanki i sprawdź wynik. Myślisz, że czysta kranówka i woda słona ma tą samą wilgotność?


    Już dawno mnie nikt nie zaskoczył :) owszem wiedziałem że gęstość może być inna ale że różnica wilgotności wynosi w/g wskazań mojego czujnika aż 10% to tego się nie spodziewałem :)
    Dodatkowo doszedłem do wniosku że nie ma sensu z tym walczyć ponieważ sygnalizacja wilgotności gleby będzie w postaci 3 diod led i sobie wyliczę ile to jest 75% z zakresu 250-1023 i taki ustawie na diodzie,
    albo będzie 10 diod które będą gasły co 10% czyli 77.3 wartości :)

    Pozdrawiam i dzięki :)

    _________________
    sig off ;(



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 29 maja 2014, o 11:18 
    Offline
    Użytkownik

    Dołączył(a): 16 maja 2012
    Posty: 349
    Lokalizacja: Legnica
    Zbananowany użytkownik

    Pomógł: 23

    Wydaje mi się, że bardziej chodzi o przewodność elektryczną ośrodka w którym znajdują się elektrody a nie gęstość. Wydaje mi się, że to jest czujnik rezystancyjny odczytujący zmiany napięcia na dzielniku napięcia rezystor <-> elektrody w glebie. Nigdy nie miałem czegoś takiego w ręku więc strzelam. Jaki scalak jest na pokładzie tego czujnika?

    O i znalazłem w innym temacie jakoś łudząco podobny czujnik światła.
    http://www.forum.atnel.pl/viewtopic.php?t=7222&p=82634#p82634
    co mnie raczej utwierdza w przekonaniu, że wilgotność jest mierzona za pomocą rezystancji ośrodka między elektrodami.

    _________________
    sig off ;(



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 29 maja 2014, o 11:44 
    Offline
    Nowy
    Avatar użytkownika

    Dołączył(a): 27 maja 2014
    Posty: 11
    Pomógł: 0

    Napewno jest to czujnik rezystancyjny. Scalak to LM393. Cały układ nie jest zbytnio skomplikowany. Dodam zdjęcie do głównego wątku.
    Ten czujnik światła jest identyczny tylko mój ma wiadomo czujnik wilgotności i 4 piny, 1 pin dodatkowy do określenia jakiegoś stanu powiedzmy "krytycznego"

    _________________
    sig off ;(



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 29 maja 2014, o 14:28 
    Offline
    Użytkownik

    Dołączył(a): 16 maja 2012
    Posty: 349
    Lokalizacja: Legnica
    Zbananowany użytkownik

    Pomógł: 23

    No to masz odpowiedź. Ten czujnik nie mierzy wilgotności tylko ją ocenia na podstawie rezystancji ośrodka między elektrodami. Eksperyment z solą miał na celu zmniejszenie oporu elektrycznego wody. Jakbyś dodał do wody kwasu siarkowego ( elektrolitu hehehe )
    to by się okazało, że wilgotność takiego roztworu jest jeszcze większa ;-) Zagadka intelektualna: co wskaże czujnik po zwarciu elektrod np drucikiem miedzianym?

    _________________
    sig off ;(



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 29 maja 2014, o 15:38 
    Offline
    Nowy
    Avatar użytkownika

    Dołączył(a): 27 maja 2014
    Posty: 11
    Pomógł: 0

    pewnie 100% :) he he :)

    _________________
    sig off ;(



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    Wyświetl posty nie starsze niż:  Sortuj wg  
    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 26 ] 

    Strefa czasowa: UTC + 1


    Kto przegląda forum

    Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 gości


    Nie możesz rozpoczynać nowych wątków
    Nie możesz odpowiadać w wątkach
    Nie możesz edytować swoich postów
    Nie możesz usuwać swoich postów
    Nie możesz dodawać załączników

    Szukaj:
    Skocz do:  
    Sitemap
    Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
    phpBB SEO