Przeszukaj forum
Pokazywanie wyników dla tagów 'początkujący'.
Znaleziono 136 wyników
-
Sztuczna inteligencja jest jednym z najbardziej dynamicznie rozwijających się obszarów współczesnej technologii. Od momentu jej powstania, AI (ang. Artificial intelligence) nieustannie ewoluuje, przekształcając sposób, w jaki żyjemy i pracujemy. W dzisiejszym świecie AI jest obecna niemal wszędzie - od inteligentnych asystentów w naszych telefonach, przez systemy rekomendujące treści w mediach społecznościowych, aż po zaawansowane algorytmy wykorzystywane w analizie danych. W dobie rozwijających się algorytmów sztucznej inteligencji warto wiedzieć, czym ona tak właściwie jest i jak działa. W tym artykule przedstawię Ci: Czym jest sztuczna inteligencja. Problemy sztucznej inteligencji. Zastosowania sztucznej inteligencji. Wstęp do algorytmów uczenia maszynowego: Podział algorytmów. Regresja liniowa. Algorytm genetyczny. Sztuczne sieci neuronowe. Algorytmy i modele sztucznej inteligencji mogą być fascynujące i bardzo efektywne. Źródło zdjęcia. Czym jest sztuczna inteligencja Frazę sztuczna inteligencja należy rozdzielić na sztuczna oraz inteligencja. Przyjrzyjmy się drugiemu rzeczownikowi. Inteligencja - zdolność rozumienia, uczenia się oraz wykorzystywania posiadanej wiedzy i umiejętności w sytuacjach nowych ~ sjp.pwn.pl. Jest to abstrakcyjne pojęcie, któremu filozofowie, psycholodzy i inni uczeni przypisywali różne definicje, takie jak: Ogólna zdolność jednostki do świadomego dostosowywania swojego myślenia do nowych wymagań. ~ William Stern. Źródło definicji. [...] Wszystkie asymilacyjne i akomodacyjne interakcje między organizmem a środowiskiem. ~ Jean Piaget. Źródło definicji. Zdolność osoby do przenoszenia swojej wiedzy i zgromadzonego doświadczenia z jednej sytuacji do drugiej. ~ George Ferguson. Źródło definicji. Max Tegmark, profesor fizyki w MIT w swojej książce Życie 3.0 przyjmuje bardzo szeroką definicję, tj. Inteligencja = zdolność do osiągania złożonych celów. Wszystkie te definicje obejmują słowa kluczowe, jakimi są dostosowywanie, akomodacja i przenoszenie. Zatem za inteligencję możemy przyjąć zdolność do nauki, zrozumienia i adaptacji do nowych warunków. Sztuczna inteligencja - dział informatyki badający reguły rządzące zachowaniami umysłowymi człowieka i tworzący programy lub systemy komputerowe symulujące ludzkie myślenie. ~ sjp.pwn.pl. Zatem sztuczną inteligencją są modele, które starają się naśladować ludzkie myślenie. Mając na uwadze szeroko pojętą definicję inteligencji, możemy też powiedzieć, że sztuczną inteligencją jest rozwiązanie technologiczne/program komputerowy, który potrafi uczyć się i dostosowywać do nowych sytuacji, znajdując rozwiązania na zadany problem. Istnieje wiele rodzajów ludzkiej inteligencji: emocjonalna, społeczna i twórcza. Źródło zdjęcia. Problemy sztucznej inteligencji Algorytmy AI (szczególnie uczenia maszynowego) opierają się na danych, co oznacza, że jakość ich działania w dużej mierze zależy od jakości i kompletności danych, którymi są trenowane i weryfikowane. Jeśli dane uczące są niepełne lub zawierają błędy, sztuczna inteligencja może powielać te same niedoskonałości. Może to prowadzić do niepoprawnych rozwiązań. Przykładem może być ChatGPT i generowanie obrazu kieliszka wypełnionego w pełni winem. Istnieje względnie mało zdjęć, obrazów i innych źródeł, które przedstawiają kieliszek wypełniony po brzegi winem, dlatego prawdopodobnie brakuje takich źródeł w danych, którymi był trenowany ChatGPT. Skutkuje to tym, że model językowy nie potrafi generować takich obrazów. Oczywiście pojawia się tutaj problem z interpretacją samego polecenia. Chociaż pojawiają się głosy, że sztuczna inteligencja już potrafi to robić… Zapytanie o wygenerowanie obrazu. Wniosek jest jeden. Sztuczna inteligencja może się mylić. Nie bez powodu algorytmy te ocenia się i poddaje się testom i innym zabiegom, żeby były jak najdoskonalsze. O błędach informują twórcy modeli językowych w krótkich komunikatach, zazwyczaj w obrębie pola do wpisywania poleceń. Komunikat na stronie ChatGPT. Komunikat na stronie MS Copilot. Błędy, które popełniają modele językowe, nie zmieniają faktu, że sztuczna inteligencja to bardzo obiecująca i efektywna dziedzina, która znajduje zastosowanie w wielu branżach. Zastosowania sztucznej inteligencji 1. LLM i tłumaczenie tekstów Tematem na topie od ostatnich kilku lat są duże modele językowe (ang. Large Language Models), które zrewolucjonizowały sposób, w jaki korzystamy z internetu. Potrafią analizować, rozumieć i generować tekst w sposób zbliżony do ludzkiego. Oczywistymi przykładami, których chyba nie muszę wyjaśniać są ChatGPT oraz DeepSeek. Warto przedstawić polski model językowy: Bielik. W 2017 roku powstało narzędzie DeepL – start-up, który założył Polak dr Jarosław Kutyłowski. Według strony DeepL tłumacz korzysta po części z Transformer Model. DeepL wykorzystuje algorytmy sztucznej inteligencji do tłumaczenia tekstów. Źródło zdjęcia. 2. Rozpoznawanie obrazów i elementów na obrazach Dzięki zastosowaniu sieci neuronowych algorytmy wykorzystujące sztuczną inteligencję potrafią identyfikować twarze, przedmioty, znaki drogowe, a nawet emocje na ludzkich twarzach. Rozpoznawanie elementów na obrazie to nie tylko identyfikowanie, co znajduje się na zdjęciu, ale też gdzie dokładnie dany obiekt się znajduje oraz jakie relacje zachodzą między różnymi elementami sceny. Sztuczna inteligencja jest w stanie rozpoznać twarz, oko, a nawet źrenicę oka. Źródło zdjęcia. 3. Pomoc przy diagnozowaniu chorób Sztuczna inteligencja może znajdować zastosowanie w medycynie, szczególnie w obszarze diagnozowania chorób. Jednym z najbardziej obiecujących obszarów jest onkologia. Algorytmy sztucznej inteligencji coraz skuteczniej analizują obrazy i wykrywają zmiany nowotworowe. Naukowcy z Harvard Medical School opracowali innowacyjne narzędzie o nazwie CHIEF, które wykorzystuje sztuczną inteligencję do diagnozowania nowotworów. Model ten analizuje cyfrowe obrazy tkanek nowotworowych, identyfikując komórki rakowe i przewidując profil molekularny guza na podstawie cech widocznych na obrazach. CHIEF został przetestowany na 19 różnych typach nowotworów, osiągając dokładność wykrywania raka na poziomie niemal 94%. Miejmy nadzieję, że w przyszłości sztuczna inteligencja będzie służyła do ratowania życia. Źródło zdjęcia. 4. Sztuczna inteligencja w elektronice Implementację algorytmów sztucznej inteligencji umożliwiają coraz bardziej wydajne platformy sprzętowe, takie jak rozwiązania NVIDIA Jetson, które umożliwiają uruchamianie aplikacji korzystających z uczenia maszynowego. Warto zwrócić uwagę na projekty, takie jak reComputer lub reCamera, które stanowią wygodną bazę do pracy z AI w praktyce. Takie urządzenia umożliwiają tworzenie autonomicznych systemów wizyjnych, robotów czy inteligentnych czujników. Rozwój technologiczny przyczynił się do konstrukcji takiego sprzętu jak Nvidia Jetson. Na zdjęciu widać Nvidia Jetson Nano developer kit. Źródło zdjęcia. Wstęp do algorytmów uczenia maszynowego Sercem każdego z tych zastosowań są konkretne algorytmy, które przetwarzają dane, uczą się na ich podstawie i podejmują decyzje. Przybliżę Ci zasadę działania kilku algorytmów uczenia maszynowego. Skoncentrujemy się na aspektach formalnych, tworząc bazę pod dalszą analizę tych metod. Podział algorytmów Pojęcie sztuczna inteligencja dzieli się na różne kategorie: Klasyfikacja sztucznej inteligencji. Źródło zdjęcia. Powyżej wyróżniono uczenie maszynowe (ang. Machine Learning), czyli dziedzinę sztucznej inteligencji zajmującą się algorytmami, które samodzielnie doskonalą swoje działanie na podstawie zebranych doświadczeń. Najpopularniejszym podziałem tych algorytmów jest podział na: Uczenie nienadzorowane - algorytmy samodzielnie odkrywają wzorce w zbiorze danych. Uczenie nadzorowane - człowiek przedstawia algorytmowi, jakie wyjście powinno pojawić się przy odpowiednim wejściu. Uczenie przez wzmacnianie - algorytm uczy się na podstawie własnych doświadczeń w pewnym środowisku. Podział algorytmów uczenia maszynowego. Źródło zdjęcia. Przykłady algorytmów uczenia maszynowego 1. Regresja liniowa Jeden z podstawowych algorytmów uczenia maszynowego i statystyki, używany do modelowania zależności między zmiennymi. Jego głównym celem jest przewidywanie wartości zmiennej na podstawie jednej lub wielu zmiennych wejściowych. Celem regresji jest dopasowanie takiej prostej, która najlepiej opisuje dane, czyli minimalizuje różnice (błędy) między przewidywanymi a rzeczywistymi wartościami. Przykład rozwiązania zadania regresji liniowej. Niebieskie punkty to zbiór danych, dla którego należy znaleźć prostą najlepiej opisującą te dane. W tym przypadku jest to czerwona prosta. Źródło zdjęcia. Szczegóły matematyczne zostawiam dla ciekawskich. W tym przypadku przedstawiamy algorytmowi, jakie jest wejście (oś x) i wyjście (oś y). Algorytm na tej podstawie uczy się co może być pomiędzy jedną, a drugą wartością. Jest to zatem uczenie nadzorowane. 2. Algorytm genetyczny Algorytmy genetyczne (ang. Genetic Algorithms, GA) to techniki optymalizacyjne oparte na zasadach ewolucji biologicznej, takich jak selekcja naturalna, krzyżowanie i mutacja. Algorytm minimalizuje zdefiniowaną funkcję celu, krzyżując i modyfikując osobniki z populacji. Natura jest inspiracją do różnych rozwiązań technicznych. W tym wypadku inspiracją do stworzenia algorytmu genetycznego była ewolucja. Źródło zdjęcia. Algorytm genetyczny działa następująco: Definicja funkcji celu: należy matematycznie określić, co algorytm będzie minimalizował w celu ulepszenia populacji osobników. Generacja populacji początkowej: jako populację rozumiemy zbiór osobników posiadających cechy, które w każdej iteracji będziemy poddawali ocenie funkcją celu. Obliczenie wartości funkcji celu dla każdego osobnika: każdemu osobnikowi przypisujemy ocenę, która wskazuje na to, jak silny jest osobnik. Ocena, czy algorytm powinien zostać zakończony: jest to uzależnione od czynników, które zdefiniujemy. Algorytm może zakończyć się po konkretnej liczbie iteracji lub, gdy stworzymy osobnika o satysfakcjonującej wartości funkcji celu. Generacja populacji potomnej: w tym kroku może (nie musi) dziać się wiele rzeczy. Głównym celem tego kroku jest stworzenie kolejnej populacji osobników, które będą lepsze od poprzednich. Stosuje się tu kilka metod: Selekcja: spośród osobników wybieramy tylko te, które są dla nas satysfakcjonujące. Istnieje kilka metod, które pozwalają na selekcję, w tym metoda progowa bądź ruletki. Krzyżowanie: łączenie ze sobą najsilniejszych osobników, które przeszły selekcję. Jeżeli cechy osobników definiujemy liczbowo, to możemy analizować ich wartość binarną. Krzyżowanie polega na mieszaniu cech osobników. Np. binarną wartość osobnika dzieli się na pół. Powstają dwie połówki. Te połówki łączy się z połówkami drugiego osobnika. Tak powstają kolejne dwa osobniki. Mutacja: polega na odwróceniu pojedynczego bitu osobnika. Inwersja: odwrócenie ciągu bitów osobnika. Schemat blokowy algorytmu genetycznego. Algorytm genetyczny wykonuje zadanie optymalizacji. 3. Sztuczne sieci neuronowe Sztuczne sieci neuronowe to modele matematyczne inspirowane strukturą i działaniem ludzkiego mózgu. Budowa neuronu. Źródło zdjęcia. W 1943 Warren McCulloch oraz Walter Pitts zaproponowali model matematyczny neuronu, zwany Neuronem McCullocha-Pittsa. Model ma wejścia i wyjście binarne. Model McCulloch Pittsa. Źródło zdjęcia. W powyższym modelu wejścia ‘x’ są mnożone przez wagę, a następnie sumowane ze sobą. Ta wartość przechodzi przez funkcję aktywacji, której wyjście daje odpowiedź w postaci 0 lub 1. Ewolucją powyższego modelu jest perceptron sformułowany przez Rosenblatta. Jego główną innowacją było wprowadzenie możliwości uczenia się na podstawie danych - perceptron potrafi dostosowywać swoje wagi w taki sposób, by lepiej dopasowywać się do zadania klasyfikacyjnego. W perceptronie dane wejściowe mogą być wartościami rzeczywistymi, a każdemu wejściu przypisana jest waga, czyli liczba, która określa znaczenie danego sygnału. Perceptron oblicza ważoną sumę wejść i dodaje do niej tzw. bias (wartość przesuwająca próg aktywacji). Następnie ta suma przechodzi przez funkcję aktywacji. Podstawą działania perceptronu jest reguła uczenia. Wagi są aktualizowane na podstawie różnicy między oczekiwanym wynikiem a wynikiem uzyskanym. Jeśli perceptron popełnia błąd, modyfikuje swoje wagi, by w przyszłości lepiej klasyfikować dane. Perceptron. Źródło zdjęcia. Pojedynczy perceptron ma ograniczone możliwości. Jest w stanie rozwiązywać jedynie problemy liniowo separowalne, czyli takie, w których dane można oddzielić prostą linią (lub hiperpowierzchnią w przestrzeni wielowymiarowej). Aby poradzić sobie z bardziej złożonymi zależnościami, wiele takich neuronów łączy się w sieć. Sztuczna sieć neuronowa składa się z warstw: Warstwa wejściowa – przyjmuje dane wejściowe. Warstwa (lub warstwy) ukryta – zawiera wiele perceptronów, które przetwarzają dane na coraz wyższym poziomie abstrakcji. Warstwa wyjściowa – generuje końcową decyzję, np. klasyfikację lub wartość liczbową. Przykład sieci neuronowej. Źródło zdjęcia. Przykładem uczenia sieci neuronowej jest algorytm propagacji wstecznej. Oprócz klasycznej sieci feedforward przedstawionej powyżej istnieje jeszcze wiele innych np. sieć rekurencyjna lub rozszerzenie sztucznej sieci neuronowej - splotowa sieć neuronowa. Gorąco zachęcam do rozszerzenia tematu. Podsumowanie Sztuczna inteligencja przestała być futurystycznym pojęciem rodem z filmów science fiction, a stała się realnym narzędziem zmieniającym sposób, w jaki postrzegamy technologię, biznes i codzienne życie. To fascynująca dziedzina, która nie tylko stawia przed nami nowe możliwości, ale również wyzwania, ucząc nas pokory wobec potęgi danych i algorytmów. AI nieustannie się rozwija – zarówno w zakresie prostych rozwiązań wspomagających naszą codzienność, jak i w obszarach wymagających głębokiej analizy i precyzji, jak medycyna czy analiza obrazu. Dodajmy też kontekst: dlaczego właśnie teraz sztuczna inteligencja zyskała taką popularność i realną wartość użytkową? Kluczowy przełom nastąpił dzięki połączeniu kilku czynników: potężnych modeli językowych trenowanych na ogromnych zbiorach danych, rosnącej mocy obliczeniowej (szczególnie dzięki GPU), oraz rozwoju technik uczenia głębokiego (deep learning). To one sprawiły, że AI zaczęła nie tylko rozumieć i generować język na poziomie zbliżonym do ludzkiego, ale również przetwarzać obrazy, kod, dźwięk czy nawet rozumowanie w zupełnie nowej jakości. Warto jednak podchodzić do tematu z rozsądkiem. Na fali popularności łatwo wpaść w pułapkę marketingowego nadużywania pojęcia „sztuczna inteligencja”, które często wykorzystywane jest tylko jako chwytliwe hasło – nawet wtedy, gdy rzeczywistość technologiczna danego rozwiązania nie ma z AI zbyt wiele wspólnego. I na koniec ważne zastrzeżenie: wyłącznie to podsumowanie zostało napisane przeze mnie - ChatGPT. Pozdrawiam czytelników Forbota! 😊
-
- 4
-
-
- informatyka
- Programownie
- (i 1 więcej)
-
Cześć, Chciałbym poprosić Was o pomoc przy weryfikacji mojego pierwszego projektu PCB. To moja pierwsza płytka, więc bardzo zależy mi na tym, żeby wszystko było w porządku, zanim złożę zamówienie na produkcję. Opis projektu: Planuję stworzyć urządzenie oparte na ESP32 z wyświetlaczem TFT ST7735S, joystickiem, buzzerem, pomiarem baterii i kilkoma dodatkowymi elementami. Mam już gotowy schemat oraz PCB, ale nie jestem pewny, czy wszystko zostało poprawnie zaprojektowane. Zanim wyślę płytki do produkcji, chciałbym, aby ktoś z Was sprawdził wszystko pod kątem błędów. Specyfikacje projektu: Procesor: ESP32 Wyświetlacz: TFT ST7735S z kartą SD Zasilanie: Bateria Li-Po Ładowarka: TP4056 Sterowanie: Joystick i przyciski RTC: DS1302N do zegara czasu rzeczywistego Buzzer do dźwięków Jeśli chodzi o ładowarkę to znajduje się tam również miernik poziomu baterii o który pytałem w tym poście. Prośba: Będę wdzięczny za wszelkie uwagi dotyczące mojego schematu i PCB. Czy są jakieś elementy, które mogą nie działać tak, jak powinny? Czy macie jakieś sugestie, jak poprawić projekt przed złożeniem zamówienia na płytki? Z góry dziękuję za pomoc! 🙂 Schemat: PCB: PS: Jest to minimalna konsola edukacyjna do nauki lutowania, programowania i tworzenia prostych gier.
-
Witam. Mam pytanie jaką gaśnicę lub spray gaśniczy kupić do dedykowanego kursu elektroniki Forbotu chcę czuć się bezpiecznie nawet jeżeli np. zapalenie się czegoś jest mało prawdopodobne. Wiem, że już długo jestem na forum, ale miałam pewne problemy, które uniemożliwiały mi naukę elektroniki. Pozdrawiam.
-
Początkujący Programowanie w Python. Podstawy dla początkujących
mcsw_02 opublikował temat w Artykuły użytkowników
Języki programowania przechodziły i nadal przechodzą ewolucję – od asemblerowych instrukcji, aż po złożone systemy abstrakcji pozwalające pisać kod bliższy ludzkiemu myśleniu niż mechanicznej logice procesora. Każdy etap tego rozwoju był ukierunkowany na zwiększenie intuicyjności i efektywności procesu programowania. Wraz z rozwojem technologii zaczęto też dążyć do tworzenia języków wysokopoziomowych, w których programista mógł skupić się na rozwiązywaniu problemów zamiast na szczegółach technicznych działania sprzętu. W tym kontekście narodził się Python - język, który łączy prostotę składni z potężnymi możliwościami, zyskując popularność wśród programistów na całym świecie. W tym artykule przedstawię Ci: Historię Pythona. Zastosowanie. Filozofię i Zen Pythona. Podstawową składnię i słowa kluczowe. Czy wiedziałeś, że nazwa języka nie nawiązuje do zwierzęcia, lecz do brytyjskiego serialu komediowego Monty Python’s Flying Circus? Źródło zdjęcia. Historia języka Python Historia sięga końca lat 80., kiedy Guido van Rossum, holenderski programista, rozpoczął prace nad nowym językiem, który miał być łatwiejszy w użyciu niż dostępne wówczas alternatywy. Van Rossum czerpał inspirację z języka ABC, ale chciał stworzyć narzędzie bardziej elastyczne i wszechstronne. W 1991 roku opublikował pierwszą wersję Pythona (0.9.0), który zawierał takie elementy jak obsługa wyjątków, funkcje i podstawowe typy danych: lista, słownik, łańcuchy znaków i inne. Python 2 (wydany w 2000 roku) oraz Python 3 (w 2008 roku) – przynosiły nowe funkcje i usprawnienia. Choć Python 2 przez wiele lat był szeroko stosowany, jego wsparcie zakończyło się w 2020 roku na rzecz Pythona 3. Python został stworzony, aby ułatwić programowanie i uczynić je bardziej intuicyjnym. Źródło zdjęcia. Zastosowanie języka Python Obecnie Python znajduje zastosowanie w różnych dziedzinach – od analizy danych i sztucznej inteligencji po tworzenie stron internetowych i automatyzację. Bogaty ekosystem bibliotek i funkcjonalności języka sprawiają, że Python dynamicznie się rozwija, pozostając jednym z kluczowych języków współczesnej informatyki. 1. MicroPython i CircuitPython Python, jako język o szerokim zastosowaniu, doczekał się licznych wersji i wariantów dostosowanych do różnych platform i urządzeń. Jednym z takich przykładów są MicroPython i CircuitPython – lekkie implementacje Pythona, przeznaczone do działania na mikrokontrolerach, takich jak ESP32 czy Raspberry Pi. Dzięki współczesnym technologiom możliwe jest programowanie mikrokontrolerów prostymi językami, takimi jak MicroPython. Źródło zdjęcia. 2. Sztuczna inteligencja Jednym z najważniejszych powodów, dla których Python zyskał tak dużą popularność w środowisku algorytmów sztucznej inteligencji, jest jego przejrzystość i prostota. Python oferuje szeroki wybór bibliotek i narzędzi wspierających uczenie maszynowe oraz sztuczną inteligencję, takich jak Tensorflow oraz Keras. Dzięki Pythonowi możecie zaprojektować własną architekturę konwolucyjnej sieci neuronowej lub zaimplementować różne algorytmy sztucznej inteligencji. Chciałbyś zaprojektować własną architekturę sieci neuronowej? Python się do tego nada! Źródło zdjęcia. 3. Analiza obrazów Dzięki Pythonowi można łatwo przetwarzać obrazy, tworzyć algorytmy do analizy wizualnej oraz integrować te rozwiązania z innymi aplikacjami. Przykładowo, OpenCV umożliwia implementację algorytmów do rozpoznawania twarzy, co znajduje zastosowanie w systemach bezpieczeństwa i monitoringu. Python oferuje biblioteki umożliwiające efektywną analizę obrazu. Źródło zdjęcia. Filozofia i Zen Pythona Przed rozpoczęciem nauki Pythona warto zapoznać się z jego filozofią, która przyświecała twórcom języka i społeczności programistycznej. Python został zaprojektowany z myślą o czytelności i prostocie. Te wartości są ujęte w Zen Pythona, czyli zestawie 19 zasad przewodnich sformułowanych przez Tima Petersa. Można je wyświetlić w konsoli Pythona, wpisując: import this Fragment Zen: Beautiful is better than ugly. Explicit is better than implicit. Simple is better than complex. Complex is better than complicated… Charakterystyka Pythona i narzędzia do pisania w Pythonie Python jest językiem interpretowanym, co oznacza, że jest wykonywany bezpośrednio przez interpreter, linia po linii, zamiast być kompilowanym do kodu maszynowego przed wykonaniem. Jest również dynamiczny. Nie wymaga deklarowania typu deklarowanej zmiennej. Istnieje kilka różnych podejść do pracy z Pythonem. Zależnie od osobistych preferencji oraz specyfiki projektu powinieneś dobrać narzędzie, które będzie Ci pasowało: Interaktywny interpreter: interaktywne programowanie i testowanie kodu w czasie rzeczywistym. Edytor tekstu: możliwe jest używanie klasycznych edytorów, takich jak Vim, Emacs, czy Nano. Notatnik typu Google Colab: to świetne połączenie skryptu, tekstu i wizualizacji w jednym miejscu. Wykorzystywany często do nauki programowania lub uczenia maszynowego. Zintegrowane Środowisko Programistyczne (IDE): środowiska takie jak Visual Studio Code oferują pełną integrację z Pythonem, wtyczki do debugowania i wsparcie w pisaniu kodu. Niezależnie jaką metodę wybierzesz, znajomość podstawowej składni jest niezbędna. Źródło zdjęcia. W tym artykule będę wykorzystywał Visual Studio Code. Instalacja Pythona została tu pominięta. Przystępując do poniższej treści, powinieneś już mieć zainstalowanego Pythona oraz skonfigurowany edytor tekstu lub ulubione IDE. Otwórzmy Terminal i włączmy interaktywny interpreter. Włączenie Terminala i interaktywnego interpretera. Terminal włącza się poprzez zakładkę lub skrót klawiszowy Ctrl + Shift + `. Po włączeniu należy wpisać komendę python. Podstawowa składnia i słowa kluczowe Składnia jest podstawowym elementem każdego języka programowania, ponieważ określa zasady, które rządzą tworzeniem poprawnego kodu. Przedstawię Ci najważniejsze funkcje i słowa kluczowe. Zrozumienie tych podstawowych elementów pomoże w efektywnym tworzeniu kodu, który jest nie tylko poprawny, ale także łatwy do zrozumienia i utrzymania. 1. Deklarowanie zmiennych i podstawowe operatory matematyczne Podobnie jak w innych językach programowania istnieje możliwość deklarowania zmiennych. Tak jak wspomniałem, Python jest językiem dynamicznym. Nie ma więc potrzeby podawania typu zmiennej. >>> a = 3 >>> b = 4.5 >>> c = 3.333 >>> a + b * c 17.9985 W Python występują podstawowe operatory matematyczne: Dodawanie: + Odejmowanie: - Mnożenie: * Dzielenie: / Reszta z dzielenia: % Potęgowanie: ** Dzielenie całkowite: // >>> 5 % 2 1 >>> 3 ** 4 81 >>> 10 // 3 3 Możemy zadeklarować łańcuch znaków (napis): >>> napis = "Hello Forbot!" >>> napis 'Hello Forbot!' Napisy możemy zawierać w cudzysłowie lub w apostrofie. Nie ma to znaczenia. Do zmiennej możemy przypisać wartość logiczną i wykonywać za pomocą niej operacje. >>> logika_1 = True >>> logika_2 = False >>> logika_1 + logika_2 1 >>> logika_1 * logika_2 0 Warto zauważyć, że True oraz False można reprezentować jako kolejno: 1 i 0. 2. Kontenery danych W Pythonie występują 4 główne kontenery danych: Lista (ang. list): deklaracja nawiasami kwadratowymi. Mutowalny (zmienny) kontener. Krotka (ang. tuple): deklaracja nawiasami okrągłymi. Niemutowalny (niezmienny) kontener. Zbiór (ang. set): deklaracja nawiasami klamrowymi. Niemutowalny, nieindeksowany i posortowany kontener. Jego główną zaletą jest usuwanie powtórzeń elementów. Słownik (ang. dictionary): deklaracja nawiasami klamrowymi. Nieindeksowany kontener, który zawiera pary klucz: wartość. Elementy w słowniku się nie powtarzają. Deklaracja kolejnych kontenerów danych: >>> lista = [1, 2, 'a', ['zagniezdzona', 'lista'], 3] >>> krotka = (1, 2, 'a', []) >>> zbior = {1, 3.14, 'abc'} >>> slownik = {"jablko":"czerwony", "marchewka":"pomaranczowy", "banan":"zolty"} Możemy odwołać się do elementów po indeksach w liście i krotce. W słowniku należy podać klucz, aby odwołać się do poszczególnej wartości. Przykłady odwołań: >>> lista[2] 'a' >>> krotka[1] 2 >>> slownik["jablko"] 'czerwony' 3. Skrypty i Hello World! Czas na skrypty. Stwórzmy plik main.py i wypiszmy w konsoli Hello World! korzystając z funkcji print(). Twój pierwszy program w Pythonie: Hello World! Jeżeli wszystko jest skonfigurowane dobrze, to w terminalu lub w konsoli powinien się wyświetlić napis Hello World! W Pythonie nie ma jawnie zadeklarowanej funkcji main(), jak w C/C++. Wszystkie polecenia piszemy z góry do dołu. Instrukcje wliczające się w pętle, instrukcje warunkowe i funkcje poprzedzamy wcięciem jednego tabulatora. Nie stosuje się średników na końcu instrukcji. 4. Instrukcje warunkowe Konstrukcja instrukcji warunkowych wygląda następująco: if warunek: instrukcje elif warunek_2: instrukcje else: instrukcje Po warunkach występuje dwukropek, który oznacza, że instrukcje poniżej tyczą się tego warunku. Dodatkowo przed instrukcjami występują wcięcia. Stwórzmy skrypt, który będzie sprawdzał, czy może istnieć trójkąt o podanych bokach. Należy także sprawdzić, czy podane wartości są poprawne, tj. Czy nie są ujemne lub zerowe. Instrukcje porównania logicznego obejmują operatory or oraz and. a = 5 b = 4 c = 6 if a <= 0 or b <= 0 or c <= 0: print("Blad! Wartosci sa niepoprawne!") elif a + b > c and a + c > b and b + c > a: print("Trojkat moze istniec") else: print("Trojkat NIE moze istniec") 5. Pętle Python posiada dwa rodzaje pętli: while warunek: dopóki warunek jest spełniony, instrukcje zawarte w pętli się wykonują. for element in zbior: instrukcje związane z pętlą wykonują się dla każdego elementu w zbiorze. Z obu pętli możemy wyjść poprzez zastosowanie komendy break lub przejść do następnej iteracji słowem continue. Zaletą pętli for w Pythonie jest bezpośrednie odwoływanie się do elementów w zbiorze. Dzięki temu nie musimy martwić się o indeksy i długość zbioru. Utwórzmy skrypt, który w pętli while będzie powtarzał potęgowanie, dopóki zmienna będzie mniejsza od stu. x = 2 while x < 100: x = x**2 Zastosujmy pętlę for do iterowania po liście. Jeżeli element w liście wyniesie 0, to zliczmy ją i na końcu podajmy ilość zer w tej liście. lista_liczb = [1, 2, 0, 56, 89, 0, -1, 12, 0] licznik_zer = 0 for liczba in lista_liczb: if liczba == 0: licznik_zer = licznik_zer + 1 print(licznik_zer) Jeżeli jednak potrzebujemy iteratora, to możemy zrobić to na dwa sposoby: Chcąc iterować po konkretnych liczbach, możemy zastosować poniższą składnię: for iterator in range(start, stop, krok) Stosujemy polecenie range(), które zawiera indeks początkowy, indeks końcowy oraz krok, z jakim iterator będzie przeskakiwał po kolejnych liczbach. Pętla wykona się w zakresie od start do stop-1. Potrzebując iteratora przy liście elementów możemy zastosować polecenie enumerate(): for iterator, element in enumerate(lista_elementow) Wtedy do zmiennej iterator zostanie wpisany aktualny indeks, a do zmiennej element aktualna wartość ze zbioru lista_elementow. Skrypt wypisujący w konsoli liczby od 0 do 9: for i in range(0, 10): print(i) 6. Funkcje Funkcje służą do zwiększenia czytelności kodu niejako chowając powtarzający się kod. Definicja funkcji z dwoma parametrami odbywa się zgodnie z poniższą składnią: def nazwa_funkcji(arg_1: typ, arg_2:typ) -> typ_zwracanej_zmiennej Strzałka i typ zwracannej zmiennej jest opcjonalny. Jeżeli nie musimy podawać argumentów do funkcji, to je też możemy pominąć. Przydatnym słowem kluczowym jest pass. Stosuje się go, jeżeli będziemy implementować funkcję, ale jeszcze nie chcemy budować jej ciała. Na zakończenie parę słów o komentarzach. Standardowym komentarzem jednowierszowym jest napis poprzedzony znakiem #. Komentarze wielowierszowe poprzedzamy i kończymy trzema znakami apostrofa (‘ ‘ ‘ komentarz ‘ ‘ ‘) lub cudzysłowami (“ “ “ komentarz “ “ “). W języku Python możemy dodać opis funkcji, umieszczając go na początku jej ciała w postaci tzw. docstringa. Aby to zrobić, należy otoczyć opis potrójnymi apostrofami (''') lub cudzysłowami ("""). def wylicz_pole(bok_1: int, bok_2: int) -> int: ‘’’tu bedzie opis funkcji wylicz_pole‘’’ pass def wylicz_prad(napiecie: float, rezystancja: float) -> float: prad = napiecie / rezystancja # wyliczenie pradu return prad aktualne_napiecie = 5.45 rezystancja = 1000 aktualny_prad = wylicz_prad(aktualne_napiecie, rezystancja) print(aktualny_prad) # wypisanie pradu Oprócz wszystkich wymienionych przeze mnie funkcji i słów kluczowych istnieje jeszcze wiele przydatnych elementów języka Python, takie jak lambda, with, yield. Gorąco zachęcam Cię do szczegółowego zapoznania się z tym językiem, bo znajdzie zastosowanie w wielu projektach. Podsumowanie Python to wszechstronny język programowania, który zyskał popularność dzięki swojej prostocie i czytelnej składni. Python jest używany w wielu dziedzinach, w tym w analizie danych, sztucznej inteligencji, web development i automatyzacji. Dzięki bogatej bibliotece standardowej oraz licznym zewnętrznym modułom Python jest idealnym narzędziem zarówno dla początkujących, jak i zaawansowanych programistów. Warto się z nim zapoznać, ponieważ jego elastyczność i wsparcie społeczności sprawiają, że jest jednym z najważniejszych języków programowania na świecie.- 2 odpowiedzi
-
- 1
-
-
- Programownie
- python
-
(i 2 więcej)
Tagi:
-
Pneumatyka odgrywa kluczową rolę w dzisiejszym przemyśle, będąc podstawą wielu systemów automatyzacji, robotyki oraz procesów produkcyjnych. Zrozumienie zasad działania układów pneumatycznych nie tylko pomaga w projektowaniu wydajnych i niezawodnych systemów, ale również otwiera drzwi do innowacyjnych rozwiązań technicznych. Pneumatyka znajduje zastosowanie w branżach, gdzie kluczowe znaczenie ma szybkie i niezawodne działanie systemów, a także tam, gdzie użycie energii elektrycznej lub hydraulicznej jest mniej efektywne, lub niebezpieczne. Jednym z narzędzi, które mogą Ci przybliżyć pneumatykę oraz jej zastosowanie jest program FluidSIM pozwalający na symulację schematów i systemów pneumatyki, hydrauliki i elektryki. W tym artykule przedstawię Ci: Do czego służy pneumatyka? Czym jest FluidSIM? Funkcjonalności FluidSIM. Komponenty dostępne w FluidSIM. Przykład symulacji. Pneumatyka to ciekawa i względnie łatwa dziedzina, która może urozmaicić wiele twoich projektów! Źródło zdjęcia. Do czego służy pneumatyka? Pneumatyka to dziedzina inżynierii, która zajmuje się wykorzystaniem sprężonego powietrza do wykonania pracy mechanicznej. Stosuje się ją w różnych branżach do napędzania, sterowania i automatyzacji procesów. Na liniach produkcyjnych znajdziemy maszyny przemysłowe, którymi mogą być prasy pneumatyczne korzystające z powietrza do generowania siły przy docisku. Roboty przemysłowe korzystają z pneumatycznych przyssawek, którymi podnoszą i transportują elementy produkcyjne. Technologia sprężonego powietrza znajduje zastosowanie w wielu branżach. Poniżej przedstawiam ciekawe i praktyczne zastosowanie pneumatyki: 1) Pneumatyczne mięśnie, które poruszają się kołami. Miękka robotyka to dział robotyki, który zajmuje się tworzeniem robotów przy użyciu rozciągliwych materiałów. W tej dziedzinie bardzo użyteczna jest pneumatyka, dzięki której można poruszać kończynami robotów. Grupa badawcza Mazzeo stworzyła miękkiego robota mobilnego wykorzystującego powietrze do napędzania kół w robocie. Robot jest w całości elastyczny, co sprawia, że nie ma żadnych sztywnych części, dzięki czemu może bezpiecznie upadać z wysokości. Mobilny robot pneumatyczny. Źródło zdjęcia. 2) Miękki robot wydrukowany w 3D. Podobnym zastosowaniem robotyki miękkiej jest wykorzystanie jej przy stworzeniu czworonożnego robota kroczącego. Zespół z Uniwersytetu Kalifornijskiego w San Diego zastosował pneumatykę w zginaniu kończyn robota, który potrafi poruszać się po nierównym terenie. Pneumatyczny robot kroczący. Źródło zdjęcia. 3) Roboty przemysłowe z pneumatycznymi przyssawkami. Pneumatykę chętnie stosuje się w robotyce przemysłowej. Roboty wyposażone w przyssawki pneumatyczne precyzyjnie podnoszą i przenoszą elementy, dzięki zastosowaniu sprężonego powietrza. Robot może efektywnie manipulować ładunkami o różnych kształtach. Robot przemysłowy wyposażony w przyssawki pneumatyczne. Źródło zdjęcia. 4) Siłowniki pneumatyczne Jednym z najpopularniejszych zastosowań pneumatyki jest zastosowanie sprężonego powietrza w siłownikach pneumatycznych. Poprzez doprowadzenie lub odprowadzenie powietrza do odpowiedniej komory w konstrukcji tego urządzenia, siłownik wykonuje liniowy ruch mechaniczny, co można wykorzystać do manipulacji obiektami lub generacją siły nacisku. Siłowniki to bardzo ważne elementy wykorzystywane w rozwiązaniach pneumatycznych. Źródło zdjęcia. Pneumatyka umożliwia konstrukcji takich jak elastyczne roboty kroczące czy mobilne. W przemyśle pozwala na precyzyjne manipulowanie obiektami za pomocą przyssawek pneumatycznych. Istotnym elementem pracy z takimi urządzeniami jest także symulacja tych systemów. Jednym z narzędzi, które służy do symulacji układów pneumatycznych jest FluidSIM. Czym jest FluidSIM? Jest to oprogramowanie od Festo, które służy do symulacji układów pneumatycznych, hydraulicznych i elektrycznych. Dzięki niemu możemy zaprojektować i zasymulować układ pneumatyczny ze sterowaniem elektrycznym. Oprogramowanie jest bardzo proste i intuicyjne. Jednym z głównych atutów programu jest jego przejrzysty interfejs i metoda projektowania oparta na symbolach, które można łatwo łączyć, tworząc funkcjonalne układy. To sprawia, że FluidSIM jest idealnym narzędziem zarówno dla początkujących, którzy dopiero uczą się zasad działania systemów pneumatycznych i elektrycznych, jak i dla bardziej zaawansowanych użytkowników, chcących szybko prototypować swoje rozwiązania. Program FluidSIM dysponuje szeregiem elementów, których zachowanie można symulować. Źródło logo Festo: FluidSIM Pneumatics V 4.0. Ponadto elementy dostępne w oprogramowaniu posiadają zmienne parametry. Pozwala to na symulację rzeczywistych parametrów urządzeń. Funkcjonalności FluidSIM W artykule opisano funkcjonalności związane z wersją czwartą oprogramowania. FluidSIM oferuje nie tylko możliwość rysowania schematów, ale także ich symulację, co pozwala na pełne testowanie zaprojektowanych układów. Symulację można zatrzymywać i wykonywać krok po kroku. W parametrach symulacji dostępna jest zmiana kolorystyki niektórych elementów (kolor linii ze sprężonym powietrzem/bez, kolor wskazań elementów pod napięciem, kolor próżni). Oprócz tego można modyfikować szybkość symulacji i kompatybilność z Siemens LOGO!Soft. Parametry symulacji. Przykład prostej symulacji. Zgodnie z kolorystyką możemy założyć, że linie, które symbolizują przewody pneumatyczne, są pod ciśnieniem. Po załączeniu zaworu rozdzielającego powietrze znalazło się w komorze siłownika, skutkując wysunięciem tłoczyska. Podczas symulacji istnieje możliwość zapisywania stanów urządzeń w poszczególnych chwilach. Umożliwia to State Diagram. Wygenerowany podczas symulacji diagram funkcyjny. Diagramy funkcyjne można rysować ręcznie za pomocą Functional diagram. Przykład narysowanego diagramu funkcyjnego. Możliwa jest konfiguracja i zmiana parametrów elementów i urządzeń. Oprócz tego w oknie konfiguracyjnym dostosujemy zewnętrzne obciążenia oraz profile siły. Konfiguracja siłownika. W prawym dolnym rogu okna jest widoczny podgląd elementu po zmianie. Parametry siłownika. Znajdziemy tutaj między innymi średnicę tłoka, kąt montażu lub pozycję początkową tłoka. Ustawienie parametrów jest ważne pod kątem testu układu, gdy chcemy zaimplementować rozwiązanie z określonymi urządzeniami. To oczywiście nie są wszystkie dostępne funkcjonalności programu. Oprogramowanie oferuje również materiały edukacyjne na temat pneumatyki oraz wiele więcej, w tym bogatą bibliotekę komponentów. Komponenty FluidSIM FluidSIM oferuje bogaty zestaw urządzeń i komponentów, które umożliwiają tworzenie oraz testowanie zaawansowanych układów. Poniżej znajdziesz listę elementów, które mogą okazać się przydatne podczas projektowania. 1. Źródła oraz elementy związane z doprowadzaniem powietrza. Źródła oraz elementy zasilające w FluidSIM zapewniają dostęp do sprężonego powietrza oraz jego odpowiednie przygotowanie. Dzięki temu możliwe jest tworzenie kompletnych układów, które można następnie odwzorować w rzeczywistych warunkach. Źródło sprężonego powietrza. Zespół przygotowania powietrza. Zespół przygotowania powietrza. Filtr. Chłodnica. Dostępne elementy źródła zasilania pneumatycznego i elementy pokrewne. 2. Urządzenia wykonawcze Pneumatyczne urządzenia wykonawcze to elementy układów pneumatycznych, które przekształcają energię sprężonego powietrza na ruch mechaniczny. Odpowiadają za realizację określonych czynności, takich jak przesuwanie, podnoszenie, dociskanie czy obracanie elementów. Siłownik pneumatyczny jednostronnego działania ze sprężyną. Siłownik pneumatyczny dwustronnego działania. Silnik pneumatyczny o dwóch kierunkach przepływu. Dostępne elementy wykonawcze. Należy pamiętać, że można zmieniać parametry urządzeń i elementów. Na przykład siłownik jednostronnego działania ze sprężyną można przekształcić na dwustronnego działania bez sprężyny i na odwrót. 3. Zawory Istnieje wiele zaworów pneumatycznych, które mają zastosowanie w pneumatyce. Jedne z najpopularniejszych to rozdzielające, dławiąco zwrotne i logiczne. FluidSIM je implementuje i umożliwia za ich pomocą sterowanie pośrednie układami. Zawór rozdzielający 3/2. Zawór dławiąco zwrotny. Zawór podwójnego sygnału (logiczne AND). Część dostępnych zaworów. Dostępnych jest o wiele więcej. Podobnie jak elementy wykonawcze zawory są w pełni konfigurowalne. Konfiguracja zaworu rozdzielającego. 4. Układy elektryczne FluidSIM oferuje symulację elektrycznych układów sterowania. Biblioteka symboli zawarta w programie zawiera bogatą kolekcję elementów, takich jak: przyciski, sensory, przekaźniki, styki, a nawet sterownik PLC oraz regulator PID. Zasilanie elektryczne. Generator funkcyjny. Przycisk. Cewka elektryczna. Moduł logiczny (coś w rodzaju PLC). Regulator PID. Jak widzisz, istnieje wiele elementów i modułów, z których możesz skorzystać. Każdy z nich pełni określoną rolę i może zostać użyty do budowy złożonych symulacji. Kluczem jest ich odpowiednie połączenie i wykorzystanie, aby stworzyć coś funkcjonalnego i interesującego. Zastanówmy się, jak połączyć te moduły w spójną całość i stwórzmy symulację pewnego układu. Przykład symulacji Stwórzmy uproszczoną symulację obrabiarki detali. Urządzenia ma działać z następującym algorytmem: Urządzenie po włączeniu nie wykonuje żadnych ruchów. Po wciśnięciu przycisku START rozpoczyna się proces obrabiania. Jeżeli w którymkolwiek momencie działania algorytmu zostanie wciśnięty przycisk STOP, to wszystkie urządzenia się wyłączają. Siłownik dociska detal do stołu. Po dociśnięciu detalu włącza się silnik elektryczny i zaczyna obrabiać detal. 3 sekundy po załączeniu silnika rozpoczyna się proces wyłączania. W tym momencie wyłącza się silnik. Po 2 sekundach od wyłączenia silnika siłownik wraca na swoją początkową pozycję. Jeżeli masz dostęp do FluidSIM, to spróbuj wykonać taki układ i przeprowadzić kilka symulacji. Jedno z rozwiązań problemu. Powyżej znajduje się jedno z możliwych rozwiązań tego zadania. Po wciśnięciu przycisku START załączy się stycznik K1 podtrzymujący cały proces oraz cewkę K2, która załącza siłownik pneumatyczny. Siłownik ma dwie pozycje. Pozycja ‘A’ to pozycja początkowa, a ‘B’ to pozycja końcowa. Dojazd tłoczyska do pozycji ‘B’ powoduje załączenie się styku ‘B’, który jest stykiem wyłącznika drogowego, co powoduje dołączenie zasilania na silnik. Silnik zaczyna się obracać i obrabiać materiał. W tym momencie załącza się czasówka K3, która po 3 sekundach rozwiera styk NC K3. W rezultacie silnik się zatrzyma. W tym samym czasie zwiera się styk NO K3, który załącza przekaźnik czasowy K4. Ten odlicza 2 sekundy i po tym czasie tłok wraca do swojej pierwotnej pozycji przez rozwarcie styku NC K4 w układzie po lewej stronie. Jeżeli wciśniemy przycisk STOP podczas działania układu, to cały proces zakończy się przed jego ukończeniem. Przykład działania rozwiązania. Podsumowanie Pneumatyka jest kluczową dziedziną inżynierii, mającą szerokie zastosowanie w automatyce przemysłowej, robotyce oraz wielu innych branżach. Współczesne narzędzia, takie jak FluidSIM, umożliwiają modelowanie i testowanie układów pneumatycznych, hydraulicznych i elektrycznych bez potrzeby fizycznej budowy prototypów. Dzięki temu można nie tylko sprawdzać poprawność działania projektów, ale także optymalizować je pod kątem wydajności i oszczędności energii. Warto pamiętać, że nauka symulacji i projektowania w FluidSIM to nie tylko sposób na lepsze zrozumienie pneumatyki, ale także doskonała okazja do rozwijania umiejętności inżynierskich.
-
- 1
-
-
- automatyka
- Robotyka
-
(i 2 więcej)
Tagi:
-
Współczesne narzędzia pozwalają na tworzenie skomplikowanych symulacji rzeczywistych systemów. Taki zabieg pozwala na przetestowanie układu w różnych okolicznościach. Dzięki temu inżynierowie i naukowcy mogą przeprowadzać analizy oraz optymalizować działanie systemów bez konieczności narażania rzeczywistych obiektów na ryzyko. Dzięki modelowaniu komputerowemu i identyfikacji możemy dokładnie zrozumieć dynamikę obiektów i układów, i precyzyjnie sterować ich działaniem. W tym artykule przedstawię Ci: Czym jest modelowanie i identyfikacja? Klasyfikację modeli. Różne postacie modeli. Identyfikację w Matlab. Elektroniczny przykład. Modelowanie pozwala na symulację systemu, który chcemy zbudować. Źródło zdjęcia. Czym jest modelowanie i identyfikacja? Konstrukcja, schemat lub opis ukazujący działanie, budowę, cechy, zależności jakiegoś zjawiska lub obiektu - definicja PWN modelu. Powszechnie znanym przykładem modelowania jest modelarstwo. Odwzorowując samolot, analizujemy jego pełnowymiarowy odpowiednik i konstruujemy jego pomniejszoną wersję, łącząc ze sobą odpowiednie elementy zgodnie z rzeczywistą strukturą. W podobny sposób działa modelowanie matematyczne – zamiast fizycznych części używamy równań i zależności, aby oddać kluczowe właściwości obiektu. Dzięki temu, mając rzeczywisty obiekt, możemy go opisać za pomocą równań matematycznych. Takim obiektem może być samochód, jego silnik, czy nawet kondensator w jego sterowniku. Po co modelujemy? W inżynierii stosuje się to przede wszystkim do testowania zachowania obiektu pod wpływem różnych czynników zewnętrznych, takich jak sterowanie za pomocą sygnałów wejściowych o zmiennym charakterze. Dzięki modelowaniu możemy zbadać wpływ zakłóceń na obiekt. Z punktu widzenia sterowania, dzięki modelowi możemy przeprowadzić symulację różnych strategii regulacji. Współczesne narzędzia pozwalają modelować i identyfikować nawet największe systemy i urządzenia. Źródło zdjęcia. Równie ważnym pojęciem co modelowanie jest identyfikacja. Polega ona na znalezieniu modelu istniejącego systemu na podstawie przeprowadzenia eksperymentów. W trakcie identyfikacji szukamy zależności wyjścia do wejścia. Innymi słowy, podanie sygnału na obiekt spowoduje wygenerowanie wyjścia zależnego od sygnału wejściowego. Znalezienie zależności tych sygnałów pozwoli na wygenerowanie modelu. Podobnie jak w modelowaniu, identyfikacja jest użyteczna przy tworzeniu symulacji sterowania obiektem. Dobieranie nastaw PID do obiektu może być czasochłonne, ale po wygenerowaniu modelu symulacje są zazwyczaj szybkie, co pozwala na przetestowanie wielu nastaw w krótkim czasie i wybranie tych najlepszych. Podsumowując: Modelowanie ma miejsce, gdy wyprowadzamy model obiektu za pomocą praw fizyki i równań matematycznych. Identyfikacja opiera się na znalezieniu modelu istniejącego już systemu na podstawie eksperymentów. Klasyfikacja modeli Główną klasyfikacją jest podział modeli na czarne skrzynki (black box) i białe skrzynki (white box). W przypadku czarnych skrzynek nie posiadamy żadnej informacji o zachowaniu układu. Czarną skrzynką może być mikser audio z kilkoma nieoznaczonymi pokrętłami, ponieważ obracając losowo gałki (nie wiedząc, jakie dokładnie parametry zmieniamy) słyszymy zmodyfikowany dźwięk (nie wiedząc, jaki dokładnie efekt uzyskamy). O białych skrzynkach wiemy wszystko, tym samym możemy przewidzieć jego zachowanie w każdej okoliczności. Możemy powiedzieć, że białą skrzynką jest samochód z bardzo dokładną dokumentacją techniczną, która zawiera każdy szczegół. Różnica między czarnymi i białymi skrzynkami. O czarnych skrzynkach nic nie wiemy, natomiast białe skrzynki są w pełni transparentne i dają nam pełny wgląd w działanie systemu. Różne postacie modeli W jaki sposób można przedstawić model? Istnieje na to wiele sposobów. Jedne z najpopularniejszych to: Równania różniczkowe: opisują obiekt za pomocą równania, które zawiera funkcję zależną od czasu i jej pochodne. Równania uwzględniają zmiany obiektu w czasie. Równania różniczkowe mogą posłużyć do pełnego opisu systemów modelowanych oraz do tworzenia białych skrzynek. Znając prawa fizyki jakiegoś systemu możemy wyprowadzić równania, które w pełni opisują ten system. Przykład równania różniczkowego. Równanie różniczkowe możemy wykorzystać do zamodelowania masy w wodzie, która jest zawieszona na sprężynie. Źródło zdjęcia. Transmitancja operatorowa (funkcja przejścia): matematyczne narzędzie, które umożliwia opisanie dynamiki systemu poprzez związek między sygnałem wyjściowym a sygnałem wejściowym, wyrażonym w dziedzinie zespolonej 's'. Transmitancja jest szczególnie użyteczna w identyfikacji czarnych skrzynek, gdzie mając znane sygnały wejściowe i wyjściowe, możemy określić zależność, która reprezentuje cały układ. Przykład obliczenia transmitancji operatorowej układu elektronicznego RC. Źródło zdjęcia. Oczywiście, istnieje wiele innych metod modelowania obiektów, takich jak równania stanów. Każda z metod modelowania ma swoje specyficzne zastosowania i jest przydatna w różnych kontekstach. Identyfikacja w Matlab. Elektroniczny przykład Jeżeli chcesz się dowiedzieć, w jaki sposób modelować w środowisku Simulink, koniecznie przeczytaj artykuł o Simulinku, w którym został przedstawiony przykład modelowania masy w wodzie zawieszonej na sprężynie. W tym artykule skupimy się na identyfikacji czarnej skrzynki w Simulinku. Spróbujemy wyprowadzić jej model i przy okazji pokażę Ci bardzo przydatne narzędzie System Identification. Służy ono do identyfikacji obiektów i wyprowadzania modeli pod różnymi postaciami. Spróbuj w trakcie czytania artykułu zgadnąć jaki obiekt znajduje się pod czarną skrzynką. Podpowiem tylko, że to układ elektroniczny. Załóżmy, że mamy obiekt przedstawiony poniżej. Posiada on jedno wejście i jedno wyjście. Czarna skrzynka w Simulink. Czarna skrzynka, którą stworzyłem w Simulinku, to jedynie symulacja rzeczywistej sytuacji, w której przeprowadzamy eksperymenty na prawdziwym obiekcie. W normalnych warunkach wszystkie sygnały wejściowe pochodzą z różnych urządzeń, takich jak generator funkcyjny, i są podawane na rzeczywisty układ, który generuje sygnały wyjściowe. Te sygnały są odczytywane za pomocą narzędzi, które mogą je rejestrować i przenieść je na dysk komputera. Zapisane dane, czyli przebiegi tych sygnałów, analizowalibyśmy w ten sam sposób, co w późniejszej części artykułu. Zgodnie z regułą identyfikacji powinniśmy wprowadzić pewne wejście i obserwować wyjście. Podanie wejścia i obserwacja wyjścia wraz z wejściem. Na wejście obiektu podajmy sygnał o wartości 1 i obserwujmy sygnał wyjściowy. Zmiana parametrów bloku Step. Od początku symulacji będziemy pobudzali układ sygnałem o wartości jeden. Po czasie 0.1 s ten sygnał wyzeruje się. Rezultat symulacji. Czy potrafisz na tym etapie ustalić, jaki układ elektroniczny kryje się pod czarną skrzynką? Mając informację o wejściu i wyjściu obiektu możemy wykorzystać System Identification Toolbox i znaleźć model czarnej skrzynki. Jednak przed włączeniem tej aplikacji musimy przenieść interesujące nas sygnały do Workspace Matlaba. Dodajmy więc bloki To Workspace i podłączmy je do linii sygnałowych. Dodanie dwóch bloków To Workspace wraz z połączeniami. Przykładowe parametry bloku To Workspace. Format ustawiony jest na Array. Rezultat przeniesienia danych z Simulinka. Narzędzie do identyfikacji włączymy w Matlab za pomocą wpisania komendy systemIdentification w Command Window. Po wpisaniu komendy wyskoczy nam okno, w którym będziemy mogli rozpocząć swoją pracę. Okno główne System Identification. Na początku musimy wczytać zapisane wcześniej dane. W tym celu należy rozwinąć listę Import data w lewym górnym rogu i wybrać opcję Time domain data. Dzięki niej będziemy mogli importować dane w dziedzinie czasu. Importowanie danych w dziedzinie czasu. Okno importowania danych. Możemy uzupełnić odpowiednie pola o nasze dane: Input: sygnały wejściowy na nasz obiekt. W naszym przypadku wektor o nazwie out.wejscie. Output: wyjście/odpowiedź naszego obiektu. Zmienna out.wyjscie. Data Name: nazwa reprezentująca nasze dane. Możesz tutaj wpisać cokolwiek. Start Time: czas początkowy symulacji. Nasza symulacja zaczynała się w czasie 0. Sample time: czas próbkowania. Tę daną znajdziesz w Workspace po zmienną tout. Różnica między drugim a pierwszym czasem to czas próbkowania. Uzupełnienie pól o dane symulacji. Po wciśnięciu przycisku Import w oknie głównym aplikacji ukaże się kafelek reprezentujący nasze dane. Klikając pole wyboru Time plot wyskoczą wykresy z naszymi przebiegami. Efekt importu danych. Rozwinięcie listy Preprocess pozwala na obróbkę danych przed procesem identyfikacji. Dostępne opcje pozwalają na filtrowanie sygnałów, wybranie zakresu do identyfikacji lub zmianę próbkowania sygnałów. Lista przetwarzania wstępnego importowanych sygnałów. Nie potrzebujemy przetwarzać naszych sygnałów. Zabierzmy się za identyfikację. Klikając listę Estimate wyświetlą nam się dostępne opcje możliwych technik modelowania. Znajdziemy tutaj takie postacie modeli jak modele funkcji przejścia (Transfer Function Models), modele przestrzeni stanów lub modele ARX. Dostępne postacie modeli. Wybierzmy funkcję przejścia. Wyskoczy okno konfiguracji identyfikacji modelu. Estymacja funkcji przejścia. Oprócz nazwy wygenerowanego modelu możemy ustawić ilość zer i biegunów. Zasadniczo próbujemy przewidzieć, jaką postać ma nasz obiekt. Nasz przypadek nie wygląda zbyt skomplikowanie, więc wybierzmy 1 biegun i 0 zer. Konfiguracja estymacji modelu w postaci funkcji przejścia. Estymujmy nasz obiekt poprzez wciśnięcie przycisku Estimate. Przebieg identyfikacji. Wyskoczyło okno z przebiegiem identyfikacji i jej rezultat. Wykres przedstawia, w jaki sposób wygenerowany model odpowiada naszym danym. Akurat ten przykład nie jest zbyt edukacyjny, ponieważ wygenerowany model pokrywa się w 100% z naszym sygnałem wyjściowym. Przykład identyfikacji wykonanej przez MathWorks. Znaleziony model nie pokrywa się w 100% z sygnałem wyjściowym obiektu. Na szaro wyjście obiektu, a na niebiesko znaleziony model. Wróćmy do okna głównego aplikacji. Po procesie identyfikacji pojawi się kafelek z naszym modelem. Dodany model w przeglądarce. Aby wyświetlić porównanie wygenerowanego modelu wraz z naszymi sygnałami wyjściowymi, należy wcisnąć ten model oraz model output. Przebieg znalezionego modelu. Klikając dwukrotnie na okno naszego modelu, wyświetlą nam się szczegółowe informacje o tym modelu. Szczegóły na temat modelu. Widnieje tu jego transmitancja, parametry i kolor, pod jakim widnieje na wykresach. Eksport modelu jest bardzo prosty. Wystarczy przeciągnąć okienko modelu na opcję To Workspace. Eksport modelu do Workspace Matlaba. W taki sposób wykorzystaliśmy tę aplikację do identyfikacji czarnej skrzynki. Przedstawiłem tylko niektóre z dostępnych możliwości aplikacji systemIdentification. Oprócz tego możesz również: Importować dane, które są w dziedzinie częstotliwości. Generować wiele modeli dla jednego obiektu. Wyświetlać zera i bieguny wygenerowanego modelu na wykresie. Usuwać sygnały wejściowe i wyjściowe. Oraz wiele więcej. Eksportowany model pod nazwą tf1. Wróćmy do Simulinka. Wykorzystamy blok LTI System. Jednym z jego parametrów jest nazwa systemu, który ma reprezentować. Dzięki temu ten blok będzie implementował znaleziony przez nas model. LTI System. Jako jego parametr wpisujemy wygenerowany model. Podobnie jak z czarną skrzynką, na wejście naszego modelu podamy wejścia i będziemy obserwowali wyjścia. Podamy te sygnały jednocześnie na black box, jak i na nasz model. Wynik symulacji. Podobnie jak w systemIdentification wykresy pokrywają się praktycznie w 100%. Wykorzystajmy inny sygnał, na przykład sinusoidę. Pobudzenie obiektów sinusoidą. Wykresy również się pokrywają. W taki sposób dokonaliśmy identyfikacji czarnej skrzynki. Podkreślę jeszcze raz: czarną skrzynką może być rzeczywisty układ. Poprzez dokonanie pomiarów i eksperymentów w rzeczywistości, możemy zmierzone sygnały przenieść do Matlaba, dokonać identyfikacji i znaleźć model tego układu. A jaki model skrywał się pod tą transmitancją? Ujawniona czarna skrzynka. Nasza czarna skrzynka stała się białą skrzynką. Była to implementacja transmitancji operatorowej układu RC. Transmitancja, która ukrywała się pod czarną skrzynką jest identyczna jak ta po identyfikacji. Dodatkowo współczynniki modelu, który znaleźliśmy były takie same jak w rzeczywistym obiekcie. Co prawda model miał trochę inną postać niż czarna skrzynka, ale dokonując kilku przekształceń otrzymalibyśmy to samo. Podsumowanie Dzięki modelowaniu i identyfikacji jest możliwe zrozumienie zachowania obiektu przed faktycznym wdrożeniem sterowania lub innych procesów inżynierskich. Współczesne narzędzia umożliwiają tworzenie zaawansowanych modeli matematycznych i ich symulację, co znacząco redukuje ryzyko błędów oraz koszty związane z eksperymentami na rzeczywistych obiektach. W dobie rosnącej złożoności systemów technicznych oraz zaawansowanych algorytmów sterowania, narzędzia te stają się nieodzownym elementem pracy inżynierów i naukowców w wielu dziedzinach, od automatyki przemysłowej po medycynę i robotykę. Jeżeli chcesz zobaczyć identyfikację w praktyce, to odsyłam Cię do artykułu o implementacji regulacji PID dla silnika z enkoderem.
-
- 6
-
-
- Początkujący
- Elektronika
- (i 2 więcej)
-
Matlab Co to Simulink? Podstawy, zastosowanie, pierwsze kroki
mcsw_02 opublikował temat w Artykuły użytkowników
W jaki sposób stworzyć symulację lotu drona, systemu ogrzewania pomieszczenia lub silnika prądu stałego? Jest na to jedno, bardzo uniwersalne i dobre narzędzie - Simulink. Jest to narzędzie, które wchodzi w skład środowiska programistycznego Matlab. Jeżeli jeszcze nie wiesz, czym jest ten program to odsyłam do mojego artykułu omawiającego czym jest Matlab. Simulink is a block diagram environment used to design systems with multidomain models, simulate before moving to hardware, and deploy without writing code. - definicja Simulinka według MathWorks. Możemy więc spodziewać się, że jest to środowisko, które służy do modelowania, symulacji i implementacji systemów dynamicznych bez potrzeby ręcznego kodowania. W tym artykule przedstawię Ci: Czym jest Simulink? Zastosowania Simulinka. Podstawy Simulinka. Praktyczne modele i projekty w Simulinku. Simulink to potężne narzędzie pozwalające na modelowanie różnorodnych systemów. Źródło zdjęcia. Czym jest Simulink? Zgodnie z opisem producenta, jest to środowisko służące do symulacji multi-domenowych modeli. Oznacza to, że będziemy w stanie modelować systemy charakteryzujące się posiadaniem komponentów należących do różnych dziedzin inżynierii - elektryki, mechaniki, pneumatyki itp. Te układy buduje się za pomocą schematów blokowych. To wszystko umożliwia symulację skomplikowanego systemu przed przeniesieniem rozwiązania na rzeczywisty sprzęt. Całe środowisko opiera się na modelach, czyli wyidealizowanej reprezentacji jakiegoś zjawiska/urządzenia/systemu. Modelami sterujemy za pomocą przepływu sygnałów przez połączone między sobą bloki. Sygnały możemy modyfikować i analizować. Zastosowania Simulinka Simulinka stosuje się głównie do symulacji procesów i algorytmów przed przeniesieniem ich na sprzęt. W samym środowisku jest możliwość jednocześnie zbudowania całego systemu oraz jego algorytmu sterowania za pomocą, np. maszyny stanów (Stateflow). Stosuje się go w różnorodnych branżach wykorzystujących skomplikowane systemy. Przykładami takich branż mogą być: Automotive - sterowanie autonomicznymi pojazdami. Lotnictwo i kosmonautyka - skomplikowane sterowanie nieliniowe. Automatyka przemysłowa - sterowanie procesami regulacji. Sektor medyczny - przetwarzanie sygnałów, np. EKG. Więcej o zastosowaniach możecie przeczytać na stronie producenta. Dodatkowe biblioteki do Simulinka rozszerzają jego możliwości. Źródło zdjęcia. Podstawy Simulinka. 1. Włączenie Simulinka Można to zrobić na dwa sposoby: wpisując komendę simulink w Command Window Matlaba lub klikając logo Simulinka w zakładce. Opcje uruchomienia Simulinka. Po uruchomieniu środowiska wyświetli się poniższe okno. Możemy w nim utworzyć nowy pusty projekt lub wybrać wcześniej stworzony wzór. Strona startowa. Wybierzmy Blank Model i rozpocznijmy modelowanie! Stworzenie pustego projektu będzie skutkowało pojawieniem się głównego okna z naszym projektem. Okno Simulinka. 2. Podstawy modelowania W Simulinku modeluje się za pomocą bloków. Do bloków można dostać się za pomocą zakładki Library Browser lub klikając dwukrotnie lewym przyciskiem myszy i wpisując pożądany blok. Załóżmy, że mamy za zadanie zamodelować poniższe równanie: y = ax + b, gdzie: a, b - dowolne stałe, x - czas rzeczywisty. Na pierwszy rzut oka widać, że potrzeba kilka bloków: Mnożenia - Product. Dodawania - Sum. Stałych - Constant. Aktualnego czasu - Clock. Dodajmy je poprzez Library Browser. Pierwsze 3 znajdziesz w zakładkach Simulink > Commonly Used Blocks. Blok Clock znajduje się w Simulink > Sources. Po znalezieniu ich wystarczy przeciągnąć je na okno robocze. Dodanie odpowiednich bloków na obszar roboczy. Bloki łączy się za pomocą linii przeciągając lewym przyciskiem myszy z wyjścia bloku do wejścia kolejnego. Połączenia między blokami. Czerwona strzałka oznacza niedokończone połączenie. Upewnij się, że wszystko jest połączone. Wyświetlmy wynik. Zrobimy to korzystając z bloku Scope, który pokaże nam przebieg monitorowanego sygnału w czasie. Tym razem dodajmy go klikając dwukrotnie na okno robocze i wpisując w wyszukiwarkę Scope. Dodanie bloku Scope. Gotowy schemat powinien wyglądać tak jak poniżej: Gotowy model. Istnieje możliwość dodania opisów, zaznaczając odpowiedni blok i zmieniając jego nazwę. Nazwę linii sygnałowej zmienia się poprzez dwukrotne naciśnięcie jej. Program wraz z etykietami. Zmieńmy wartość współczynnika b, tak aby wynosiła 0. Otrzymamy wtedy równanie: y = ax, W naszym przypadku a = 1, więc równanie będzie wynosiło: y = x, czyli otrzymamy wartości y równe aktualnemu czasowi. Dwukrotne kliknięcie bloku wywoła okno zmiany parametrów tego bloku. Niektóre bloki pokazują aktualne wartości parametrów bloku. Blok ‘b’ zmienił wyświetlaną wartość z 1 na 0 po zmianie jego parametru. Włączmy symulację za pomocą przycisku Run. Przy okazji zmieńmy czas symulacji na 20 sekund. Opcje włączenia symulacji. Czas wykonywania symulacji zmienia się w oknie Stop Time. Otwórzmy Scope. Klikając na niego dwukrotnie zobaczmy przebieg sygnału wyjściowego. Wynik symulacji. Zmieńmy wartości a i b, i sprawdźmy, jak zachowa się przebieg. Symulację można włączyć klikając zielony przycisk startu bezpośrednio w Scope. Zmienione współczynniki równania. Współczynnik kierunkowy zmieniłem na ujemny, przez co nie widać dobrze przebiegu symulacji. Spowodowane jest to zachowaniem przez Scope poprzednich ustawień z poprzedniej symulacji. Za pomocą zaznaczonego przycisku można automatycznie wyskalować osie. Wygenerowany przebieg z wyskalowanymi osiami. To równanie było tylko prostym przykładem. Pamiętajmy, że to środowisko oferuje znacznie więcej, o czym będzie napisane później. 3. Równania różniczkowe w Simulinku Przejdźmy do cięższego przykładu - równań różniczkowych. Nie bój się, nie musisz wiedzieć, jak je rozwiązywać. Simulink zrobi to za nas! Przeanalizujemy problem krok po kroku. Załóżmy, że chcemy zamodelować zachowanie masy na sprężynie w wodzie. Wychylamy ją na pewną odległość i obserwujemy, co się dzieje. Logicznym jest, że sprężyna na początku będzie oscylować. Jednocześnie będzie tłumiona przez wodę, aż do jej całkowitego zatrzymania. Wizualizacja problemu. Nazywa się to oscylator harmoniczny tłumiony. Istnieje równanie, które opisuje powyższy problem: Równanie oscylatora harmonicznego tłumionego. Źródło zdjęcia. Współczynniki w równaniu: m - masa obciążenia. b - współczynnik tłumienia. k - stała sprężyny. Równanie zawiera pochodne. Pochodna to zmiana pewnej wielkości w czasie. Pochodna położenia to prędkość, bo jest to zmiana położenia w czasie - jak szybko obiekt się porusza. Analogicznie przyspieszenie to pochodna prędkości - jak szybko zmienia się prędkość w czasie. W przypadku równania oscylatora zapisane są pochodne położenia. Oznaczone są zapisem: gdzie: n - rząd pochodnej. Tak więc, gdy: n = 1 - prędkość. n = 2 - przyspieszenie. Gdy n = 0, to mamy do czynienia ze zwykłą funkcją. W tym przypadku z położeniem. Podsumowując, będziemy badali: x(t) - położenie. dx(t)/dt lub v(t) - prędkość. d2x(t)/dt2 lub a(t) - przyspieszenie. Najprostszym sposobem na modelowanie takiego równania jest przeniesienie wszystkich pochodnych i stałych na prawą stronę oraz pozostawienie po lewej najwyższej pochodnej. Jeżeli tak zrobimy, to powyższe równanie zyska postać: Postać równania z przeniesieniem niższych pochodnych i stałych na prawą stronę. Przeanalizujmy powyższe równanie. Najwyższą pochodną, możemy obliczyć na podstawie niższych pochodnych. Aby je uzyskać, musimy scałkować wyższą pochodną. Wtedy otrzymamy pochodne niższego rzędu. Dodatkowo całe wyrażenie należy podzielić przez ‘m’. Odpowiednie pochodne musimy wzmocnić przez pewne współczynniki. Nawias po prawej stronie ma postać sumy ujemnych wartości. Na cały układ musimy zadziałać wymuszeniem, czyli sygnałem, który wprawi w ruch cały układ. Można je wyobrazić sobie, jako odchylenie sprężyny w jednym kierunku, a następnie puszczenie jej, tym samym wprawienie jej w ruch. Uwaga: w równaniu nie jest uwzględnione wymuszenie. Jeżeli chcielibyśmy je uwzględnić, musielibyśmy dopisać po prawej stronie +u(t). Zatem będziemy potrzebowali bloków: Step - generowanie sygnału o stałej wartości przez pewien czas. Wymuszenie/początkowe odchylenie sprężyny. Sum - odejmowanie tłumienia i stałej sprężyny. Gain - pomnożenie sygnału przez pewną wartość. Wzmocnienie odpowiednich pochodnych. Integrator - całka sygnału. Potrzebujemy dwóch integratorów, żeby z najwyższej pochodnej, równej 2, przejść do pochodnej 0-rzędu - położenia. Scope - analiza przebiegów w czasie. Wszystkie potrzebne bloki znajdziemy w Library Browser. Po dwukrotnym naciśnięciu na blok Sum można dostosować jego wejścia. Zmieńmy go na rectangular i zmodyfikujmy jego znaki poprzez wpisanie w poniższym polu żądanych symboli: plus (sygnał wymuszający) i dwa minusy (ujemne współczynniki). Parametry bloku Sum. Przygotowane bloki z błędami. Tym razem w blokach wpiszemy zmienne, które należy zadeklarować. Dodaje się je w workspace projektu i przypisuje się im odpowiednią wartość. W tym celu najeżdżamy na blok i klikamy symbol error oraz wybieramy dodanie zmiennej. Stworzenie nowej zmiennej. Okno, które wyskoczy po wciśnięciu Fix. Wartość zmiennej wpisujemy w <expression>. Ja wykorzystam wartości: m = 10. k = 3. b = 2. Jeżeli pomylisz się przy wpisywaniu wartości, to musisz przejść do workspace Simulinka. Przejście do Model Explorer i Workspace modelu. Do tego miejsca przechodzi się w następujący sposób: Zakładka Modelling > Model Explorer > Model Workspace. Po stworzeniu odpowiednich zmiennych czerwone podświetlenie powinno zniknąć. Teraz połączmy wszystkie bloki zgodnie ze wzorem. Połączony schemat. Zauważ, że możliwe są rozgałęzienia oznaczone kropką (tak jak w schematach elektronicznych). Wyjaśnienie połączeń: wzór opisuje, ile wynosi przyspieszenie. Więc musimy je obliczyć na podstawie odpowiednich wartości prędkości i położenia, które są wzmocnione o współczynniki przy nich stojących. Dzięki temu utworzy nam się równanie po prawej stronie. Dodatkowo całą sumę musimy pomnożyć przez 1/m, dlatego na wyjściu sumatora jest Gain. Wyjaśnienie graficzne równania. Poszczególne kolory odpowiadają kolejnym częściom równania. Zostało jeszcze zmodyfikowanie bloku Step. Chcemy, aby wymuszenie pojawiło się od startu symulacji i zniknęło po pewnym czasie. Klikamy dwukrotnie na blok i modyfikujemy parametry. Zmodyfikowane parametry bloku Step. Step time - czas po jakim blok zadziała. Chcemy, aby wymuszenie zniknęło po sekundzie, więc wpisujemy 1. Initial value - wartość początkowa. Ustawiamy na 1, bo zadziałamy jednostkową siłą rozciągając sprężynę. Final value - wartość, która pojawi się po Step time. Chcemy zatrzymać wymuszenie, więc wpisujemy 0. Reszty nie zmieniamy. Do bloku Scope przyłączmy sygnały wymuszenia, przyspieszenia i prędkości, aby zobaczyć jak zachowują się te wielkości. Aby połączyć pożądany sygnał do Scope należy przytrzymać prawym przyciskiem na linię tego sygnału i przeciągnąć kursor w inne miejsce. Pojawi się strzałka, którą należy najechać bezpośrednio na Scope. Połączenie kilku sygnałów do Scope. Przed uruchomieniem zmień czas na minimum 40 sekund. Sprawdźmy jak wygląda wyjście! Wyjście modelu. Wykres nie jest zbyt czytelny. Poprawmy to. Rozbijmy poszczególne wykresy na pojedyncze okna - Layout. Włączmy legendę - Legend. Dostosujmy skalę. Włączenie opcji Layoutu. Podział Scope na poszczególne sygnały. Włączenie legendy. Automatyczne skalowanie wszystkich przebiegów. Wygenerowany wykres. Nasz wykres jest kanciasty. To wina solvera, który oblicza stany modelu podczas symulacji. Nie wdając się w szczegóły naprawmy to klikając napis w prawym dolnym rogu informujący nas o aktualnym solverze. Po kliknięciu wybierzmy koło zębate i przejdźmy do ustawień. Włączenie opcji solvera. Zmiana typu i kroku solvera. Krok solvera ustaw, np. na 0.01. Sprawdźmy, jak teraz wygląda wykres. Finalnie wygenerowany wykres. Teraz możemy dokładnie przeanalizować wygenerowany przebiegi przez nasz model. Przez sekundę działa wymuszenie, które zanika. Następnie model (ciężarek na sprężynie) wykonuje ruch oscylacyjny wokół punktu 0. Tłumienie (woda) w końcu go zatrzymuje. Przy okazji widać, jak zachowuje się prędkość i przyspieszenie. Praktyczne modele i projekty w Simulinku Simulink nie służy tylko i wyłącznie do rozwiązywania skomplikowanych równań różniczkowych. Znajduje on zastosowanie w wielu branżach. Poniżej przedstawiam modele i przykłady rzeczywistych obiektów. 1. Winda (Elevator) Dzięki bibliotece Simscape możliwe jest symulowanie części mechanicznych. Za pomocą kilku bloków można zbudować windę, która porusza się z zadaną prędkością. Model można przerobić na sterowanie położeniem/przyspieszeniem. Przykład windy zbudowanej w Simulinku. Wygenerowane przebiegi przez windę. 2. Sterowanie silnikiem (Control DC Motor with PWM Voltage Source and H-Bridge Driver) Simscape oferuje również pakiet Simscape Electrical, za pomocą której można symulować układy elektroniczne. W połączeniu z częściami mechanicznymi możemy zasymulować jednocześnie część elektryczną i mechaniczną systemu - model multi-domenowy. Przykładem może być sterowanie silnikiem prądu stałego mostkiem typu H przy jednoczesnym monitorowaniu obrotów wału silnika. Sterowanie silnika mostkiem typu H. Pokazane przebiegi prądu i RPM. 3. Sterowanie Arduino za pomocą Simulinka (Get Started with Arduino Hardware) Za pomocą Simulinka możesz tworzyć aplikacje komunikujące się z Arduino. Simulink umożliwia tworzenie aplikacji, sterowania i wizualizacji programów tworzonych na Arduino. Jeżeli chcesz zobaczyć rzeczywiste użycie tego programu, to zajrzyj do tego artykułu. Robot mobilny wykorzystujący Arduino Due. Źródło zdjęcia. W internecie można znaleźć modele/implementacje innych typów robotów, które zostały zaprojektowane w Simulinku: linefollower, typu roomba lub manipulatory przemysłowe Podsumowanie Simulink to świetne narzędzie do modelowania, symulowania i tworzenia aplikacji dla rzeczywistych systemów i obiektów. Sprawdzi się zarówno do rozwiązywania skomplikowanych problemów matematycznych, jak i dla sterowania rzeczywistymi obiektami, takimi jak np. roboty mobilne. Jeżeli chcesz przetestować swoje rozwiązanie sterowania, nastawy PID lub układ elektroniczny, to Simulink będzie dobrym wyborem.- 1 odpowiedź
-
- 4
-
-
- automatyka
- Programownie
- (i 2 więcej)
-
Zdalnie sterowany samochodzik pilotem IR
BeeKeyPro opublikował temat w Projekty - DIY (początkujący)
Witam. Budowę auta na pilota planowałem już od dawna, ale nie wiedziałem jak się do tego zabrać. Dopiero niedawno gdy miałem okazje wykonać projekt z tego filmu, dowiedziałem się jak to zrobić. I tak oto powstało takie auto na pilota: Auto na pilota Użyte komponenty i moduły: Arduino UNO Moduł sterownika silników DC L293D Akumulatorki Li-Ion 18650 + koszyk Silnik DC z przekładnią + koła (x4) Odbiornik IR Rezystor 68Ω Kondensator 100µF Przełącznik I/O Pilot IR (ja użyłem ten pilot) Na samym początku musiałem zbadać kody które odbiornik odbiera po wciśnięciu danego przycisku na pilocie, więc napisałem i wgrałem taki kod: #include <IRremote.h> const int RECV_PIN = A0; void setup() { Serial.begin(9600); IrReceiver.begin(RECV_PIN, ENABLE_LED_FEEDBACK); Serial.println("Odbiornik IR gotowy."); } void loop() { if (IrReceiver.decode()) { Serial.print("Kod: "); Serial.println(IrReceiver.decodedIRData.decodedRawData, HEX); IrReceiver.resume(); } Okazało się, że odbiornik odbiera losowe sygnały gdy klikam ten sam przycisk. Problem rozwiązał ,,filtr na zasilaniu odbiornika". (problem szczegółowo opisywany i rozwiązywany jest w tym wątku): Ustaliłem sposób w jaki będą działać przyciski i zająłem się budową auta: Instrukcja obsługi pilota Auto budowałem w podobny sposób jak na filmie do którego linkowałem na początku tego opisu. Dlatego nie będę też opisywał tutaj tego jakie kroki wykonałem, żeby je zbudować. Lepiej zajrzyjmy do kodu. 😄 #include <IRremote.hpp> #include <AFMotor.h> AF_DCMotor motorM1(4); AF_DCMotor motorM2(3); AF_DCMotor motorM3(2); AF_DCMotor motorM4(1); const int RECV_PIN = A0; int speed=200; void setup() { IrReceiver.begin(RECV_PIN); motorM1.setSpeed(speed); motorM2.setSpeed(speed); motorM3.setSpeed(speed); motorM4.setSpeed(speed); } void loop() { if (IrReceiver.decode()) { if(IrReceiver.decodedIRData.decodedRawData == 0xBF40FF00){ // JAZDA W PRZÓD motorM1.run(FORWARD); motorM2.run(FORWARD); motorM3.run(FORWARD); motorM4.run(FORWARD); } if(IrReceiver.decodedIRData.decodedRawData == 0xE619FF00){ // JAZDA W TYŁ motorM1.run(BACKWARD); motorM2.run(BACKWARD); motorM3.run(BACKWARD); motorM4.run(BACKWARD); } if(IrReceiver.decodedIRData.decodedRawData == 0xF807FF00){ // SKRĘT W LEWO motorM1.run(FORWARD); motorM2.run(FORWARD); motorM3.run(BACKWARD); motorM4.run(BACKWARD); } if(IrReceiver.decodedIRData.decodedRawData == 0xF609FF00){ // SKRĘT W PRAWO motorM3.run(FORWARD); motorM4.run(FORWARD); motorM2.run(BACKWARD); motorM1.run(BACKWARD); } if(IrReceiver.decodedIRData.decodedRawData == 0xEA15FF00){ // STOP motorM3.run(RELEASE); motorM4.run(RELEASE); motorM2.run(RELEASE); motorM1.run(RELEASE); } IrReceiver.resume(); } } I tak jak widać po kodzie, sterowanie tym autem jest uciążliwe. W klasycznych autach na pilota, jak klika się przycisk (jazda w przód) to auto jedzie póki nie puścisz przycisku. Tutaj jak klikam przycisk, to auto jedzie do momentu w którym nie nacisnę innego przycisku, lub przycisku stop. Jak wie ktoś jak wykonać taki kod, który pozwoli sterować autem tak jak w klasycznych autach, to był bym wdzięczny jakby podpowiedział pod tym opisem. 🙂 Podczas pisania kodu, napotkałem jeszcze jeden problem. Biblioteka AFMotor gryzła się z IRremote, przez co nie mogłem sterować silnikami M1 i M2, więc w kodzie mogłem używać tylko jednej z tych bibliotek. Rozwiązanie problemu też znajduje się w tym wątku: Na koniec najlepsza część, czyli filmik: Choć kod i schemat połączenia wszystkiego były wykonane przeze mnie to dużo inspirowałem się tym filmem. Dziękuje za przeczytanie całego DIY i z góry przepraszam, jeśli się je dziwnie czytało, ale zupełnie nie wiedziałem jak się do niego zabrać. 😉 Czekam z niecierpliwością na wasze uwagi. Pozdrawiam. 🙂 -
Cześć wszystkim! Szukałem już co nieco na forum, widzę, że rozdział ten zwyczajnie jest dość problematyczny. Jednak moje pomiary wychodzą całkiem inaczej, niż te, które znajduję na forum. Przy pomiarze napięcia baterii mam wynik 9,27 V. W pomiarze rezystancji rezystor 10 kΩ pokazuje mi 9,7 kΩ, z kolei rezystor 1 kΩ 0,988 kΩ. W takim układzie, gdy podpinam baterię do płytki stykowej, oczekuję, że wynik będzie wynosił w pierwszym przypadku: 9,27 V / 9700 Ω = 0,0009556701 A = 0,9556701 mA, zaś multimetr ustawiony jako amperomierz w 20mA pokazuje mi wartość 0,85mA i spada 9,27 V / 988 Ω = 0,0093825911 A = 9,3825911 mA, a multimetr ustawiony tak samo jak poprzednio pokazuje mi wartość 5,17mA i spada Patrząc się na obrazki dołączone do tego konkretnego rozdziału, mam ustawione wszystko tak samo. Czyli właśnie amperomierz w 20mA. Może to tutaj leży ten błąd poznawczy, który jest często wspominany? Dodam, że mam inny miernik, niż ten wymieniony w kursie, bo kupiłem orangjo VC505. Jednak sądzę, że to nie powinno mieć tak dużego wpływu na wyniki, a już bardziej na ich zrozumienie. Jeśli jednak to nie to, to może niechcący spaliłem jakiś bezpiecznik w multimetrze? Bo poza tym to co mogę jeszcze podejrzewać? Baterię? Klips do baterii? Dzięki za odpowiedzi i pozdrawiam 😄
-
POMOC Arduino i błędne odczyty z odbiornika podczerwieni
Mariusz_Nadolny opublikował temat w Arduino i ESP
Cześć, chciałem zrobić jakiś prosty program używający odbiornika podczerwieni. Mam jednak problem z tym, że źle odbierane są dane. Używam tego klasycznego kodu: #include <IRremote.h> IRrecv irrecv(2); decode_results results; void setup() { Serial.begin(9600); irrecv.enableIRIn(); } void loop() { if (irrecv.decode(&results)) { Serial.print(results.value); Serial.println(" "); irrecv.resume(); } } To są dane jakie widzę po wciskaniu jednego przycisku: więc jak widać wartości dla jednego przycisku są różne, a transfer tej liczby na hex w ogóle nie działa. Sprawdzałem czy piny gnd, 5v i 3,3v nadają odpowiedni stan na wyjście pinów i zdaje się, że tak (nie potrafię dobrze posługiwać się arduinowym językiem, więc wysyłam link do poradnika, z którego korzystałem https://learn.andoyaspace.no/ebook/the-cansat-book/common/getting-started/software-start-up-and-test-of-arduino-uno/). Nie mam pojęcia dlaczego to co robię nie działa. Jeżeli ktoś ma jakiś pomysł to z wielką przyjemnością poczytam, bo flustruje mnie to, że nie potrafię nic z tym zrobić :). Dodam jeszcze, że Arduino jest oryginalne, a odbiornik, z którego korzystam to TSOP31236. Robiłem to parę miesięcy temu i wtedy wszystko działało.- 1 odpowiedź
-
- 2
-
-
- pomoc
- Początkujący
- (i 3 więcej)
-
Witam, czy wiecie może czym ciąć płytki uniwersalne/drukowane (laminat)? Próbowałem kiedyś nożykiem i szczypcami bocznymi, ale wyglądało to w ten sposób: krótko mówiąc obskurnie. 😅 W Internecie pisali że nożem szklarskim, tylko czy rzeczywiście on się sprawca i w jaki sposób się go używa? Z góry dziękuję za poświęcony czas! 😄
- 24 odpowiedzi
-
- Początkujący
- lutowanie
-
(i 1 więcej)
Tagi:
-
Witam. Przyszedł mi dzisiaj oscyloskop który kupiłem przez internet. Po włączeniu nic się nie dzieje. Właściwie to prawie nic bo na wyświetlaczu nic się nie pojawia, dioda power się nie świeci, ale zauważyłem że przy włączaniu dioda triggered bardzo delikatnie świeci i po chwili przestaje. Zacząłem kręcić pokrętłem przy włączonym oscyloskopie i odkryłem że ustawienie pokrętła na bardzo dokładną pozycje powoduje miganie diody triggered ze stałą częstotliwością i jak zakładam pełną jasnością. Próbowałem parę razy, czasem częstotliwość migania jest większa, czasem mniejsza. Ale raczej nie ma to znaczenia. Pomimo braku zasilania ono jednak jest? Nie rozumiem tego. Nie wiem jak zabrać się za naprawę tego oscyloskopu. Pani która mi go sprzedała twierdzi że na pewno działał jeszcze przed wysłaniem. Dodam że w temacie oscyloskopów jestem totalnie zielony. Mam pełne wyposażenie, oscyloskop miał jeszcze plomby. Szkoda jakby taki sprzęt się zmarnował. Byłbym wdzięczy za jakiekolwiek porady, schematy i informacje. Z góry dzięki za pomoc.
-
Dzień dobry, od niedawna próbuję stworzyć grę, chodzi o to że diody migają na lewo i prawo, a gracz ma wcisnąć przycisk aby miganie się zatrzymało. W zależności od tego na jakiej diodzie LED gracz zatrzyma, dostanie punkty (wyświetlane na LCD). I teraz chodzi o to że muszę w jednym kodzie sprawdzać czy przycisk nie został naciśnięty, i kontrolować miganie diod LED. Gdyby była opcja dwóch funkcji void loop to problem by był rozwiązany. Więc, czy można w jednym kodzie mieć dwie funkcje loop? Jeśli tak to proszę powiedzieć jak tego użyć, a jeśli nie to jak wykorzystać jedną funkcję loop do tego co chcę zrobić. Z góry dziękuję! 🙂
- 67 odpowiedzi
-
- Arduino
- Początkujący
-
(i 2 więcej)
Tagi:
-
Witam, próbowałem dzisiaj podłączyć wyświetlacz TFT dotykowy SPI ILI9341 do Arduino. Spróbowałem podłączyć z takiego zdjęcia z internetu i ekran się tylko zaświecił, kod się dało przegrać ale na wyświetlaczu nic się nie pojawiało. Potem zobaczyłem że jest więcej metod podłączania. I czy ktoś może mógłby mi wysłać zdjęcie/tabelkę prawidłowego podłączania wyświetlacza do Arduino? Wcześniej jak chciałem podłączyć zrobiłem to w! taki sposób jaki możecie zobaczyć na obrazku: i kod wgrałem ten: #include <Adafruit_GFX.h> #include <Adafruit_TFTLCD.h> #include <TouchScreen.h> #define LCD_CS A3 #define LCD_CD A2 #define LCD_WR A1 #define LCD_RD A0 #define LCD_RESET A4 #define BLACK 0x0000 #define BLUE 0x001F #define RED 0xF800 #define GREEN 0x07E0 #define CYAN 0x07FF #define MAGENTA 0xF81F #define YELLOW 0xFFE0 #define WHITE 0xFFFF #define YP A1 #define XM A2 #define YM 7 #define XP 6 #define TS_MINX 940 #define TS_MINY 160 #define TS_MAXX 160 #define TS_MAXY 970 TouchScreen ts = TouchScreen(XP, YP, XM, YM, 300); Adafruit_TFTLCD tft(LCD_CS, LCD_CD, LCD_WR, LCD_RD, LCD_RESET); #define BOXSIZE 40 #define PENRADIUS 3 #define MINPRESSURE 10 #define MAXPRESSURE 1000 bool change = 0; bool touch = 0; void setup() { pinMode(A5, OUTPUT); digitalWrite(A5, LOW); Serial.begin(9600); tft.reset(); tft.begin(0x9325); tft.setTextColor(WHITE); tft.setTextSize(3); tft.fillScreen(BLACK); } void loop() { if (change == 0 && touch == 0) { digitalWrite(A5, LOW); tft.fillCircle(120, 160, 50, RED); tft.setCursor(95, 150); tft.println("LED"); change = 1; delay(200); } if (change == 0 && touch == 1) { digitalWrite(A5, HIGH); tft.fillCircle(120, 160, 50, GREEN); tft.setCursor(95, 150); tft.println("LED"); change = 1; delay(200); } TSPoint p = ts.getPoint(); pinMode(XM, OUTPUT); pinMode(YP, OUTPUT); if (p.z > MINPRESSURE && p.z < MAXPRESSURE) { p.x = map(p.x, TS_MINX, TS_MAXX, tft.width(), 0); p.y = map(p.y, TS_MINY, TS_MAXY, tft.height(), 0); Serial.print("("); Serial.print(p.x); Serial.print(", "); Serial.print(p.y); Serial.println(")"); if (p.x > 70 && p.x < 170) { if (p.y > 110 && p.y < 210) { change = 0; touch = !touch; } } } } Tu są zdjęcia jak to podłączyłem: Mało na nich nich widać niestety, więc tu jest jeszcze zdjęcie ,,poglądowe": Gdyby było za mało informacji proszę napisać Z góry dziękuję za odpowiedzi! 😄
- 14 odpowiedzi
-
Dzień dobry, jak zasilić Arduino bateriami? Z góry dziękuję za odpowiedzi! 🙂
-
Dzień dobry, nie dawno kupiłem sobie wyświetlacz LCD TFT SPI ST7735S ze slotem SD. Można ten wyświetlacz podłączyć do Arduino, ale czy jest możliwość włożenia karty SD do slotu i podłączenia pinów VCC i GND do plusa i minusa baterii? Jeśli tak to proszę podać jakie zasilanie do niego podłączyć Z góry dziękuję za odpowiedź. 😄
- 8 odpowiedzi
-
- SD
- Elektronika
-
(i 2 więcej)
Tagi:
-
Dzień dobry, ostatnio pytałem się jaki Attiny do wyświetlacza LCD I2C, wszyscy polecali mi Attiny85. Czy może ktoś mi powiedzieć jak programować to Attiny? Bardzo proszę zwrócić uwagę że jestem początkującym i proszę nie używać mega skomplikowanych słów Z góry dziękuję odpowiedź 🙂
- 19 odpowiedzi
-
- mikrokontroler
- Programowanie
- (i 2 więcej)
-
Jak używać kalkulatora szerokości ścieżek na płytce drukowanej?
BeeKeyPro opublikował temat w Zupełnie zieloni
Dzień dobry, czy wie ktoś jak używać kalkulatora szerokości ścieżek na płytce drukowanej? Z góry dziękuję za odpowiedzi! 😄- 9 odpowiedzi
-
- Elektronika
- Początkujący
- (i 3 więcej)
-
Mam problem z doświadczeniami z diodą RGB oraz z układem Darlingtona. Otóż dioda nie chce się zaświecić, próbowałem dociskać poszczególne elementy bo być może nie stykały z płytką ale nic. Jeżeli chodzi o układ Darlingtona to chodzi o doświadczenie z ołówkiem, w tym doświadczeniu dioda również nie świeci. Zastanawiam się co może być problemem. W każdym z tych doświadczeń używa się innej liczby baterii 1,5 V więc zastanawiam się czy problem jest z samymi bateriami. Trzeba je włożyć do pojemnika w konkretny sposób czy nie ma to większego znaczenia. Z góry dziękuję za odpowiedź
-
Wstęp Czy wiesz, że FORBOTJESTCOOL(36) = 2676043599332257617141(10)? Ja też nie wiedziałem. Dowiedziałem się, gdy włączyłem kalkulator systemów liczbowych i odkryłem system trzydziesto szóstkowy. Do zapisu liczb wykorzystuje on cyfry od 0 do 9 i litery od A do Z. Rzeczywiście, istnieją systemy liczbowe, w których jest tak dużo dostępnych znaków, że można z nich zapisywać słowa, a nawet całe zdania. W tym przykładzie pokazałem Ci, że istnieją większe systemy liczbowe, niż te powszechnie znane, np. dwójkowy, czwórkowy, ósemkowy, czy dziesiętny. Przedstawię Ci system szesnastkowy, za pomocą którego można reprezentować kolory lub adresy urządzeń podłączonych do twojego Arduino 🙂 System szesnastkowy stosuje się do adresowania urządzeń, które komunikują się za pomocą standardu I2C. Źródło zdjęcia. Jeżeli nie znasz podstaw systemów liczbowych lub nie wiesz jak zamienić liczbę dziesiętną na binarną i na odwrót, to zapraszam Cię do mojego poprzedniego artykułu artykułu o systemie binarnym. To kluczowy temat, a wiedza z niego będzie przydatna w dalszych częściach tego artykułu! Konwersja liczb szesnastkowych i dziesiętnych System szesnastkowy, nazywany również heksadecymalnym (w skrócie hex), jak sama nazwa wskazuje, zawiera w sobie 16 znaków, którym przypisane są odpowiednie wartości systemu dziesiętnego. W systemie szesnastkowym korzystamy z cyfr 0..9 i liter A...F: A(16) = 10(10) B(16) = 11(10) C(16) = 12(10) D(16) = 13(10) E(16) = 14(10) F(16) = 15(10) a) Zamiana przy użyciu operacji modulo (dec → hex) Jest to standardowa, algorytmiczna operacja, którą można wykonać z każdym innym systemem liczbowym. W naszym przypadku liczbę dzieli się całkowicie przez 16(10) i zapisuje się resztę z dzielenia. Powtarza się to do momentu, aż w wyniku dzielenia znajdzie się 0. Wynik odczytywany jest od końca z reszt z dzielenia. Spróbujmy zamienić liczbę 234(10) na liczbę hex: Wynik dzielenia całkowitego kolejnych liczb zapisujemy w lewej kolumnie a resztę z dzielenia po prawej. Wynik, czyli liczbę szesnastkową, odczytuje się z reszt z dzielenia - od dołu do góry. Poniżej jeszcze dwa przykłady. b) Konwersja za pomocą wag (hex → dec) W tej metodzie korzystamy z definicji systemu liczbowego - każda cyfra na konkretnej pozycji definiuje wagę tej pozycji. Przeliczmy liczbę 1CA9(16): Podstawą liczby heksadecymalnej jest 16(10). Cyfra na ostatniej pozycji ma wagę 160(10), przedostatnia 161(10), kolejna 162(10) itp. Mnożymy wagi przez cyfry na ich pozycjach. Suma wszystkich iloczynów to wynik. c) Konwersja za pomocą systemu binarnego (hex → bin → dec) Jest to sztuczka, która może Ci pomóc zamienić w szybki sposób względnie małą liczbę hex na liczbę dziesiętną. Rozsuń liczbę hex na pojedyncze cyfry. Każdą cyfrę zamień na liczbę binarną. Złóż powstałe liczby binarne. Zamień liczbę binarną na decymalną. Metodę rozsuwania stosuje się głównie do zamiany hex → bin. Weźmy na tapetę liczbę D8(16): Rozdzielamy D8(16) na poszczególne cyfry - D(16) i 8(16). D(16) w hex to 13(10) w dec. 8(16) w hex to 8(10) w dec. Wiedząc to jesteśmy w stanie zapisać te liczby w systemie binarnym. Składamy obliczone części. Złożoną część przeliczamy na system dziesiętny. d) Konwersja za pomocą systemu binarnego (dec→ bin → hex) Tego typu zamiana liczb odbywa się analogicznie do poprzedniego przykładu, ale w odwrotnej kolejności: Zamień liczbę dec na bin. Rozsuń liczbę bin co 4 bity (4 cyfry). Zamień otrzymane liczby bin na hex. Złóż otrzymane liczby hex. Jak widzisz konwersja między systemem hex a dziesiętnym nie jest trudna. Użyliśmy tylko i wyłącznie wiedzy z poprzedniego artykułu. Polecam przećwiczyć te umiejętności wymyślając jakąś małą liczbę heksadecymalną (np. składającą się z dwóch cyfr) i zamienić ją na liczbę binarną/dziesiętną. Możesz też wymyślić liczbę dziesiętną i dokonać konwersji na heksadecymalną. Zastosowania liczb hex Do czego mogą się przydać liczby szesnastkowe? Ich najważniejszą właściwością jest zwięzły zapis dużych liczb: FFFF(16) = 65535(10) = 1111111111111111(2) Jak widać powyżej, liczbę 16 bitową można zapisać za pomocą 4 cyfr (liter) w systemie heksadecymalnym. a) Reprezentacja kolorów Jednym ze sztandarowych przykładów zastosowania systemu szesnastkowego jest zapis koloru. Kod składa się ze znaku # i trzech dwucyfrowych liczb szesnastkowych, które odpowiednio oznaczają poziomy kolorów: czerwonego, zielonego i niebieskiego (RGB). Im wyższa liczba, tym intensywniejszy jest poszczególny składnik koloru. Na przykład: ● #FF0000 - czerwony, rgb(255, 0, 0), ● #00FF00 - zielony, rgb(0, 255, 0), ● #0000FF - niebieski, rgb(0, 0, 255), ● #000000 - czarny, brak jakiegokolwiek składnika, rgb(0, 0, 0), ● #FFFFFF - biały, połączenie wszystkich składników, rgb(255, 255, 255), ● #A020F0 - fioletowy, rgb(160, 32, 240). b) Adresy pamięci W jaki sposób zapisać adres pod którym ma być przechowywana zmienna? Dzisiejsze komputery charakteryzują się ogromną pamięcią. Jest wiele możliwych adresów w pamięci pod które można zapisać jakąś informację. Wiąże się to z dużymi wartościami tych adresów. Liczby, które definiują dany adres są po prostu długie. W takim wypadku możemy skorzystać z liczby szesnastkowej, która skróci nam ten zapis. Tę technikę stosuje się często. Przykładem jest np. odczyt adresu zmiennej w języku C : Deklarujemy 3 zmienne po sobie. Odczytujemy po kolei ich adresy. Każdy odczytany adres będzie zapisany w systemie szesnastkowym… …a każdy adres będzie się różnił od poprzedniego o rozmiar zadeklarowanej zmiennej. Deklaracja zmiennej char (1 bajt): char a = 'X'; char b = 'Y'; char c = 'Z'; printf("Rozmiar pojedynczego znaku: %d\n", sizeof(char)); printf("Adres zmiennej a: %p\n", &a); printf("Adres zmiennej b: %p\n", &b); printf("Adres zmiennej c: %p\n", &c); Wyjście: Rozmiar pojedynczego znaku: 1 Adres zmiennej a: 0061FF1F Adres zmiennej b: 0061FF1E Adres zmiennej c : 0061FF1D Deklaracja zmiennej short (2 bajty) : short x = 1; short y = 2; short z = 3; printf("Rozmiar pojedynczego shorta: %d\n", sizeof(short)); printf("Adres zmiennej x: %p\n", &x); printf("Adres zmiennej y: %p\n", &y); printf("Adres zmiennej z: %p\n", &z); Wyjście: Rozmiar pojedynczego shorta: 2 Adres zmiennej x: 0061FF1A Adres zmiennej y: 0061FF18 Adres zmiennej z: 0061FF16 c) Adresy urządzeń w transmisji I2C Jednym z najpopularniejszych zastosowań systemu szesnastkowego jest zapis adresów urządzeń w komunikacji I2C (TWI). Skorzystajmy z karty katalogowej czujnika temperatury Adafruit 4089 z cyfrowym termometrem ADT7410, który może komunikować się właśnie przez ten protokół. Wycinek karty katalogowej Adafruit 4089. Źródło zdjęcia. Karta katalogowa urządzenia komunikującego się przez I2C powinna dostarczać klientowi informację o adresie danego urządzenia. Niektóre urządzenia dają możliwość konfiguracji adresu za pomocą pinów tego urządzenia. W przykładzie powyżej, jeżeli korzystamy z kilku tych samych czujników lub adres tego czujnika powtarza się z adresem innego, to za pomocą pinów A0 i A1 możemy zmienić jego adres. d) Adres MAC Jest to unikatowy i niepowtarzalny adres karty sieciowej nadany przez producenta. Stanowi on 48 bitową liczbę z czego pierwsze 24 bity oznaczają producenta karty sieciowej (ID producenta). Pozostałe 24 to ID urządzenia. Ze względu na rozmiary liczb, które są używane w adresach MAC, pisze się je w systemie szesnastkowym, co znacznie ułatwia odczyt takiego adresu. Przykładowe sposoby zapisu adresu MAC: 00:0c:29:cc:55:5e - MAC w Linux. Separatorem między parami znaków jest dwukropek. 00-0c-29-cc-55-5e - MAC w Windows. Separatorem między parami znaków jest myślnik. 000c.29cc.555e - MAC w urządzeniu sieciowym Cisco. Kropki między hextetami Adres MAC w Linux. Źródło zdjęcia. e) Komendy w postaci liczb hex Wysyłanie komend do mikrokontrolera może odbywać się właśnie w tym systemie. Dlaczego? Powód jest ten sam co wcześniej - możemy zawrzeć wiele komend w zwartym zapisie. Np. 0x00 - uśpij urządzenie, 0x01 - wybudź urządzenie, 0x02 - sparuj urządzenie, 0x03 - skonfiguruj urządzenie, 0x1F - włącz LED, itp. Jest to moim zdaniem dobry pomysł do organizacji i implementacji komunikacji z uC. Podsumowanie System szesnastkowy to bardzo przydatny i elastyczny system, który pozwala na zapisanie dużych liczb w krótkim zapisie. Jest on wykorzystywany praktycznie wszędzie, gdzie korzysta się z wielobitowych liczb. Nasuwa się jednak pytanie: Dlaczego nie korzystamy z większych systemów liczbowych? Jest kilka powodów: Złożoność zapisu - w systemie hex stosuje się 16 cyfr. Wyższe systemy liczbowe wprowadzają kolejne znaki oznaczające kolejne cyfry. W pewnym momencie może być po prostu za dużo tych znaków do interpretacji, co może komplikować program. Zgodność z potęgą liczby dwa - 16(10) = 24(10). System będący potęgą dwójki ułatwia obliczenia matematyczne i jest zgodny z logiką komputerową i cyfrową.
- 2 odpowiedzi
-
- 6
-
-
- Początkujący
- Elektronika
- (i 2 więcej)
-
Elektronika Podświetlenie Przycisku w obudowie Pytanie/Zagadka
MaciejG opublikował temat w Elektronika
Witam, piszę tu do was z prośbą o pomoc/radę w sprawie mojego mini projektu. Jestem początkującym w tworzenia elektroniki więc proszę o większą wyrozumiałość w kwestii specjalistycznego nazewnictwa. Celem projektu jest zamienienie podświetlenia przycisku zasilania na obudowie komputera na podświetlenie RGB zsynchronizowane z podświetleniem w obudowie. Sam przycisk ma trzy stany podświetlenia (świeci, mryga i nie świeci). Problem pojawia się, gdy chcemy “zsynchronizować” to z podświetleniem. Na płycie głównej mam trzy dostępne wyjścia: RGB, ARGB, POW-LED. (pin-out zamieszczam poniżej) RGB: 1 - 12v, 2 - G, 3 - R, 4 – B ARGB: 1 - 5v, 2 - Din, 3 - pusty, 4 - GND POW-LED: 1 - 5v, 2 – GND Początkowo zakładam nie korzystać z wyjścia ARGB z powodu większej złożoności tego rodzaju podświetlenia natomiast zostawiam tu informację o jego istnieniu. Schemat powinien realizować taką (pseudo) tablice boolowska: Legenda: IN – tablica stanów wejściowych OUT – tablica stanów wyjściowych PW – zasilanie 5v (POW-LED:1) LED – Czy podświetlenie obudowy się świeci? 12v – Czy na złączu RGB występuje zasilanie? PW LED – Czy przycisk się świeci? LED GRD – puszczenie “minusa” przez gniazdo RGB (RGB:2,3,4) PW GRD – puszczenie “minusa” przez gniazdo PW (POW-LED:2) Opis stanów: Nr.1 - PC włączony Nr.2 - PC wygaszony Nr.3 i 4 – PC uśpiony (przycisk mryga) Nr.5 - PC wyłączone Własnymi siłami doszedłem do takiego prototypu, ale nie jest on idealny. Nie spełnia bowiem przypadku Nr.2 z tablicy. Dostęp mam tylko do tego co jest podłączone do większej płytki stykowej (wyprowadzenia gniazd i diody). Mniejsza jest hipotetyczną implementacja sterowania oświetleniem na płycie głównej. Połączenie minusa pomiędzy płytkami jest nie potwierdzone (ale zakładam, że istnieje). Z braku istnienia modelu Diody RGB (wsp.Anoda) w programie użyłem trzech zwykłych na modelu. Napięcie 3v z baterii też jest umowne. Co do doboru rezystorów to jest to zrobione na oko (na razie) chodzi głównie o zasadę działania. Za wszelkie sugestie, pomysły i podpowiedzi będę bardzo wdzięczny. Ps. Niechciał bym używać w projekcie żadnych mikrokontrolerów typu Arduino itp.- 4 odpowiedzi
-
- DIY
- tranzystor
-
(i 2 więcej)
Tagi:
-
Witam serdecznie ponownie, Udało mi się ukończyć poprzedni projekcik - SDK + alarm, więc przyszła kolej na kolejny. Celem projektu jest dobrze znana automatyczna pompa wody, która będzie mierzyć poziom wilgotności gleby. Jeśli chodzi o stronę programowalną to pestka, ale z kolei mam niepewność względem podłączenia. Na schemacie poniżej został stworzony układ w jaki połączyłem elementy, i chciałem zapytać czy jest to poprawne podłączenie, czy nie brakuje tutaj jakiegoś elementu. Na forum gdzieś znalazłem schemat podłączenia, ale była tam zainstalowana pompka bodajże 6V, która zasilało się baterią. Tutaj mam zasilacz 240/12V, 2,5A oraz pompkę 12V z poborem 300 mA więc jest w miarę podobnie. Pomiędzy zasilaczem a przekaźnikiem wstawiłem przełącznik i wpiąłem go do wejścia COM, a przewód zasilający(+) z pompki do NO. Problem mi przysporzyło zrozumienie działania przekaźnika, i jeżeli dobrze rozumiem działa to w ten sposób, że jeżeli obwód przechodzi przez wejście NO, to pompka uruchomi się dopiero wtedy gdy przez przekaźnik poleci napięcie z Arduino(sygnał sterujący), a NC jest to obwód który działa od razu w momencie otrzymania zasilania z sieci(nie wymaga sygnału sterującego). Czy ten wywód jest poprawny? Ponownie mam nadzieję, że temat w dobrym miejscu, Z góry dziękuje za odpowiedzi, pozdrawiam.
- 1 odpowiedź
-
- Arduino
- przekaźnik
- (i 3 więcej)
-
Witam, założyłem wcześniej wątek, o tym. Dziękuję @farmaceuta @ethanak @SOYER i innym za tłumaczenie, o co chodziło z else/if'ami, ale nadal nie wiem, kiedy ich użyć. Czy ktoś dałby mi jakieś przykłady, czy coś innego. Nadal nie wiem, w jakich przypadkach ich użyć. Bardzo proszę o wytłumaczenie.
-
import cv2 import pytesseract import time from pytesseract import Output def extract_license_plate(image_path): image = cv2.imread(image_path) gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) blur = cv2.GaussianBlur(gray, (5, 5), 0) edges = cv2.Canny(blur, 100, 200) contours, hierarchy = cv2.findContours(edges, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) contours = sorted(contours, key=cv2.contourArea, reverse=True)[:10] plate_text = None for contour in contours: peri = cv2.arcLength(contour, True) approx = cv2.approxPolyDP(contour, 0.018 * peri, True) if len(approx) == 4: x, y, w, h = cv2.boundingRect(approx) roi = image[y:y + h, x:x + w] plate_text = pytesseract.image_to_string(roi, config='--psm 8 --oem 3 -c tessedit_char_whitelist=ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789') return ''.join(filter(str.isalnum, plate_text)) return "no text detected" cap=cv2.VideoCapture(0) try: while True: ret, frame = cap.read() if ret: cv2.imwrite('/home/marek/tablica.png',frame) print("Image saved") text = extract_license_plate('/home/marek/tablica.png') else: print("fail") if text is not None: print(f"Extracted Text: {text}") time.sleep(5) except Exception as e: print(f"An error occurred: {e}") finally: cap.release() print("Camera released.") Pracuję nad projektem systemu służącego do automatycznego otwierania bramy, w momencie rozpoznania przez kamerę z Raspberry Pi, numerów tablic rejestracyjnych zapisanych w pliku tekstowym. Jestem dość zielony w jakiekolwiek programy związane z systemami wizyjnymi i mocno posiłkowałem się ChatemGPT 4, wrzuciłem do chatu zdjęcia przypominające docelowy obraz z kamery i kazałem mu pod to napisać program. Program działa prawie idealnie kiedy zczytuje tablice z gotowych zdjęć, jednak gdy zdjęcia pochodzą z kamery i pokazuje przed nią dokładnie to samo zdjęcie tylko wydrukowane, program nie rozpoznaje żadnych znaków. Pytanie gdzie może leżeć problem, czy wpływ na to ma zbyt niska jakość obrazu z kamerki (używam kamery ZeroCam z przejściówka do Raspberry PI 3A+) , potencjalnie zły kąt zdjęcia przed kamerka czy może jakiś błąd w kodzie? Testuje działanie na załączonym obrazku Z góry dziękuje za pomoc, ewentualny namiar do kogoś kto mógłby pomóc :))
- 1 odpowiedź
-
- Początkujący
- Raspberry Pi
-
(i 3 więcej)
Tagi:
-
Dzień dobry. Mam takie zadanko z tranzystorem i trochę nie mam pewności co do rozwiązania. Czy wystarczy policzyć napięcie na R2 za pomocą dzielnika napięcia i wtedy U=5V - UR2? Za wszystkie wskazówki i pomoc z góry dziękuję.