Elektroda.pl
Elektroda.pl
X
Osprzęt kablowy
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Wskaźnik poziomu paliwa LED

mot4ba 07 Paź 2017 11:12 2964 64
  • Osprzęt kablowy
  • #32
    maly_ninja
    Poziom 13  
    To ty musisz zdecydować który sposob wizualizacji by Ci najbardziej odpowiadał. Na razie żebyś odczytywał prawidłową wartość za pomocą uC i później możesz ja wyświetlać obojetnie jak.

    Możesz równie dobrze odczytać poziom ze zbiornika, przerobić sygnał i skalibrowac pod oryginalny licznik (jak chyba napisał R-MIK)
  • #33
    zster

    Poziom 28  
    mot4ba napisał:
    A ktora opcja byla by lepsza ? Bo nic z dwoch powyzszych mi nie mowi niestety...
    mot4ba napisał:
    A ktora opcja byla by lepsza ? Bo nic z dwoch powyzszych mi nie mowi niestety...


    To o czym pisał kolega R-MIK dotyczy zjawiska nieliniowości wskazań poziomu paliwa przy zastosowaniu prostego dzielnika rezystorowego ( czyli tego, którego Ci podsunąłem ). Jednak uważam, że w tym wypadku nie będzie to miało większego znaczenia. Ale jeśli się mylę, można to zawsze i łatwo "naprawić". Na razie skup się na wyświetleniu wszystkich 8 poziomów. Później, mając podstawy, można się zabrać za kwestie estetyczne i poprawę liniowości, jeśli będzie to niezbędne.
    To, w jaki sposób będziesz wyświetlać informacje, zależy tylko od Ciebie i Twojej pomysłowości.
  • #34
    Użytkownik usunął konto
    Użytkownik usunął konto  
  • #35
    zster

    Poziom 28  
    Dzielnik rezystorowy zasilony 5V.
    Napięcie odniesienia : 1.1V
    Bak pełny : 100R. Napięcie wyjściowe dzielnika : ~ 455mV
    Bak pusty : 10R. Napięcie wyjściowe dzielnika : ~ 50mV

    Liniowo środek zakresu napięcia to jakieś 202mV gdzie czujnik przy rezystancji 55R da ok 260mV. Owszem, jest to nieliniowe ale przy 8 diodach nie będzie zauważalne. Przy nieparzystej liczbie diod byłby nieco większy kłopot, zwłaszcza przy większej ich liczbie.
    Poza tym zauważ proszę jedno - nieliniowość zwiększa się wraz ze spadkiem rezystancji dzielnika - różnice miedzy kolejnymi "progami" są większe. Nie wiem, czy tylko ja tak mam ( moja wyobraźnia ) ale w swoich samochodach zauważyłem podobną nieliniowość - paliwo "znika" szybciej" ze wskaźnika po przekroczeniu połowy wskazania.
    Można kombinować ale... po co? Nie wyświetlamy tu dokładnej ilości litrów pozostałych w baku.
  • #36
    Użytkownik usunął konto
    Użytkownik usunął konto  
  • Osprzęt kablowy
  • #37
    mot4ba
    Poziom 10  
    Rzeczywiscie oryginalny wskaznik paliwa tez byl nieliniowy. Ponizej polowy szybko wskazowka opadala. Tutaj natomiast, wystarczy mi orientacyjne wskazanie ilosci paliwa. Po 2-3 tankowaniach naucze sie ktora dioda oznacza ile paliwa w baku i to mi wystarczy w zupelnosci.
  • #38
    Użytkownik usunął konto
    Użytkownik usunął konto  
  • #39
    mot4ba
    Poziom 10  
    Kombinuje i nie moge zrobić aby działało tak jak bym chciał. Zapala się pierwsza dioda w momencie kiedy mam "pusty bak" jednak nie chce się zapalić żadna kolejna dioda kiedy rosnie ilośc paliwa. Przypominam, że chciał bym aby przy pustym baku zgasły wszystkie (lub świeciła sie tylko pierwsza dioda) a przy pełnym paliły się wszystkie. Wydaje mi się, że powinienem uzyc funkcji "for" jednak średnio mi to wychodzi :/

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Gdzie robie błąd ?
  • #40
    Użytkownik usunął konto
    Użytkownik usunął konto  
  • #42
    grko
    Poziom 33  
    @mot4ba Brakuje Ci w pewnych miejscach nawiasów i dlatego program nie dziala jakbyś chciał a wystarczy odpowiednio formatować kod i od razu byłoby jasne:

    Dokładne ten sam kod co wkleiłeś:
    Kod: c
    Zaloguj się, aby zobaczyć kod
  • #43
    mot4ba
    Poziom 10  
    Bo wprowadzeniu zmian, wszystkie 6 zadeklarowanych diód zapalal się w momencie "pustego baku" i już nie gaśnie bez wzgledu na zmiane ADC. Powinno byc chociaż odwrotnie, ze przy dużym ADC świecą wszystkie :/

    Kod: c
    Zaloguj się, aby zobaczyć kod
  • #44
    grko
    Poziom 33  
    @mot4ba Tylko to co ja wkleiłem tutaj nie było, żadnym wprowadzeniem zmian. Miało to pokazać tylko, że Twój kod przez to, że nie ma odpowiedniego formatowania nie działa tak jakbyś sobie tego życzył. Jeszcze raz sformatuję dla Ciebie całość:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Przecież na pierwszy rzut oka widać, że to jest bez sensu. Według mnie powinno być mniej więcej tak:

    Kod: c
    Zaloguj się, aby zobaczyć kod
  • #45
    Użytkownik usunął konto
    Użytkownik usunął konto  
  • #46
    grko
    Poziom 33  
    R-MIK napisał:
    Jak dział ta pętla?
    Kod: c
    Zaloguj się, aby zobaczyć kod

    chodzi o to drugie "=0"


    @R-MIK To może być jakaś osobliwość kompilatora. Nie wiem, nie jestem w tych sprawach ekspertem.
  • #47
    mot4ba
    Poziom 10  
    Dziękuje bardzo za pomoc. Idziemy w dobrym kierunku ;) Na chwile obecną, jeżeli mamy pusty bak to zapala sie tylko pierwsza dioda i w takt podnoszenia pływaka zapalają się kolejne diody, więc to jest OK, jednak jezeli znowu zaczniemy opuszczac pływak diody już nie gasną. Jęzeli natomiast uruchomimy arduino z pełnym bakiem to zapala się tylko jedna ostatnia dioda, reszta natomiast w takt opuszczania pływaka i również nie gasną diody od gory w czasie zmniejszania ilosci paliwa.
  • #48
    Użytkownik usunął konto
    Użytkownik usunął konto  
  • #49
    grko
    Poziom 33  
    R-MIK napisał:
    grko napisał:
    R-MIK napisał:
    Jak dział ta pętla?
    Kod: c
    Zaloguj się, aby zobaczyć kod

    chodzi o to drugie "=0"


    @R-MIK To może być jakaś osobliwość kompilatora. Nie wiem, nie jestem w tych sprawach ekspertem.


    No mnie to sie nie kompiluje. Może jakieś makro Arduino?


    Całkiem możliwe. Jednak nie jestem pewien bo nie jestem w tych sprawach ekspertem. Tylko ciekawi mnie gdzie jest tutaj taka pętla...

    PS: "Makro arduino" <-- Made my day

    @mot4ba
    Według mnie powinieneś gasić pozostałe diody przy każdej zmianie stanu.
  • #50
    zster

    Poziom 28  
    Bez sensu jest :

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Czy masz liczbę diod zależną od wartości oczytanej z czujnika poziomu paliwa? Nie. Masz 8 diod.
    Więc :


    Kod: c
    Zaloguj się, aby zobaczyć kod

    I tak dalej aż do 8 diod.
  • #51
    Użytkownik usunął konto
    Użytkownik usunął konto  
  • #52
    grko
    Poziom 33  
    R-MIK napisał:

    Dobrze, że jest kilka ledów, bo tak to tych pętli byłoby dużooooooo. Ja widziałbym to tak:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    I mogę sobie bez problemu zmieniać zakres, liczbę led.


    No ja bym jednak tego tak nie widział ponieważ jest to kompletnie __źle__. Tak się kończy to jak makra nie są w odpowiednich nawiasach. Przykładowo ekspansja makra ROZ będzie miała postać:
    Code:
    400 - 95 / 8 -> 389
  • #54
    zster

    Poziom 28  
    Zobacz proszę na dokumentację biblioteki której używasz.

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Gdzie : i oznacza numer diody którą chcesz kontrolować. Numeracja zaczyna się od 0, czyli pierwsza dioda "od strony arduino" ma numer 0, druga dioda numer 1 itd..
    R - jasność koloru czerwonego. Zakres od 0 do 255 gdzie 0 oznacza wyłączony kolor a 255 pełną jasność.
    G - jasność koloru zielonego. Zakres od 0 do 255 gdzie 0 oznacza wyłączony kolor a 255 pełną jasność.
    B - jasność koloru niebieskiego . Zakres od 0 do 255 gdzie 0 oznacza wyłączony kolor a 255 pełną jasność.

    Więc ... jeśli chcesz zaświecić tylko jedną diodę, resztę musisz wygasić. Dla łatwiejszego zrozumienia, możesz wprowadzić sobie kolejną zmienną i w każdym "zakresie"wartości z czujnika wprowadzić dodatkową pętlę for gaszącą wszystkie diody, które mają się w tym zakresie nie świecić. Wtedy po powrocie ppływaka w dół, diody będą gasły.

    Obrazowo :

    jeśli bak pusty, zaświeć diode 0 oraz wyłącz diody od 1 do 7
    jeśli bak jest pełny w 1/4, zaświeć diody od 0 do 2 oraz wyłącz diody od 3 do 7
    jesli bak w połowie pełny, zaświeć diody od 0 do 4 oraz wyłącz diody od 5 do 7
  • Pomocny post
    #56
    zster

    Poziom 28  
    Mało elegancko ale myślę, że najlepiej zobrazuje jak to działa byś mógł dopisać kod do pozostałych diod :

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Teraz możesz tez bawić się kolorami, wpisując w miejsce R G i B różne wartości..
  • #57
    mot4ba
    Poziom 10  
    Super, zaczęło to działać w końcu jak bym chciał, jednak potrzebne są jeszcze jakieś delikatne usprawnienia, ponieważ pomimo, że plywak jest w jednym położeniu to wskazania na diodach potrafią "pływać". Chciałbym też wprowadzić pewne opóźnienie w wyswietlaniu ilosci paliwa aby układ był mniej wrazliwy na przelewajace sie paliwo na zakretach lecz nie wiem w które miejsce wklepac "delay (3000);"
  • #58
    Ciemny Gwint
    Poziom 9  
    Tworzenie, projektowanie, to piękna sprawa i popieram.
    Trochę późno się zgłosiłem na Elektrodzie i późno wczytałem, ale na przyszłość może coś podpowiem, bo wiele rzeczy przerabiałem i dorabiałem w swojej Zafirze OPC. Obecnie 240 koni. Zegary, chłodzenie oleju i powietrza na dolocie.
    I dodam taki link:
    http://www.woboteam.pl/szukaj?controller=sear...WSKA%C5%B9NIK+-+POZIOMU+PALIWA&submit_search=
    Znajdziecie tam także wiele zegarów DEPO - turbo, temperatura w kolektorze, ciśnienie i temperatura oleju i wiele innych.
    Pozdrawiam
  • #59
    Użytkownik usunął konto
    Użytkownik usunął konto  
  • #60
    grko
    Poziom 33  
    R-MIK napisał:

    Jaki problem dodac nawiasy?
    Sformułowanie "kompletnie źle" sugeruje, że cały kod jest do du...., a nie, że jest, krótki, wygodny w użyciu i zawiera drobny błąd.


    Brak nawiasów w uważasz najpierw za "drobny błąd".

    Następnie piszesz:
    R-MIK napisał:

    Gdy nie ma nawiasów, to albo błąd kompilacji *to i tak dobrze) albo działa nie tak jak by się chciało (tu już gorzej, bo błąd jest niewidoczny a jak funkcja to makro złożone z kilku rozkazów, może byc niezła jazda.).


    Więc jak to jest? Drobny błąd czy niezła jazda?

    Tak wogóle to robienie tego na if/else jest średnim rozwiązaniem. Można w łatwy sposób to zrobić bez spagetti ifów używając tylko jednej odpowiedniej struktury danych:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Następnie deklaruje się tablicę takich struktur:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Cały algorytm byłby jedną pętlą for iterującą po kolei po elementach tablicy. Bez żadnego dziwnego spagetti if/else if.