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



Teraz jest 8 lis 2024, o 23:08


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 ]
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 ]
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 2 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