Skocz do zawartości

dkradke

Użytkownicy
  • Zawartość

    32
  • Rejestracja

  • Ostatnio

  • Wygrane dni

    2

Wszystko napisane przez dkradke

  1. Mały offtop, ale tak to właśnie wygląda
  2. Zgadza się, masz rację. Wrzucone schematy nie były zaktualizowane, poprawiłem je w poście. Dopiero w praniu wyłapałem brak rezystora na GPIO16. Co do GPIO0 i GPIO2 też się z Tobą zgodzę, że powinny być pull-upy, ale z w praktyce jeszcze nigdy mi się nie zdarzyło, żeby nie wystartował z flasha bez nich, jestem świadomy, że wystawiam się tym na potencjalne problemy w Rev.2 już je dodam Btw. dzięki za zwrócenie uwagi na to i przypomnienie mi o problemach z GPIO16
  3. To co ja napisałem, czyli pliki js, css itp trzymam w pamięci SPIFFS, aby zajmowały mniej miejsca użyłem różnych optymalizacji typu html compressor. Natomiast użyte frameworki mam jako linki do servera cdnjs. Co do odtwarzania dźwięku to użyłbym dedykowanego modułu np taki jak użyłem tutaj: Sterownik ogrzewania
  4. Wykorzystałem bootstrapa. Frameworki są podlinkowane z cdnjs, natomiast główna zawartość jest hostowana na ESP w postaci plików htm, js, css itd. Możliwa jest bardzo prosta podmiana wyglądu strony, wchodząc na http://IP/upload mamy prosty file system. UI do aktualizowania softu (również przez www http://IP/update) jest kompilowane z kodem, takie zabezpieczenie jakby wyparowały wszystkie pliki z pamięci SPIFF
  5. Pierwszy z dwóch projektów. Drugi projekt. Jeśli projekty zostaną zaakceptowane to poproszę o połączenie kodów
  6. Interaktywna zabawka dla kotów gwarantująca zabawę w każdej chwili, żaden kot nie oprze się uciekającej czerwonej kropce. Jest to niewielkie pudełeczko z wbudowanym modułem wifi i banalnie prostą obsługą. Główne funkcje: sterowanie dowolnym urządzeniem z przeglądarką internetową. losowe ruchy lasera o zmiennej prędkości. ustawianie czasu jak długo ma działać. ustawianie harmonogramów automatycznego włączenia. regulacja jasności lasera. regulacja zakresu ruchu i prędkości lasera. możliwość sterowania z dowolnego miejsca na świecie przez internet. sterowanie za pomocą google asystenta. prosta konfiguracja. Zabawka może być zasilana dowolną ładowarką od telefonu, może to być również powerbank. Przy pierwszym uruchomieniu zabawki, zostanie uruchomiona nowa sieć wifi ..::LASERCAT::.. wystarczy połączyć się z nią i wskazać naszą sieć domową, a po zrestartowaniu urządzenie automatycznie podłączy się do niej i już możemy korzystać z zabawki. Z tyłu znajduje się wejście zasilania micro USB, jak w telefonie oraz przycisk. Krótkie wciśnięcie to włączenie/wyłączenie lasera, przytrzymanie przez 3 sek. powoduje rozłączenie obecnej sieci wifi i uruchomienie ponownej konfiguracji. Gdy urządzenie jest już podłączone do naszej sieci wifi to po wpisaniu adresu zabawki w przeglądarce internetowej zobaczymy panel sterujący: Zastosowany laser jest małej mocy, taki sam jak w innych tego typu zabawkach czy bazarkowych wskaźnikach. Dodatkowo dla bezpieczeństwa jest możliwość ustawienia mocy świecenia lasera od 0% do 100%. Pozostałe ustawienia pozwolą dostosować zakres ruchów do miejsca w którym znajduje się zabawka i określić czy kropka ma się poruszać tylko po podłodze, czy częściowo wchodzić na ścianę co może dostarczyć dodatkowej frajdy dla kota. Schemat jest bardzo prosty: Widok płytki PCB: Jak zwykle w garażowym zaciszu metodą "żelazkową" - elektronicy używają żelazka zdecydowanie częściej jak ich partnerki - powstaje mała płytka. Płytka została zabezpieczona przed utlenianiem lakierem PVB16. Całą robotę wykonuje tutaj tani i lubiany układ ESP8266, który posiada moduł WiFi. Dioda laserowa jest zasilana źródłem prądowym dodatkowo kluczowanym z PWM-a co pozwala płynnie regulować jasność od 0% do 100%. Skoro już bebechy mam, to teraz trzeba to wszystko złożyć w całość. Obudowę wykonałem ze sklejki wyciętej laserowo, składanej na wczepy palcowe. No to składamy: Dodanie serwomechanizmów do których przyczepiony jest laser. Oczywiście bez trytytki projekt by się nie udał No i sprzęt jest gotowy, ale co nam po sprzęcie jak on zupełnie nie wie co ma robić? Nie wie, że teraz trzeba machać tym laserkiem tak żeby kot ganiał w tę i we w tę Trzeba to wszystko zaprogramować. Uruchamiamy nasze ulubione IDE czyli Visual Studio Code z wtyczką PlatformIO i zaczynamy pisać program. Soft został napisany z wykorzystaniem Arduino Core, a na całość składa się kilka części: główny program sterujący silniczkami, wyznaczanie losowych ścieżek. serwer www, który udostępnia ładny panel sterowania. konfiguracja sieci WiFi z wykorzystaniem Captive Portal. multicast DNS. stworzenie strony www (html + css + javascript). obsługa komunikacji po websockecie. zdalne wgrywanie plików przez stronę www, np. zmiana wyglądu głównej strony. zdalna aktualizacja oprogramowania bez zbędnych kabli. W oczekiwaniu na gotowe oprogramowanie tester cierpliwie czeka. Panel sterujący dostępny z poziomu przeglądarki internetowej nie jest hostowany nigdzie na zewnątrz, całość znajduje się w zabawce, wykorzystałem bootstrapa plus kilka dodatkowych komponentów. Zastosowany mDNS pozwala połączyć się z urządzeniem wpisując w przeglądarce adres "lasercat.local" zamiast adresu IP. Niestety na chwilę obecną android nie wspiera tego typu rozwiązań, ale na iPhonach działa to bardzo dobrze. Na filmie mała prezentacja z trochę już wybawionym głównym testerem Elroyem a poniżej pokazano jak można włączyć zabawkę po prostu mówiąc do telefonu "Ok Google, włącz laser"
  7. Pojawiła się potrzeba wykonania prostego sterownika do bramy garażowej, który miałby powiadamiać mieszkańców czy aktualnie garaż jest zamknięty czy otwarty oraz w dowolnej chwili sprawdzić status. Tak powstało niewielkie urządzenie montowane na szynę DIN. Jest zasilane z dowolnej ładowarki od telefonu, posiada zabezpieczenie przed odwrotną polaryzacja zasilania. Sterownik ma kilka wejść/wyjść; IN1 - dolna krańcówka od zamknięcia garażu. IN2 - górna krańcówka od pełnego otwarcia garażu. wyjście przekaźnikowe NO do zdalnego otwierania/zamykania bramy. RS485 - pozwala podłączyć czujnik odległości wykrywający czy auto jest w garażu. czujnik temperatury DS18B20. przycisk do resetowania ustawień WiFi i uruchomienia ponownej konfiguracji. W sterowniku zastosowałem popularny układ ESP8266 w wersji WemosD1 mini. Jak widać za wiele rzeczy tu nie ma, oprócz ESP znajduje się przekaźnik, DS18B20 oraz transceiver RS485. Projekt miał być prosty, szybki i jednostkowy dlatego nie zastosowałem dodatkowych stopni ochrony wejść w postaci np. optoizolacji. Tradycyjnie płytka powstała na żelazku i wytrawiona w kwasie. Polutowana i zabezpieczona lakierem do PCB. Schemat ideowy: Wspomniany wcześniej czujnik odległości jest zbudowany z wykorzystaniem ultradźwiękowego czujnika HC-SR04 i Arduino Nano, które cyklicznie wysyła informacje do głównego sterownika. Schemat czujnika: Sterownik ma zaimplementowany serwer WWW co pozwala na sterowanie praktycznie dowolnym urządzeniem z przeglądarką. A panel sterowania prezentuje się tak: Dodałem obsługę powiadomień push na telefon z wykorzystaniem mechanizmu IFTTT (if this then that). Wystarczy zainstalować tą aplikacje na telefonie, a w sterowniku wprowadzić unikalny klucz aplikacji powiązany z konkretnym telefonem. Aktualizacja oprogramowanie wykorzystuje mechanizm OTA i sprowadza się do wgrania pliku przez panel www. Dodatkowo wystawione jest proste API, które pozwala na integracje z większością systemów smart home typu Domoticz, Home Assistant itp.
  8. Tak w eaglu wszystko było robione.
  9. Ciekawe rozwiązanie, też stawiam dokładnie na takie połączenie CAN + HA. Mam rozprowadzone okablowanie więc jest baza, no i CAN pozwala uniknąć problemu 'single point of failure' gdzie pada nam RPI i nawet światła nie włączymy w łazience Możesz opisać trochę jak zorganizowałeś protokół komunikacyjny po CAN-ie? No i bajką by było jakbyś podzielił się skryptem CAN <->MQTT, albo chociaż jego opisem
  10. Jest to zwykły spadek napięcia na diodzie co pozwala zasilić transoptor. Jeśli podłączyłbyś transoptor bez tamtych diod, to spaliłby się. Musiałbyś dać rezystor szeregowo z transoptorem, żeby ograniczyć prąd, ale wtedy miałbyś rezystor również w szeregu z roletą Co do kondensatora to on nie jest zwierany do masy, należy go potraktować jako odbiornik, a tutaj pełni funkcje wygładzania przebiegu, który trafia do uC.
  11. Jeszcze nie doszedłem do tego jak ustawić, aby domyślnie rozmawiał z moją aplikacją, bez wypowiadania wcześniej "Porozmawiaj z 'nazwa aplikacji'". Dopiero wypowiedzenie tego sprawi, że mogę sterować swoim urządzeniem.
  12. Aplikacja ma inny głos aby odróżnić go od ogólnego asystenta google, można wtedy łatwo stwierdzić czy rozmawiamy z naszą aplikacją. Mamy do wyboru dwa męskie i dwa żeńskie głosy.
  13. Są to gotowe rolety zewnętrzne z napędem, ja zrobiłem do nich tylko sterowanie, nie ingerowałem w same rolety.
  14. Dodałem schemat, nic tam odkrywczego nie ma, zebrałem do kupy kilka komponentów. Program napisałem w oparciu o Arduino Core w PlatformIO, projekt jest dosyć duży i nie chcę go tutaj zamieszczać, jak masz jakieś konkretne pytania lub problemy z czymś to chętnie pomogę. Część arduinowych bibliotek użyłem (bo po co odkrywać koło na nowo), część napisałem sam, a część przerobiłem tak, żeby pracowały z wykorzystaniem ekspandera. ESP-12 to dokładnie taki jak z linku w temacie, czyli ESP8266. Użyłem tego bo mam ich kilka w szufladzie, a większość testów robię na NodeMCU, a tam właśnie jest ESP-12. Obudowa to rzeźba podstawowymi narzędziami jak brzeszczot i dremel Korpus wycięty ze sklejki, a front to pleksa mocowana na magnesy, aby ukryć mocowanie do ściany, bardzo dobrze sprawdził się ten pomysł. Dwa boczne przyciski to też pleksa, osadziłem na niej diodę led. Całość jest pomalowana czarną farbą podkładową, jest ona trwała, daje fajną fakturę i głęboki mat. Przyciski wcześniej pomalowałem białą farbą, aby lepiej rozchodziło się światło, a ranty zeszlifowałem pilnikiem.
  15. Parę lat temu podczas remontu u rodziców postanowiłem usprawnić im parę rzeczy w mieszkaniu. Stworzyłem sterownik, który integrował ze sobą sterowanie oświetleniem i ogrzewaniem. Pomimo prostej obsługi nie przewidziałem tego, że moi rodzice będą bali się tego używać, myśleli że coś zepsują... niestety są na bakier z elektroniką. Tak powstała druga wersja, która jest dla nich absolutnie bezobsługowa w kwestii ustawień czy sterowania ogrzewaniem. Podstawowe cechy komunikacja Wifi integracja z Firebase zdalny dostęp z dowolnego miejsca na świecie Odtwarzanie komunikatów głosowych sterowanie za pomocą asystenta Google pilot radiowy 2,4GHz sterowanie oświetleniem sterowanie ogrzewaniem dwupunktowy pomiar temperatury detekcja otwartego okna automatyczne aktualizowanie czasu z serwera NTP łatwe dokładanie bezprzewodowych czujników, np. zalania duży i czytelny wyświetlacz Tym razem uwzględniłem obawy rodziców i w każdej chwili mam dostęp do wszystkich ustawień. Dla niecierpliwych filmik (polecam włączyć dźwięk) Główny moduł Całe sterowanie oparłem o układ ESP12. Jest to układ o bardzo dużych zasobach z wbudowanym wifi. Niestety ma on bardzo mało wyprowadzeń, dlatego aby obsłużyć wszystkie dodatkowe elementy takie jak: LCD ST7565 DS18B20 Enkoder Trzy przyciski Kilka wyjść Moduł MP3 (JQ8400-FL) RFM73 Wykorzystałem 16 bitowy ekspander na SPI MCP23S17. Wymagało to dostosowania kilku bibliotek np. LCD czy enkodera, aby zamiast pinów ESP używały MCP23S17. To było największym wyzwaniem dla mnie, aby zrealizować obsługę trzech układów SPI, gdzie dwa z nich były częściowo sterowane poprzez pierwszy czyli MCP23S17. Dodatkowo przydzielanie czasu na poszczególny element trzeba było odpowiednio rozdzielić, aby obsługa enkodera nie gubiła kroków. Zdalny dostęp Sterownik działa jako klient w sieci wifi, nie chciałem przekierowywać portów na routerze, ani stawiać dodatkowego VPNa. Wykorzystałam tutaj RealTime Database od Google czyli Firebase. Jest darmowe, względnie proste w obsłudze wprost z układu ESP, a dostęp do Firebase posiada każdy kto ma konto w Google. Wykorzystanie tego mechanizmu daje nam bardzo duże możliwości. Możemy hostować tam własną stronę, która będzie naszym frontendem, możemy wykorzystać “cloud functions”, które są praktycznie zasobami node.js, jest to bardzo fajne, bo możemy mieć własny serwer node.js w chmurze. Mając cloud functions i bazę danych, możemy z łatwością podpiąć pod to inne usługi, np. asystenta Google, który pozwoli sterować urządzeniem naturalną mową a nie nagranymi wcześniej próbkami komend. Pod nasz system możemy podpiąć również IFTTT (if this then that) i jeszcze bardziej zautomatyzować obsługę urządzenia. ESP co kilka sekund odczytuje bazę danych z Firebase i sprawdza czy stan jakiegoś elementu uległ zmianie, jeśli tak to znaczy, że zdalnie zmieniliśmy parametry pracy. W drugą stronę, jeśli to sterownik lokalnie zmieni jakąś wartość to od razu aktualizuje ją w Firebase. Asystent Google i komunikaty głosowe Rodzice swoje lata już mają i pamięć nie ta, dlatego dołożyłem system komunikatów głosowych. Pilot, który będzie zawsze pod ręką tuż obok pilota od TV, będzie (czeka na obudowę) jasno opisany i wystarczy nacisnąć jeden przycisk a sterownik powie jaka jest temperatura w mieszkaniu, jaka jest na zewnątrz, czy ogrzewanie aktualnie pracuje albo ile razy dzisiaj było włączane. Pomyślałem, że fajnym dodatkiem będzie wgranie również instrukcji obsługi, gdzie sterownik powie do czego służą poszczególne przyciski. Ze sterownikiem można rozmawiać w sposób naturalny z wykorzystaniem asystenta Google, nie musimy być nawet w pobliżu sterownika, mówimy do telefonu czy komputera znajdując się w dowolnym miejscu na świecie. Sam Google asystent nie steruje bezpośrednio urządzeniem, z wykorzystaniem mechanizmu Dialogflow, który bazuje na machine learning zmienia parametry pracy w Firebase, a urządzenie docelowe pobiera je i wykonuje. Zależności między komponentami pokazałem na poniższej grafice. Moduł radiowy 2,4GHz W sterowniku znajduje się RFM73, jest to niewielki układ radiowy wykorzystany tutaj jako pilot, we wcześniejszej wersji tradycyjny pilot na podczerwień kiepsko się sprawdzał, nie zawsze było się w polu widzenia odbiornika. Dodatkowe czujniki Posiadając na pokładzie układ RFM73 możemy dowolnie rozbudować system o dodatkowe czujniki, np. czujnik zalania w łazience, czujnik oświetlenia czy dodatkowe czujniki temperatury. Dokładanie dodatkowych czujników nie wiąże się z przeprogramowaniem głównego sterownika, ponieważ wszystkie reguły obsługi możemy umieścić w Firebase, a sterownik je pobierze. Poniżej kilka fotek, a jako trzecią rękę polecam taki stojak:
  16. Robi wrażenie, u mnie na liście TODO jest coś takiego
  17. Nixie - lampy od których nie można oderwać wzroku. Kiedyś podstawowy element do prezentowania danych, dzisiaj poszukiwany rarytas przez pasjonatów. Chciałem zaprezentować kilka zegarów jakie wykonałem swego czasu. Opiszę jeden konkretny, a na końcu pokażę kilka innych konstrukcji, które maja podobną elektronikę. Podstawowe funkcje Lampy LC-531 firmy DOLAM Format wyświetlania czasu HH:MM:SS Wyświetlanie daty Dwa niezależne czujniki temperatury DS18B20 Podtrzymanie bateryjne pracy układu zegara Prosta obsługa za pomocą pilota Programowany alarm z różnymi trybami powtórzeń Kilka melodyjek do wyboru jako dźwięk budzika Możliwość wł/wył zera z przodu Programowana częstotliwość „przewijania” lamp, w celu uniknięcia zatrucia katod Elektronika Zegar został oparty o mikrokontroler Atmega8 i zegar RTC PCF8563 . W urządzeniu można wyszczególnić kilka funkcjonalnych bloków: Zegar RTC przetwornica czujniki temperatury odbiornik IR multipleksowanie lamp Przetwornica oparta jest o poczciwego NE555, a jasność lamp reguluje się potencjometrem. Do zegara można podłączyć dwa czujniki temperatury, a odczytana z nich wartość będzie wyświetlana co kilkadziesiąt sekund. Do sterowania wykorzystany jest malutki pilot na podczerwień. Zegar posiada zaprogramowanych kilka melodyjek monofonicznych, które można ustawić jako dźwięk budzika. Użyłem do tego celu buzzer bez wbudowanego generatora. Fajną opcją jest tzw. “slot machine”, czyli krótkie przewijanie wszystkich cyfr, głównym celem tego zabiegu jest ochrona lamp przed zatruciem katod, zwłaszcza pierwszych lamp, gdzie cyfra nie zmienia się przez wiele godzin, szczególnie w zegarach gdzie wyświetlana jest tylko godzina. Efekt przewijania cyfr jest włączany co pięć minut i trwa 10 sekund. Jest to efekt naprawdę miły dla oka. Lampy są aktywowane za pomocą wysokonapięciowych tranzystorów z serii MMBT, a poszczególne cyfry z wykorzystaniem modułu 74141. Układ 74141 jest dekoderem kodu BCD na kod dziesiętny, który zaprojektowano specjalnie do sterowania lampami z zimną katodą. Obudowa W tym konkretnym egzemplarzu wykonana została z poczciwej zabejcowanej sosny. Całość została zamknięta pod pleksą, która była wygięta na ciepło zwykła opalarką. Płytka z elektroniką jest wyeksponowana, widać wszystkie elementy, a PCB jest zabezpieczone prostą soldermaską wykonaną z farby termoutwardzalnej. Schemat Niżej zamieszczam zdjęcia kilku innych zegarów jakie wykonałem, schemat elektroniczny jest w nich podobny.
  18. Na zdjęciu gdzie jest LCD widać wystające śruby M3, przykleiłem je do przedniego panelu jakimś mocniejszym klejem. Płytkę można zdemontować odkręcając nakrętki. Wszystko jest w pełni rozbieralne. Przedni panel to zwykły wydruk na papierze i zalaminowane, przyciski wystają minimalnie ponad plastik obudowy, tak że ten nadruk fajnie się opiera o nie, efekt trochę jak przy membranowych przyciskach.
  19. Gratuluje projektu. W czym projektowałeś obudowę? Zabierałeś np. 1mm na bocznej ściance pojedynczego zęba, aby dało się wcisnąć jedno w drugie? Czy może wymiary są idealnie spasowane, a to co laser zabrał wystarczyło, żeby weszły dwa elementy na siebie? Kolejna sprawa, możesz podesłać info gdzie zamawiałeś usługę cięcia i grawerki? Możesz puścić tą informację na PW, żeby nie robić tu żadnych reklam Pozdrawiam
  20. Co do krańcówek przy roletach, nie było takiej możliwości, żeby je dołożyć, dodatkowo nie miałem doprowadzonych przewodów pod to. Z samej rolety wystają tylko przewody zasilania, więc też nie było możliwości podłączyć się pod krańcówki wbudowane w roletę, a swoją drogą to zamiast krańcówek mam system przeciążeniowy w nich. Chciałem zrobić pomiar prądu jak najmniej inwazyjny i odseparować część wysokiego napięcia od niskiego, stąd spadek napięcia na rezystorze odpadł. ACS711 to czujnik magnetyczny więc fizycznie odseparowana strona pomiarowa, ale różnice w prądzie były zbyt małe, żeby sensownie interpretować wyniki. ACS711 trochę się wzbudza nawet jak nie płynie przez niego prąd. Rozwiązanie z diodami jest najprostsze, w momencie jak podaje napięcie na roletę to odkłada się na nich trochę ponad 1V, co aktywuje transoptor, a elektronika w rolecie nawet nie poczuje braku tego 1V Dwie diody w szereg, żeby spadek był większy, a przeciwstawnie bo jest tutaj napięcie AC i chciałem mieć detekcję w obu połówkach przebiegu napięcia.
  21. Dodając krok po kroku trochę automatyki w mieszkaniu powstał projekt i realizacja sterownika rolet zewnętrznych. Główne cechy urządzenia: obsługa 7 rolet zdalny dostęp z dowolnego miejsca na świecie sterowanie przez Wifi sterowanie przez Bluetooth sterowanie przez sieć CAN automatyczny pomiar czasu pracy poszczególnych rolet harmonogram otwierania/zamykania rolet sterowanie grupowe tworzenie scen pobieranie aktualnego czasu z serwera NTP Sterownik został podzielony na dwie części, pierwsza to płytka z przekaźnikami i zasilaniem, druga płytka to układ sterowania wraz z modułami komunikacyjnymi. Główne elementy wykorzystane w sterowniku to: STM32F103C8T6 jako moduł Bluepill Moduł Wifi ESP-12 Bluetooth HC-05 Największym wyzwanie okazało się wykrywanie zakończenia pracy rolety. Było to niezbędne do automatycznego pomiaru czasu pracy, które jest wykorzystywane do określania pozycji pośrednich. Na początku testowałem wykrywanie prądu z wykorzystaniem modułu ACS711, ale niewielki prąd pobierany przez roletę podczas pracy powodował niestabilne pomiary z układu ACS711. Drugim pomysłem było wykorzystanie przekładników prądowych. Pomiary były stabilne, ale to rozwiązanie odpadło ze względu na fizyczne rozmiary takich przekładników, potrzebowałem użyć ich aż siedem sztuk. Ostatecznie zastosowałem rozwiązanie polegające na spadku napięcia na diodach, które aktywuje transoptor PC814. Rolety które posiadam mają wewnętrzne zabezpieczenie przed podaniem napięcia na oba uzwojenia silnika (góra, dół), jednak tak zaprojektowałem układ, aby sprzętowo nie było to możliwe. Pokazane jest to na poniższym rysunku. Program został napisany w C++ z wykorzystanie Arduino Core. ESP-12 pełni rolę konwertera komunikacyjnego, od strony wifi oferuje RestApi, konwertuje otrzymane wiadomości/zapytania na komunikację uart i wysyła do głównego procesora STM32. Na drugim porcie uart w STM32 jest podobna komunikacja z wykorzystaniem modułu bluetooth. Moduł BT aktualnie służy do przeglądania bieżących logów. Ponadto moduł posiada opcję komunikacji z wykorzystaniem sieci CAN, jestem bardziej fanem rozwiązań przewodowych tam gdzie jest to możliwe. Jak w mieszkaniu pojawi się więcej elementów automatyki to będę chciał całość przepiąć na sieć CAN zamiast Wifi. Sterowanie modułem odbywa się jak wspomniałem wyżej zapytaniami REST, na Banana Pro posiadam domowy serwer www, dołożyłem do niego prostą stronę w PHP, która pozwala w wygodny sposób wysyłać zapytania do sterownika. Do połączenia się ze sterownikiem poza domową siecią wykorzystuje OpenVPNa.
  22. Kolega modernizując u siebie w mieszkaniu system ogrzewania poprosił mnie o wykonanie jakiegoś sterownika do pieca CO wraz ze sterowaniem dmuchawy. Tak powstał niewielki regulator, który miał mieć na celu prostotę i czytelność. Główne elementy użyte do budowy sterownika to: LCD 2x16 HD44780 ATMEGA8 - zastosowany procesor DS18B20 - czujnik mierzący temperaturę na piecu przekaźnik na 5V taki jak tutaj: przekaźnik Głównym zadaniem jest uruchamianie pompy obiegowej na podstawie zadanej temperatury na piecu. Dodatkową funkcją jest tryb rozpalania, który w początkowej fazie uruchamia dmuchawę. Jest to bardzo przydatna opcja, przyspieszająca proces rozpalania w piecu. Sterowanie jest bardzo proste, odbywa się z wykorzystaniem tylko trzech przycisków. W podstawowym widoku regulujemy zadaną temperaturę na piecu, która decyduje o tym czy pompa ma zacząć pracować czy nie. Regulator jest prostą nastawą z histerezą. Po wejściu w menu możemy dodatkowo zmienić: temperaturę wyłączenia dmuchawy. Jeżeli piec jest zimny i włączymy opcję rozpalania to po osiągnięciu już stosunkowo niewielkiej temperatury dmuchawa zostanie wyłączona histerezę pracy regulatora maksymalne czasy pracy pompy i dmuchawy Wszystko zostało zamknięte w obudowie natynkowej, a sterownik umieszczony obok pieca w pomieszczeniu gospodarczym. Układ składa się z dwóch płytek rozdzielając część wysokiego napięcia i sterowania. Zdecydowałem się na umieszczenie kompletnego zasilania w urządzeniu, transformator, bezpiecznik i kilka dodatkowych elementów. Powodem tego było to, że sterownik jest używany przez kogoś innego a dołączany zasilacz może się zgubić i wtedy nie mam kontroli na tym jaki zamiennik zostanie użyty. Tutaj jest pokazany schemat i wzór płytki: Płytka została wykonana w domowych warunkach metodą żelazkową. Dla poprawy czytelności wykorzystałem możliwość definiowania własnych znaków co pozwoliło uzyskać duże cyfry widoczne z daleka. Niżej pokazuje jak uzyskać takie efekt. - najpierw musimy zdefiniować poszczególne elementy cyfr i ładujemy je do pamięci wyświetlacza uint8_t BigDigitDefChar[][8] = { {15,7,32,32,32,32,3,7}, {32,32,32,32,32,32,7,15}, {28,30,30,30,30,30,30,28}, {7,15,15,15,15,15,15,7}, {31,31,32,32,32,32,32,32}, {32,32,32,32,32,32,31,31}, {31,31,32,32,32,32,31,31}, {30,28,32,32,32,32,24,28} }; for(uint8_t i=0;i<8;i++) lcd_defchar(i,BigDigitDefChar[i]); - następnie tworzymy tablicę która poskleja nam te segmenty w cyfry char* BigDigit[][2]={ {"\x83\x84\x82","\x83\x85\x82"}, //0 {" \x82"," \x82"}, //1 {"\x80\x86\x82","\x83\x85\x85"}, //2 {"\x80\x86\x82","\x81\x85\x82"}, //3 {"\x83\x85\x82"," \x82"}, //4 {"\x83\x86\x87","\x81\x85\x82"}, //5 {"\x83\x86\x87","\x83\x85\x82"}, //6 {"\x83\x84\x82"," \x82"}, //7 {"\x83\x86\x82","\x83\x85\x82"}, //8 {"\x83\x86\x82","\x81\x85\x82"} //9 }; - teraz już tylko wystarczy użyć odpowiedniej funkcji do wyświetlania. Funkcja ta korzysta z obsługi R/W i odczytuje stan busy flag co pozwala na odczytanie pozycji kursora. Jeśli ktoś będzie chciał podłączyć R/W do GND to musi przerobić tą funkcję tak aby przekazać do niej pozycję kursora void lcd_big_int(int val) { uint8_t pp,x,y; char bufor[17]; char *wsk=itoa(val, bufor, 10); //zamieniamy całą liczbę na pojedyncze znaki ACSII np. 1234 -> '1','2','3','4' register uint8_t znak; while ( (znak=*(wsk++)) ) //pętla jest powtarzana po wszystkich indeksach tablicy bufor, aż napotka '\0' { pp = check_BF() & 0b01111111; //odczytujemy aktualną pozycję kursora - busy flag wyświetlacza y = pp & 0xF0; //wyodrębniamy nr wiersza x = pp & 0x0F; //wyodrębniamy pozycję x znak -= 0x30; //zamieniamy kod ascii na rzeczywistą wartość dziesiętną np '7' -> 7; będzie to nasz indeks do tablicy lcd_str(BigDigit[znak][0]); //ładujemy na wyświetlacz górną część cyfry lcd_write_cmd( (0x80 + y + 0x40 + x) ); //wracamy kursorem na domyślną pozycję x, ale o jeden wiersz niżej lcd_str(BigDigit[znak][1]); //ładujemy na wyświetlacz dolną część cyfry lcd_write_cmd( (0x80 + y + x + 0x03) ); //ustawiamy kursor zaraz za cyfrą w wierszu domyślnym, czyli takim w którym wywołano funkcję } } uint8_t check_BF(void) { CLR_RS; return _lcd_read_byte(); } Jest to prosty sposób na bardzo fajne wyświetlanie liczb, które są widoczne z daleka.
  23. W ramach pracy magisterskiej wykonałem dedykowany sterownik do stacji uzdatniania wody, jako alternatywę dla sterowników PLC. Sam temat pracy został zaproponowany przeze mnie dlatego, że lubię robić coś bardziej kreatywnego niż pisanie suchego tekstu. Promotorowi bardzo się to spodobało i nie było żadnego problemu aby przystąpić do tego zagadnienia. Pewnie niektórzy się zastanowią dlaczego akurat stacja uzdatniania wody? W tamtym czasie pracowałem w automatyce przemysłowej i głównie robiliśmy właśnie takie obiekty. Zawsze były one robione na sterownikach PLC, są to drogie zabawki. Pomyślałem, że można zrobić prototyp takiego dedykowanego sterownika do tego rodzaju pracy, a w przyszłości dostosować go do różnych obiektów, gdzie jest różna ilość zaworów, pomp, zbiorników itp, ale zawsze jest ta sama część wspólna czyli sterowanie samym procesem uzdatniania. Sterownik został oparty o procesor Atmega128, a wszystko zostało dopasowane do obudowy na szynę DIN Z104J. Podstawowe cechy to: 32 wejścia cyfrowe 16 wyjść cyfrowych 5 wejść analogowych zegar RTC RS485 zdalny dostęp przez przeglądarkę www Sam procesor ma zbyt małą ilość wyprowadzeń aby obsłużyć wszystkie sygnały sterujące. Aby zwiększyć ilości wejść/wyjść wykorzystałem ekspandery na I2C - PCF8574. Podzieliłem całość na logiczne moduły, podobnie jak to jest w sterownikach PLC: 4 moduły DI - cyfrowe sygnały wejściowe 2 moduły DO - cyfrowe sygnały wyjściowe 1 moduł AI - analogowe sygnały wejściowe moduł RS485 Na wejściach cyfrowych do zabezpieczenia zastosowałem optoizolatory takie jak są wykorzystane np. tutaj TLP281. Na poniższym schemacie przedstawiony jest jeden taki blok. Masy są rozdzielone, co może w prost nie wynika ze schematu. Układ wyjściowy jest zrealizowany w oparciu o UDN2987 Moduł Analogowy został skonstruowany tak aby przyjmować sygnały prądowe 4..20mA. Jest to przemysłowy standard najczęściej wykorzystywany w czujnikach. Cechuje go prostota obsługi i uniwersalność, a fakt, że dolny zakres pomiarowy to 4mA ułatwia to detekcję wadliwego czujnika. W celu pokazania całego procesu uzdatniania wody wykonałem model o wymiarach 100cm x 50cm ukazujący różne etapy pracy takiej stacji, jak: uzdatnianie płukanie zbiorników ze złożem uzdatniającym napowietrzanie zbiorników napełnianie zbiornika retencyjnego chlorowanie układu w celu dezynfekcji dostarczanie uzdatnionej wody do odbiorców Na makiecie umieszczone zostały diody sygnalizujące otwarcie poszczególnych zaworów, co pozwala w łatwy sposób zaobserwować jak zachodzi cały proces pracy takiej stacji. Zamontowane są również potencjometry przy przepływomierzach, są one wpięte w pętle prądową aby zachować zgodność z prawdziwymi czujnikami przepływu. Na tej podstawie można zliczać ile wody zostało uzdatnionej, dobierać interwały pracy i wyznaczać potrzebę płukania filtrów. Całe sterowanie wykonałem w oparciu o web serwer z wykorzystaniem ASP.NET, tworząc taką mini SCADe. Wizualizacja wiernie odzwierciedla cały model. Serwer to aplikacja na system Windows, do którego podpięty jest moduł USB <-> RS485 zapewniający komunikację ze sterownikiem. Mamy podgląd na żywo całego procesu, dane są odświeżane automatycznie na bieżąco. W aplikacji możemy ustawić wszystkie parametry pracy sterownika, podglądać alarmy i włączać na żądanie wybrane etapy takie jak płukanie filtrów czy pobieranie wody ze studni głębinowej. Sam proces uzdatniania wody może nie jest technologicznie skomplikowany, ale jest bardzo ciekawy od strony automatyki. Jako ciekawostkę dodam, że złoże które znajduje się w zbiornikach filtrujących to po prostu odpowiednie kruszywo wiążące konkretne cząsteczki z wody, najczęściej jest to odżelaziacz i odmanganiacz.
  24. Posiadając dwa futrzaki pojawiła się potrzeba zapewnienia im odpowiedniej ilości jedzenia, szczególnie podczas weekendowych wyjazdów. Przeglądając gotowe rozwiązania stwierdziłem, że najlepiej zbudować samemu mając przy tym sporo frajdy i satysfakcji. Urządzenie zostało zbudowane w oparciu o: Raspberry Pi Zero W Kamera do Raspberry Pi Serwo L360 Uchwyt na kamerę Czujnik odległości Główne cechy urządzenia Zdalna możliwość karmienia z dowolnego miejsca na świecie podgląd z ruchomej kamery ultradźwiękowy czujnik wykrywający kota oświetlenie IR pozwalające na podgląd w nocy możliwość wgrywania i odtwarzania dowolnych plików audio opcja "Text To Speach" duży 10 litrowy zbiornik na karę detekcja pustego zbiornika harmonogram automatycznego podawania karmy Pierwszym etapem i najtrudniejszym było wykonanie niezawodnego mechanizmu podającego karmę. Przetestowałem kilka rozwiązań: podajnik ślimakowy mechanizm koszykowy zasuwa podajnik tłokowy - to rozwiązanie sprawdziło się świetnie Układ podający powstał z ogólnodostępnych elementów PCV Niżej widok od tyłu pokazujący montaż tłoka Na filmie pokazana jest idea pracy mechanizmu, były to pierwsze próby ze słabszym serwomechanizmem. Ostatecznie został wymieniony na L360, a ruch obrotowy samego serwa zastąpiony ruchem "po łuku - przód, tył" co pozwoliło zapobiec ewentualnemu zakleszczeniu się karmy. Mechanizm - film Kolejnym etapem było wykonanie dodatkowej elektroniki obsługującej: 2 serwa do kamery 1 serwo podające karmę wzmacniacz audio czujnik odbiciowy IR czujnik zbliżeniowy Dodatkową wyzwaniem było przerobienie zwykłej kamery na kamerę NoIR, w tym celu zdemontowałem układ optyczny i delikatnie usunąłem filtr podczerwony. Poniżej wygląd matrycy po zdemontowaniu tych elementów. Po ponownym zamontowaniu soczewki, kamera działała już prawidłowo przy oświetleniu podczerwonym. Poniżej widok od spodu: Główne oprogramowanie sterujące sprzętem zostało napisane w pythonie, a interfejs użytkownika w PHP, na raspberry pi jest postawiony serwer www razem z mysql, tak więc jest to mały potworek do karmienia kotów. Sterowanie odbywa się przez stronę www, co wyeliminowało pisanie dedykowanej aplikacji na każdy z systemów osobno. Na koniec kilka dodatkowych zdjęć
×
×
  • Utwórz nowe...