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



Teraz jest 28 kwi 2024, o 16:31


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 20 ] 
Autor Wiadomość
PostNapisane: 28 paź 2016, o 21:07 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 30 sty 2013
Posty: 169
Lokalizacja: Silesia - P-ce
Pomógł: 10

Witam.

Chciałbym wam przedstawić mój pomysł na obsługę czujnika wilgotności DHT11/DHT22 ( RHT01 / RHT03 / AM2302).

Proszę również o przetestowanie, oraz o ewentualne podpowiedzi co dodać/zmienić.

Biblioteka nie korzysta z delay'ów tylko z timerów sprzętowych i programowych. Do tego celu został wykorzystanie Timer0 który zgłasza przerwanie co 20us (implementacja i konfiguracja wewnątrz biblioteki), oraz dowolnego Timera konfigurowanego przez użytkownika - przerwanie musi być zgłaszane co 10ms.
Bibliotekę przystosowałem do mikrokontrolerów Atmega32 oraz 48, 88, 168 ...
Możliwa praca z kwarcami 10MHz, 11.0592MHz, 14.7456MHz, 16MHz

Funkcja odczytu zwraca wartość średnią z obecnie dokonanego pomiaru, oraz ostatniej wartości średniej.

Minimalny odstęp między pomiarami wg producenta może wynieść 2sekundy.

W pliku nagłówkowym .h wybieramy do którego pinu podpięty jest nasz czujnik, oraz wybieramy rodzaj czujnika (poprzez wpisanie 1 bądź 2 przy #define DHT).

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


Plik główny wygląda następująco:

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


Na początku programu przed pętlą główną należy wykonać inicjalizację biblioteki poprzez funkcję
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

(oraz odblokować przerwania - sei() )

Natomiast odczyt z czujnika dokonujemy poprzez funkcję
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
, gdzie wilg i temp to zmienne do których będą przepisana wartość wilgotności i temperatury.

Użytkownik tej biblioteki musi skonfigurować we własnym zakresie przerwanie co 10ms i wstawić do obsługi następujący warunek:

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


Przykładowe użycie:

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


To by było chyba na tyle.
Proszę o opinie i testowanie. Jeżeli coś jest nie tak to pisać. Wszystkie informacje będą przydatne.

Pozdrawiam.

-----
Edytowano 29-10-2016: Poprawa kodu i uaktualnienie plików do pobrania


Załączniki:

Aby zobaczyć załączniki musisz się zalogować. Tylko zalogowani użytkownicy mogą oglądać i pobierać załączniki.

_________________
Niewiele trzeba by być szczęślwym.Wystarczy chcieć



Ostatnio edytowano 29 paź 2016, o 19:08 przez danielos, łącznie edytowano 4 razy

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 paź 2016, o 07:16 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 lis 2011
Posty: 156
Pomógł: 12

Dzięki kawał dobrej roboty



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 paź 2016, o 08:17 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 16 mar 2014
Posty: 745
Lokalizacja: Warszawa
Pomógł: 32

Bardzo ładnie napisana uniwersalna biblioteka :-)
Dziękuję za podzielenie się swoją pracą, przy okazji przetestuję.

_________________
.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 paź 2016, o 15:33 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 lis 2012
Posty: 283
Lokalizacja: Warszawa
Pomógł: 17

Hej,

Biblioteka działa, sprawdziłem na DHT11 :) Trzeba tylko w pliku ds_dht.c w warunku:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


dopisać sprawdzanie tej sumy :)

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


Autor postu otrzymał pochwałę

_________________
Pozdrawiam
Grzegorz



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 paź 2016, o 16:14 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 30 sty 2013
Posty: 169
Lokalizacja: Silesia - P-ce
Pomógł: 10

MikieMan napisał(a):
Dziękuję za podzielenie się swoją pracą, przy okazji przetestuję.


No to czekam na opinię po testach.

buz11 napisał(a):
Biblioteka działa, sprawdziłem na DHT11 :) Trzeba tylko w pliku ds_dht.c w warunku:
(..)
dopisać sprawdzanie tej sumy :)


Dzięki za opinię i testy, oraz za znalezienie błędu. Obliczanie tej sumy jest, ale w tym warunku który został troszeczkę źle sformułowany - coś źle musiałem przenieść. Dzięki za znalezieniu tego błędu.

Już poprawiam.

_________________
Niewiele trzeba by być szczęślwym.Wystarczy chcieć



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 paź 2016, o 17:18 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 28 lis 2012
Posty: 283
Lokalizacja: Warszawa
Pomógł: 17

No i jedna drobnostka - to jest czujnik wilgotności i temperatury a nie ciśnienia i temperatury :)

_________________
Pozdrawiam
Grzegorz



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 paź 2016, o 19:06 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 30 sty 2013
Posty: 169
Lokalizacja: Silesia - P-ce
Pomógł: 10

buz11 napisał(a):
No i jedna drobnostka - to jest czujnik wilgotności i temperatury a nie ciśnienia i temperatury


Hehehe... wiedziałem że gdzieś użyłem słowa 'ciśnienie' ale nie wiedziałem gdzie. Tak to już jest jak się ma mętlik w głowie. Trzeba się w końcu zresetować ;)

W plikach zmienię jak będzie jakaś zmiana dot. działania programu. W wątku już zmieniam.

Dzięki;)

_________________
Niewiele trzeba by być szczęślwym.Wystarczy chcieć



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 paź 2016, o 19:35 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 sie 2013
Posty: 3797
Lokalizacja: Grudziądz
Pomógł: 143

danielos napisał(a):
Trzeba się w końcu zresetować ;)


Najlepszy reset elektronika:
10% kalafonii
90% spirytusu
Zmieszane w pojemniku 50ml :)

Wysłane z mojego LIVE przy użyciu Tapatalka

_________________
Usługi druku przestrzennego - www.drumik.pl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 paź 2016, o 20:07 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 lis 2015
Posty: 1448
Lokalizacja: okolice Warszawa
Pomógł: 149

10% kalafonii ? :?
może dać nieprzewidziany efekt,
do resetu lepiej nie mieszać :lol:
Uwaga- restart może być uciążliwy. :?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 kwi 2017, o 21:22 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 lut 2013
Posty: 148
Lokalizacja: KTT
Pomógł: 1

Bardzo fajna biblioteka i działa bez problemu na ATmega644PA (po minimalnych przeróbkach).
Ja próbowałem obsłużyć ten czujnik na przerwaniach COMPx i PCINTx, ale jakoś opornie mi to idzie... :|

_________________
Gordon



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 maja 2017, o 18:13 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 30 sty 2013
Posty: 169
Lokalizacja: Silesia - P-ce
Pomógł: 10

gordon10 napisał(a):
Bardzo fajna biblioteka i działa bez problemu na ATmega644PA (po minimalnych przeróbkach).

Ciesze się, że przydała się kolejnej osobie.

gordon10 napisał(a):
przerwaniach COMPx i PCINTx

hmmm, na pewno ciekawy i niespotykany sposób.
Czekam na wyniki twoich wysiłków - życzę więc powodzenia i wytrwałości.

_________________
Niewiele trzeba by być szczęślwym.Wystarczy chcieć



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

Dołączył(a): 13 lis 2015
Posty: 48
Pomógł: 0

Super.
Wielkie dzięki za bibliotekę. Przetestowałem na DHT11 - działa, a na DHT22 po małych modyfikacjach kodu pięknie odczytuje wraz ze znakiem temperatury ujemnej.
Jeszcze troszeczkę dopieściłem i mam automatyczne wykrywanie podłączonego czujnika. Jak ktoś chce to podeślę kod po lekkich modyfikacjach.
Pozdrawiam wszystkich.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 maja 2017, o 19:45 
Offline
Użytkownik

Dołączył(a): 02 gru 2015
Posty: 63
Pomógł: 1

hmm a ja mam jakieś "zaćmienie umysłu", mi ta biblioteka nie działa... właściwie to utyka na odczycie temperatury.
Myślałem, że może czujnik mam uszkodzony ale na arduino DHT11 działa poprawnie.

Dane platformy testowej:

Zestaw ATB-1.04b (Atmega32)
Czujnik DHT11

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


i jeszcze plik main.c

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


ehh... wstyd się przyznać, gdybym wcześniej przeczytał...:

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


plik: mina.c

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


A więc tak "coś tam się wykonuje", ale dodatkowo musiałem wyrzucić z biblioteki: z pliku ds_dth.c z lini 271: PORTA ^= (1<<PA0);
Bo w innym wypadku miałem znaki zapytania.
Tylko, że na lcd wyświetlają mi się dwie zmienne pomiar[0] o wartości 8709i pomiar[1] 8453, i te wartości się nie zmieniają nawet jak czujnik trzymam w palcach.

Pozdrawiam,
Tomek



Ostatnio edytowano 30 maja 2017, o 17:39 przez Tomek86, łącznie edytowano 2 razy

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 30 maja 2017, o 17:03 
Offline
Użytkownik

Dołączył(a): 02 gru 2015
Posty: 63
Pomógł: 1

Adriang200 napisał(a):
Jeszcze troszeczkę dopieściłem i mam automatyczne wykrywanie podłączonego czujnika. Jak ktoś chce to podeślę kod po lekkich modyfikacjach.


Bardzo chętnie przetestuję biblioteczkę :), jestem ciekawy jak wykonałeś wykrycie czujnika :)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 1 cze 2017, o 19:28 
Offline
Użytkownik

Dołączył(a): 13 lis 2015
Posty: 48
Pomógł: 0

Biblioteka automatycznie wykrywająca typ czujnika, powstała na podstawie kodów udostępnionych przez danielos
Pozdrawiam.

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



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




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




Jeszcze potrzebna będzie biblioteka USART, ale to już w własnym zakresie.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 2 cze 2017, o 21:22 
Offline
Użytkownik

Dołączył(a): 02 gru 2015
Posty: 63
Pomógł: 1

dzięki @Adriang200

zmodyfikowana biblioteka działa bardzo fajnie :)

Tak poza tematem, zastanawiam się, czemu pomiar wilgotności przez czujnik DTH11 wskazuje o 20punktów mniej niż stacjonarna stacja meteo (któryś z czujników źle wskazuje :P)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 cze 2017, o 11:54 
Offline
Użytkownik

Dołączył(a): 13 lis 2015
Posty: 48
Pomógł: 0

Pomiędzy DHT22 a DHT11 też zaobserwowałem podobną różnicę.
Zawsze można to skalibrować poprzez odjęcie lub dodanie tych 20 punktów by wartości były podobne.
Jak byś miał kiedy DHT22 to napisz czy też są takie odchylenia względem stacji meteo.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 cze 2017, o 12:08 
Offline
Użytkownik

Dołączył(a): 02 gru 2015
Posty: 63
Pomógł: 1

Adriang200 napisał(a):
Jak byś miał kiedy DHT22 to napisz czy też są takie odchylenia względem stacji meteo.


Ok, dam znać. Posiadam w tej chwili tylko DTH11, pewnie przy kolejnym zamówieniu dołożę do zakupów DTH22.
Sam jestem ciekaw który będzie wskazywał dokładnej :)

Pozdrawiam,
Tomek.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 cze 2017, o 00:54 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 17 sie 2013
Posty: 3797
Lokalizacja: Grudziądz
Pomógł: 143

Tomek86 napisał(a):
Sam jestem ciekaw który będzie wskazywał dokładnej :)


DHT22 jest bardziej dokładny co wynika z noty katalogowej. Wystarzy porównać notę dla DHT11 i DHT22 :)

Pozdrawiam

_________________
Usługi druku przestrzennego - www.drumik.pl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 21 mar 2018, o 18:46 
Offline
Użytkownik

Dołączył(a): 09 mar 2015
Posty: 32
Pomógł: 0

Dzięki Adriang200 i danielos! Pięknie śmigają biblioteki. A jak przyjemnie się analizuje kod z taką ilością komentarzy. To mi przypomina działalność mirekk36 z czasów jak był młody ;-)



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: 20 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 6 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