H1M4W4R1 Czerwiec 21, 2021 Udostępnij Czerwiec 21, 2021 1 godzinę temu, opp34 napisał: Samo ustawienie ich na pozycji za pomocą pęsety to było utrapienie. To brzmi jakbyś nie trzymał ich pęsetą podczas lutowania pierwszego pada... Wtedy jest to prawie awykonalne by je dobrze przylutować 😉 Najprościej je lutować według schematu: Nałóż cynę na jeden z padów Przyłóż komponent przy użyciu pęsty i go przytrzymuj Zrób reflow cyny tak, by przylutować pierwszy pad komponentu, odstaw lutownicę od pada Poczekaj aż cyna zastygnie i zabierz pęsetę Przylutuj drugiego pada jakbyś lutował THT 😉 Ta technika działa bardzo dobrze dla większości "normalnych" (0603+) rozmiarów SMD. Dla scalaków wolę stosować drag-soldering przy użyciu minifali, ale scalaki z P = 1.27mm (SOP/SO/SOIC) da się też lutować tą pierwszą metodą, tylko w przypadku scalaków lutujesz jednego pada, potem drugi po przekątnej i dopiero resztę. Na YT jest całkiem sporo dobrych tutoriali pokazujących jak to dobrze robić. Najważniejsze jest trzymanie komponentu podczas lutowania na początku, bo inaczej to nawet jasnowidz nie przewidzi gdzie go obróci 😄 A i najlepiej stosować pęsetę zagiętą... bo prostą to nie jest proste zadanie by to przylutować 😉 Cytuj Link do komentarza Share on other sites More sharing options...
opp34 Sierpień 22, 2021 Autor tematu Udostępnij Sierpień 22, 2021 (edytowany) Projekt powoli idzie do przodu. Od ostatniego wpisu zacząłem przepisywać tryb czasowy, w którym użytkownik podaje terminy podlewania, czas podlewania oraz limity temperatury powietrza i wilgotności ziemi, po przekroczeniu których zadany czas podlewania jest stosownie obniżany lub podwyższany. Od teraz użytkownik wprowadzając termin podlewania podaje też dzień podlewania - cały tydzień, jeden dzień tygodnia, tylko dni robocze lub tylko sobota i niedziela. W tym celu poprawiłem stronę główną aplikacji oraz pop-up służący do definiowania terminów podlewania. Niebiesko-żółte przyciski do wprowadzania terminów podlewania: Pop-up do wprowadzania terminów podlewania: W przypadku limitu temperatury, na potrzeby przetestowania pomysłu, odszedłem od ostrego limitu, po przekroczeniu którego zadany czas podlewania podnosił się o wartość przypisaną do tego limitu. Oznacza to bowiem, że jeśli temperatura będzie wysoka, ale nie osiągnie limitu, to w ogóle nie przełoży się to czas podlewania. Od teraz użytkownik wprowadza dwa limity, które stanowią punkty, za pomocą których tworzona jest funkcja liniowa. Procesor w trakcie pracy mierzy maksymalną wartość temperatury od ostatniego podlewania i na podstawie funkcji liniowej oblicza korektę czasu podlewania. Limit temperatury w trybie czasowym: Pop-up do wprowadzania punktów, na podstawie których powstaje funkcja liniowa: Trzecią nowością jest odświeżenie pop-upów służących do wprowadzenia wartości. W każdym z nim dodałem jednostkę oraz opis, co oznaczają poszczególne pickery. Na koniec nieco zrzutów z aplikacji pokazującej dane z rzeczywistego urządzenia (większość dotychczasowych zdjęć pochodziła z atrapy/symulatora) Jak poprzednio, proszę o uwagi lub podpowiedzi, co ewentualnie jest nie tak, jak być powinno. Edytowano Sierpień 22, 2021 przez opp34 Cytuj Link do komentarza Share on other sites More sharing options...
Popularny post opp34 Grudzień 27, 2021 Autor tematu Popularny post Udostępnij Grudzień 27, 2021 (edytowany) Doszedłem do etapu, w którym postanowiłem zakończyć prace nad tą wersją projektu. Pozostałe opcje i poprawki będę ewentualnie wprowadzał w nowej wersji. Chciałbym podziękować wszystkim, którzy pomogli mi w trakcie prac, a w szczególności użytkownikom @marek1707, @szymonw oraz @H1M4W4R1. Ostatnimi czasy wprowadziłem szereg poprawek: - poprawiłem obsługę zapisu i odczytu danych z Firebase'a, co znacząco obniżyło transfer (zszedłem z ok. 380 MB dziennie na 20 MB, co pozwoliło zwiększyć częstotliwość operacji, np. odczyt wprowadzonych ustawień przez użytkownika oraz poprawić responsywność sterowania ręcznego. Ostatecznie średni transfer wynosi ok. 60 MB dziennie) - poprawiłem funkcję obliczającą czas do najbliższego podlewania, żeby brała ona pod uwagę, że termin może być wyłączony oraz że użytkownik może wybrać sobie dni podlewania - do aplikacji dodałem toasty informujące użytkownika o tym, jakie dane zostały wprowadzone oraz toasty informujące go o wykonaniu żądanej operacji - usunąłem tryb automatyczny. Użytkownik ma do wyboru wyłącznie tryb czasowy (podlewanie w zdefiniowanych terminach, czas trwania podlewania jest podawany przez użytkownika, a następnie ulega on automatycznej korekcie w przypadku przekroczenia limitów wilgotności lub temperatury) oraz ręczny (sterowanie z aplikacji wybranymi zaworami) - zmieniłem kolory przypisane do danego trybu pracy, obecnie jest to niebieski dla trybu czasowego oraz żółty dla trybu ręcznego - zaktualizowałem podstawowe biblioteki (stosowane w projekcie mikrokontrolera, jak i aplikacji na Androida) - dopisałem funkcje pozwalające na symulację wartości i stanu czujników, co pozwala na łatwiejsze testowanie edge case'ów - przeprogramowałem ostry dolny i górny limit wilgotności na funkcję liniową, podobnie jak to zostało zrobione dla temperatury - poprawiłem wyświetlanie korekty czasu podlewania w trybie czasowym po przekroczeniu limitu temperatury lub wilgotności - dodałem obsługę czasu letniego i zimowego - dodałem osobny ekran pojawiający się po otwarciu aplikacji, jeśli przynajmniej jeden z terminów podlewania jest wyłączony, aby poinformować użytkownika, który mógł przeoczyć ten fakt - wprowadziłem osobne ustawienia trybu czasowego dla każdego z terminów (poprzednio użytkownik podawał np. czas podlewania dla danej strefy i obowiązywał ten sam czas dla obu terminów podlewania, co stanowiło pewne ograniczenie) - poprawiłem zapis i odczyt danych do SPIFFS. Mikrokontroler w przypadku braku połączenia z internetem (lub dostępu do bazy danych Firebase) automatycznie odczytuje dane z SPIFFS (oraz przestawia się na zegar RTC) i pracuje na ich podstawie do czasu nawiązania połączenia - Poprawiłem pełno małych, ale irytujących błędów w aplikacji na Androida, np. tekst na danym przycisku nie inicjował działania przypisanego do samego przycisku; po wykonaniu szeregu operacji i otwarcie pop-upu służącego do ustawienia kalibracji pojawiała się w nim błędna jednostka; ujednoliciłem stosowane nazewnictwo itd. - Poprawiłem funkcje tworzące logi w trakcie pracy mikrokontrolera, co znacząco ułatwia debugowanie Ostatecznie aplikacja przyjęła poniższą formę: Splashscreen pokazywany w trakcie wczytywania aplikacji. Jest kilkanaście zestawów kolorów, z których jeden jest wybrany losowo. Nudziło mi się Na samej górze znajduje się pasek z nazwą aplikacji, statusem logowania i przyciskami do obsługi podstawowych operacji typu logowanie, wymuszenie natychmiastowego odczytu danych z czujników. Kolor tła informuje użytkownika o ustawionym trybie pracy (niebieski - tryb czasowy; żółty - tryb ręczny). Jest to stały element, który pozostaje na górze w trakcie scrollowania Ekran logowania za pomocą wprowadzenia ścieżki. Na niebiesko podświetlone są dotychczas wybrane kropki. Po zakończeniu wprowadzania program podświetla ścieżkę na czerwono w przypadku błędu lub zielono, jeśli ścieżka jest prawidłowa Na górze aplikacji znajduje się informacja o bieżącej pogodzie i prognozie na najbliższy dzień. Dane są pobierane z internetu i obejmują one temperaturę (w tym temperaturę odczuwalną), ciśnienie atmosferyczne, wilgotność powietrza, opady deszczu, zachmurzenie oraz prędkość i kierunek wiatru. Prognoza jest podzielona na poszczególne zakładki W przypadku bieżącej pogody aplikacja pokazuje prostą grafikę. Wszystkie grafiki powstały ręcznie w programie Inkscape Dla każdego czujnika (temperatury, ciśnienia i czterech czujników wilgotności) powstała osobna sekcja, która wyświetla wartość bieżącą, wartości minimum i maksimum z bieżącego dnia, pozwala też na wprowadzenie kalibracji. Użytkownik jest informowany o godzinie odczytu (w prawym górnym rogu sekcji) oraz stanie obserwowanej wielkości (obniża się, podnosi się, nie zmienia się) w formie prostej aplikacji poklatkowej. Poniżej bieżących danych znajduje się wykres prezentujący dane z ostatniego dnia. Pomiar odbywa się o pełnej godzinie. Użytkownik może nacisnąć na dany punkt pomiarowy, żeby zobaczyć szczegóły Osobna sekcja służy do wprowadzania ustawień podlewania. Użytkownik może wprowadzić dwa terminy podlewania i podaje on godzinę, dzień (do wyboru pojedynczy dzień tygodnia, tylko dni robocze, tylko weekend lub cały tydzień) oraz stan (może wyłączyć dany termin). W tej sekcji wybierany jest też tryb pracy za pomocą checkboxów. Zarówno przyciski, jak i checkboxy zostają wyszarzone, jeśli są zablokowane i niedostępne dla użytkownika (np. do edycji trzeba, że użytkownik się zalogował). Kolor przycisku po jego odblokowaniu sugeruje użytkownikowi, jakiego trybu pracy on dotyczy (w tym przypadku tło przycisku jest niebieskie, bowiem terminy podlewania dotyczą trybu czasowego) Naciśnięcie jednego z przycisków do edycji terminu podlewania powoduje otwarcie pop-upu Jeśli przy otwarciu aplikacji przynajmniej jeden z terminów jest wyłączony, pojawia się przypomnienie, które użytkownik musi ręcznie zamknąć. Ma to na celu uniknięcie sytuacji, w której użytkownik zapomniał włączyć terminu lub w której byłby nieświadomy, że termin jest w ogóle wyłączony Poniżej są szczegółowe ustawienia dla poszczególnych trybów pracy, które zostały podzielone na osobne zakładki. W przypadku trybu manualnego użytkownik otrzymuję opcję ręcznego wysterowania danego zaworu. Przyciski do tego służące odblokowują się po zalogowaniu i przełączeniu na ręczny tryb pracy W przypadku trybu czasowego użytkownik wybiera strefę podlewania (od 1 do 4), termin (1 lub 2) oraz interesujące go ustawienia (po naciśnięciu na przycisk automatycznie rozwija się wybrana sekcja). Pierwszym z nich jest ustawienie czasu podlewania, gdzie wprowadza wartość zadaną oraz jest w stanie zobaczyć finalną sumaryczną wartość czasu otwarcia po uwzględnieniu przekroczenia limitów temperatury lub wilgotności Drugim ustawieniem jest limit temperatury, po przekroczeniu którego program automatycznie wydłuża czas podlewania. Początkowo był to ostry limit, a po testach został zastąpiony prostą funkcją liniową. Użytkownik definiuje punkt początkowy (punkt 1) i końcowy (punkt 2), podając odpowiadający im limit temperatury oraz korektę czasu podlewania. Aplikacja na bieżąco wyświetla, jaka jest obecna obliczona przez mikrokontroler korekta czasu Ostatnim ustawieniem jest dolny i górny limit wilgotności ziemi. Działa to na podobnej zasadzie - są one opisane za pomocą funkcji liniowych, użytkownik definiuje punkt początkowy i końcowy Następnie znajduje się osobna sekcja służąca do wyświetlania stanu podlewania. Informuje ona o czasie do najbliższego podlewania oraz o tym, czy dany zawór jest otwarty i jeśli tak, to w jakim trybie pracy. W przypadku trybu czasowego pokazuje bieżący oraz zadany czas otwarcia danego zaworu Poniżej znajduje się osobna sekcja ze statystykami. Przechowuje ona dane z ostatnich czterech podlewań dla każdego strefy podlewania. Zawiera informacje o trybie pracy, czasie rozpoczęcia i zakończenia, zadanym czasie podlewania i liczbie wykonanych pomiarów wilgotności (pomocne przy debugowaniu, ponieważ jeśli liczba pomiarów jest mniejsza niż czas zadany, oznacza to, że w trakcie podlewania czas cyklu mikrokontrolera był wydłużony). W przypadku ze zdjęć poniżej wykres prezentuje podlewanie na sucho, tj. bez podłączonych zaworów oraz czujników wilgotności, stąd taki równy przebieg Na samym dole znajduje się sekcja pokazująca opóźnienie w transmisji danych pomiędzy mikrokontrolerem a bazą danych Firebase (procesor przesyła do bazy lifebita co 1 sekundę, a aplikacja oblicza w milisekundach czas od ostatniej zmiany), stan połączenia aplikacji z bazą oraz godzinę i datę ostatniego załączenia mikrokontrolera, a także liczbę resetów. W aplikacji użytkownik jest na bieżąco informowany o tym, jakie ustawienia wprowadził a jakie są obecnie zapisane w pamięci procesora. W tym celu w bazie danych Firebase powstały dwie prawie identyczne struktury - wejściowa, do której trafiają nowe ustawienia wprowadzone przez użytkownika oraz wyjściowa, do której mikrokontroler wpisuje bieżące dane przechowywane w swojej pamięci. Mikrokontroler okresowo odczytuje strukturę wejściową i w przypadku nowych danych zapisuje je do swojej pamięci oraz przepisuje je do struktury wyjściowej. Aplikacja zapisuje do struktury wejściowej, ale obserwuje obie struktury, porównując ich wartości. Jeśli są one rozbieżne, aplikacja wyświetla nową wartość na szaro, a tuż obok na czarno użytkownik wciąż widzi bieżącą wartość używaną przez procesor. Poniższe zdjęcia pokazują sytuację, w której użytkownik postanowił zmienić kalibrację ciśnienia, ale nowa wartość jeszcze nie została odczytana przez kontroler; lub postanowił wyłączyć pierwszy termin podlewania, ale informacja ta jeszcze nie trafiła do pamięci procesora Po wprowadzeniu wartości użytkownik jest informowany o tym, czego dokonał za pomocą prostego toasta (wybaczcie wiszący spójnik. Nie jest to tak proste do poprawienia, ponieważ zależy od szerokości wyświetlacza a sposób formatowania tekstu jest zaszyty w bibliotece, ale nie jest to usprawiedliwieniem) Czego się nauczyłem? Dużo by pisać. W uproszczeniu - że teraz potrafiłbym zrobić to samo lepiej. I jeśli bym zaczynał od zera, pewnych błędów bym nie popełnił. A to oznacza postęp. Pozdrawiam, opp Edytowano Grudzień 27, 2021 przez opp34 Niektóre zdjęcia dodałem podwójnie, a zostały wstawione pojedynczo. Wówczas wyświetlają się one automatycznie na końcu postu 3 Cytuj Link do komentarza Share on other sites More sharing options...
Pomocna odpowiedź
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!