Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 20 kwi 2024, o 10:03


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 15 ] 
Autor Wiadomość
PostNapisane: 24 kwi 2020, o 18:35 
Offline
Użytkownik

Dołączył(a): 19 gru 2012
Posty: 712
Lokalizacja: Opole
Pomógł: 23

=Witam

Po dłuższej przerwie powracam z pasja do uC. A spowodowane jest to projektem który muszę zrealizować w domu. Mianowicie automatyczny podlewak roślin :D W zasadzie cała elektronika i większość kodu już jest przemyślane, głowię się tylko nad kwestią jak łatwo i przyjemnie zorganizować sobie kwestie planowania godzin podlewania.

Założenia są takie że użytkownik za pośrednictwem apki na telefonie będzie mógł ustawiać kiedy i na jak długo ma się załączyć pompka. Powiedzmy ze maksymalnie chciałbym móc ustawić 10 harmonogramów i w każdym z nich do ustawienia: godzina, minuta (czas w którym uruchomi się podlewanie), czas trwania podlewania, dni w których dane podlewanie ma się odbyć.

Czy ktoś ma jakiś pomysł, albo sam już zastosował coś takiego w swoich projektach?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 kwi 2020, o 18:50 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 19 lis 2015
Posty: 219
Pomógł: 20

To moze zrob 10 struktur w ktorych zapiszesz dzien godzine itp i cyklicznie sprawdzaj czy wlaczyc



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 kwi 2020, o 18:51 
Offline
Użytkownik

Dołączył(a): 19 lip 2013
Posty: 759
Pomógł: 37

Akurat taki harmonogram to nie problem. Problem jest inny. Mianowicie po co podlewać jeśli pada deszcz, padał deszcz lub będzie padał? Musisz przewidzieć chociaż sensor wilgotności gleby ,który jeden z problemu wyeliminuje. To chyba jeden z ważniejszych aspektów automatycznego podlewania. Godzina podlewania to akurat sprawa prosta. Jeśli nie masz nawadniania kropelkowego podlewa sie pomiędzy zachodem ,a wschodem słońca. I tu w sumie wystarczy sobie jedna godzinę wybrać. Druga sprawa głupio by bylo gdyby nawadnianie sie włączyło gdy robisz grilla wiec pewnie jakiś czujniki ruchu by sie przydały. Mimo ,ze temat wydaje sie dosyć prosty to żeby miał sens musi być dosyć skomplikowany.Chyba ,ze wodę do podlewania masz z jeziora i nie zależy ci na kosztach to wtedy lej na maxa. Trawa lubi wodę :) Pomysły na appke pewnie sa, tylko musisz cokolwiek sam zacząć i napisać w razie co w czym problem. Bo tak to trochę rzucanie kula w plot,bo nawet nie napisałeś w jakim języku chcesz to robic.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 kwi 2020, o 22:04 
Offline
Użytkownik

Dołączył(a): 19 gru 2012
Posty: 712
Lokalizacja: Opole
Pomógł: 23

Spokojnie to już wszystko jest przetestowane i przez rok na pająku działało na sztywno zadeklarowanymi godzinami. Poza tym najważniejsze to ma podlewać roślinki na balkonie wiec wpływ deszczu żaden ;) Ale pomysł i wykonanie już w większości zrobione tylko godziny narazie na sztywno ustawione wiec nie rzucam kulą w płot bo chciałbym tylko poradzić się czego najlepiej użyć do tego zadania. Moze nie najlepiej wyraziłem się chodzi o oczywiście o obsługę AVR w języku C i to tam che rozwiązać temat harmonogramu, apka to tylko dodatek który po UART będzie wysyłał nastawy użytkownika.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 kwi 2020, o 07:37 
Offline
Użytkownik

Dołączył(a): 19 lip 2013
Posty: 759
Pomógł: 37

Ja apki na telefon pisze sobie w B4a . W samym sterowniku zapisuje sobie tylko godzinę minute i porównuje z aktualna . W sumie jeśli masz na sztywno zapisane i działa to tak samo będzie działać jeśli wyślesz sobie dane przez uart i zapiszesz w eeprom nowe nastawy. Niestety ,ale nie wiem w czym problem. Filmiki jak zrobic taka appke i wysylac dane masz w mirkowych poradnikach. Jedno co moge podpowiedzieć, to godziny minuty i sekundy mnożę przez siebie i wysyłam jako jedna zmienna, chyba 6 Byte wychodzi. W procku godzinę aktualna tak samo robie i wtedy porównuje. Zajmuje to w eeprom troche pamięci ale robiłem tak 64 nastawy i działa bardzo dobrze. Dni tygodnia to akurat 1 Byte i wystarczy tez sprawdzić czy odpowiedni bit zaznaczony. Gdzieś na forum tu o b4a podpytywałem jak przeliczać te godziny. Napisz dokładnie z czym masz problem ,bo nie wiem co doradzać skoro masz działający projekt.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 kwi 2020, o 09:15 
Offline
Użytkownik

Dołączył(a): 19 gru 2012
Posty: 712
Lokalizacja: Opole
Pomógł: 23

Ale kolega dalej nie rozumie. Nie chodzi mi o kwestie apki w B4A to juz mam zrobione i wysyłam pojedynczą godzinę i minute do włączania podlewania ten temat zostawmy bo to ogarniam i problemu nie mam. Zagwozdkę mam tylko z tym jak po stronie uC w języku C ogarnąć ładnie i przejrzyście nastawy włączania podlewania żeby nie robić tego w 20 zmiennych zapisywanym do EEPROMU, tylko np z wykorzystaniem struktury w której będzie godzina, minuta włączenia, dni tygodnia dla których ma zadziałać ten harmonogram no i jak długo w sekundach ma trwać podlewanie. I chętnie przyjrzał bym się rozwiązanią innych osób które też robiły harmonogram.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 kwi 2020, o 11:33 
Offline
Użytkownik

Dołączył(a): 19 lip 2013
Posty: 759
Pomógł: 37

Ok. Teraz rozumiem. Nie znam C ale chyba bez zapisu godzin w eeprom nie da się(chyba ze nie przewidujesz wyłączania urządzenia). W bascomie robię to w petli for ,która porównuje co sekunde czy nastawy się zgadzają w tablicy i włącza lub wyłącza.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 kwi 2020, o 13:19 
Offline
Użytkownik

Dołączył(a): 17 mar 2020
Posty: 70
Pomógł: 5

Krok po kroku:
- potrzebujesz dodać harmonogram
- każdy alarm ma jakieś swoje ustawienia

Zacznijmy od ustawień:


Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


I to jest żywcem to co napisałeś w poście zmienione na kod. I teraz harmonogramy - co musi mieć każdy harmonogram:
- swoje ustawienie
- i tu dodatkowo np swój stan - czy jest aktywny, czy nie
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


I na to dokładasz logikę potem porównywania z aktualnym czasem dla wszystkich alarmów jakie masz itp.
Ustawienia dla poszczególnych harmonogramów musisz gdzieś przechować - może być EEPOROM - więc potrzebujesz jeszcze funkcje odczytu/zapisu do tego.

Rozrysuj sobie to wszystko najpierw na kartce.

Bo możesz chcieć jeszcze jakieś dodatkowe rzeczy typu - co jak ktoś włączy urządzenie w czasie aktywnego harmonogramu - czy powinien się włączyć, czy urządzenie powinno reagować tylko na pierwszy "event" - to już Ty musisz zdecydować.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 kwi 2020, o 14:28 
Offline
Użytkownik

Dołączył(a): 19 gru 2012
Posty: 712
Lokalizacja: Opole
Pomógł: 23

O coś takiego chodziło panie kolego :) Czy jest jakaś funkcja która zwraca od razu wielkość danej struktury? w sensie ile takich harmonogramów jest utworzone? Tak by ułatwic sobie jakąś pętlę sprawdzającą czy któryś z elementów struktury spełnia warunek godziny i minut.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 kwi 2020, o 14:35 
Offline
Użytkownik

Dołączył(a): 17 mar 2020
Posty: 70
Pomógł: 5

To już musisz sobie nabudować "poziom wyżej" - czyli zrobić tablicę z takimi strukturami - no i wtedy jej rozmiar jest znany dla Ciebie - bo to Ty go definiujesz.

Pewnie znowu zostanę za to "zjedzony" - ale polecam do sobie napisać i przetestować najpierw w C na PC i potem przenieść na atmege - chodzi mi o te strukturki i logikę ich działania potem.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 maja 2020, o 19:54 
Offline
Użytkownik

Dołączył(a): 19 gru 2012
Posty: 712
Lokalizacja: Opole
Pomógł: 23

landrynek napisał(a):
To już musisz sobie nabudować "poziom wyżej" - czyli zrobić tablicę z takimi strukturami - no i wtedy jej rozmiar jest znany dla Ciebie - bo to Ty go definiujesz.

Pewnie znowu zostanę za to "zjedzony" - ale polecam do sobie napisać i przetestować najpierw w C na PC i potem przenieść na atmege - chodzi mi o te strukturki i logikę ich działania potem.


Jestem już na etapie rozpisywania tego na czysto i wymyślenia najlepszego sposobu zapisy i odczytu i tu mam jeden pomysł tylko nie do końca wiem jak go w łatwy sposób wykorzystać.
Otóż chciałbym zapisać dni tygodnia w których dni alarmu mają być włączone w formie binarnej 00000001 miał by oznaczać tylko poniedziałek, 00000010 tylko wtorek itd itd. I teraz jak najlepiej było by to wyłuskać ze struktury i sprawdzić czy danego dnia alarm może być aktywowany?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 maja 2020, o 20:09 
Offline
Użytkownik

Dołączył(a): 17 mar 2020
Posty: 70
Pomógł: 5

Opcji masz tu mega dużo. Załóżmy że dzień tygodnia masz jako uint8_t licząc od zera - poniedziałek. To sobie na te dni robisz enuma, żeby było czytelnie i potem jak chcesz ustawić na jakiś dzień alarm to sobie robisz coś takiego:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


to tylko jedna z mnóstwa propozycji.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 14 maja 2020, o 20:43 
Offline
Użytkownik

Dołączył(a): 19 gru 2012
Posty: 712
Lokalizacja: Opole
Pomógł: 23

Dzięki bardzo teraz czas to sprawdzić :) Włączanie i wyłączanie będę robił po stronie apki na Androida i ona będzie już wysyłać po UARCIE bezpośrednio binarke gotową dla całego alarmu. A po stronie AVR będę tylko sprawdzał czy jest w ten dzień aktywny alarm.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 sie 2020, o 17:55 
Offline
Użytkownik

Dołączył(a): 19 gru 2012
Posty: 712
Lokalizacja: Opole
Pomógł: 23

Wróciłem do twojego pomysłu ogarnięcia Harmonogramu.
Stworzyłem taką oto strukturę którą wykorzystuje 5 razy dla 5 Timerów. Czy to dobre podejście czy lepiej wszystko wrzucić do jednej struktury? Bo w tym wypadku mam zagwozdkę jak najlepiej dobrać się w pętli do struktur o nazwach HARM0_ram, HARM1_ram itd. tak by cześć inkrementowana w pętli była częścią nazwy HARM i gdzie cyfra to np. i z pętli

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


landrynek napisał(a):
Krok po kroku:
- potrzebujesz dodać harmonogram
- każdy alarm ma jakieś swoje ustawienia

Zacznijmy od ustawień:


Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


I to jest żywcem to co napisałeś w poście zmienione na kod. I teraz harmonogramy - co musi mieć każdy harmonogram:
- swoje ustawienie
- i tu dodatkowo np swój stan - czy jest aktywny, czy nie
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


I na to dokładasz logikę potem porównywania z aktualnym czasem dla wszystkich alarmów jakie masz itp.
Ustawienia dla poszczególnych harmonogramów musisz gdzieś przechować - może być EEPOROM - więc potrzebujesz jeszcze funkcje odczytu/zapisu do tego.

Rozrysuj sobie to wszystko najpierw na kartce.

Bo możesz chcieć jeszcze jakieś dodatkowe rzeczy typu - co jak ktoś włączy urządzenie w czasie aktywnego harmonogramu - czy powinien się włączyć, czy urządzenie powinno reagować tylko na pierwszy "event" - to już Ty musisz zdecydować.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 29 sie 2020, o 23:22 
Offline
Użytkownik

Dołączył(a): 17 mar 2020
Posty: 70
Pomógł: 5

a może tablica struktur/wskaźników na struktury? wtedy możesz po iteratorze sobie jechać w pętlach itp.

Od siebie jeszcze dodam, że wydaje mi się, że lepiej inicjalizować pola struktur ze składnią ".nazwaPola" - o wiele czytelniejsze to jest niż "kolejne elementy" - o odporności na błędy już nie wspomnę.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 15 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 2 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO