Skocz do zawartości

Kamil2118

Użytkownicy
  • Zawartość

    8
  • Rejestracja

  • Ostatnio

Reputacja

13 Dobra

O Kamil2118

  • Ranga
    2/10

Ostatnio na profilu byli

Blok z ostatnio odwiedzającymi jest wyłączony i nie jest wyświetlany innym użytkownikom.

  1. Pomysł na ten projekt zrodził się w momencie, gdy zwykłe sterowanie oświetleniem (włącz/wyłącz) stało się nie wystarczające. Elementy Moduł ściemniacza ESP8266 12E Enkoder rotacyjny KY-040 Zasilacz Hi-Link HLK-PM01 Moduł z przetwornicą AMS1117 Moduł z BMP280 Budowa Do połączenia wszystkich elementów wykorzystałem zaprojektowane przez siebie płytki PCB, podzielone na sekcje zasilania oraz mikrokontrolera. W sekcji zasilania poza zasilaczem zastosowałem zabezpieczenia w postaci warystora (s10k250) oraz bezpiecznika rurkowego. W części z mikrokontrolerem wyprowadzone zostały wejścia: UART, GPIO0 (do aktualizacji), zasilanie modułu ściemniacza oraz sterowania tym modułem (pin detekcji zera sieci, sterowanie triakiem), wyjście na diodę kontrolną, wyjście RJ45 do fizycznego panelu sterowania, gniazdko elektryczne do podłączenia lampki. Całość została zamknięta w puszcze natynkowej. Do fizycznego sterowania użyty został enkoder przytwierdzony do drewnianej szkatułki w której umieszczono również czujnik BMP280. Drewniane pudełko połączone jest do „modułu centralnego” kablem Ethernetowym. Ogólna zasada działania modułu ściemniacza Sposób działania ściemniacza jest bardzo prosty. Prąd przemienny płynący w gniazdu elektrycznym ma postać podobną do sinusoidy. Jeżeli załączenie prądu nastąpi po upływie 30% czasu trwania każdej połówki sinusoidy to żarówka będzie świecić na 70% jasności, ponieważ tylko tyle energii zostanie jej przekazane. Za detekcję zera sieci (początek połówki sinusoidy) odpowiada optotraik umieszczony w module, w monecie przejścia przez zero wykonywane jest przerwanie w mikrokontrolerze, triak przepuszcza prąd przez określony czas. W wyliczeniach czasu muszą zastać uwzględnione między innymi częstotliwość prądu, czy wielkość każdego kroku przyciemnienia. Szczegółowo zasada działania podobnego ściemniacza została opisana w książce Mirosława Kardasia Mikrokontrolery AVR Język C Podstawy programowania. Do swojego celu wykorzystałem bibliotekę przygotowana przez twórców modułu. Funkcjonalności: Możliwość ustawienia intensywności świecenia podłączonej żarówki w przedziale 0-100%. Możliwość ustawienia wygaszenia światła po określonym czasie, ściemnianie następuje płynnie. Możliwość sprawdzenia temperatury otoczenia, a po poprawnej kalibracji również ciśnienia. Możliwość kontroli ściemniacza fizycznym pokrętłem (krok 5 punktów procentowych). Możliwość kontroli poprzez sieć lokalną. Szczegółowy stan urządzenia udostępniany jest w formacie XML. Implementacja casu pobieranego z serwerów NTP. Witryna zarządzania Strona internetowa powstała przy wykorzystaniu biblioteki jQuary oraz technologii Bootstrap w celu zachowania responsywności. Do sterowania poziomem światła służy suwak poczatkowo automatycznie ustawiany w pozycji aktualnej wartości, dodatkowo nad nim widoczny jest pasek postępu obrazujący aktualny stan jasności, zastosowany został w celu poprawienia widoczności w przypadku sterowania przy wykorzystaniu ekranów dodatkowych. Do precyzyjnego ustawiania wartości zamieszczone zostały przyciski „+” oraz „-”. W zakładce „ustawienia” użytkownik ma możliwość sprawdzenia szczegółowych danych o statusie urządzenia, zmiany częstotliwości pomiaru temperatury oraz wymuszenia aktualizacji czasu.
  2. Nie jestem przekonany, czy przerost, takie małe usprawnienie skierowane do użytkowników z androidem (nie działa tam poprawnie opisana wyżej usługa mDNS). Miałem po prostu wolny znacznik, a pod samą naklejka jest dziura po fabrycznie zamontowanej diodzie, starałem się ją zakryć czymś więcej niż kawałkiem taśmy. Nie ma co ukrywać, że ten tag to raczej ciekawostka, bo po dodaniu adresu do zakładek w przeglądarce nie ma potrzeby go używać z danym smartfonem.
  3. Jakiś czas temu przestało mi działać jedno z gniazdek elektrycznych sterowanych pilotem radiowym, chcąc wykorzystać to co po nim pozostało postanowiłem zbudować własny kontakt zdalnie sterowny z autorskim oprogramowaniem. Na część sprzętową składają się między innymi: Obudowa po uszkodzonym włączniku Transformator 230VAC-5VDC ESP8266 ESP-12E Moduł z przetwornicą AMS1117 Dioda RGB Przekaźnik Prąd z transformatora jest obniżany przetwornicą do napięcia 3.3V odpowiedniego dla mikrokontrolera. Do ESP8266 podłączone są, poprzez rezystor, dioda odpowiedzialna za informowanie o stanie urządzenia oraz przekaźnik, to on będzie odpowiadał za sterowanie przepływem prądu w gniazdku. Całość zmontowana została na płytce PCB, wpasowana tak by wyprowadzenia połączenia UART znajdowały się pod otwieraną klapką na tyle obudowy. W swoim oprogramowaniu na początku zaimplementowałem bibliotekę WiFiManager, podczas pierwszego uruchomienia lub po wyczyszczeniu zapamiętanych danych urządzenia (przytrzymanie przycisku na obudowie przez około 15 sekund) uruchomiony zostaje tryb Access-Point (punkt dostępu), po połączeniu się z nim mamy stronę konfiguracji urządzenia o nazwę i hasło naszej sieci. Jest to o tyle przydatne, że nie musimy na sztywno w kodzie podawać takich danych. Kolejną ważną zaimplementowaną biblioteką jest ESP8266mDNS, wprowadza ona usługę mDNS, aby połączyć się z urządzeniem nie potrzeba zapamiętywać jego adresu IP, wystarczy w przeglądarce wpisać ustalony w kodzie adres z końcówką „.local” (usługa dostępna dla urządzeń z systemem firmy Apple, komputery osobiste Windows z usługą Bonjorno oraz Linux z Avahi). Najważniejsze cechy oprogramowania: Czas bez modułu RTC Godzina i data pobierane są z serwera NTP i zapisywane do zmiennej typu unsigned long long w milisekundach. Czas pobierany jest co 24H. Nieustannie do zmiennej dodawany jest czas zwrócony przez funkcję millis() pomniejszony o ostatni odczyt milisekund, ma to na celu zapewnienie ciągłości czasu. Dodatkowo przy każdym zwiększeniu czasu z serwera NTP o millis() następuje sprawdzenie przejścia na czas zimowy<->letni. Niezależnie od czasu NTP inna zmienna typu unsigned long long przechowuje czas działania urządzenia, jest to nic innego jak dane otrzymane z odczytu millis(), jednak pozbawiona wady ograniczonej wielkości do około 50dni. Wyłączanie po określonym czasie W urządzeniu zaimplementowano możliwość ustawiania czasu do wyłączenia pomiędzy 1, a 30minut. Wraz z ustawieniem czasu przekaźnik załącza się i wyłącza po upłynięciu tego czasu lub wybraniu opcji wyłącz w panelu sterowania. Dodatkowo na stronie panelu sterowania widoczny jest licznik odliczający wyłączenie. Harmonogram Oprogramowania gniazdka pozwala na tworzenie harmonogramów działania. Określone zostają dzień (poszczególne dni tygodnia, weekend, dni robocze), godzina, minuta oraz stan jaki ma wtedy nastąpić (włącz/wyłącz). Dane zapisywane są w pamięci EEPROM co zapewnia ich trwałość. Sterowanie POST Wszystkie polecenia realizowane przez urządzenie przekazywane są do niego metodą POST, nie ma więc potrzeby korzystania wyłącznie ze sterowania poprzez dedykowaną stronę internetową. Jest to o tyle wygodne, iż instalując na telefonie program do skrótów http możemy przypiąć do ekranu startowego pożądane funkcję, np. włącz, wyłącz, wyłącz po 2 minutach. Informacje w XML Wartości większości zmienny przechowujących dane o urządzeniu udostępniane są przez serwer uruchomiony na mikrokontrolerze w postaci XML. Pozwala to na szybki podgląd stanu urządzenia, harmonogramu lub informacji o ewentualnych błędach np. pobierania czasu. Obsługa poprzez stronę internetową. Strona internetowa napisana została głównie z myślą o wygodzie korzystania na urządzeniach mobilnych. Wykorzystana została tu przede wszystkim biblioteka jQuery. Przy pomocy funkcji Ajax odbywa się sterowanie urządzeniem (metody POST). Natomiast parsując dane udostępniane w postaci XML witryna wyświetla aktualny stan urządzenia. Pliki HTML zapisane zostały w mikrokontrolerze przy użyciu systemu plików SPIFFS. NFC Na obudowie została zamieszczona naklejka z tagiem NFC, który zawiera adres IP urządzenia, na sztywno przypisany w ustawieniach routera.
  4. Początkowo chciałem udostępnić drukarkę tylko lokalnie, zacząłem bezskuteczną zabawę z Samba i uznałem, że ostatecznie lepiej doinstalować usługi Google i mieć więcej opcji wydruku oraz brak zabawy sterownikami na każdym sprzęcie.
  5. Współczesne drukarki mają w standardzie komunikację poprzez sieć Wi-Fi, stanowi to dużą korzyść dla użytkownika, ilość przewodów w pomieszczeniu ograniczona jest do minimum, ale również swoboda ulokowania sprzętu drukującego niezależnie od położenia routera czy komputera wnosi dozę komfortu. Coraz częściej spotykane są nawet możliwości instalacji na smartfony wtyczek drukarek danych producentów i zdolność mobilnego drukowania. Co w przypadku kiedy nasza drukarka nie narodziła się w drugiej dekadzie XXI wieku i nie posiada takich dogodności komunikacyjnych? Tym właśnie chciałbym się zająć w moim projekcie. Przy pomocy Raspberry Pi udostępnić drukarkę w usłudze Google Cloud Print zyskując możliwość wydruku z dowolnego miejsca na świecie, a stosując przekaźnik włączyć ją automatycznie kiedy ma zadanie do wydrukowania, wyłączyć zaś po określonym czasie, po wykonaniu tego zadania. Czym jest usługa Google Print? „Google Cloud Print (GCP) to usługa umożliwiająca drukowanie z dowolnego urządzenia połączonego z siecią. Przekazuje ona zadania drukowania z komputera, smartfona lub tabletu do drukarki połączonej z internetem. Ułatwia też użytkownikom wykrywanie drukarek i drukowanie z własnych urządzeń bez konieczności przeprowadzania skomplikowanej konfiguracji i instalowania sterowników.” Czytamy na stronie producenta. Jak to działa? Osoba drukująca loguje się na stronie Google Cloud Print / wybiera Google Cloud Print w usługach wydruku (system Android). Wybranie elementu do wydruku. Ustawienie parametrów wydruku (rozmiar, jakość itp.). Wybór drukarki z listy dostępnych oraz przesyłanie zadania. Drukarka otrzymuje zadanie i dodaje je do bufora wydruku. Skrypt ustawia stan wysoki na pinie przekaźnika (drukarka zostaje uruchomiona). Następuje wydruk. Skrypt wyłącza dopływ prądu do drukarki po określonym czasie. Potrzebne elementy Starałem się ograniczyć ilość użytych elementów do minimum, zależało mi na stworzeniu niedużego dodatku do drukarki, który ma poszerzyć jej funkcjonalność przy niewielkich rozmiarach. Wykorzystane elementy: Raspberry Pi Zero Karta Wi-Fi USB Ładowarka po starym telefonie 5V/0,7A Karta pamięci 8GB Hub USB 4 posty Przejściówka USB <-> micro USB Przekaźnik SSR 5V, może być dowolny inny przekaźnik załączany stanem wysokim Puszka natynkowa 60 x 30 x 60 mm Puszka natynkowa 290 x 25 x 80 mm Śruba 3mm wraz z nakrętką Przewody Wtyczka elektryczna Gniazdo elektryczne W projekcie użyto Raspberry Pi Zero bez wbudowanej komunikacji Wi-Fi, w przypadku użycia wersji Zero W tego urządzenia przestaje być konieczne posiadanie dodatkowej karty sieciowej oraz huba USB. Do Raspberry Pi podłączone jest zasilanie, hub USB poprzez przejściówkę USB <-> micro USB, przewody do przekaźnika SSR (sterowanie poprzez GPIO4), całość zamknięta jest w puszcze elektrycznej z wyciętą uprzednio listwą zaciskową. Do huba wpięta jest karta sieciowa i przewód od drukarki. Przekaźnik ukryty w mniejszej puszcze natynkowej (przykręconej śrubą do puszki zawierającej Raspberry Pi) posiada wpięte kable sieci elektrycznej zakończone wtyczką elektryczną oraz gniazdkiem elektrycznym (do niego podłączony zostaje kabel zasilający drukarkę). Całość przymocowana została do obudowy drukarki taśmą dwustronną. Instrukcja instalacji Przygotowanie Raspberry Pi. Wgrywam czysty system „Raspbian Stretch Lite” pobrany z oficjalnej strony. Użyłem wersji z 2018-11-13. Wprowadzam ustawienia pozwalające na komunikację UART oraz SSH z maliną (na partycji „boot” dodanie w pliku „config.txt” linijki „enable_uart=1”; utworzenie na partycji pliku „ssh” bez rozszerzeń). Podłączam Raspberry do komputera przy pomocy programatora. GND <-> GND TX <-> RX RX <-> TX Podłączam zasilanie, hub USB oraz kartę sieciową. Instalacja sterowników karty sieciowej. Jako, iż system Raspbian nie posiadał wbudowanych sterowników mojej karty musiałem je ręcznie doinstalować. Loguję się do systemu. Wykonujemy polecenie lsusb w wyniku czego otrzymujemy listę urządzeń podłączonych do portu USB Raspberry Pi. Jako, że malina nie jest podłączona do Internetu pakiet ze sterownikiem muszę pobrać sam na komputerze. Przechodzę na stronę pakietów Debian i wyszukuję paczkę, w moim przypadku ZD1211. Wybieram stabilny pakiet i pobieram klikając przycisk „all” poniżej strony. Wyłączam Rasberry Pi, wyciągam kartę pamięci i podłączam ją do komputera. Na dostępną partycję „boot” przenoszą pobraną paczkę z rozszerzeniem ".deb", dla dalszej wygody zmieniam nazwę pliku „firmware-zd1211_1.5-4_all.deb” na „wifi.deb”. Instalacja pakietów debian odbywa się przy pomocy polecenia „ dpkg -i” oraz podania ścieżki do pliku. Dane przesłane na partycję „Boot” są dostępne w Raspberry Pi w katalogu „boot”. Wykonuję polecenie sudo dpkg -i /boot/wifi.deb Po zainstalowaniu pakiet usuwam poleceniem sudo rm /boot/wifi.deb oraz wykonuje restart urządzenia sudo reboot Konfiguracja dostępu do sieci Po uruchomieniu przechodzę do konfiguracji połączenia WiFi polecenie sudo raspi-config następnie wybór „Network Options” > „Wi-fi”. Wybieram z listy kraj na terenie którego będziemy korzystać z sieci > wprowadzam dokładną nazwę swojej sieci domowej „SSID” > wprowadzamy hasło. Instalacja programu CUPS Wydaję polecenie sudo apt-get install cups nastąpi pobranie i zainstalowanie programu CUPS. Dodaję użytkownika „pi” do grupy administratorów, aby mógł zarządzać funkcjami CUPS sudo usermod -aG lpadmin pi Daję zgodę na dostęp do usługi wszystkim w sieci lokalnej sudo cupsctl --remote-any Restartuję usługę CUPS sudo /etc/init.d/cups restart Jeśli wszystko wykonało się poprawnie po wpisaniu w przeglądarkę [adres IP Raspberry Pi]:631 (przykładowo 192.168.0.2:631; adres IP można sprawdzić poleceniem „ifconfig”, jest on widoczny w sekcji „wlan0”) powinien być widoczny panel administracyjny aplikacji zajmującej się obsługą drukarek podpiętych do maliny (CUPS). Instalacja i konfiguracja drukarki w programie CUPS. Podłączam uruchomioną drukarkę do portu USB Raspberry Pi, następnie uruchamiam malinę. Otwieram w przeglądarce stronę CUPS, przechodzę do zakładki „Administration” a następnie wybieram „Add Printer”. W moim przypadku w tym momencie wyskoczył problem z zabezpieczeniem strony, nie udało mi się go rozwiązać dla CUPS, więc po skonfigurowaniu drukarki wystarczy tylko, dla bezpieczeństwa, zmienić hasło użytkownika uprawnionego do konfiguracji (w moim przypadku „pi”). Aby obejść problem (dla przeglądarki Mozilla FireFox) wybieram „Zaawansowane” > „Dodaj wyjątek” > „Potwierdź wyjątek bezpieczeństwa”. Pojawia się okno logowania, podaje dane takie jak dla użytkownika dodanego podczas konfiguracji usługi CUPS. Z listę możliwy do podłączenia drukarek. Wybieram „Local Printers” i przechodzę dalej. Pojawia się okno edycji opisu wybranej drukarki. Można zmienić jej oznaczenie, opis, czy określić lokalizację. Uzupełniam dane względem potrzeb i przechodzę dalej. Wyświetlone zostaje okno wyboru sterowników. Jako, iż na rynku dostępnych jest bardzo wiele modeli, a nie wszystkie są domyślnie wbudowane w serwis, może się zdarzyć, że na liście po prostu zabraknie jakiegoś modelu, jak w moim przypadku. W takim przypadku mogę spróbować wybrać z listy drukarkę podobną. Wyszukać w Internecie lub na płycie dołączonej do drukarki pliku PPD dla swojego modelu lub zainstalować w Raspberry Pi sterowniki dla większości modeli danej marki. Wybrałem ostatnią możliwość. Loguję się do terminala maliny i wykonuję polecenie zależne od producenta drukarki. splix – Samsung gutenprint - Canon, Epson, Lexmark, Sony, Olympus hplip – HP Moja drukarka to Samsung, więc wykonuję sudo apt-get install -y printer-driver-splix Po pomyślnym zakończeniu instalacji wracam do strony konfiguracyjnej, przechodzę do „Administration” > „Add Printer” > wybieramy drukarkę > uzupełniamy ewentualny opis i przechodzę dalej. Sterownik mojej drukarki znajdował się w zainstalowanym pakiecie i został wyświetlony na liście. Zaznaczam go i dodaję drukarkę. Ostatnim etapem są ustawienia preferencji drukowania, rozmiar papieru, wybór zasobnika papieru, rozdzielczość wydruku itp. Po poprawnym dodaniu drukarka powinna znaleźć w zakładce „Printers” Po wybraniu drukarki z listy istnieje możliwość między innymi jej ponownej edycji, czy sprawdzenia działania drukując stronę testową. Instalacja usługi Google Cloud Print Instaluję niezbędne pakiety sudo apt-get install -y build-essential python-dev libcups2-dev libavahi-client-dev sudo apt-get install -y python-setuptools sudo easy_install pip sudo pip install pycups sudo pip install cloudprint sudo pip install cloudprint[daemon] sudo apt-get update Wykonuję polecenie. sudo cloudprint Zostanie wyświetlony adres pod który należy wejść w przeglądarce. Loguję się do swojego konta Google i wybieram „zarejestruj”. Jeżeli wszystko zostało wykonane poprawnie w terminalu powinien widnieć taki komunikat Przerywam działanie usługi skrótem Ctrl+C. Skrypt sterujący przekaźnikiem. Skrypt najwygodniej zapisać w lokalizacji uwzględnionej w zmiennej PATH, ja wybrałem katalog „bin”. Otwieram edytor w lokalizacji „bin” oraz nadaję nazwę plikowi ze skryptem ( „printerPower”). sudo pico /bin/printerPower Umieszczam w nim skrypt. #!/bin/sh $(sudo echo 4 > /sys/class/gpio/export) $(sudo echo out > /sys/class/gpio/gpio4/direction) $(sudo echo 0 > /sys/class/gpio/gpio4/value) powerOffTime=0 waitTime=5 status="off" echo "status: $status" while [ true ] do if [ `lpstat -o | wc -l` != 0 ] then echo on status="on" $(sudo echo 1 > /sys/class/gpio/gpio4/value) powerOffTime=$(( $(date +%s)+$waitTime*60 )) fi if [ "$status" = "on" -a $(date +%s) -ge $powerOffTime ] then echo off $(sudo echo 0 > /sys/class/gpio/gpio4/value) status="off"; fi sleep 20 done Na początku skryptu wykonywane są czynności konieczne do obsługi GPIO do którego podłączony zostanie przekaźnik (w tym przypadku pin 4). Deklaruje go, ustawiam na wyjściowy oraz przypisuje stan niski. Następnie deklarujemy zmienną czasu która przechowuje godzinę wyłączenia drukarki („powerOffTime”). Zmienna „waitTime” przechowuje czas w minutach po jakim nastąpi wyłączenie drukarki po ostatnim drukowaniu. W nieskończonej pętli while występują dwie pętle warunkowe. Pierwsza pętla sprawdza czy kolejka drukowania jest różna od 0. Jeżeli tak następuje zmiana stanu pinu 4 na wysoki oraz przypisanie do zmiennej „powerOffTime” obecnego czasu w sekundach powiększonego o zmienną „waitTime” zamienioną na sekundy. Druga pętla warunkowa sprawdza obecny status przekaźnika i porównuje czas obecny z czasem określonym na. Jeżeli status jest równy „on”, a obecna godzina większa, bądź równa godzinie wyłączenia warunek zostanie spełniony, nastąpi ustawienie stanu niskiego na pinie 4 oraz zmiana statusu na „off”. Na końcu każdego cyklu pętli while następuje uśpienie na okres 20 sekund. Zapisuję skrypt kombinacją Ctrl+o i zatwierdzam przyciskiem enter (wychodzę z edytora kombinacją Ctrl+x, uprzednio zatwierdzając zmiany „y”). Ustawiamy plik skryptu na typ wykonywalny. sudo chmod +x /bin/printerPower Dodaję usługę cloudprint oraz skrypt do autostartu. Otwieram i edytuję plik autostartu. sudo pico /etc/rc.local Dodaję przed linią „exit 0” polecenia wykonania skryptu „printerPower” bezpośrednio po nazwie dodając znak & [ampersand] (umożliwi to uruchomienie skryptu w tle). W następnej linijce dodaję polecenie uruchomienia usługi „cloudprint”. Mogę je wykonać z argumentem -d sudo cloudprint -d usługa uruchomiona zostanie w trybie daemon, umożliwi to swobodne korzystanie z urządzenia podczas pracy desktopowej (nie poprzez terminal), ale zaobserwowałem, że czas jej uruchomienia po restarcie maliny jest dłuższy, a stabilność połączenia z serwerem Google bywa różna. Natomiast uruchomienie usługi bez argumentu -d pozwoli na swobodną pracę z Raspbianem tylko poprzez dostęp terminalowy, za to stabilność połączenia z Google Cloud Print jest większa. sudo printerPower& sudo cloudprint Ctrl+x > zatwierdzamy zmiany „y” > zatwierdzamy enterem. Restartuję urządzenie sudo reboot now
×
×
  • Utwórz nowe...