Skocz do zawartości

Arduino jako licznik motogodzin


dexter1234

Pomocna odpowiedź

Witam wszystkich i oczywiście pozdrawiam ,jestem tu nowy więc za jakie kolwiek błędy przepraszam . Mam taki temat czy da się na arduino zbudować licznik motogodzin przebiegu całkowitego który nie będzie gubił pamięci po odłączeniu zasilania i przebiegu dziennego z możliwością kasowania? Jeśli tak to poproszę o jakieś wskazówki . Wszystkim pomocnym z góry dziękuje.

Link do komentarza
Share on other sites

@dexter1234 Witam na forum 🙂 

Żeby nie stracić informacji o przebiegu możesz zapisać reprezentujące je dane liczbowe do pamięci nieulotnej. Albo karta SD wpięta po SPI, albo do pamięci wewnętrznej EEPROM (albo zewnętrznej również z SPI). Problem jest w ograniczonej liczbie cyklów zapisu - okolo 100tyś dla EEPROM. Czyli zapisywanie co minutę może nie być najlepszym pomysłem (zapisując coś co minutę, 2 godziny dziennie wyczerpiesz limit po 2 latach).

Lepszym pomysłem może być zapisywanie tylko wtedy kiedy będzie to konieczne. Może np. zrób układ podtrzymujący zasilanie dla Arduino - ogniwo litowe z ładowarką, w momencie wykrycia spadku napięcia na zasilaniu, pomiary zapisywane są do EEPROMU, a następnie dodatkowe zasilanie się odłącza.

 

Link do komentarza
Share on other sites

tak wiem , mam podłaczony pod spi moduł zegarka z pamiecią 24c32  tylko nie ogarniam pisania programu aby czas był naliczany w momencie pojawienia sie stanu wysokiego na którymś wejsciu i w razie potrzeby skasowany po wcisnieciu jakegoś  switcha a zarazem nie gubił po wyłączeniu zasilania  . Dlatego tu moja prośba o pomoc

Link do komentarza
Share on other sites

Dnia 18.02.2020 o 10:18, dexter1234 napisał:

Mam taki temat czy da się na arduino zbudować licznik motogodzin przebiegu całkowitego

Napisz coś więcej o budowanym urządzeniu, pokaż jego schemat.

 

46 minut temu, dexter1234 napisał:

tylko nie ogarniam pisania programu

Co to znaczy? Czy nie wiesz jak ma działać program, czy nie potrafisz swojego "pomysłu na program" czyli algorytmu przełożyć na kod źródłowy C/C++?

Pokaż co do tej pory zrobiłeś. Wiele osób od razu siada przed klawiaturą i próbuje pisać swoje programy. Warto jednak (sam się o tym przekonałem) czasami rozpocząć od stworzenia algorytmu programu czyli swoistego przepisu według, którego program ma działać. Taki algorytm można, a nawet trzeba sobie rozpisać, a najlepiej rozrysować. Widząc swój algorytm będziesz w stanie go przeanalizować i zoptymalizować. Kolejny krok to zapisanie swojego algorytmu w języku programowania.

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

niestety jestem zielony i dopiero się uczę wiec odpowiem że nie mam pomysłu jak się do tego zabrać 

to ma być urządzenie do maszyny przemysłowej taki mały komputerek który będzie pokazywał obroty silnika , napięcie ładowania alternatora , ciśnienie oleju silnika , temperaturę wody no i z tym nie mam problemu ale ma też być licznikiem motogodzin przebiegu całkowitego maszyny i przebiegu dziennego którego da się skasować jakimś switchem 

Link do komentarza
Share on other sites

1 godzinę temu, dexter1234 napisał:

mam podłaczony pod spi moduł zegarka z pamiecią 24c32

Czyli projekt układu już chyba posiadasz. Pokaż ten projekt bo na razie tylko wiemy, że masz bliżej nieznany moduł RTC z pamięcią 24c32. Tylko nie wiemy (bo tego nie pokazujesz i o tym nie piszesz) dlaczego właśnie taki moduł, jakie ma pełnić funkcje w twoim urządzeniu itd.

Nikomu nie będzie się chciało zgadywać jak zbudowane jest to urządzenie. Pokaż je i opisz. Wtedy będzie łatwiej coś doradzić. Moim zdaniem trudno mówić o programowaniu urządzenia gdy nie wiemy jak jest ono zbudowane.

Pytanie zasadnicze moim zdaniem to - czego czas pracy ma być rejestrowany przez Arduino i skąd "Arduino ma wiedzieć", że urządzenie pracuje?

Edytowano przez Belferek
Link do komentarza
Share on other sites

1 godzinę temu, dexter1234 napisał:

aby czas był naliczany w momencie pojawienia sie stanu wysokiego na którymś wejsciu

Czyli algorytm zapisywania czasu włączenia i wyłączenia mógłby wyglądać np. tak:

1. Pobierz stan wejścia (digitalRead())

2. Jeśli to stan LOW (wyłączone) to 7

3. Urządzenie pracuje.

4. Jeśli urządzenie włączono wcześniej to 1

5. Zapamiętaj, że urządzenie zostało włączone.

6. Zapisz czas włączenia i 1

7. Urządzenie wyłączone.

8. Jeśli wyłączono wcześniej to 1

9 Zapamiętaj, że zostało wyłączone.

10. Zapisz czas wyłączenia i 1

Link do komentarza
Share on other sites

1 godzinę temu, dexter1234 napisał:

mam podłaczony pod spi moduł zegarka z pamiecią 24c32

Wygląda na to że masz coś takiego, co nie? RTC DS1307

1 godzinę temu, dexter1234 napisał:

aby czas był naliczany w momencie pojawienia sie stanu wysokiego na którymś wejsciu i w razie potrzeby skasowany po wcisnieciu jakegoś

Poczytaj o przerwaniach - zdarzeniach wywołanych np. wciśnięciem przycisku. W funkcji obsługi przerwania ustaw jakąś flagę (zmienną int, bool) która informuje że zliczamy czas i pobierz z zegara RTC aktualny czas, np. w sekundach ile tam sobie już uzbierał (interesuje nas różnica czasów). Możesz to zapisać do EEPROM, w sytuacji gdy padnie zasilanie to po wznowieniu, w bloku setup() odczytasz ostatnie dane z EEPROMu. Jak wciśniesz kolejny raz przycisk, sprawdzisz jaki jest stan tej flagi, odczytasz nowy czas, wyliczysz różnicę i gotowe.

Edit:

@Belferek pisaliśmy w tym samym czasie 🙂 

Edytowano przez Gieneq
Link do komentarza
Share on other sites

#define URZADZENIE 2        //na tym pinie stan HIGH oznacza wlaczone urzadzenie
boolean stan_urzadzenia;    //true jesli wlaczone false jesli wylaczone

void zapiszCzas_ON()  
{
  //funkcja zapisuje czas wlaczenia np. w EEPROM
}

void zapiszCzas_OFF()
{
  //funkcja zapisuje czas wylaczenia np. w EEPROM
}
//--------------------------------------------------------------------------
void setup() 
{
 pinMode(URZADZENIE,INPUT_PULLUP);
 stan_urzadzenia=false;
}
//--------------------------------------------------------------------------
void loop() 
{
  if(digitalRead(URZADZENIE)==HIGH)   //sprawdzamy stan URZADZENIA     (1)
    {                                 //urzadzenie jest wlaczone       (3)
      if(stan_urzadzenia==false)      //urzadzenie bylo wylaczone
        {
          stan_urzadzenia=true;       //zapamietaj, ze wlaczono        (5)
          zapiszCzas_ON();            //zapisz czas wlaczenia          (6)
        }
    }
  else                                //(2)           
    {                                 //urzadzenie wylaczone (7)
      if(stan_urzadzenia==true)       //urzadzenie bylo wlaczone
        {
          stan_urzadzenia=false;      //zapamietaj, ze wylaczono       (9)
          zapiszCzas_OFF();           //zapisz czas wylaczenia         (10)
        }
    }
}

Tak mógłby wyglądać jeden z szablonów Twojego programu - nie uwzględnia przycisku i innych drobiazgów 🙂

Edytowano przez Belferek
  • Lubię! 1
Link do komentarza
Share on other sites

zestaw arduino uno orginał , lcd 4x16  blue  ,  RTC  DS3231 . Dzisiaj po pracy przysiądę i wrzucę ten screan , zobaczymy co z tego wyjdzie . Jeszcze raz bardzo dziekuje wszystkim za zainteresowanie i pomoc, pozdrawiam

Link do komentarza
Share on other sites

Witam ponownie po wgraniu  screena eprom  nalicza i zapisuje ale po ponownym uruchomieniu (czyli stanu HIGH na wej.) nie zaczyna liczyć od zapamietanego czasu tylko liczy od czasu rzeczywistego zegara no i brak funkcji resetowania licznika

Link do komentarza
Share on other sites

46 minut temu, dexter1234 napisał:

ale po ponownym uruchomieniu (czyli stanu HIGH na wej.) nie zaczyna liczyć od zapamietanego czasu

Bo pokazany szablon tego nie uwzględnia. Tutaj sam popracuj nad programem i pokaż co wymyśliłeś. Może warto zapamiętać w eeprom ostatni stan_urzadzenia? Warto zastanowić się nad tym jaka maksymalna może być "przerwa" w zasilaniu by potraktować ją jako "ciągłość pracy"? Tu będziesz musiał porównać czas bieżący z RTC z ostatnio zapisanym.

Nie wiem jakiej używasz biblioteki do obsługi swojego RTC. Ja bym polecał RTC by Makuna (https://github.com/Makuna/Rtc)

Autor udostępnia obszerne WIKI na temat swojego produktu - https://github.com/Makuna/Rtc/wiki

Edytowano przez Belferek
Link do komentarza
Share on other sites

Tu nie ma czarnej magii - wróć do algorytmu. Nie musisz umieć programować by ustalić "przepis" (algorytm) na to jak program ma działać. Pokaż swój przepis - pomysł wtedy spróbujemy zamienić go na działający program.

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...