Skocz do zawartości

Kaytec

Użytkownicy
  • Zawartość

    246
  • Rejestracja

  • Ostatnio

  • Wygrane dni

    18

Wszystko napisane przez Kaytec

  1. Na pierwszy rzut oka wygląda ok. 5 komparatorów to razem 40 nóg scalaków. Dwa LM324 mają 28nóg - zarówno w SMD jak i DIL. Mniej miejsca, mniejsza cena, więcej kanałów. Nie upieram się przy tym, to twój projekt, tylko mówię co zauważyłem.
  2. Nie lepiej użyć dwóch poczwórnych wzmacniaczy operacyjnych (np. LM324) do budowy komparatorów, niż 5 oddzielnych scalaków do każdego czujnika? http://4.bp.blogspot.com/_BTycbZELObA/TTNX_tExCNI/AAAAAAAAAAU/YLONHBQXogE/s1600/IRcircuit.gif Powyższy schemat ma dodatkowo optyczną kontrolę zadziałania komparatora, no i jedną regulację dla 4 czujników (można zrobić dla większej ilości).
  3. Tak. Na zdjęciach widać poszczególne etapy prac. Koszty: wszystkie moduły i RPI około 300-400zł Przewody, skrzynki, gniazdka, włączniki - przy okazji remontu za wszystko około 400-500zł (bez dodatkowych kabli było by góra 100zł mniej - ale przy większej powierzchni domu/mieszkania robi się już ładna szafa elektryczna). Zakłócenia - przekaźniki z optoizilacją, diodami na cewkach itp. I2C pracuje na krótkich kablach. 1wire dzięki rezystorom spokojnie daje radę na 15 metrach z czujnikami ds18b20. Bardziej prakowało mi prądu w zasilaczu 5V przy włączonych wszystkich przekaźnikach - musiałem dać dodatkowy zasilacz. RPI potrafi się wtedy zawiesić. Sygnał PWM puszczony jest na około 10metrowych przewodach (skrętka) do transystorów mocy sterujacych ledami - bez żadnych problemów. Częstotliwość PWM dla led była ustawionana na 500Hz - tak aby nie było widać migania przy ściemnianiu. Nie było z tym żadnych problemów.
  4. Dziękuje za wszystkie głosy. Polecam wszystkim przejrzenie prac konkursowych bo pokazuje to jak uniwersalne zastosowanie mają komputery jednopłytkowe takie jak RPI.
  5. Użyłem: -Adafruit 16-Channel 12-bit PWM/Servo Driver - I2C interface - PCA9685 -ADS1015 12-Bit ADC - 4 Kanałowy przetwornik ADC -KAmodEXP2 - moduł adresowalnego ekspandera GPIO z interfejsem I2C z układem MCP23008 -Moduł 4 przekaźników z optoizolacją - dużo podobnych płytek różnych producentów -Dwa moduły N-MOSFET firmy EL-CAR ELEKTRONIKA z optoizolacją dostępne na serwisach aukcyjnych. -Konwerter poziomów logicznych 3,3V/5V - I2C - również wiele firm ma to w ofercie. -Moduł GY-712 - pomiar pradu 30A oparty o układ ACS712
  6. "Inteligentna Kawalerka" https://www.forbot.pl/forum/topics72/inteligentna-kawalerka-projekt-na-raspberry-pi-vt12108.htm#103415 Projekt inteligentnej kawalerki oparty o Raspberry Pi i kilku modułów pracujących w magistrali I2C i 1wire. Umożliwia on automatyzację instalacji elektrycznej mieszkania w zależności od zachcianek użytkowników.
  7. Witam po dłuższej przerwie, z tego co kojarzę to mój pierwszy post na Forbocie - wcześniej pisałem jeszcze na dioda.com.pl. Przedstawiam projekt inteligentnej kawalerki oparty o Raspberry Pi i kilku modułów pracujących w magistrali I2C i 1wire. Umożliwia on na automatyzację instalacji elektrycznej mieszkania poprzez m.in. sterowanie oświetleniem przez dedykowaną aplikację www, rozszerzenie funkcji przycisków światła w mieszkaniu poprzez niezależne przypisywanie funkcji np.gaszenie wszystkich świateł włącznikiem przy łóżku, a zapalanie tylko oświetlenia dodatkowego. Monitorowanie temperatury w pomieszczeniu i na zewnątrz, oraz informowanie komunikatami głosowymi o zdarzeniach. System jest elastyczny i modyfikowany w zależności od zachcianek użytkownika, dzięki czujce ruchu, możemy np. w zaprogramowanych nocnych godzinach delikatnie rozjaśniać światła dekoracyjne, nie oślepiając zaspanego nocnego marka. Innym przykładem który pojawił się podczas używania systemu, było wysłanie diodą IR sygnału do włączenia się telewizora po wejściu do mieszkania, lub w przypadku braku użytkowników w mieszkaniu i zwiększonym zużyciu prądu (np zostawione żelazko) - poinformowanie i wyłączenie sprzętów. Ilość możliwych funkcji do zrealizowania jest ogromna niestety każda kolejna powoduje dodatkowe koszty. O ile część modyfikacji można wykonać małym kosztem - jak wspomniane sterowanie ir, to już realizacja pomysłu zabezpieczenia łazienki przed zalaniem poprzez sensor wody i elektrozawór na głównym przyłączu wodociągowym wiąże się z dodatkowym nakładem pracy. W projekcie użyłem popularnych i wspieranych przez społeczności użytkowników części oraz oprogramowania. W krótkim wstępie nie sposób wymienić wszystkich funkcjonalności i drobnych smaczków o których sam dopiero sobie przypominam. W dalszej cześci opiszę działanie całego systemu od strony programowej i sprzętowej oraz udostępnię kody źródłowe strony www i skryptów odpowiedzialnych za automatykę wraz z obrazowym poradnikiem jak to wszystko uruchomić. Mam nadzieje że dam radę bo trochę tego się uzbierało, na początek film z działania: Część sprzętowa. Pierwszym etapem prac było przerobienie instalacji elektrycznej w mieszkaniu. Tutaj głównym założeniem było wykorzystanie standardowych pojedynczych bistabilnych przycisków i pociągniecie wszystkich przewodów włączników i punktów oświetleniowych do jednego punktu. Gniazda zasilające zostały podzielone na 3 sekcje - kuchnia, sprzety rtv, łazienka. Punktów oświetleniowych jest 5, włączników razem z dzwonkiem na zewnątrz również 5. Do włączników został pociągniety przewód 2 x 1.5mm2, tak aby w przypadku demontażu systemu, można było podłączyć wszystko na stałe. Przewody do punktów oświetleniowych 3x1.5mm2, 3 linie gniazd zasilających 3x2.5m + dodatkowy przewód 5x2.5mm2 do trójfazowego zasilania kuchni. Do centralnego punktu zostało doprowadzone 5 sztuk skrętki cat.5 i wyprowadzone odpowiednio do: łazienki, kuchni, routera, oraz dwóch rogów pomieszczenia. Skrętka umożliwia podłączanie do całego systemu np. czujników w magistrali 1-wire, czy sterowanie sygnałem PWM układami mocy oświetlenia ledowego. Łacznie wykorzystałem około 150metrów przewodów. W skrzynce rozdzielczej zamontowane zostały zabezpieczenia oraz listwy rozdzielcze umożlwiające podłączanie urządzeń do układów wejść - wyjść. Poniżej zdjęcia z procesu wymiany instalacji elektrycznej. Cześć sprzętowa - elektronika. Tutaj zastosowane zostały: - Raspberry Pi - jako główny mózg całego systemu - Moduł 8 wejść - wyjść firmy Kamami. - Moduł przetwornika A/C firmy Adafruit. - Moduł 16 wyjść PWM firmy Adafruit. - 2 Czujniki temperatury DS18B20 - Konwerter napięć 3.3 <> 5V - Moduł 4 przekaźników. - 2 Moduły transystorów mosfet do sterowania ledami. - Głośniki komputerowe zasilane z USB Wszystkie podłączenia wykonane zgodnie ze standardowymi przykładami danych modułów czy czujników nie ma tu jakiś skomplikowanych połączeń - wszystkie moduły pracują na magistrali I2C przy zasilaniu 5V - dlatego potrzebny był dodatkowy konwerter napięć tak aby można było podłączyć magistralę do 3.3 woltowego Raspberry Pi. Czujniki na magistrali 1wire spokojnie dają radę przy 15 metrowej skrętce podłączone bezpośrednio pod RPI. Wykorzystane oprogramowanie. - Framework WebIOPi. Głównym frameworkiem użytym w projekcie jest WebIOPi. Jest to gotowa aplikacja dedykowana dla komputera RaspberryPi pozwalająca na sterowanie podłączonymi do niego urządzeniami za pomocą strony internetowej lub skryptów działających w tle. Framework dostępny jest w postaci gotowej paczki instalacyjnej dla systemu linux. Aplikacja uruchamia na komputerze serwer www, na którym możemy uruchomić stronę internetową, a z jej poziomu sterować poszczególnymi urządzeniami. WebIOPi pozwala na sterowanie i monitoring ponad 30 urządzeń pracujących zarówno na magistrali I2C jak i 1-Wire. Framework rozdziela układ sterowania na dwa podstawowe elementy – część sterowania i monitoringu dostępną z poziomu przeglądarki dla użytkownika oraz część komputera, pracującą niezależnie. Skrypty wykonywane na komputerze napisane są w języku Python. Framework pozwala na pracę wielu skryptów jednocześnie. Od strony przeglądarki wykorzystana jest technologia jQuery. Użyłem wersji 0.7 webiopi. Więcej na temat samego farameworka znajdziecie tutaj: http://webiopi.trouch.com/ -Framework Bootstrap - strona www w PHP Bootstrap to środowisko służące do budowania responsywnynych stron internetowych, pozwala na bardzo dokładne dopasowanie do stron własnych potrzeb. Zawiera 12-kolumnową siatkę, zarówno w wersji ze stałą jak i z automatyczną szerokością. Posiada bogaty pakiet UI - począwszy od typografii,poprzez formularze, tabele, po nawigacje i ikonki. Całość dopełnia kolekcja skryptów JS pozwalająca na obsługę animacji ekranu. System operacyjny: Komputer Raspberry Pi działa pod kontrolą systemu operacyjnego Raspbian. Baza danych: Baza danych wykorzystana w projekcie to MySQL w wersji 5.5.41. Baza ta służy do rejestracji wszystkich zdarzeń. Pozwala na długoterminową rejestrację temperatury, napięć i prądów w całym systemie. Zapis danych realizowany jest za pomocą skryptów powłoki systemu (Bash) uruchamianych w określonym czasie za pomocą systemowego narzędzia Cron. Dane z bazy pozwalają na późniejsze tworzenie wykresów poszczególnych parametrów na stronie www. Sporą częścia projektu jest strona www - aplikacja internetowa, stąd wykorzystanie bazy MySQL i frameworka PHP, nie chciałbym się rozpisywać na temat samego pisania i uruchamiania strony www bo ta może mieć dowolną formę. Z poziomu systemu wbudowanego chodzi o to, że strona www wywołuje funkcję javascriptową frameworka webiopi, np. po wciśnięciu przycisku wywoływana jest funkcja zmiany stanu wejścia z "0" na "1" lub funkcja okresowo sprawdzająca dane z czujnika temperatury. Dzięki wykorzystaniu frameworka korzystamy praktycznie z gotowego rozwiązania które realizuje dwukierunkową komunikację www - raspberry. Uruchomienie systemu - nie jest to poradnik krok po kroku jednak przedstawia gotowy przepis. - Instalacja i podstawowa konfiguracja raspbian - tutaj odsyłam do poradników w internecie - Instalacja fail2ban Ten etap nie jest konieczny jednak ze względu na mnóstwo botów próbujących dostać się do raspberry podłączonego do internetu polecam użycie tego programu. Pozwala on na dodawanie reguł blokujących połączenia z Internetu po ustalonej liczbie nieudanych logowań. Zapobiega to atakom typu brute-force. W pliku konfiguracyjnym pakietu, dostępne są m.in. ustawienia monitorowanego portu, maksymalna liczba nieudanych prób połączenia, czas blokowania danego adresu IP . Ze względu na powtarzające się przypadki uzyskania próby dostępu do komputera ilość możliwych prób dostępu to 3, a czas blokady 30 dni. Ponieżej zrzut ekranu pokazujący adresy IP zablokowane w ciągu zaledwie jednego dnia. Potwierdza to tylko konieczność stosowania tego typu zabezpieczeń, oraz nie używania prostych haseł do tego typu systemów. Oczywiście nie raz zdarzyło się mi zablokować samego siebie - jednak w przypadku fizycznego dostępu do RPI nie stanowi to większego problemu. Po zabezpieczeniu dostępu do komputera, kolejnym krokiem jest instalacja pakietu i2ctool. Jest to pakiet dzięki któremu możliwa jest obsługa i diagnostyka magistrali I2C. Po zainstalowaniu pakietu możemy sprawdzić podłączone urządzenia za pomocą polecenia i2cdetect –y 1. Wyświetli nam ono listę podłączonych urządzeń w formie matrycy adresowej. Adresy wyświetlane są w formie szesnastkowej. Adresy poszczególnych urządzeń konfigurowane są za pomocą odpowiednich połączeń wyprowadzeń na danych modułach. W prezentowanym rozwiązaniu pod adresem 20 znajduje się moduł 8 wejść – wyjść. Adres 40, to układ 16 wyjść PWM. Adres 48 zajmuje przetwornik analogowo – cyfrowy. W celu umożliwienia sterowania magistralą niezbędne jest też dodanie użytkownika do grupy i2c. Po poprawnym zainstalowaniu I2C widoczny jest taki wynik polecenia i2cdetect: Obsługa magistrali 1-wire, nie wymaga instalacji dodatkowego oprogramowania w systemie. Lista podłączonych urządzeń wraz z ich adresami dostępna jest po sprawdzeniu zawartości katalogu systemowego /sys/bus/w1/devices/, wynik polecenia ls dla tego katalogu został przedstawiony na zdjęciu poniżej. Do magistrali zostały podłączone dwa czujniki temperatury DS18B20. Dla najnowszego raspbiana powyższy opis może być trochę przekłamany, ja korzystałem z dystrybucji pobranej w styczniu 2015 roku, ostatnio przy zabawie z raspberry i uzyciu najnowszego systemu konieczne jest dopisanie linijki w pliku konfiguracyjnym. Opisane jest to m.in tutaj: http://osworld.pl/raspberry-pi-obsluga- termomertrow-ds18b20/ Głównym etapem jest instalacja najważniejszego frameworka, pakietu WebIOPi. Instalacja polega na pobraniu spakowanej paczki ze strony autora i uruchomieniu skryptu instalacyjnego. Tutaj żeby nie kopiować internetu również odsyłam na stronę gdzie opisana jest cała instalacja: http://webiopi.trouch.com/INSTALL.html Dostępne sa tam również przykłady dla konkretnych urządzeń oraz dokumentacja pozwalająca zrozumieć zasadę działania. W dalszej części przedstawie fragmenty swoich skryptów, dla konkretnego rozwiązania. Początek etapu instalacji: Po zainstalowaniu pakietu. I wydaniu polecenia startowego /etc/int.d/webiopi start, możemy za pomocą przeglądarki internetowej otworzyć domyślną stronę internetową frameworka WebIOPi. Adres strony to numer IP komputera oraz domyślnie port :8000. Po wpisaniu adresu, strona będzie wymagała uwierzytelnienia w postaci domyślnego hasła. Widok domyślnie hostowanej strony został przedstawiony na zdjęciu poniżej. Są to podstawowe elementy frameworka umożliwiające sprawdzenie jego działania w tym przypadku działania układów wejść -wyjść. Po sprawdzeniu działania podstawowych funkcji frameworka, należy za pomocą pliku konfiguracyjnego określić sposób jego działania. Polega to na dopisaniu wszystkich adresów urządzeń które mają być obsługiwane. W projekcie będą to 3 urządzenia w magistrali i2c, opisane jako adc, mcp oraz pwm. A także 2 urządzenia magistrali 1-wire opisane jako temp1 oraz temp2. Każde ze zdefiniowanych urządzeń prezentuje na stronie diagnostycznej rejestrowane parametry oraz jeżeli jest to możliwe, przyciski do sterowania testowania i zadawania wartości. Na tym etapie możliwe jest dokładne sprawdzenie działania wszystkich podzespołów. Po zakończeniu testów, w pliku konfiguracyjnym należy podać ścieżkę docelowej strony sterującej, oraz dodać aplikację do skryptów startowych systemu. Dokładny opis: http://webiopi.trouch.com/Tutorial_Basis.html Kolejnym krokiem jest instalacja serwera apache wraz z modułami bazy danych mysql potrzebnymi do jej obsługi. Po instalacji wymagane jest stworzenie bazy danych, potrzebnej do rejestracji parametrów z czujników. Instalacja serwera FTP, znacznie ułatwia wymianę plików z komputerem, oraz późniejsze edytowanie skryptów odpowiedzialnych za działanie systemu. W prezentowanym rozwiązaniu został zainstalowany pakiet proftpd. Współpracuje on z programem fail2ban zabezpieczając dodatkowo zawartość przed niepowołanym dostępem. Wszystkie niezbędne pakiety zostały zainstalowane. Za pomocą protkołu FTP została wgrana strona www oraz skrypty sterujące do ścieżki wcześniej ustawionej w pliku konfiguracyjnym WebIOPi. Aplikacja internetowa: Aplikacja internetowa. Aplikacja internetowa w formie strony www została napisana wykorzystując języki HTML, CSS i JavaScript. Wykorzystanie skryptów JavaScript pozwoliło na wyświetlanie i sterowanie parametrami sterownika na stronie bez konieczności jej przeładowywania. Jednym z założeń było stworzenie strony działającej na urządzeniach mobilnych. Zostało to zrealizowane przy pomocy frameworka Bootstrap, który automatycznie dopasowuje jej zawartość do szerokości i proporcji ekranu. Interfejs aplikacji został zaprojektowany w formie prostokątnych kafli, z których każdy odpowiada za inną funkcję. Poniżej został przedstawiony widok strony startowej na komputerze z monitorem o rozdzielczości 1920x1080, oraz telefonu komórkowego o takiej samej rozdzielczości. Pomimo takiej samej rozdzielczości ekranu, strona została odpowiednio powiększona i dopasowana do komfortowego przeglądania jej na telefonie komórkowym. Poszczególne zakładki zostały ukryte w formie rozwijanego menu dostępnego pod jednym przyciskiem (prawy górny róg). Strona składa się z 4 głównych zakładek: monitoring, oświetlenie, diagnostyka oraz ustawienia. Pierwsza zakładka to jednocześnie strona startowa. Wyświetla ona najważniejsze rejestrowane parametry takie jak temperatura w pokoju dziennym, temperatura na zewnątrz, prąd pobierany przez cały obiekt, stan poszczególnych punktów oświetlenia, napięcie zasilania sterownika, oraz stan elementów nadzorujących bezpieczeństwo w obiekcie. Poszczególne kafelki wyświetlają informacje o tych parametrach oraz pozwalają na interakcję w postaci uruchamiania określonych funkcji. W przypadku przekroczenia nominalnej wartości danego parametru, np. temperatury w pokoju dziennym wyższej niż 22 stopnie Celsjusza, kafelek wyświetlający ten parametr zmienia kolor na pomarańczowy. Użytkownik zostaje również powiadomiony o tym fakcie, odtworzeniem informacji „Temperatura w pomieszczeniu jest za wysoka”, za pomocą podłączonych do komputera głośników. Odtwarzaniem dźwięku zajmują się niezależnie pracujące skrypty. Analogiczna sytuacja ma miejsce w przypadku zbyt niskiej wartości temperatury. Kafelek zmienia kolor na niebieski, a użytkownikowi zostaje odtworzony komunikat „Temperatura w pomieszczeniu jest za niska”. Aplikacja internetowa spełnia tylko rolę interfejsu komunikacyjnego z użytkownikiem, nie jest niezbędna do działania całego systemu, jednak pozwala na sterowanie systemem oraz podgląd zarejestrowanych parametrów. Kafelek odpowiedzialny za wyświetlanie temperatury, jest jednocześnie przyciskiem otwierającym okno wykresu, który generowany jest na podstawie ostatnich 200 pomiarów temperatury, rejestrowanych co 15 minut.: Wykres generowany jest za pomocą biblioteki Google Chart API, pozwalającą na dowolną konfigurację wyświetlanych elementów. Po kliknięciu na dany punkt wykresu, w prawym górnym rogu wyświetlana jest szczegółowa informacja o zarejestrowanym parametrze. Wykres jest animowany, pozwala na powiększenie danego fragmentu w celu dokładniejszej analizy, co w przypadku np. pomiaru prądu, umożliwia zlokalizowanie źródła zużycia energii elektrycznej. Poszczególne elementy kodu potrzebne do zrealizowania wykresu to skrypt rejestrujący temperaturę i datę wykonania pomiaru do bazy danych, oraz skrypt generujący wykres, korzystający z biblioteki Google Chart API. Aktualne parametry pobrane ze sterownika wyświetlane są na stronie www za pomocą java skryptu korzystającego z możliwości frameworka WebIOPi. Jako przykład zostanie przedstawiona funkcja odświeżająca wszystkie parametry na stronie startowej z interwałem 500ms. Jej kod jest zaprezentowany poniżej: Kolejną główna kartą aplikacji internetowej jest oświetlenie. Za pomocą tej podstrony możemy sterować wszystkimi punktami oświetleniowymi, oraz monitorować ich stan. W zależności od sprzętowej konfiguracji systemu wyświetlane są tu kafelki odpowiedzialne za włączanie lub wyłącznie oświetlenia, a także sterowanie jego jasnością. Kafelek w prawym dolnym rogu pozwala na włączanie lub wyłączanie wszystkich lamp w pomieszczeniu. Ikona żarówki podświetlona na żółto informuje o zapalonej danej lampie. Wyświetlany stan jest zależny od rzeczywistego stanu wyjścia przypisanego do sterowania danej lampy. Sterowanie fizycznymi przyciskami może odbywać się niezależnie od działania aplikacji internetowej. W przypadku włączenia światła przez użytkownika w pomieszczeniu przy wykorzystaniu fizycznego przełącznika, stan przycisku w aplikacji internetowej również ulegnie zmianie. Ostatnim elementem na stronie jest sterowanie jasnością oświetlenia LED. Odbywa się ono poprzez przesuwany pasek, który zadaje wartość z przedziału 0-100 w zależności od swojej pozycji. Jednocześnie wartość ustawiana jest na przypisanym wyjściu cyfrowym w module PWM, który generuje przebieg prostokątny o wypełnieniu procentowym z przedziału 0-100. Karta „diagnostyka” jest bardzo przydatna w procesie montażu i serwisowania całego systemu. Umożliwia wykonywanie niektórych komend systemu, bezpośrednio z poziomu przeglądarki, pozwala na sprawdzanie stanu i adresów podłączonych do magistral urządzeń, posiada opcje restartu lub wyłączenia systemu, oraz wykonuje testowe odtwarzanie komendy głosowej konieczne w przypadku regulacji nagłośnienia. Ostatnią zakładką jest zakładka „Ustawienia”, która docelowo ma służyć do ustawień wyglądu poszczególnych ekranów, wartości krytycznych dla danych parametrów, oraz włączania i wyłączania poszczególnych funkcji systemu. Programami nadzorującymi pracę systemu są skrypty wykonywane cyklicznie lub na żądanie użytkownika. Skrypty wykonywane cyklicznie w systemie, zostały napisane w jezyku powłoki Bash, zaś skrypty odpowiedzialne za działanie systemu w zależności od stanu poszczególnych urządzeń napisane są w języku Python. Skrypty te wykonują większość zadań całego systemu inteligentnego budynku i są podstawą jego działania. Cykliczne wykonywanie programów zrealizowane jest za pomocą systemowego narzędzia CRON, uruchamia on co 15 minut skrypt odpowiedzialny za pomiar temperatury z czujnika temperatury i zapis jego stanu do bazy danych. Dzięki temu możliwe jest generowanie przebiegów temperatury w aplikacji internetowej. Dla każdego czujnika istnieje osobny skrypt. Kod skryptu przedstawia się następująco: Programy realizujące poszczególne funkcje systemu to skrypty pracujące pod kontrolą frameworka WebIOPi. Pozwalają one na nadzorowanie np. stanu przycisków i w przypadku jego zmiany wykonanie określonej funkcji. Ze względu na możliwość sterowania oświetleniem zarówno z aplikacji internetowej, jak i fizycznych przycisków, pojawił się problem zmienionej pozycji przełącznika światła, w przypadku zgaszenia lampy z poziomu aplikacji internetowej. Przypisanie funkcji światła na stałe do przycisku, uniemożliwiło by sterowanie nim z innych źródeł. Rozwiązaniem tego problemu jest poniższy kod, reagujący tylko na zmianę stanu przycisku i zmieniający stan lampy w zależności od tego czy jest zapalona czy zgaszona. Innym przykładem funkcji systemu są funkcje realizowane poprzez wywołanie danego makra przez użytkownika. Po wciśnięciu przycisku z poziomu przeglądarki wywoływana jest funkcja frameworka, wykonująca dane makro napisane w języku Python. I tak makro „shutdown” wykonuje polecenie systemowe „reboot” po czym zwraca do funkcji wartość „Sterownik: system zostanie wyłączony”, dzięki czemu aplikacja może wyświetlić odpowiedni komunikat. Przykładowe funkcje przedstawia poniższy fragment kodu. Za pomocą opisanych skryptów możliwa jest realizacja dowolnej funkcji żądanej przez użytkownika. W prezentowanym rozwiązaniu zostały zaimplementowane m.in. takie funkcje jak gaszenie światła w całym mieszkaniu za pomocą włącznika przy łóżku, który jednocześnie zapala tylko lampkę nocną. Szybkie przełączenie przycisku przy drzwiach wejściowych wyłączające wszystkie światła, bez konieczności wyłączania wszystkich po kolei. Skrypty powiadamiające użytkownika za pomocą odtwarzanych komunikatów, realizują swoją funkcje tylko w przypadku odpowiedniej pory dnia. Czujnik ruchu niezbędny w skrypcie alarmowym, w przypadku rozbrojonego alarmu załącza z minimalną jasnością oświetlanie LED, umożliwiając dojście do łazienki bez konieczności zapalania świateł. Podwyższony pobór prądu, który w przypadku dłuższego braku ruchu w pomieszczeniu, pozwala na poinformowanie właściciela o włączonym odbiorniku energii elektrycznej. Nie jestem w stanie opisać całego kodu aplikacji - bo jest go sporo, zamieszczam źródła do przejrzenia - które raczej nie pozwolą na bezpośrednie uruchomienie systemu ale dla kogoś korzystającego z opisanych frameworków mogą być przydatne. Na koniec jeszcze film z testów czujnika temperatury. Inteligentna kawalerka.zip
  8. STMDiscovery swego czasu był rozdawany w konkursie organizowanym przez EBV. Wysyłka do polski bezproblemowa - szła około 1-2 tygodnie, wszystko oczywiście za free. Pozdrawiam.
  9. Czy mógłbyś napisać coś więcej o czujniku koloru? Czy to "zwykły' fabryczny czujnik, czy coś łatwo dostępnego dla zwykłego śmiertelnika?
  10. http://www.kmitl.ac.th/~kswichit/LFrobot/LFrobot.htm Prościej się nie da. Na schemacie jest jeszcze at89c2051. Bez problemu możesz go zamienić attiny2313. Wyrzucając tylko kwarc oraz rezystory przy resecie. Pozdrawiam. ps. https://www.forbot.pl/forum/topics7/line-follower-line-follower-robot-vt613.htm
  11. Poradziłem sobie już z przyciskami. Działa to mniej więcej tak: Config Portc = Output Portc = &HFF Config Portd = Output Portd = &HFF Config Portb = Output Portb = &HFF Config Portc.2 = Input Config Portc.3 = Input 'adc Config Portb.1 = Input 'przycisk '*WYSWIETLACZE* W1 Alias Portb.2 W2 Alias Portb.3 W3 Alias Portb.4 W4 Alias Portb.5 Kropka Alias Portb.0 '***************************************** $regfile = "m16def.dat" $crystal = 8000000 Config Timer0 = Timer , Prescale = 64 'konfiguracja Timer0 jako timer Declare Sub Pobr_znaku(cyfra As Byte) 'deklaracja procedury pobierajacej Declare Sub Engine Declare Sub Wygas Declare Sub Napiecie On Timer0 Multi_wysw 'przerwanie od przepelnienia Timer0, Dim A As Byte , B As Byte , C As Byte , D As Byte Dim Nr_wysw As Byte Dim X As Word Dim Tysiace As Word Dim Setki As Word Dim Jednosci As Word Dim Dziesiatki As Word Dim Wynik As Single Dim Klik As Byte Dim Krop As Byte Enable Interrupts 'odblokowanie globalnego systemu przerwan Enable Timer0 'odblokowanie przerwania od Timer0 Load Timer0 , 125 'zaladowanie do licznika wartosci poczatkowej 131 Config Adc = Single , Prescaler = Auto , Reference = Avcc Start Adc Klik = 1 Krop = 1 Do If Klik = 4 Then Klik = 1 End If If Klik = 1 Then Call Engine Elseif Klik = 2 Then Call Napiecie Elseif Klik = 3 Then Call Wygas End If Loop End 'koniec programu '***************************************** Sub Wygas A = 10 B = 10 C = 10 D = 10 If Pinb.1 = 0 Then Klik = Klik + 1 Waitms 250 End If End Sub '***************************************** '***************************************** Sub Napiecie Incr Krop If Krop = 3 Then Krop = 2 End If X = Getadc(3) Wynik = X * 0.19 X = Wynik 'obliczenie do wyswietlania pojedynczych cyfr Setki = X Mod 1000 Tysiace = X / 1000 Dziesiatki = Setki Mod 100 Setki = Setki / 100 Jednosci = Dziesiatki Mod 10 Dziesiatki = Dziesiatki / 10 A = Jednosci B = Dziesiatki C = Setki D = 10 If C = 0 Then C = 10 End If Waitms 100 'jeśli wynik wiekszy niż 110 to wygaś lcd na 1s (miganie lcd) If Pinb.1 = 0 Then Waitms 250 Incr Klik Krop = Krop - 1 End If End Sub '***************************************** '***************************************** Sub Engine If Pinb.1 = 0 Then Klik = Klik + 1 Waitms 250 End If X = Getadc(2) 'wartości temperatury od ADC If X <= 895 And X > 890 Then X = 16 Elseif X <= 890 And X > 885 Then X = 17 Elseif X <= 885 And X > 875 Then X = 18 Elseif X <= 875 And X > 870 Then X = 19 Elseif X <= 870 And X > 860 Then X = 20 Elseif X <= 860 And X > 855 Then X = 21 Elseif X <= 855 And X > 845 Then X = 22 Elseif X <= 845 And X > 840 Then X = 23 Elseif X <= 840 And X > 835 Then X = 24 Elseif X <= 835 And X > 830 Then X = 25 Elseif X <= 830 And X > 825 Then X = 26 Elseif X <= 825 And X > 820 Then X = 27 Elseif X <= 820 And X > 810 Then X = 28 Elseif X <= 810 And X > 800 Then X = 29 Elseif X <= 800 And X > 795 Then X = 30 Elseif X <= 795 And X > 790 Then X = 31 Elseif X <= 790 And X > 780 Then X = 32 Elseif X <= 780 And X > 775 Then X = 33 Elseif X <= 775 And X > 760 Then X = 34 Elseif X <= 760 And X > 750 Then X = 35 Elseif X <= 750 And X > 745 Then X = 36 Elseif X <= 745 And X > 740 Then X = 37 Elseif X <= 740 And X > 735 Then X = 38 Elseif X <= 735 And X > 720 Then X = 39 Elseif X <= 720 And X > 715 Then X = 40 Elseif X <= 715 And X > 710 Then X = 41 Elseif X <= 710 And X > 700 Then X = 42 Elseif X <= 700 And X > 690 Then X = 43 Elseif X <= 690 And X > 680 Then X = 44 Elseif X <= 680 And X > 670 Then X = 45 Elseif X <= 670 And X > 660 Then X = 46 Elseif X <= 660 And X > 650 Then X = 47 Elseif X <= 650 And X > 640 Then X = 48 Elseif X <= 640 And X > 630 Then X = 49 Elseif X <= 630 And X > 620 Then X = 50 Elseif X <= 620 And X > 610 Then X = 51 Elseif X <= 610 And X > 600 Then X = 52 Elseif X <= 600 And X > 590 Then X = 53 Elseif X <= 590 And X > 580 Then X = 54 Elseif X <= 580 And X > 570 Then X = 55 Elseif X <= 570 And X > 560 Then X = 56 Elseif X <= 560 And X > 555 Then X = 57 Elseif X <= 555 And X > 550 Then X = 58 Elseif X <= 550 And X > 540 Then X = 59 Elseif X <= 540 And X > 525 Then X = 60 Elseif X <= 525 And X > 510 Then X = 61 Elseif X <= 510 And X > 505 Then X = 62 Elseif X <= 505 And X > 495 Then X = 63 Elseif X <= 495 And X > 480 Then X = 64 Elseif X <= 480 And X > 470 Then X = 65 Elseif X <= 470 And X > 460 Then X = 66 Elseif X <= 460 And X > 455 Then X = 67 Elseif X <= 455 And X > 450 Then X = 68 Elseif X <= 450 And X > 440 Then X = 69 Elseif X <= 440 And X > 430 Then X = 70 Elseif X <= 430 And X > 420 Then X = 71 Elseif X <= 420 And X > 415 Then X = 72 Elseif X <= 415 And X > 410 Then X = 73 Elseif X <= 410 And X > 400 Then X = 74 Elseif X <= 400 And X > 390 Then X = 75 Elseif X <= 390 And X > 380 Then X = 76 Elseif X <= 380 And X > 370 Then X = 77 Elseif X <= 370 And X > 365 Then X = 78 Elseif X <= 365 And X > 355 Then X = 79 Elseif X <= 355 And X > 345 Then X = 80 Elseif X <= 345 And X > 340 Then X = 81 Elseif X <= 340 And X > 335 Then X = 82 Elseif X <= 335 And X > 330 Then X = 83 Elseif X <= 330 And X > 320 Then X = 84 Elseif X <= 320 And X > 315 Then X = 85 Elseif X <= 315 And X > 310 Then X = 86 Elseif X <= 310 And X > 305 Then X = 87 Elseif X <= 305 And X > 300 Then X = 88 Elseif X <= 300 And X > 295 Then X = 89 Elseif X <= 295 And X > 290 Then X = 90 Elseif X <= 290 And X > 285 Then X = 91 Elseif X <= 285 And X > 280 Then X = 92 Elseif X <= 280 And X > 275 Then X = 93 Elseif X <= 275 And X > 265 Then X = 94 Elseif X <= 265 And X > 260 Then X = 95 Elseif X <= 260 And X > 255 Then X = 96 Elseif X <= 255 And X > 250 Then X = 97 Elseif X <= 250 And X > 245 Then X = 98 Elseif X <= 245 And X > 240 Then X = 99 Elseif X <= 240 And X > 235 Then X = 100 Elseif X <= 235 And X > 230 Then X = 101 Elseif X <= 230 And X > 225 Then X = 102 Elseif X <= 225 And X > 220 Then X = 103 Elseif X <= 220 And X > 215 Then X = 104 Elseif X <= 215 And X > 210 Then X = 105 Elseif X <= 210 And X > 205 Then X = 106 Elseif X <= 205 And X > 200 Then X = 107 Elseif X <= 200 And X > 195 Then X = 108 Elseif X <= 195 And X > 190 Then X = 109 Elseif X <= 190 And X > 185 Then X = 110 Elseif X <= 185 And X > 180 Then X = 111 Elseif X <= 180 And X > 175 Then X = 112 Elseif X <= 175 And X > 170 Then X = 113 Elseif X <= 170 And X > 165 Then X = 114 Elseif X <= 165 And X > 160 Then X = 115 Elseif X <= 160 And X > 155 Then X = 116 Elseif X <= 155 And X > 150 Then X = 117 Elseif X <= 150 And X > 145 Then X = 118 Elseif X <= 145 And X > 140 Then X = 119 Elseif X <= 140 And X > 0 Then X = 120 End If 'obliczenie do wyswietlania pojedynczych cyfr Setki = X Mod 1000 Tysiace = X / 1000 Dziesiatki = Setki Mod 100 Setki = Setki / 100 Jednosci = Dziesiatki Mod 10 Dziesiatki = Dziesiatki / 10 A = Jednosci B = Dziesiatki C = Setki D = 10 If C = 0 Then C = 10 End If Waitms 100 'jeśli wynik wiekszy niż 110 to wygaś lcd na 1s (miganie lcd) If X > 110 Then A = 10 B = 10 C = 10 D = 10 Waitms 100 End If End Sub '***************************************** '***************************************** Sub Pobr_znaku(cyfra As Byte) 'definicja procedury pobr_znaku If Cyfra < 10 Then Portd = Lookup(cyfra , Kody7seg) Else Portd = 255 'w przeciwnym razie wygas wyswietlacz End If End Sub '***************************************** Multi_wysw: 'podprogram obslugi wyswietlania multipleksowego Load Timer0 , 125 Set Kropka Set W1 'wygaszenie wyswietlacza 1 Set W2 'wygaszenie wyswietlacza 2 Set W3 'wygaszenie wyswietlacza 3 Set W4 'wygaszenie wyswietlacza 4 Select Case Nr_wysw Case 0: Call Pobr_znaku(a) Reset W1 Case 1: Call Pobr_znaku(b) If Krop = 2 Then Reset Kropka End If Reset W2 Case 2: Call Pobr_znaku(c) Reset W3 Case 3: Call Pobr_znaku(d) Reset W4 End Select Incr Nr_wysw If Nr_wysw = 4 Then Nr_wysw = 0 End If Return 'powrot z podprogramu Kody7seg: 'tablica stalych kody7seg Data &B11000000 , &B11111001 , &B10100100 , &B10110000 , &B10011001 Data &B10010010 , &B10000010 , &B11111000 , &B10000000 , &B10010000 Dzięki za pomoc.
  12. Chciałem to zrobić używając pętli. Czyli jak już przekieruje do podprogramu "wygaś" to wyjdzie z niego tylko jak kliknę przycisk. To ma być na zasadzie ze na początku wyświetla się pomiar napiecia, potem pomiar temperatury, potem się gasi i tak w koło macieja. Problem w tym że jak już napisze coś takiego: Sub Wygas A = 10 B = 10 C = 10 D = 10 If Pinb.1 = 0 Then Goto Pomiar Else Goto Wygas End If End Sub To wygasi mi wszystkie wyświetlacze, ale tylko do póki trzymam przycisk
  13. Witam, potrzebuję pomocy w optymalizacji kodu. Jest to proste dodatkowe urządzenie do robota, mierzące napięcie akumulatora, i w przyszłości temperaturę ogniw. Atmega 8 ma podłączony wyświetlacz siedmiosegmentowy mniej więcej według tego schematu: Wszystko działa fajnie, pobieram sobie wartość z ADC, operacjami dzielenia i modulo rozbijam to tak abym miał pojedyncze wartości na każdy wyświetlacz. Z tym nie ma problemu. Problem jest taki że chce aby po naciśnieciu przycisku (pinb.1) szedł do podprogramu "wygas", po kolejnym wracał do podprogramu "pomiar". Pisząc to w głównej pętli, działa, ale trzeba trzymać przycisk w odpowiednim momencie. Wstawiając do przerwań LED, działa znakomicie ale nie mogę potem potem wrócić. Najlepiej wyjaśni to kod: '*WEJSCIA I WYJSCIA* Config Portc = Output Portc = &HFF Config Portd = Output Portd = &HFF Config Portb = Output Portb = &HFF Config Portc.5 = Input 'adc Config Portb.1 = Input 'przycisk '*WYSWIETLACZE* W1 Alias Portc.0 W2 Alias Portc.1 W3 Alias Portc.2 W4 Alias Portc.3 Kropka Alias Portc.4 '***************************************** $regfile = "m8def.dat" $crystal = 1000000 Config Timer0 = Timer , Prescale = 8 'konfiguracja Timer0 jako timer Declare Sub Pobr_znaku(cyfra As Byte) 'deklaracja procedury pobierajacej Declare Sub Pomiar Declare Sub Wygas On Timer0 Multi_wysw 'przerwanie od przepelnienia Timer0, 'skok do podprogramu multi_wysw Dim A As Byte , B As Byte , C As Byte , D As Byte 'definicje zmiennych w ktorych bedzie 'przechowywana wartosc do wyswietlenia Dim Nr_wysw As Byte 'zmienna okreslajaca nr zapalonego wyś. Dim X As Word Dim Tysiace As Word Dim Setki As Word Dim Jednosci As Word Dim Dziesiatki As Word Dim Wynik As Single Enable Interrupts 'odblokowanie globalnego systemu przerwan Enable Timer0 'odblokowanie przerwania od Timer0 Load Timer0 , 125 'zaladowanie do licznika wartosci poczatkowej 131 Config Adc = Single , Prescaler = Auto , Reference = Avcc Start Adc Do Call Pomiar Loop End 'koniec programu Sub Wygas A = 10 B = 10 C = 10 D = 10 End Sub Sub Pomiar 'pomiar adc X = Getadc(5) Wynik = X * 0.175 X = Wynik 'obliczenie do wyswietlania pojedynczych cyfr Setki = X Mod 1000 Tysiace = X / 1000 Dziesiatki = Setki Mod 100 Setki = Setki / 100 Jednosci = Dziesiatki Mod 10 Dziesiatki = Dziesiatki / 10 A = Jednosci B = Dziesiatki C = Setki D = 10 If C = 0 Then C = 10 End If Wait 1 'jeśli wynik wiekszy niż 110 to wygaś lcd na 1s (miganie lcd) If X > 110 Then A = 10 B = 10 C = 10 D = 10 Wait 1 End If End Sub Sub Pobr_znaku(cyfra As Byte) 'definicja procedury pobr_znaku If Pinb.1 = 0 Then Call Wygas End If If Cyfra < 10 Then Portd = Lookup(cyfra , Kody7seg) Else Portd = 255 'w przeciwnym razie wygas wyswietlacz End If End Sub Multi_wysw: 'podprogram obslugi wyswietlania multipleksowego Load Timer0 , 125 Set W1 'wygaszenie wyswietlacza 1 Set W2 'wygaszenie wyswietlacza 2 Set W3 'wygaszenie wyswietlacza 3 Set W4 'wygaszenie wyswietlacza 4 Select Case Nr_wysw Case 0: Call Pobr_znaku(a) Reset W1 Case 1: Call Pobr_znaku(b) Reset W2 Case 2: Call Pobr_znaku(c) Reset W3 Case 3: Call Pobr_znaku(d) Reset W4 End Select Incr Nr_wysw If Nr_wysw = 4 Then Nr_wysw = 0 End If Return 'powrot z podprogramu Kody7seg: 'tablica stalych kody7seg Data &B11000000 , &B11111001 , &B10100100 , &B10110000 , &B10011001 Data &B10010010 , &B10000010 , &B11111000 , &B10000000 , &B10010000 Gdzie wstawić ify przycisków aby działały praktycznie od razu?
  14. Zastanawiam się czy nie zrezygnować z kondensatorów. To nie jest żaden wzmacniacz czy projekt robota F1 i nic się nie stanie jak silniki momentalnie nie będą miały pełnej mocy.
  15. Nie używam dwóch. Tak wstępnie wygląda płytka. Jeszcze kilka poprawek, nie wiem czy nie zmienić wyjściowych transoptorów na zwykłe tranzystory małej mocy.
  16. Najlepiej z TME. Chyba bede zmuszony użyć przekaźników RM84-P-12V Przekaźnik DPDT 8A DC12V. Wiem że prąd max to tylko "8A", ale mam nadzieję że wystarczy, bo I chwilowe może być 20A, a to przekaźnik raczej wytrzyma.
  17. Chodzi ci o transoptory na wyjściu? Spokojnie mogą być MOS, tylko powiedz jakie i jak je podłączyć. Generalnie lubię odizolować totalnie AVR'a.
  18. Transilem będzie nawet taniej. Co do schematu dodam jeszcze kwarc 8mhz.
  19. Nie użyję IRF3704 po prostu takie znalazłem w Egalu tylko. Będą te co poleciłeś. Zasilanie - Akumulator samochodowy (bez żadnego ładowania itp). Schemat po poprawkach OldSkull. untitled.zip
  20. Oto wstępny schemat. Do złącza RJ45 wchodzą 3 sygnały logiczne (0-12V), dlatego są transoptory, w zależności od stanu 3 wejść silniki będą albo kręcić się do przodu albo do tyłu z odpowiednio narastającym PWM. Kwestia zaprogramowania nie stanowi problemu. Bardzo proszę o krytykę co jest źle, i jak to poprawić. Browar za każdą podpowiedź .
  21. Dzięki za wszystkie odpowiedzi. Hamowanie nie jest potrzebne. Użyje polecany IRF2804 i mostek na dwóch przekaźnikach:
  22. W takim razie jakie polecalibyście? Silniki przy zatrzymaniu siłą pobierają 20A, chwilowo pewnie trochę więcej.
  23. Właśnie tego szukałem. Łopatologicznie wyjaśnione. Pozdrawiam.
  24. Można prosić schemat? Bo pomysł niezły, w takim razie zwracam honor. Bardzo ciężko o sprawdzony schemat mostka na mosfetach, a nie chciałbym nic popalić bo budżet ograniczony.
  25. @Xweldog: A jak sobie wyobrażasz zmianę kierunku obrotu silników zrealizowaną na jednym przekaźniku? Do zmiany kierunku potrzeba na jeden silnik 4 przekaźniki, lub tranzystory. Proszę czytać uważniej mowa jest cały czas o mostku H - jest nawet w temacie wątku. A skoro są dwa silniki co też było napisane na początku to przekaźników wychodzi osiem. Niestety nie mam dostępu do polecanych przez ciebie tranzystorów. Za to do IRFZ44N mam. Dziękuje za cenne rady m.in zbudowania mostka H na jednym przekaźniku. Transoptory po to żeby odizolować od tego procesor.
×
×
  • Utwórz nowe...