Elektroda.pl
Elektroda.pl
X
Przedłużacze helukabelPrzedłużacze helukabel
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Termometr samochodowy z funkcją woltomierza

Taj 08 Sty 2011 20:33 32800 44
  • Termometr samochodowy z funkcją woltomierza

    Witam.
    Po raz pierwszy zdecydowałem się przedstawić na łamach forum swoją konstrukcję.
    Chciałbym zaprezentować swój pomysł na Termometr Samochodowy.

    Podczas upalnego lata zauważyłem że po zainstalowaniu instalacji gazowej moje auto ma bardzo duże wahania mocy silnika w zależności od temperatury zewnętrznej. Naszła mnie chęć przyjrzenia się tej sytuacji i zabrałem się za tworzenie.

    Głównym zamiarem dla którego skonstruowałem urządzenie była chęć monitorowania temperatury parownika instalacji gazowej oraz temperatury powietrza dolotowego do silnika.

    Założenia były takie:
    - wyświetlanie 3 temperatur
    - monitorowanie napięcia w instalacji samochodu
    - prezentacja na wyświetlaczu LCD
    - regulowane podświetlenie LCD
    - mała obudowa
    - łatwość w podłączaniu czujników temperatury

    Schemat układu:
    Termometr samochodowy z funkcją woltomierza

    Główne elementy układu to:
    - Atmega8
    - wyświetlacz LCD alfanumeryczny 2x16
    - 3 razy DS18B20

    Płytka PCB:
    Termometr samochodowy z funkcją woltomierza Termometr samochodowy z funkcją woltomierza

    Po zmontowaniu całość wygląda tak:
    Termometr samochodowy z funkcją woltomierza

    Jak widać na poniższym zdjęciu z urządzenia wychodzą dwa przewody zakończone złączkami. Jedna złączka to zasilanie z instalacji samochodowej (zasilanie "po stacyjce"), natomiast druga to przedłużacz umożliwiający podłączenie równolegle cyfrowych czujników temperatury DS18B20.
    Termometr samochodowy z funkcją woltomierza


    Był to mój pierwszy projekt napisany w języku C. Do tej pory pracowałem w Bascomie.

    Oto główne funkcję jakie udało mi się zaimplementować:
    - wykrywanie ilości urządzeń podłączonych do 1 wire
    - wywoływanie i aktywowanie jednego z kilku układów 1 wire podłączonych do magistrali
    - odczyt temperatury z wybranego czujnika
    - rozdzielczość pomiaru do 0,5 stopnia; wyświetlania do 1 stopnia
    - wyświetlanie znaku "-" dla ujemnych temperatur
    - możliwość włączenia lub wyłączenia znaku stopnia za wskazaniem temperatury
    - ustawianie kolejności wskazań z czujników 1 wire ( zapamiętanie w EEPROM )
    , daje to możliwość podłączenia jakichkolwiek czujników DS18B20 bez konieczności znania i programowania ich adresów ROM, wystarczy wejść w menu urządzenia i raz ustawić ich kolejność wyświetlania
    - pomiar napięcia zasilania z dokładnością do 0,1V
    - uśrednianie szybkich zmian napięcia, co daje stabilne wskazanie w przypadku małych wahań
    - funkcja wyświetlenia "napięcia rozruchu" - minimalnego napięcia podczas rozruchu silnika
    - regulacja PWM podświetlenia LCD

    Podczas pisania programu doszedłem do wniosku że zawsze można coś zmienić, poprawić czy dodać nową funkcję. Jednak dość długo trwało złożenie do "kupy" całej zabawki dlatego postanowiłem zakończyć na tym etapie.

    Fajne! Ranking DIY
    Potrafisz napisać podobny artykuł? Wyślij do mnie a otrzymasz kartę SD 64GB.
    O autorze
    Taj
    Poziom 12  
    Offline 
    Taj napisał 95 postów o ocenie 175, pomógł 0 razy. Mieszka w mieście Białystok. Jest z nami od 2002 roku.
  • Przedłużacze helukabelPrzedłużacze helukabel
  • #2
    phrozen
    Poziom 20  
    Witam
    Bardzo elegancki projekcik - nie mam się do czego przyczepić :]
    No prawie - troszkę przegrzałeś toner bo się troszkę rozpłynął ale poza tym wszystko jest OK.

    Chciałbym się dowiedzieć skąd wziąłeś taki ładny panel przedni? Sam wykonałeś czy może to jakaś obudowa z odzysku lub kupiona?

    A odnośnie opisu to brakuje mi tylko foto zmontowanego układziku.
    Pozdrawiam
    phrozen

    P.S.
    Gdybym nie wykorzystał wszystkich głosów dostałbyś ode mnie "Fajne".
  • #3
    danio_ac
    Poziom 11  
    kolego udostępnisz wsad do procka ??
  • #4
    krychast
    Poziom 20  
    Przydałby się wzór płytki + wsad a także fotka jak prezentuje się to w aucie.Również mam pytanie jak robiłeś panel? Projekt bardzo interesujący.
  • #5
    drzasiek
    Specjalista - Mikrokontrolery
    Bardzo fajny projekt :) Panel jeśli mnie wzrok nie myli to po prostu wydruk czarnego tła z białymi literami na kartce i przyklejona na tym taśma dla zabezpieczenia przed wilgocią?
    Również chętnie bym spojrzał na kod źródłowy, może jakieś rozwiązanie by sie do czegoś przydało no chyba że kodu nie chcesz udostępniać (masz do tego prawo)
    pozdrawiam
  • Przedłużacze helukabelPrzedłużacze helukabel
  • #6
    kaytec
    Poziom 20  
    Witam, czy mógłbyś powiedzieć coś więcej o zastosowanej obudowie? Jaki to model? Czy przedni panel jest laminowany?
  • #8
    shadow0013
    Poziom 34  
    Ładnie wykonanie, zaczernij pisakiem obrzeże wycięcia na wyświetlacz. W programie dodałeś spadek napięcia na D1? i popraw w opisie - 3 razy DS18B20.
  • #9
    Taj
    Poziom 12  
    koszt części w granicach 50 zł.

    obudowa standardowa zakupiona w sklepie elektronicznym (oznaczenie chyba z-4, ale nie wiem jakiego producenta)

    Panel przedni zrobiłem w taki sposób że wyciąłem w obudowie otwór na wyświetlacz oraz przycisk. Wydrukowałem na zwykłej kartce wzór, zalaminowałem i nakleiłem taśmą dwustronną. Efekt jak dla mnie zadowalający.

    Ostrzeganie o słabym akumulatorze jest w postaci komunikatu o minimalnym napięciu akumulatora podczas rozruchu silnika.

    ps.
    wzór płytki wstawie później

    wsad udostępnię dla zainteresowanych

    nad kodem źródłowym się zastanowie. W całości raczej go nie udostępnię z takiego względu że niektórych bibliotek nie pisałem sam a udostępnił mi znajomy.

    ale jeśli ktoś jest zainteresowany mogę dać niektóre fragmenty pisane przezemnie.
    Np bilbioteka obsługi magistrali 1 wire.

    Dodano po 1 [minuty]:

    shadow0013 napisał:
    Ładnie wykonanie, zaczernij pisakiem obrzeże wycięcia na wyświetlacz. W programie dodałeś spadek napięcia na D1? i popraw w opisie - 3 razy DS18B20.


    tak uwzględniłem ten spadek :) wynik napięcia jest poprawny
  • #10
    harnasx
    Poziom 22  
    Moim zdaniem napis "Termometr samochodowy" na przednim panelu jest bez sensu (wiadomo że to termometr jeśli wyskalowany jest w stopniach Celcjusza) a napis nie nadaje estetyki jeśli ma to być zamontowane w samochodzie.

    Chętnie bym zobaczył fotki zmontowanego urządzenia.

    Poza w/w niezła konstrukcja!!
  • #11
    Taj
    Poziom 12  
    harnasx napisał:
    Moim zdaniem napis "Termometr samochodowy" na przednim panelu jest bez sensu...
    Chętnie bym zobaczył fotki zmontowanego urządzenia.


    fakt nie czuje się uzdolniony pod kątem designu. Taki sposób wykonania panelu daje możliwość zmiany w każdym momencie, gdyż wystarczy odkleić stary i przykleić nowy ładniejszy panel. Jednak jak narazie moje oczekiwania zadowala :)

    Fotek zmontowanego urządzenia nie zrobiłem a teraz nie szczególnie mam chęć rozbierać i robić zdjęcia. roszę wybaczyć
  • #12
    hotdog
    Poziom 26  
    Zrobił bym jedną rzecz inaczej - podłączył bym każdy czujnik do innego pinu procka. Masz wtedy dużo prostszy program, brak konieczności rozpoznawania czujnika po ID, implementacji 1WireSearch i tym samym brak potrzeby na menu. Każdy czujnik był by przypisany do swojej wtyczki.

    Widzę że brakuje Tobie też miejsca na dziesiętne stopnie temperatury. Ja bym zrobił opis na obudowie, w górnej 3 temperatury, w dolnej 1 + napięcie na aku. W ten sposób 4 pełne temperatury (-55,0 do 128,0) po 5 znaków na jedną.

    Poza tym nice.
  • #13
    Taj
    Poziom 12  
    hotdog napisał:
    Zrobił bym jedną rzecz inaczej - podłączył bym każdy czujnik do innego pinu procka. Masz wtedy dużo prostszy program, brak konieczności rozpoznawania czujnika po ID.....


    No właśnie ideą było to żeby zrobić tak układ że z kabiny samochodu wystarczy pociągnąć jeden przewód 3 żyłowy a dopiero pod maska rozdzielić go np na trzy czujniki podłączając wszystkie sygnały równolegle.

    Dodatkowo jednym z ważnych powodów dla którego zrobiłem to urządzenie była chęć nauki programowania w C. Zatem uznałem że tak będzie trudniej i ciekawiej :)

    Do tych pomiarów rozdzielczość co do stopnia jest w pełni wystarczająca.

    Co do ustawienia wyświetlanych wyników fakt można było zrobić tak jak mówisz. Jednak zmniejszyła by się czytelność no i w ten sposób mogę zaprogramować dowolna ilość opisów i mam możliwość konfigurowania opisów bez konieczności zmiany panelu ani programowania procka.


    Choć nie wykluczone że w przyszłości zrobię tak jak proponujesz :)

    Pozdrawiam
  • #14
    Mihas66
    Poziom 22  
    Powiem tak jak dla mnie bomba, tylko szkoda że nie udostępniasz wsadu bo zrobił bym sobie kopie tylko jeden czujnik dał bym na zewnątrz samochodu jeden w obudowie filtra powietrza a a ostatni za IC w dolocie powietrza dzięki temu miał bym obraz czy fabryczny IC daje rade i jak bardzo turbina nagrzewa powietrze, do kompletu brakowało by mi tylko cyfrowego manometru ciśnienia doładowania i był bym już wogóle w 7 niebie.... Nie chcesz takiego czegoś zrobić na zamówienie, odpłatnie?
  • #15
    pawelj
    Poziom 15  
    Mógłbyś pokazać fragment programu, który mierzy napięcie ?
  • #17
    Tomkiewicz
    Poziom 13  
    Taka mała uwaga: jeżeli na etykietkach dajesz "*C", to na lcd wartość powinna być bez znaku *. To trochę dziwnie wygląda.

    Taj napisał:
    niektórych bibliotek nie pisałem sam a udostępnił mi znajomy.

    Można wiedzieć, co konkretnie? Piszę otwartą bibliotekę i jestem ciekaw, co takiego jest tak trudno dostępne, że warto by było to napisać i udostępnić ;).
  • #18
    karola44-81
    Poziom 27  
    Taj mam ogromną prośbę. Wklej wsad tutaj.
    W programowaniu słabieńki jestem, a ten projekt jest dokładnie taki jaki potrzebuje.
  • #19
    przemo.t
    Poziom 27  
    Projekt bardzo fajnie wykonany, gratukuję.

    Jedno pytanie, dlaczego nie korzystasz z wewnętrznego źródła napięcia referencyjnego w Atmedze?

    neo_84 napisał:
    Mihas66 ...niestety czujnik ciśnienia jest najdroższy z tego wszystkiego bo kosztuje ok 70zl w górę ...


    Można zamówić sample
  • #20
    Taj
    Poziom 12  
    Tomkiewicz napisał:
    Taka mała uwaga: jeżeli na etykietkach dajesz "*C", to na lcd wartość powinna być bez znaku *. ;).


    zgadzam się, że może nie wygląda to za elegancko dlatego umieściłem w ustawieniach możliwość wyłączenia tego znaczka.

    Wymiana panelu to też mały problem.

    Jeśli chodzi o biblioteki to nie ma tam może nic wielkiego ale kolega udostępnił mi bardzo funkcjonalną bibliotekę obsługi LCD. Wiem że jest ich dużo i łatwo dostępnych jednak nie ja ją napisałem i nie będę jej umieszczał.

    Zresztą jeśli chodzi o różne biblioteki to myślę że w sieci jest ich już dużo. Inna kwestia to taka że żeby je użyć trzeba nad nimi po prostu przysiąść.

    Dodano po 1 [minuty]:

    przemo.t napisał:
    Projekt bardzo fajnie wykonany, gratuluję.

    Jedno pytanie, dlaczego nie korzystasz z wewnętrznego źródła napięcia referencyjnego w Atmedze?


    Ostatecznie skorzystałem z wewnętrznego źródła.
    To dałem "na zapas".
  • #21
    havez
    Poziom 10  
    nie wiem dlaczego, ale zdjęcia coś się nie wyświetlają...

    TAJ, możesz powiedzieć na jakiej zasadzie zmienia się ta moc w zależności od temperatury?
  • #22
    grala1
    Specjalista grupy V.A.G.
    shadow0013 napisał:
    Ładnie wykonanie, zaczernij pisakiem obrzeże wycięcia na wyświetlacz. W programie dodałeś spadek napięcia na D1? i popraw w opisie - 3 razy DS18B20.

    Po czym kolega rozpoznał że są tu zastosowane DS18B20 a nie DS1820?

    Dodano po 2 [minuty]:

    pawelj napisał:
    Mógłbyś pokazać fragment programu, który mierzy napięcie ?

    Coś na wzór tego jak użyjesz przetwornika 10 bitowego - a taki w tym projekcie jest użyty
    Code:

    $regfile = "m8def.dat"
    $crystal = 16000000

    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5

    Config Adc = Single , Prescaler = Auto , Reference = Avcc

    Dim Wart_ac As Word
    Dim V As Single
    Dim Wart_nap As String * 3
    Start Adc

    Cls

    Do
       Wart_ac = Getadc(1)
       
       Lcd Wart_ac

       Lowerline

       V = Wart_ac * 0.0049

       V = V * 6 'dzielnik 1:6 - tu musisz podac swoj dzielnik

       Wart_nap = Fusing(v , "#.&&")

       Lcd "U = "
       Lcd Wart_nap
       Lcd " V"

       Waitms 100

    Loop
    End
  • #23
    Taj
    Poziom 12  
    Tak jak napisałem w poście jest to mój pierwszy projekt w C i ciężko powiedzieć że opanowałem programowanie w C od początku do końca jednak projekt ukończyłem i jestem zadowolony że działa jak chciałem:)

    Pomiar napięcia zrobiłem w taki sposób (w tym przypadku wspierałem się jakimś projektem z avrfreaks.net):

    Code:
    unsigned int adc_sample(uint8_t Channel)
    
       {
                /* Global variable */
          uint8_t SampleH=0;
          uint8_t SampleL=0;
          unsigned int Sample=0;
       
          ADCSRA |= (1<<ADPS2);
          ADCSRA |= (1<<ADPS0);
          ADMUX = Channel;     //wybór kanału
          ADMUX  |= (1<<REFS1);
          ADCSRA |= (1<<ADEN);
          ADCSRA |= (1<<ADSC); //Start, single mode

         while  (!(ADCSRA & (1<<ADIF)))  // czeka az skonczy konwersje
         {
         }
          SampleL = ADCL;
          SampleH = ADCH;    
          Sample  = (SampleH<<8);
          Sample |= (SampleL);
    return Sample;
    }                                 
  • #24
    emmett brown
    Poziom 12  
    A jak mierzysz temperaturę parownika? Przykleiłeś czujnik do jego ścianki, czy wwierciłeś się do środka z czujnikiem i mierzysz temperaturę gazu rozprężonego?
    Hmm. przyklejony do ścianki czujnik po rozgrzaniu silnika i tak pokaże temperaturę zbliżoną do temp. silnika, no może o kilka stopni niższą. Więc jaka tu rewelacja z tym pomiarem temperatury parownika?
  • #25
    IMEX
    Poziom 20  
    Fotka efektowna z powodu braku na niej tylnej czesci obudowy co daje efekt Bardzo płaskiego urządzenia

    Poza tym program jest banalnie prosty (kilka m-c mojej nauki w bascomie) robi zwoje

    Poza tym wszystkim zastosował bym - tylko dla Bajery LCD z podświetlaniem RGB zmieniającym kolor wraz z jedną z temperatur - chcę takie coś zastosować przy oświetleniu Kominka - Na razie brak konkretnie ukierunkowanej koncepcji

    Ogólnie OK - proste ale cieszy

    PS.
    Można by udoskonalać jak każny projekt - np temp zima i automatycznie załączane podgrzewane szyby czy nawiew ciepłego z klimy itd. informacja o pasach, niewłączonych światłach ....
  • #26
    Taj
    Poziom 12  
    emmett brown napisał:
    A jak mierzysz temperaturę parownika...


    ... dobre pytanie :)

    Tak jak w poście można przeczytać: określiłem wymagania, skonstruowałem urządzenie, napisałem program. Przeprowadziłem próby w aucie.
    Jednak do tej pory sama instalacja czujników pozostaje otwarta.
    Słuszne uwagi podajesz. Zdaję sobie z tego sprawę i wiem że to jeszcze przede mną.
    Jednak tak jak opisałem jednym z głównych założeń projektu była nauka programowania.

    Postaram się ugryźć sprawę parownika jakoś :) .. i tu może masz jakieś ciekawe pomysły?

    Stawiając na uniwersalność dałem w menu konfiguracyjnym możliwość zmiany opisów mierzonych wielkości między innymi na:

    Zew - temperatura zewnętrzna
    Wew - temp wewnętrzna
    Pow - temperatura powietrza dolotowego za filtrem
    Sil - temperatura silnika
    LPG - magiczne słowo oznaczające jakiś pomiar temperatury który będzie w stanie powiedzieć co słychać w instalacji (nie wykluczone że można by w jakiś sposób zmierzyć np temp płynu chłodzącego przepływającego przez parownik?)

    Bez skonstruowania tego urządzenia nie mógłbym zacząć prób z właściwym pomiarem wielkości które mnie interesują :)
  • #27
    Tomkiewicz
    Poziom 13  
    Możesz podpiąć się do sterownika instalacji lpg przez złącze diagnostyczne. One gadają z pc zazwyczaj po porcie szeregowym, wystarczy podsłuchać komunikację i coś próbować działać ;).

    Inna sprawa, że jeżeli nie miałeś czasu na "rozgryzienie" gotowych bibliotek do lcd, to pokonanie protokołu diagnostycznego bez żadnej dokumentacji może być nie do przeskoczenia. Ja na przykład analizowałem protokół komunikacji z wyświetlaczem w samochodzie dysponując szczątkową dokumentacją i zajęło mi to w sumie chyba ze dwa-trzy tygodnie (plus kilka razy zarzucanie projektu na dłuższy czas) - może być ciężko :P.
  • #28
    Taj
    Poziom 12  
    IMEX napisał:


    ...Poza tym program jest banalnie prosty (kilka m-c mojej nauki w bascomie) robi zwoje


    jak już się przechwalamy to jakoś długo te kilka msc na banalny program... mi taka nauka w C zajeła 1 msc :P

    Program prosty. Czy banalny... możliwe, ale sam się nie napisze :)

    jak mawia mój kolega "człowiek może nauczyć się wszystkiego"
    ...jednak nie każdy ma na to chęć :)


    Tak jak napisałem w poście z każdym podejściem do pisania programu wymyślałem co najmniej jedną funkcje.
    Jednak w ten sposób można spędzić całe lata wymyślając co chwila nowe funkcjonalności :)

    Może projekt się rozwinie to będą i bajery... RGB czy cuś :)

    Dodano po 5 [minuty]:

    Tomkiewicz napisał:
    Możesz podpiąć się do sterownika instalacji lpg przez złącze diagnostyczne...


    jest to jakieś wyjście. Jednak urządzenie z założenia miało być dość uniwersalne i nie wchodzić w inne instalacje za mocno.

    Może ktoś ma inne pomysły na jakiś miarodajny pomiar? :)
    Myślę że głównie należało by zaobserwować stan nagrzewania się silnika / instalacji gazowej.
    A to np żeby ocenić czy warto jeszcze trochę przejechać na benzynie czy smiało już przełączyć na gaz.

    Może nie wszystkich takie rzeczy interesują ale ja chętnie popatrzę co i jak działa.
  • #29
    Sircos
    Poziom 9  
    Czy termometr w obecnej chwili może pokazywać temp. MINUSOWE (realne) gdybym np. chciał jeden czujnik dać poza samochód (temp. powietrza).
  • #30
    Taj
    Poziom 12  
    Sircos napisał:
    Czy termometr w obecnej chwili może pokazywać temp. MINUSOWE (realne) gdybym np. chciał jeden czujnik dać poza samochód (temp. powietrza).


    jak najbardziej