Skocz do zawartości

Pomiary klimatu w domu i wokół.


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ę.

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.

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

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ś ":"?

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.

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?

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.

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?

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ść?

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?

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ążę...

Trochę mieszasz dwie rzeczy. Sygnał na SDA i SCL to jedna rzecz, a zasilanie całości to druga. Wydaje mi się, że w tym przypadku siada ci zasilanie z powodu spadku napięcia na przewodach.

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

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...