Skocz do zawartości

Pomiary klimatu w domu i wokół.


SOYER

Pomocna odpowiedź

Ostatni przypadek (pin, ISR, wywołanie).

Rozumiem że niepoprawnie i na arduinoMEGA nie zadziała?

W tym wypadku będzie poprawnie. Pin nr 19 z Arduino Mega, to przerwanie INT.4 w Arduino. Przez to, że nie korzystasz z funkcji pośredniej tj. digitalPinToInterrupt, to przykład nie zadziała już np. na Leonardo lub Micro, ale na Mega będzie poprawnie. Akurat w pytaniu o "zrozumienie" tej linijki bardziej chodziło mi o ostatni parametr. W tej chwili masz tam "low", czyli przerwanie będzie wywoływane zawsze, gdy pin będzie zwarty do masy (logiczne zero). W przypadku przycisków najlepiej byłoby badać zmianę stanu. Jeśli przycisk po wciśnięciu zwiera do masy do korzystają z trybu "falling" wyzwolisz przerwanie raz podczas wciskania przycisku (pomijając problemy z drganiami styków).

Jeśli chodzi o drugie pytanie (sterowanie przekaźnikiem z dwóch źródeł), to pomyśl o tym jak działa np. bramka logiczna OR (mogłaby tutaj pomóc). Ewentualnie można skorzystać z diod prostowniczych, dzięki nim prąd będzie płynął tylko w jedną stronę.

Link do komentarza
Share on other sites

Dzięki Treker, bramki OR nie wpadły mi do głowy. Najprostsze rozwiązanie. Ja jednak chyba podłaczę włączniki do arduino i będę sterował zmiennymi. Wtedy mam "świadomość sytuacyjną" 😋 każdego przekaźnika.

Mam pytanie, nie wiem jak podatny jest arduino na różne zwiechy i zawiechy, ale podejrzewam, że po podłączeniu do neta różnie może być z działaniem jak zabraknie połączenia z siecią, itd itp.

Do rzeczy, słyszałem o czymś takim jak watchdog, nie wiem z czym to się je ale czy da się zaimplementować kod z takim działaniem na arduino? Wicie rozumicie: kod zatrzymuje się na dłużej niż ustalono to jakiś kod robi reset....

Da się? Jakieś linki? 😅 Podpowiedzi? 😋

Pzdr.

Link do komentarza
Share on other sites

Ja korzystałem z watchdoga.

Materiałów jest dostępnych sporo w sieci, ja chyba wykorzystałem PDFa z tego wątku: https://forum.arduino.cc/index.php?topic=63651.0

Zwrócę tylko uwagę na jeden problem jaki miałem. Wykorzystywałem Arduino Pro Mini i z domyślnym bootloaderem (ATmegaBOOT) po pierwszym aktywowaniu watchdoga (tzn. po wykonaniu przez niego resetu) układ wpadał w pętlę ciągłego resetowania się. Okazało się, że kod bootloadera nie resetuje flagi którejś flagi watchdoga, więc mikrokontroler ponownie się resetuje. I tak w kółko.

Rozwiązaniem było wgranie bootloadera optiboot.

  • Lubię! 1
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

Witka, powiedzcie mi chłopcy i dziewczęta jak robicie na arduino włączanie "czegoś tam" zależne od czasu realnego, zegara. Mam moduł RTC podpięty i chcę przykładowo włączać przekaźnik o 18, a wyłączać o 6 rano. Trzeba to zrobić na zmiennych o wartości 18 i 6 i zależnie od wymaganej dokładności włączania, co ileś tam sprawdzać aktualny czas, a jak aktualny zgadza się ze zmienną to działamy...? Tak się to robi czy inaczej?

Druga sprawa mam(funkcje biblioteki RTClib.h):

(now.hour(), DEC); 
(now.minute(), DEC);
(now.second(), DEC);

i przy zapisywaniu np. najniższej temperatury zapisuję też jej datę czy godzinę, ja zrobiłem to tak:

dzien_temp_grunt_max = now.day();
miesiac_temp_grunt_max = now.month();
rok_temp_grunt_max = now.year();

Później żeby to wyświetlić robię:

  lcd.print(dzien_temp_grunt_max, DEC);
 lcd.print(":");
 lcd.print(miesiac_temp_grunt_max, DEC);
 lcd.print(":");
 lcd.print(rok_temp_grunt_max,DEC);

da się to zapisać (jako String?) w jednej zmiennej, najlepiej przedzielone jeszcze jakimiś ":"?

Link do komentarza
Share on other sites

Inaczej.

Większość modułów RTC pozwala ustawić ci jeden lub więcej alarmów — kiedy nastanie ustawiona godzina, to wtedy ustawią nóżkę int na low. Podłączasz do tej nóżki pin Arduino i ustawiasz na niej przerwanie.

String da się poskładać w jednej zmiennej, ale dużo prościej i wydajniej jest to jednak wypisywać tak jak masz.

Link do komentarza
Share on other sites

Dzięki Deshipu, ja mam ten moduł:

https://elty.pl/pl/p/Modul-z-DS1307-RTC%2C-24C32-EEprom%2C-zlaczem-DS18B20/718

podłączony po I2C, ale nie widzę na nim żadnego pinu int, jest tylko jakiś SQ i BATT... spróbuję zajrzeć do papierów, może coś doczytam...

EDIT:

ok, doczytałem(z moim angielskim:-(), że ten SQ to wyjście sygnału kwadratowego, można go ustawić na 1Hz, albo kilka kHz. Rozumiem, że mnie interesuje 1Hz, wtedy przez 1s podaje stan (jaki?) na wyjściu SQ tak? I to wykorzystuję do uruchomienia przerwania i zmiany stanu zmiennej od alarmu(czy czegoś tam), tak?

EDIT2

OK podłączyłem diodę 🙂 i już wiem: na tym pinie może być OFF(LOW), ON(HIGH), 1Hz, 4kHz, 8kHz, 32kHz. I wszystko jasne, znaczy nie wszystko, bo jeszcze muszę się nauczyć to używać...

Jeszcze raz dzięki Deshipu.

EDIT3

Niestety, sprawdziłem 4 różne biblioteki dla RTC1307 i żadna nie ma obsługi alarmów. Ktoś coś zna?

Czy będę to musiał robić "na piechotę" czyli ciągle sprawdzać aktualny czas i porównywać go z ustawionym..., choć pewnie w bibliotekach dla RTC jest to tak samo zrobione tylko nie zajmuje procka arduino, tak?

Link do komentarza
Share on other sites

Masz rację, ten konkretny RTC wydaje się nie mieć funkcji alarmu. Pozostaje ci zatem sprawdzać w pętli co jakiś czas czy już jest właściwy czas. Nie potrzebujesz do tego pinu square wave, możesz się po prostu posłużyć funkcją millis(). Jak ci się chce kombinować, to możesz nawet zrobić tak, że odpytujesz tym częściej, im bliżej do ustalonego czasu.

Link do komentarza
Share on other sites

Dzięki Deshipu 🙂

Kolejna sprawa: I2C.

WCZORAJ dowiedziałem się, że I2C to tylko na kilkadziesiąt centymetrów, zdaje się do jakiejś tam pojemności przewodów(410pF?). Szlag trafił całe moje planowanie położenia przewodów i rozmieszczenia czujników(nie mówiąc o napisanym kodzie). Szlag trafił pięknie zaplanowane miejsce na panel kontrolny z LCD po I2C, a arduino 20m dalej.

Ale nie dało mi to spokoju i rano sprawdzam na skrętce. LCD po I2C bez problemu na 2m przewodu, mówię super, to już daje jakieś możliwości. Poszedłem jednak do piwnicy po 6m skrętkę UTP(dłuższej akurat nie mam) i też działa LCD.

Kupię dzisiaj 20mb i też sprawdzę ...

Jak to jest z tą odległością podłączenia po I2C?

Link do komentarza
Share on other sites

Niestety moja znajomość angielskiego nie pozwala mi zrozumieć tego artykułu. Są konieczne dodatkowe moduły czy wystarczy podciągnąć do "+"?

Udało mi się połączyć przez I2C z LCD przez 10m przewód telefoniczny, ale ciekawa zależność im dłuższy przewód tym bardziej musiałem przekręcać pokrętło od kontrastu. W ostatnim przypadku na max w stronę "czarnych prostokątów". Po podpięciu znowu przez krótkie przewody musiałem "ująć" kontrastu bo wyświetlało "czarne prostokąty". Za co konkretnie odpowiada to pokrętło, że istnieje taka zależność?

Link do komentarza
Share on other sites

No cóż, szkoda. Moim zdaniem warto w angielski zainwestować, bo większość informacji jest jednak tylko dostępna w tym języku.

To pokrętło kontroluje napięcie, jakie trafia do samych ciekłych kryształów w wyświetlaczu. Mierzyłeś jaki masz spadek napięcia na tych przewodach?

Link do komentarza
Share on other sites

Zrozmiałem tyle że na długim przewodzie (pojemnym) nie można uzyskać sygnału kwadratowego. To uniemożliwia prawidłowe przesyłanie danych bo układ nie nadąża się"naładować" i "rozładować" sygnał nie jest taki jak powinien. Tak?

Jeśli pokrętło działa jak dzielnik napięcia(?), to może rzeczywiście wystarczy mu podać mocniejszy sygnał na SDA i SCL, tylko jak?

Nie nie mierzyłem spadków, może jutro zdążę...

Link do komentarza
Share on other sites

Dzięki Deshipu 🙂

Kolejna sprawa: I2C.

WCZORAJ dowiedziałem się, że I2C to tylko na kilkadziesiąt centymetrów, zdaje się do jakiejś tam pojemności przewodów(410pF?). Szlag trafił całe moje planowanie położenia przewodów i rozmieszczenia czujników(nie mówiąc o napisanym kodzie). Szlag trafił pięknie zaplanowane miejsce na panel kontrolny z LCD po I2C, a arduino 20m dalej.

Ale nie dało mi to spokoju i rano sprawdzam na skrętce. LCD po I2C bez problemu na 2m przewodu, mówię super, to już daje jakieś możliwości. Poszedłem jednak do piwnicy po 6m skrętkę UTP(dłuższej akurat nie mam) i też działa LCD.

Kupię dzisiaj 20mb i też sprawdzę ...

Jak to jest z tą odległością podłączenia po I2C?

Cześć,

To, że działa dzisiaj nie znaczy, że będzie działało jutro (przewody Ci lekko zawilgotnieją itp zmienią się parametry i przestanie działać).

Zrób to na RS-485, wtedy na pojedynczej parze (skrętka) będziesz mógł mieć pewną komunikację do kilometra (np. konwerter UART-RS485 za kilkanaście PLN i transmisja prostsza jeszcze od I2C).

Pozdrawiam

Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.