Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Europejski lider sprzedaży techniki i elektroniki.
Fibaro Fibaro
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Arduino - Odczyt temperatury z czujników - analogowego i cyfrowego.

dawid.barracuda 01 Mar 2014 19:18 7011 12
  • #1 01 Mar 2014 19:18
    dawid.barracuda
    Poziom 13  

    Witam. Zrobiłem taki układ bazujący na Arduino UNO R3:
    Arduino - Odczyt temperatury z czujników - analogowego i cyfrowego.
    Czujnik po lewej to czujnik analogowy MCP9700-E/TO, a po prawej czujnik cyfrowy Dallas 18b20. Opornik taki jak w specyfikacji czujnika Dallas, czyli 4,7 kOm. Program napisałem i działa. Problem polega na tym, że odczyty z obydwu czujników się różnią. Gdyby się różniły nieznacznie to bym nie zawracał nikomu głowy, ale one się różnią średnio o ok. 2 stopnie Celsjusza, a to mnie już bardzo niepokoi.
    Próbowałem różnych konfiguracji podłączenia, m. in. chciałem podciągnąć GND i napięcie 5V do wspólnych skrajnych szyn na płytce stykowej i podłączyć do niej dwa czujniki, ale wtedy wyniki dla czujnika analogowego były jeszcze bardziej absurdalne i oscylowały w granicach 300st. Dlatego czujnik analogowy podłączyłem pod gniazdo 3,3V na Arduino, a Dallasa na 5V.
    Stąd moje pytanie: czy da się jakoś ten mój prosty układ tak zmontować, żeby było wspólne zasilanie dla obydwu czujników i wyniki zbliżone do siebie? Może gdzieś robię błąd? W elektronice jestem raczkujący. Proszę uprzejmie o wskazówki i pozdrawiam.

    0 12
  • Fibaro
  • Pomocny post
    #2 01 Mar 2014 19:52
    Marek_Skalski
    Poziom 33  

    0. Dokładność deklarowana przez producenta to ±4°C. Skoro masz 2, to całkiem nieźle :)
    Pamiętaj, że to tylko termistor ze wzmacniaczem. Możesz poprawić jego dokładność poprzez korekcję , vide ds dla MCP9700.
    1. DS18B20 jest dokładniejszy, za cenę prędkości. Możesz próbować wyskalować MCP9700 korzystając z 18B20. Jeżeli będziesz cierpliwy, to możesz uzyskać ok. ±0,1°C między czujnikami.
    2. Przetwarzanie sygnałów z czujników analogowych wymaga trochę doświadczenia. Na początek prowadź sygnały możliwie krótko, w ekranie, sampluj częściej niż potrzebujesz i albo uśredniaj, albo zwiększaj rozdzielczość przez decymację.
    3. W przypadku dokładnych pomiarów temperatury, należy uwzględnić bezwładność termiczną układu obiekt --- ośrodek --- obudowa --- czujnik. W bardzo dokładnych pomiarach tworzy się modele cieplne.

    0
  • #3 01 Mar 2014 20:01
    dawid.barracuda
    Poziom 13  

    Jak napisałem jestem raczkujący w temacie :) Jak mogę osiągnąć to o czym napisałeś w 1szym punkcie?

    0
  • Fibaro
  • Pomocny post
    #4 01 Mar 2014 20:20
    Marek_Skalski
    Poziom 33  

    Umieść oba czujniki możliwie blisko siebie (mogą się lekko dotykać), a całość zamknij w obudowie, którą umieścisz w komorze cieplnej. Komora powinna zabezpieczyć czujniki przed wpływem czynników, np. wilgoci lub wody jeżeli umieścisz ją w zamrażarce lub wrzącej wodzie. Zmieniając temperaturę w komorze, notuj wartość wskazaną przez każdy z czujników. Później użyj jakiegoś programu, w którym będziesz mógł dopasować funkcję korygującą. Może to być Excel, Matlab, Calc czy dowolny inny. Jeżeli funkcja korygująca będzie zbyt skomplikowana, np. wielomian >3. rzędu, to podziel zakres na mniejsze części, np. -20..0, 0..40, 40..80, 80..120. A później funkcję korekcji wprowadź do programu, który wartość zmierzoną z MCP będzie przetwarzał według równania: T = funkcja(ADC_Value), np. Temp = k2*ADC_Value*ADC_Value + k1*ADC_Value + k0;

    0
  • Fibaro
  • #5 01 Mar 2014 21:01
    dawid.barracuda
    Poziom 13  

    Rozumiem, że mam zabezpieczyć czujniki i zmierzyć temperatury w warunkach bardzo gorących i bardzo zimnych, tak?

    0
  • Pomocny post
    #6 01 Mar 2014 21:06
    piotrva
    Moderator Mikrokontrolery

    Nie do końca - musisz zabezpieczyć czujki i mierzyć temperaturę w wielu punktach - czyli np. wlewasz do szklanki gorącą wodę i potem, w miarę chłodzenia się jej (idealne byłoby jej mieszanie mieszadłem magnetycznym) mierzysz np. co 0,5 stopnia wg. DS18B20 jakie jest napięcie z drugiego czujnika i potem masz wykres U(T) i na tej podstawie tworzysz aproksymację czujnika analogowego.
    Potem czynność możesz powtórzyć wkładając naczynie z wodą do zamrażarki i postępując podobnie podczas schładzania się wody i jej zamarzania.

    0
  • #7 01 Mar 2014 21:09
    dawid.barracuda
    Poziom 13  

    Jak mogę zabezpieczyć czujnik w warunkach domowych? I mam jeszcze jedno pytanie - używanie Arduino do takiego pomiaru to trochę jak wytaczanie armaty na muchę :) Wobec tego jaki mikrokontroler musiałbym zaprogramować żeby działało to bez Arduino?

    0
  • Pomocny post
    #8 01 Mar 2014 21:22
    piotrva
    Moderator Mikrokontrolery

    Zabezpieczenie - np. koszulka termokurczliwa (tylko dobrze dobrana, żeby woda nie zalała połączeń z kablami), klej na gorąco, ...
    Ale co docelowo chcesz mierzyć?
    Do kalibracji takiego czujnika Arduino jest OK.

    0
  • #9 01 Mar 2014 22:12
    dawid.barracuda
    Poziom 13  

    Mam taką książkę dla początkujących w temacie elektroniki i tam jest projekt prostego robota typu łazik na podwoziu robota Magician. Sterowany pilotem. Czyli docelowo chcę mierzyć temperaturę w pomieszczeniach. Przymierzam się do wykonania i chciałbym go rozbudować o tyle żeby mierzył mi temperaturę i wysyłał na LCD. I nie chcę angażować do tego Arduino tylko przy okazji nauczyć się pisać jakieś proste rzeczy na mikrokontrolery.
    Kalibrować jak już będę z Arduino :)

    Dodano po 44 [minuty]:

    piotrva napisał:
    wlewasz do szklanki gorącą wodę i potem, w miarę chłodzenia się jej (idealne byłoby jej mieszanie mieszadłem magnetycznym) mierzysz np. co 0,5 stopnia wg. DS18B20 jakie jest napięcie z drugiego czujnika

    Nie wiem do końca czy dobrze zrozumiałem - mam mierzyć temperaturę czujnikiem cyfrowym, a miernikiem napięcie na wyjściu czujnika analogowego?

    0
  • Pomocny post
    #10 01 Mar 2014 22:42
    Marek_Skalski
    Poziom 33  

    Potrzebujesz wartość odczytaną z 18B20 oraz wartość odczytaną z ADC, do którego jest podłączony MCP. Użyj Arduino do wyświetlania wyników z obu czujników na LCD. Możesz też wysyłać wyniki do PC przez dowolny port, np. COM (na USB). Jak dobrze napiszesz program, to wszystkie wyniki zbierzesz w jednym pliku, (.csv), z którego dane łatwo zaimportujesz do dowolnego programu wykonującego obliczenia. W ten sposób nie będziesz musiał czekać przy tej "szklance wody" i nie będziesz musiał zapisywać kolejnych wyników.
    Jeżeli zaczniesz od gorącej wody, to co 10s (przykładowo) odczytaj wynik z każdego czujnika i wyślij go do pliku (jako liczbę dziesiętną). Jeżeli temperatura spadnie do 30°C, to wstaw "szklankę" do pojemnika wypełnionego lodem (albo lodówki) i nadal sprawdzaj wyniki. Jak już woda zamarznie, to koniec pomiarów.
    Wyznacz funkcję korekcji, dodaj do programu i powtórz pomiary. Wskazania temperatury nie powinny się już różnić.
    Zamiast szklanki proponuję coś bardziej wytrzymałego ;)

    0
  • #11 02 Mar 2014 16:54
    dawid.barracuda
    Poziom 13  

    O ile dobrze rozumiem to z czujnika cyfrowego (jako, że jest bardziej dokładny) mam spisywać temperaturę, a z analogowego wartość napięcia z przetwornika analogowo-cyfrowego, czy tak? Czyli z analogowego czujnika interesuje mnie wartość napięcia która wchodzi do gniazda analog in w Arduino, czy tak?

    Dodano po 14 [minuty]:

    Podejrzałem sobie, co się wyświetli jak w Arduino napisałem, żeby wyświetlał mi gołą wartość z Analog In (mam na myśli czujnik analogowy). Przez pierwsze 9 pomiarów była to liczba 4-cyfrowa o wartości ok. 1500, a potem były już tylko liczby 5-cyfrowe o wartości ok. 15000. Jak mam to interpretować?

    0
  • #13 02 Mar 2014 21:39
    dawid.barracuda
    Poziom 13  

    Program jest taki:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0
TME logo Szukaj w ofercie
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME
TME Logo