Skocz do zawartości

Przeszukaj forum

Pokazywanie wyników dla tagów 'początkujący'.

  • Szukaj wg tagów

    Wpisz tagi, oddzielając przecinkami.
  • Szukaj wg autora

Typ zawartości


Kategorie forum

  • Elektronika i programowanie
    • Elektronika
    • Arduino i ESP
    • Mikrokontrolery
    • Raspberry Pi
    • Inne komputery jednopłytkowe
    • Układy programowalne
    • Programowanie
    • Zasilanie
  • Artykuły, projekty, DIY
    • Artykuły redakcji (blog)
    • Artykuły użytkowników
    • Projekty - DIY
    • Projekty - DIY roboty
    • Projekty - DIY (mini)
    • Projekty - DIY (początkujący)
    • Projekty - DIY w budowie (worklogi)
    • Wiadomości
  • Pozostałe
    • Oprogramowanie CAD
    • Druk 3D
    • Napędy
    • Mechanika
    • Wydarzenia
    • Sprzedam/Kupię/Zamienię/Praca
    • Inne
  • Ogólne
    • Ogłoszenia organizacyjne
    • Dyskusje o FORBOT.pl
    • Na luzie

Kategorie

  • Quizy o elektronice
  • Quizy do kursu elektroniki I
  • Quizy do kursu elektroniki II
  • Quizy do kursów Arduino
  • Quizy do kursu STM32L4
  • Quizy do pozostałych kursów

Szukaj wyników w...

Znajdź wyniki, które zawierają...


Data utworzenia

  • Rozpocznij

    Koniec


Ostatnia aktualizacja

  • Rozpocznij

    Koniec


Filtruj po ilości...

Data dołączenia

  • Rozpocznij

    Koniec


Grupa


Imię


Strona

  1. Mam bardzo prosty układ z przekaźnikiem (jest to cześć większego pomysłu): Część niskonapięciowa na razie jest zasilana z baterii 9V i stabilizatora LM7805 (później może jakiś akumulatorek i przetwornica step-up). Stabilizator jest odprzęgany na wejściu kondensatorem 470nF a na wyjściu 100nF. Wyjście stabilizatora jest podłączone do wejścia modułu z przekaźnikiem (SRD-05VDC-SL-C) oraz do pinu VSYS Pico. Jeden z pinów Pico steruje przekaźnikiem poprzez tranzystor (będący częścią modułu). Gdy wyjście przekaźnika nie jest nigdzie podłączone wszystko działa prawidłowo (Pico włącza i wyłącza przekaźnik bez problemu), ale gdy podłącze wyjście przekaźnika przy jego włączaniu mikrokontroler się resetuje (wyłączając przy okazji przekaźnik bo domyślnym stanem na początku jest wyłączenie). W momencie włączenia przekaźnika na wyjściu stabilizatora widać coś takiego: Czasem napięcie spada nawet do -2V. Przyczyna wydaje się być jasna stabilizator stara się zareagować na nagły spadek napięcia wywołany przez włączenie przekaźnika. Nie rozumiem tylko dlaczego gdy wyjście przekaźnika nie jest podłączone wszystko działa. Przecież wyjście przekaźnika jest odizolowane galwanicznie i nie powinno wpływać na cześć niskonapięciową? A kluczowym pytaniem jest jak wyeliminować ten problem?
  2. Cześć, Kilka dni temu zrobiłem sobie przełącznik audio. Na wejściu wpinam laptopa oraz komputer, a na wyjściu słuchawki i głośniki. Pomiędzy wejściem a wyjściem mam dwa przełączniki on-off-on 4PDT, pierwszy wybiera wejście (komputer, laptop), a drugi wyjście (słuchawki, głośniki). Ogólnie wszystko działa dobrze, ale przy pierwszym przełączeniu każdego dnia ze słuchawek lub głośników wydobywa się taki głośniejszy trzask. ChatGPT podpowiedział mi, że powinienem albo połączyć wszystkie masy albo połączyć L i R do masy dla stanu wyłączonego wyjściowego przełącznika, ale nie wiem czy mu ufać. Spięcie mas brzmi dość logicznie, ale nie jestem pewien czy masa z laptopa i komputera powinna być wspólna. Co zrobić, żeby nie było strzelania przy przełączaniu? Załączam schemat, nie jest najbardziej profesjonalny ale mam nadzieję, że czytelny. Oraz zdjęcie
  3. Hej, napisałem program, który alokuje tablicę na N osób. Teraz chciałbym to przerobić tak, żeby program miał proste menu (1. Dodaj osobę, 2. Wypisz). Problem mam taki, że nie wiem jak poprawnie użyć realloc, żeby powiększyć tablicę o 1 miejsce przy każdym dodaniu nowej osoby, nie tracąc przy tym starych danych. Czy ktoś mógłby rzucić okiem na kod i podpowiedzieć, jak zmienić funkcję wypelnijListe na taką, która dodaje tylko jedną osobę? #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <math.h> #include <stdlib.h> #include <time.h> #include <string.h> #define OBECNY_ROK 2026 typedef struct { char imie[50]; int rok_urodzenia; } osoba; typedef struct { osoba* adres_tablicy; int N; } listaObecnosci; osoba generujOsobe() { osoba o; printf("Podaj imie studenta: "); scanf("%49s", o.imie); o.rok_urodzenia = rand() % (2020 - 1920 + 1) + 1920; return o; } int wypelnijListe(listaObecnosci* lista) { lista->adres_tablicy = (osoba*)malloc(lista->N * sizeof(osoba)); if (lista->adres_tablicy == NULL) { printf("blad alokacji pamieci\n"); return 0; } for (int i = 0; i < lista->N; i++) { printf("wprowadzenie osoby nr %d\n", i + 1); lista->adres_tablicy[i] = generujOsobe(); } return 1; } void wypiszliste(listaObecnosci lista) { printf("wynki: \n"); for (int i = 0; i < lista.N; i++) { int wiek = OBECNY_ROK - lista.adres_tablicy[i].rok_urodzenia; printf("%s: %d\n", lista.adres_tablicy[i].imie, wiek); } } int main() { srand(time(NULL)); listaObecnosci mojaLista; do { printf("Podaj liczbe osob od 1 do 10: "); scanf("%d", &mojaLista.N); if (mojaLista.N < 1 || mojaLista.N > 10); { printf("bledna liczba\n"); } } while (mojaLista.N < 1 || mojaLista.N > 10); if (wypelnijListe(&mojaLista) == 0) { printf("Blad alokacji pamieci\n"); return 1; } wypiszliste(mojaLista); free(mojaLista.adres_tablicy); mojaLista.adres_tablicy = NULL; return 0; }
  4. Cześć Wraz z żoną jesteśmy na początku pierwszego kursu. Mamy problem już na samym początku poziomu I w punkcie "1.4.1 Jak zmierzyć opór?" Mamy miernik własny, nie ze strony (marki orangjo, zakupiony w Castoramie). W kursie jest napisane, że przy niepołączonych sondach miernik powinien pokazywać 1 jako "nieskończenie duży opór", a spadać do 0 jako "nieskończenie mały opór" kiedy zetknie się sondy. Natomiast w naszym mierniku, kiedy sondy są niezetknięte, na wyświetlaczu wyświetla się 0L (w zależności od skali z przecinkiem w różnych miejscach). Co to oznacza? Po paru próbach udało mi się przy każdej próbie uzyskiwać 0.00 (czy też okolice 0.1 na skali do 200 omów) przy zetknięciu sond, jednak początkowo miernik wyświetlał różne liczby, np 12.2M omów na skali do 200M (nie mogę załączyć zdjęcia z telefonu, wyskakuje mi "Wystąpił błąd podczas przetwarzania przesłanego pliku. -200"). Czy to był po prostu błąd początkującego? Miernik jest zupełnie nowy, rozpakowany dopiero do robienia kursu. Pozdrawiamy
  5. Jak można projektować estetyczne urządzenia? Projekty hobbystów często są robione z tego co jest pod ręką, na zasadzie że "ma działać", a rozwiązania tymczasowe stają się trwałe. To, co zauważyłem, to że z pomocą niewielkiej wiedzy spoza zupełnie innej dziedziny niż elektronika, można projektować urządzenia tak aby wyglądały one wręcz profesjonalne. Pomysł na artykuł wziął się stąd że nie znalazłem do tej pory poradnika który by pokazywał jak się "powinno" projektować obudowy, pisać dokumentację itp. Oczywiście - o gustach się nie dyskutuje - lecz zwykle dąży się do uzyskania produktu takiego, jaki by można kupić ze sklepu. W tym artykule postaram się przybliżyć pewne ogólne zasady i wskazówki, dzięki którym produkt najczęściej wygląda automatycznie "lepiej". Konkretnie, postaram się przybliżyć jak powinno się projektować obudowy urządzeń elektronicznych, a artykuł ten kieruję szczególnie użytkownikom początkującym. Przy odrobinie chęci można stworzyć produkt faktycznie porównywalny z tym sklepowym! Materiały Najpopularniejsze materiały wśród hobbystów to plastik, metal, oraz drewno. Wybór materiału jest ważny i powinien być dokonany we wczesnym etapie projektowania, ponieważ ma to wpływ na samą konstrukcję (ograniczenia technologiczne, założenia samego projektu itp). Drewno Drewno jest chyba teraz najrzadszym wyborem, po wkroczeniu na rynek drukarek 3D. Do odpowiedniej obróbki drewna potrzebne są konkretne narzędzia, oraz miejsce gdzie można to drewno obrobić. Nie każdy sobie na to może pozwolić. Ogólnie, wyróżniłbym dwie metody produkcji: obróbkę manualną surowca, oraz cięcie laserowe sklejki. Pierwsza metoda pozwoli uzyskać czasem bardzo ciekawy wygląd (np. steampunk, stare radia, dzisiejsze wyroby luksusowe). Niestety elementy z laserowo wycinanej sklejki najczęściej są spotykane w tanich zestawach, zabawkach itp. - stąd nie należy się spodziewać bardzo dobrego wyglądu produktu. Drewno powinno się też pokryć warstwą ochronną. Jednak jeżeli ktoś ma laser to warto pokusić się o grawerkę! Zalety: łatwość obróbki (najczęściej), łatwa grawerka, tani materiał Wady: łatwopalność, potrzebne narzędzia i miejsce do obróbki Przykładowy projekt w drewnianej obudowie Metal Myślę że dość wielu hobbystów lekceważy opcję wykonania elementów z metalu, a szczególnie z aluminium. Obudowy wykonane z metalu będą wyglądały "najbliżej" tym ze sklepu, będą wytrzymałe a sposobów na obróbkę jest wiele. Blaszkę aluminiową łatwo można obrobić tzw. dremelem i wygiąć, a jeżeli jest grubsza - można ją nawet nagwintować. Ponadto można pokusić się o sprawdzenie usług obróbki metalu w okolicy, bo wówczas opcji do obróbki jest znacznie więcej: wyginanie prasą, frezowanie, toczenie... Do tego metal można pokryć na wiele sposobów. Pomijając farby i lakiery, warto pomyśleć o usłudze anodowania aluminium jeżeli bardzo nam zależy na wyglądzie. Warstwa anody jest nie tylko ładna i przyjemna w dotyku, ale również twarda (a zatem odporna na ścieranie). Jeżeli do dyspozycji jest laser to już można bawić się na całego, i wykonywać "nadruki" które wyglądają niczym sitodruk. Napisy można jednak wykonać innymi sposobami! Jedną z nich jest dość popularny termotransfer napisów na płytę czołową, i lakierowanie; jeszcze inni wolą nakleić cały kawałek zalaminowanego wydruku. Jeżeli chodzi o dostępność materiału, jest różnie; blacha może pochodzić z recyklingu, można kupić kawałek na popularnym serwisie aukcyjnym, lub może ktoś z rodziny ma jakieś odpadki. Oczywiście można również kupić gotowe obudowy w internecie i dokonać przeróbek pod własną konstrukcję; przykład poniżej. Zalety: łatwa dostępność, wiele sposobów obróbki, wytrzymałość względem rozmiaru/wagi Wady: koszta, potrzebne narzędzia i miejsce, korekta błędów jest utrudniona po wykonaniu obudowy Aluminiowa obudowa z Ali za 40zł, frezowanie, grawerka laserowa, szybka z pleksi. Jedyne co "zdradza" projekt to tanie/standardowe pokrętło oraz elementy z drukarki 3D. Plastik W przypadku plastiku temat jest dość uproszczony dzięki drukarkom 3D. Wcześniej popularne było kupienie gotowej obudowy np. firmy Kradex, wykonanie w niej otworów, przytwierdzeniu naszej elektroniki i ewentualnie zrobienie frontu wedle uznania. Teraz jednak znacznie lepiej jest kupić drukarkę 3D i zaprojektować obudowę konkretnie pod dane urządzenie. Wiąże się to jednak z ograniczeniami - bo podczas modelowania trzeba pamiętać o ograniczeniach technologicznych - oraz tym że wydruk będzie wyglądać z bliska jak... wydruk. Jednak podczas druku np. z ABSu możliwość dalszej obróbki jest duża; tworzywo to można wygładzać mechanicznie, chemicznie, dobrze nadaje się na grawerkę laserową. Co jednak gdy potrzebny jest element przezroczysty? Lub obudowa powinna być duża, i wydruk przestaje się opłacać? Również na popularnym serwisie aukcyjnym są usługi taniego cięcia pleksi, którą można albo wkomponować do wydruku, albo z niej samej zrobić obudowę (bardzo podobnie jak ze sklejki). Połączenia oczywiście najlepiej stosować rozłączne: śruby z insertami, wkręty do plastiku, połączenia kształtowe, a w ostateczności pozostaje zawsze klejenie. Druk 3D jest również świetny do prototypowania, nawet jeżeli docelowo obudowa będzie wykonana z innego materiału. Zalety: niska cena, różnorodność materiałów i kolorów, możliwość dalszej obróbki Wady: pewne ograniczenia technologiczne, charakterystyczny wygląd Dopiero zbliżenie, lub wzięcie produktu do ręki, pokazuje defekty druku 3D Pozostałe opcje Oczywiście powyższe materiały to nie wszystko co jest do dyspozycji; w zasięgu hobbysty są również kompozyty, gięty plastik, spawanie, a nawet glina - jednak myślę że są to już tak specyficzne przypadki że jeżeli Czytelnik wie że takiego materiału potrzebuje, to jest świadomy tego wyboru. Trzeba jeszcze powiedzieć że powoli w Polsce rozwijają się Hackerspace'y, warto sprawdzić czy w pobliżu nie ma jakiegoś! Elementy wzornictwa Samo wykonanie obudowy to jedno, i prawdopodobnie poprzedni akapit był tylko powtórzeniem dla Czytelnika. Jeżeli została podjęta decyzja z czego obudowa będzie wykonana, to trzeba ją teraz zaprojektować. Zastanówmy się zatem nad przykładową obudową. Chyba najprościej jest wyobrazić sobie prostopadłościan. Trzeba zatem określić wymiary tego prostopadłościanu, tak aby montaż był komfortowy ale też aby nie marnowało się za dużo miejsca. Proporcje również odgrywają ważną rolę! Proporcjonalna obudowa powinna być nie tylko funkcjonalna ale i przyjemna dla wzroku; przykładami mogą być telefony które są płaskie i cienkie (smartfony), wąskie i grube (starsze telefony), tablety (charakterystyczne proporcje ekranu względem smartfonów). Widok telefonu nienaturalnie wąskiego, grubego bądź szerokiego jest cóż, nienaturalny. Jak te proporcje można dobrać? Pomijając intuicję, są ogólne zasady które zaraz będą przedstawione. Po dobraniu gabarytów obudowy można zastanowić się nad płytą czołową. Jest to miejsce gdzie prawdopodobnie będą osadzone kontrolki, przyciski, złącza, cokolwiek nasz projekt potrzebuje. Te również trzeba rozmieścić z pewnym porządkiem, tak aby korzystanie ze sprzętu było możliwie komfortowe, a sprzęt wyglądał tak abyśmy sami chcieli zaprosić sąsiada i się pochwalić. Dobrym sposobem tutaj jest podzielenie powierzchni siatką na równe części - a kontrolki rozmieścić w punkty przecięcia tej siatki. Nie musi być ona globalna (na całą powierzchnię), ważne jest aby zachować marginesy a konkretne kontrolki pogrupować (np. przyciski z jednej strony, złącza z drugiej). Warto pomyśleć czy korzystanie z wymyślonego przez nas projektu będzie dobre - np. umieszczenie ekranu na dole a przycisków na górze, powodowałoby że ręką zasłonięta będzie treść ekranu podczas klikania. Przykład: miernik 34410A ma elementy pogrupowane zgodnie z ich funkcją: już na pierwszy rzut oka można wizualnie rozróżnić trzy sekcje. Poszczególne elementy są rozmiszczone w siatce, z czego klawiatura jest mniej-więcej wyśrodkowana względem wyświetlacza. Sam wyświetlacz również nie zajmuje ani za dużo, ani za mało miejsca względem przycisków; sprawia to wrażenie urządzenia kompaktowego, a jednak nie miniaturowego. Niektórzy również są fanami wklejania spirali Fibonacciego tam gdzie tylko można, więc uznałem że i tutaj można się doszukać pewnego wzoru. A już szczególnie jest ona obecna w iPodzie: Co jednak gdyby się takiego "klasycznego" podejścia nie trzymać? Bardzo interesujący jest design produktów firmy Rigol: W porównaniu do poprzedniego urządzenia, tutaj można zadać bardzo wiele pytań. Co się stało z klawiaturą, czy to jest telefon? Dlaczego wyświetlacz jest taki czerwony? Czy to moda na retro? Dlaczego jeden przycisk jest poza główną sekcją a na siłę włączony do sekcji wyświetlacza, dlaczego po lewej stronie złącz jest celowa nieregularność w nadruku? Myślę że odpowiedzenie sobie samemu na takie pytania jest dobrym ćwiczeniem, czy jak kto woli, gimnastyką umysłową. Zanim jednak przejdziemy dalej, warto poświęcić chwilę czasu na przemyślenie jak obrobione mają zostać krawędzie. Opcji ponownie jest wiele, jednak najczęściej się je pozostawia ostre, sfazowane (ścięte pod kątem 45 stopni) lub zaokrąglone. Nie warto pozostawiać ostrych krawędzi jako że te niszczą się bardzo szybko i są nieprzyjemne w dotyku. Jeżeli mamy do czynienia z drukiem 3D, polecam zastosować minimalne promienie na krawędzie zewnętrzne (R1-R3) a na wewnętrzne takie jak ramki wyświetlaczy, przycisków itd - fazki. Najczęstszy błąd, i to taki że zasługuje na osobny paragraf, to zostawianie odsłoniętych ramek wyświetlacza. Dość wielu hobbystów lubi je pokazywać, podczas kiedy wszystkie urządzenia jakie można kupić komercyjnie pokazują tylko sam ekran! Ogólnie, jeżeli już mowa o estetyce, można zainspirować się sztuką i fotografią. W końcu wzornictwo przemysłowe to osobna dziedzina sztuki! Tak też można próbować zastosować zasadę trójpodziału (rule of thirds) i sugerować się taką uproszczoną siatką. Marginesy od krawędzi może z kolei zastosować ze złotą proporcją? Zasady te można stosować również przy pisaniu dokumentacji (do czego gorąco zachęcam) czy nawet materiałów "promocyjnych"! Całkiem dobrym wprowadzaniem do tematu jest ten krótki artykuł. A co jeżeli potrzebne są również kolory? Z pomocą przychodzi teoria kolorów; i te najprostsze zasady dobrze jest zapamiętać wizualnie. Kolor jaki widzimy można dzielić na wiele różnych sposobów (RGB, CMYK, HSL itp) jednak pewne zależności dobrze będzie przedstawić modelem HSV, czyli Hue, Saturation i Value. Po polsku powiemy że składowe światła to odcień, nasycenie i jasność. Na palecie kolorów tak będzie się to prezentować: Odcień (kolor) wybieramy wprost z koła kolorów. Nasycenie przechodzi od najbardziej nasyconego, do najmniej nasyconego (wówczas operujemy na przeciwległej krawędzi, w skali szarości). Podobnie jest z jasnością. Prowadzi to do bardzo ciekawych wniosków. Po lewej obrazek jest w skali szarości, a zatem wycinamy barwę (hue) oraz nasycenie (saturation). Obrazek po prawej co prawda ma już barwy, jednak wszystkie piksele są jednakowo jasne. Oznacza to, że w grafice najważniejsza jest jasność! Inny przykład wzięty z życia: Specjalnie zdjęcie to najpierw pokazałem w skali szarości. Okazuje się że zdjęcie jest "płaskie" pod względem jasności, i wizualnie wszystkie segmenty, nawet zapalone, są jednakowo "jasne". Zatem nawet pokolorowane, dalej trudno jest odczytać cyfry, choć odrobinę łatwiej (i jest to zdjęcie źródłowe): Aby uniknąć czegoś takiego nie tylko podczas projektowania ale i wykonywania dokumentacji (czyli po prostu zdjęć), polecam poniższy poradnik: Nawet jeżeli zdjęcia nie wyjdą idealne, z wiedzą z powyższego filmu spokojnie można spróbować samodzielnie skorygować kolory w zdjęciu tak aby wszystko było wyraźne i ładne: A jak samemu dobierać kolory, np. do projektu? Zasad jest kilka. Produkt może mieć stylistykę monochromatyczną - to jest, jeden kolor motywu, a pozostałe to jego odcienie. Przykładem mogą być laptopy serii ThinkPad - całe czarne, ale z czerwonymi akcentami. Następnie możemy dobierać kolory w pary. Patrząc się ponownie na koło, możemy je wybierać na dwa sposoby: Pierwszym sposobem jest dobranie kolorów komplementarnych. Są to kolory "naprzeciw siebie" na kole odcieni. Tak też czerwony się komponuje z niebieskim, fioletowy z zielonym, itd. Logo Firefoxa ma niebieskie i pomarańczowe kolory. Drugim sposobem jest wzięcie sąsiedniego koloru - dla czerwonego będzie to albo żółty (np. logo Shell) bądź różowego. Kolejnym krokiem jest wzięcie trzech kolorów: Są to tzw. triady, i wybiera się je łącząc poprzednie metody - wybieramy parę komplementarną, i sąsiada jednego z wybranych kolorów. Najpopularniejsze kombinacje to błękitny-czerwony-żółty (Burger King) bądź fioletowy-niebieski-zielony (Fanta). Jeden z kolorów powinien być głównym, drugi pomocniczy, a trzeci robić akcenty. Mimo że najczęściej urządzenia nie są tak kolorowe, warto mieć taką wiedzę z tyłu głowy. Kolejną ważną rzeczą są czcionki. Przez wielu projektantów jest to sprawa bagatelizowana, bądź robiona "na czuja" i przez to wychodzą takie rzeczy jak Comic Sans MS w sprzęcie medycznym, czy Times New Roman w zabawkach dla dzieci. Czcionka potrafi przekazać pewne emocje sobą. Oczywiście czcionkę należy zatem dobrać do projektu, więc i tutaj są pewne metody i sztuczki. Przede wszystkim należy unikać domyślnej czcionki - Arial (czasem Calibri) - aby pozbyć się efektu "ktoś zapomniał zmienić czcionki". Arial to czcionka która została stworzona jako klon czcionki Helvetica. Ta ostatnia była była często łączona z Paneuropą; szczególnie wiele starych polskich urządzeń używało tych czcionek. Wciąż przynoszą one neutralny, jednak porządny, elegancki wygląd. Helvetica dalej jest domyślna na urządzeniach firmy Apple. Bardzo dobrą czcionką która obecnie jest dołączana do systemu Windows jest Bahnschrift (stworzona na podstawie DIN1451), czcionka używana m. in. w znakach drogowych, grach studia Valve, i jak nazwa wskazuje - w kolejnictwie. Co jednak gdy potrzebna jest czcionka o bardzo konkretnym wyglądzie? Jest wiele stron oferujących darmowe czcionki jak Google Fonts czy Adobe Fonts, gdzie wiele czcionek można przetestować i następnie pobrać. Podczas projektowania urządzeń proponuję sprawdzić czy czcionka Helvetica Bold się nada (lub Bahnschrift), ze zmniejszonym odstępem między literami. Traci się niewiele na czytelności, a zyskuje wiele miejsca. Oczywiście zaproponowane czcionki też nie sprawdzą się w każdym przypadku, powiedziałbym nawet że Segoe UI może być przyjemniejsze w czytaniu długiego tekstu niż Helvetica. Jeżeli ktoś kiedyś próbował rozróżnić czcionkę Arial od Helvetici, prawdopodobnie 2 czy 3 logotypy wyglądają lepiej napisane Arialem. Co więcej, można się kłócić że Comic Sans MS może być używany w sprzęcie medycznym jako że jest to czcionka dobra dla dyslektyków. Niestety w medycynie częściej są używane czcionki pokroju Calibri czy Frutiger (to właśnie od nazwy tej czcionki wzięło się pojęcie Frutiger Aero). Inspiracje Żyjemy w takich czasach że już bardzo dużo wymyślono, i wymyślić coś nowego jest trudno. Stąd też inspirowanie się - czyli nie kopiowanie, a parafrazowanie - jest nie tylko złe, ale nawet wskazane! Jako ludzie bez doświadczenia w projektowaniu należy posiłkować się wzorem. Zatem jeżeli np. podoba mi się wygląd wzmacniacza w pokoju, nie ma problemu abym zrobił coś w podobnym stylu. Jeszcze raz powtórzę: jeżeli chcemy zrobić dobry produkt, najlepiej jest się wzorować na czymś co jest udane. Skoro wiadomo już z czego i jak wykonać nasz projekt, pozostało omówić jakich narzędzi użyć. To już zależy czysto od preferencji Czytelnika, i czasem budżetu, jednak do popularnych programów należą: - Fusion 360 od autodeska, ewentualnie OnShape do modelowania, ostatecznie FreeCAD - Inkscape (otwartoźródłowy) i CorelDraw do grafiki - GIMP (^), Krita (^), Photoshop do obróbki grafiki - Scribus (^) i InDesign od Adobe do broszurek - być może LaTeX, Word do pisania krótkiej dokumentacji? Jednak zalecam aby te pierwsze kroki, kiedy trzeba sobie wyobrazić najogólniejszy zarys przedmiotu, zrealizować na kartce. Wbrew pozorom daje to największą swobodę myślenia. I oczywiście sam ekspertem w tej dziedzinie jestem żadnym, chciałem jednak przybliżyć chociaż odrobinę tego tematu osobom które mają zapał i chęci na tworzenie własnych wynalazków. Stąd też ten artykuł jest luźnym zestawieniem uniwersalnych porad i sztuczek jakie można stosować w projektach. Powodzenia! Chciałbym szczególnie podziękować panu Salamonowi za ten artykuł, który mnie samego zainspirował lata temu do zgłębienia tego tematu. Źródła: https://simplifier.neocities.org/materials https://simplifier.neocities.org/edges https://www.youtube.com/@YTartschool Zdjęcia: https://www.proshop.pl/Images/1600x1200/2789301_25c8ddda0b3e.jpg (zdjęcie Switch Lite) https://www.reddit.com/r/raspberry_pi/comments/1btju9b/internet_kitchen_radio_i_built_using_moode_audio (zdjęcie drewnianej obudowy) https://www.sglabs.it/public/SgLabs_HP Agilent 34410A_1.jpg (zdjęcie 34410A) https://rigol.com.pl/environment/cache/images/productGfx_c6969dbf60d651666379c09404b5ed89_0_0.jpg (Rigol) https://msalamon.pl/nigdy-nie-rob-tak-z-wyswietlaczem/ (wyświetlacz z ramką) https://botland.com.pl/produkty-wycofane/903-ladowarka-li-pol-z-balanserem-redox-alpha-v2-zasilacz.html (Redox) https://content.instructables.com/F0O/EGPF/GO8DCAIF/F0OEGPFGO8DCAIF.jpg?auto=webp (wyświetlacz 7 seg) https://en.wikipedia.org/wiki/Comic_Sans#Defense (defibrylator) https://en.wikipedia.org/wiki/Frutiger_(typeface) https://m.media-amazon.com/images/I/61NJL4nUpwL.jpg (ipod) https://www.deviantart.com/practiceimagination/art/The-FASTEST-way-to-get-better-Tutorial-929107002 (tygrysy)
  6. Witam, właśnie ukończyłem mój projekt "Pochlaniacza" oparów lutowniczych , którego sercem jest płytka ESP32 . Spis elementów : Esp32 Mosfet logic-level Diody schotkyego Wentylator 12V Dioda led Moduł dźwiękowy arduino Wysiwetlacz OLED 128x64 2x przetwornica step up 2A 3x ogniwa 18650 Moduł ladowania TP4056 Na początek kilka słów o samym projekcie, jest to odpowiedź na nieustający problem oparow lutowniczych kumulujących się w niedużym garażu . Które po dłuższej sesji lutowania zaczęły naprawdę przeszkadzać w pracy , przy lutowaniu zazwyczaj obie ręce są zajęte z tąd pomysl na użycie czujnika dźwięku, reagującego na każde głośniejsze słowo. Parę bajerów w stylu wyświetlacza z animacja oraz diody sygnalizujacej podanie napięcia na bramkę tranzystora to jedynie środki stylistyczne . Dalej przechodząc do Budowy , zaczynając od sekcji zasilania 3 akumlatory 18650 zgrzane równolegle zabezpieczone przed nadmiernym rozładowaniem <2.5V z wyjścia układu zabezpieczającego TP , (który nie obsłuży dużych obciążeń jednak takie do 1A bez problemu znosi) więc z jego wyjść ( OUT ) podłączona jest reszta elementów przetwornica step up ustawiona na 5V zasilająca ESP z kabla typu C, Wyswietlacz OLED , oraz Czujnik dźwięku wszystkie masy elementów są polaczane na dodatnich wejściach przetwornic [5V,12V] są dane diody schotkyego w kierunku przewodzenia względem przetwornic w celu zapobiegniecia "cofniecia sie pradu" . ESP otrzymując sygnał z wyjścia out czujnika dźwięku podaje napiecie na bramkę tranzystora Mosfet która w pełni się otwiera dzieki użyciu tranzystora logic level o niskim napięciu przewodzenia bramki źródło zostało podpięte do masy przetwornicy step up 12V dren prosto do minusa wentylatora , między plusem a minusem wentylatora dioda schotykego pełniącą rolę diody flyback wszystko zostało zamknięte w obudowie hermetyczej 120x120x90mm czyli o wymiarach wentylatora który idealnie pasuje oraz filtra węglowego o tych samych rozmiarach wentylator zasysa dym i wypuszcza go w filtr weglowy który momentalnie pochłania cały dym , obudowa może nie jest zbyt estetyczna jednak spełnia swoje działanie i nie mam wobec niej większych wymagań. Pozdrawiam i czekam na opinie , i uwagi .
  7. Jednym z głównych problemów przesyłu energii elektrycznej są problemy związane z rezystancją materiałów. Straty energetyczne przy jednoczesnym wydzielaniu się ciepła stanowią istotny problem. Z tego powodu nauka poszukuje nowych rozwiązań, które pozwolą na eliminację lub przynajmniej minimalizację tych strat. Jednym z najważniejszych odkryć w tej dziedzinie jest zjawisko nadprzewodnictwa, które pozwala na praktycznie całkowity zanik oporu elektrycznego w określonych warunkach. Nadprzewodniki, dzięki swojej zdolności do przewodzenia prądu bez żadnych strat energii, oferują potencjalnie rewolucyjne rozwiązanie w wielu dziedzinach, od energetyki po technologie informacyjne. Czym więc są nadprzewodniki i gdzie mogą znaleźć zastosowanie? W tym artykule przedstawię Ci: Czym są nadprzewodniki i jakie są ich właściwości? Historię nadprzewodnictwa. Odkrycie pierwszego nadprzewodnika. Teorię działania zjawiska nadprzewodnictwa. Efekt Meissnera. Zastosowania nadprzewodników. Nadprzewodniki wykazują niezwykle ciekawe zjawiska, takie jak efekt Meissnera. Źródło zdjęcia. Czym są nadprzewodniki i jakie są ich właściwości? Nadprzewodnikiem nazywamy materiał, który w odpowiednich warunkach (np. przy niskiej temperaturze i odpowiednim ciśnieniu) charakteryzuje się praktycznie zerową rezystancją. Oznacza to, że może przewodzić prąd bez żadnych strat. Jest to efekt kwantowy, który ujawnia się w skali makroskopowej i wynika ze zbiorowego zachowania elektronów w materiale. Nadprzewodnictwo może występować w różnych materiałach. Nadprzewodnictwem mogą charakteryzować się również dielektryki! Aby dany materiał wszedł w stan nadprzewodzący, musi zostać schłodzony poniżej swojej charakterystycznej temperatury krytycznej oraz poddany pewnemu ciśnieniu. W tych warunkach zachodzą głębokie zmiany we właściwościach fizycznych materiału - opór elektryczny spada praktycznie do zera, a z wnętrza materiału wypierane jest zewnętrzne pole magnetyczne. To wypieranie wiąże się z efektem Meissnera, które objawia się lewitacją magnetyczną nadprzewodnika nad magnesem. Nadprzewodnictwo wiąże się z efektem Meissnera. Obraz wygenerowany przez ChatGPT. Historia nadprzewodnictwa. Odkrycie pierwszego nadprzewodnika Pierwsze skroplenia tlenu dokonane przez Louis Paula Cailleteta przyczyniły się do skroplenia helu w 1908 roku. Tego zabiegu dokonał naukowiec Heike Kamerlingh Onnes. Był to fundamentalny krok w dziedzinie badań nad materiałami w ekstremalnie niskich temperaturach. Heike Kamerlingh Onnes (po prawej) i Gerrit Flim, jego główny technik, przy skraplaczu helu. Źródło zdjęcia. Z naukowego punktu widzenia powodem, dlaczego w tym czasie prężnie badano materiały w ekstremalnie niskich temperaturach, były teorie wysnute przez Paula Drude, które mówiły, że przy obniżaniu temperatury liniowo będzie spadała rezystancja. Z drugiej strony William Thomson (zwany Lordem Kelvinem) twierdził, że elektrony zostaną zamrożone i w tym wypadku rezystancja będzie nieskończona. Zespół Onnesa badał płytki złota i platyny o różnych czystościach. Podczas badań zauważono, że im czystszy był materiał, tym mniejszą rezystancję on osiągał przy obniżaniu temperatury. W pewnym momencie następowała stała rezystancja powodowana nieczystościami materiału. To obalało przytoczoną teorię Kelvina. Do kolejnych eksperymentów wybrano rtęć ze względu na wysoką czystość materiału po wykonaniu procesu destylacji. 8 kwietnia 1911 celem przeprowadzonego eksperymentu było przetestowanie systemu transferu dla ciekłego helu. Zespół pod przewodnictwem Kamerlingha Onnesa i Gerrita Jana Flima rozpoczął badania. Do pomiaru rezystancji rtęciowego przewodu użyto mostka elektrycznego oraz galwanometru lustrzanego. Interesującą obserwacją był spadek rezystancji rtęci do zera poniżej temperatury 4.2 K. Zależność rezystancji od temperatury dla różnych materiałów, w tym dla rtęci (Hg). Źródło zdjęcia. Notatki HKO. Zależność rezystancji od temperatury przewodu z rtęci. W okolicach 4.2 K widać nagły spadek rezystancji. Zgodnie z wykresem poniżej 4.2 K rezystancja wynosi 10-5 Ω. Źródło zdjęcia. Notatki HKO. Strona notatnika Onnesa. Po prawej zaznaczony fragment mówiący Rtęć praktycznie zero. Oczywiście chodzi o jej praktycznie zerową rezystancję. Źródło zdjęcia. Za swoje osiągnięcia w dziedzinie badań nad materiałami w niskich temperaturach Heike Kamerlingh Onnes otrzymał w 1913 roku Nagrodę Nobla. Od tego momentu badania nad nadprzewodnikami wzrosły. Ostatecznym celem tych badań jest odkrycie nadprzewodnika, który wykazuje właściwości nadprzewodnicze w temperaturze pokojowej i przy naturalnym ciśnieniu. Oczywiście jeszcze tego nie dokonano. Niemniej wciąż odkrywa się materiały, które charakteryzują się nadprzewodnictwem w coraz to wyższych temperaturach. Rok odkrycia materiału w funkcji jego krytycznej temperatury. Z wykresu wynika, że na przestrzeni lat odkryto wiele materiałów nadprzewodnikowych. Źródło zdjęcia. W sierpniu 2018 roku osiągnięto nadprzewodnictwo w 215 K, a w grudniu w 250 K. W marcu 2019 rekord wynosił już 280 K. ~ Źródło cytatu. Warto tutaj wspomnieć o jednej z kategorii nadprzewodników, jakimi są nadprzewodniki wysokotemperaturowe. Nie wdając się w szczegóły, są to materiały, których temperatura krytyczna wynosi powyżej 30 K (−243.15 °C) i są dużą nadzieją na wykrycie nadprzewodnika w temperaturze około pokojowej. Nadprzewodnikami nie muszą być tylko przewodniki. Pierwszym odkrytym nadprzewodnikiem wysokotemperaturowym był materiał, który w normalnych warunkach był izolatorem. Teoria działania zjawiska nadprzewodnictwa Nie istnieje jedna, uniwersalna teoria, dlaczego nadprzewodnictwo występuje w naturze. Teoria opisująca klasyczne nadprzewodniki (np. rtęć) nie sprawdza się dla nadprzewodników wysokotemperaturowych lub bardziej egzotycznych. W tym artykule spróbuję przedstawić Ci teorię BCS. Ominę aspekty matematyczne i skupię się na przedstawieniu teorii w jak najprostszy sposób. Teoria BCS to teoria sformułowana przez 3 naukowców. Są nimi: John Bardeen (wynalazca tranzystora). Leon Cooper. John Robert Schrieffer. Nazwa teorii bierze się od pierwszych liter nazwisk naukowców. W 1972 roku autorzy tej teorii otrzymali Nagrodę Nobla za jej sformułowanie. Podkreślam jeszcze raz, że to tylko teoria! Nie jest to uniwersalne wyjaśnienie tego zjawiska. Twórcy teorii BCS. Od lewej: Bardeen, Cooper, Schrieffer. Źródło zdjęcia. W naturze wyróżnia się dwa typy cząstek: bozony i fermiony. Fermiony nie mogą znajdować się na tym samym stanie energetycznym. Jest to między innymi elektron. Fermiony charakteryzują się niecałkowitym spinem. Bozony to cząstki elementarne, które lubią być razem. W przeciwieństwie do innych cząstek bozony mogą zajmować to samo miejsce i stan energetyczny w tym samym czasie. Na przykład kilka bozonów może zajmować ten sam poziom energetyczny. Posiadają spin całkowity. Zestawienie fermionów i bozonów. Źródło zdjęcia. Intuicja podpowiada, że dwa elektrony będące fermionami i mający ujemny ładunek, powinny się odpychać elektrostatycznie. Jednak w nadprzewodnikach, przy odpowiednich warunkach, pojawia się zjawisko, które pozwala im się łączyć w tzw. pary Coopera. Pary Coopera powstają dzięki oddziaływaniu elektronów z siecią krystaliczną. Elektron przechodząc przez sieć krystaliczną jonów dodatnich (np. w metalu), przyciąga je do siebie, lekko deformując sieć. Ta deformacja powoduje chwilowy nadmiar ładunku dodatniego w tym miejscu. Drugi elektron z przeciwnym spinem jest przyciągany do tej deformacji. W efekcie dwa elektrony są pośrednio przyciągane do siebie przez sieć krystaliczną. Drugi elektron powoduje przesunięcie jonów w przeciwnym kierunku, dzięki czemu sieć wraca do równowagi. Oddziaływanie fononowe, czyli pośrednie przyciąganie elektronów przez deformację sieci krystalicznej, jest stosunkowo słabe. Jednak w bardzo niskich temperaturach (bliskich zeru bezwzględnemu), gdy zanikają zakłócenia termiczne, może ono przeważyć nad naturalnym odpychaniem elektrostatycznym między elektronami. Model sieci krystalicznej. Źródło zdjęcia. Kiedy dwa elektrony o przeciwnych spinach łączą się w parę Coopera, ich całkowity spin wynosi 0. Dzięki temu zerowemu spinowi dwa fermiony zachowują się jak bozon. Wiele bozonów na jednym poziomie kwantowym opisuje się jako jedna całość, a nie jako pojedyncze cząstki. Pary Coopera również tworzą taki stan, który jest formalnie analogiczny do kondensatu Bosego-Einsteina. Oznacza to, że wszystkie pary Coopera mogą poruszać się wspólnie i synchronicznie. To kolektywne zachowanie oraz równoczesne przyciąganie i oddalanie dodatnich ładunków sprawia, że elektrony połączone w pary Coopera nie oddziałują indywidualnie z defektami sieci krystalicznej, drganiami termicznymi, czy innymi zakłóceniami w materiale, które normalnie powodują opór elektryczny. W typowym przewodniku pojedyncze elektrony są rozpraszane na takich przeszkodach, co prowadzi do strat energii i objawia się jako rezystancja. W nadprzewodniku natomiast, dzięki istnieniu par Coopera, ten mechanizm rozpraszania zostaje skutecznie wyeliminowany. Opór wynosi zero. Opis może wydawać się skomplikowany, dlatego poniżej znajduje się wyjaśnienie tego zjawiska w postaci listy punktowanej: Materiał jest schładzany do niskiej temperatury, aby wzmocnić połączenia elektronowe. Pierwszy elektron zaczyna przemieszczać się przyciągając jony dodatnie. Drugi elektron widzi tę deformację i przez lokalne większe skupienie ładunków dodatnich jest przyciągany do obszaru deformacji. Elektrony łączą się w parę Coopera. Ich całkowity spin wynosi 0, więc są bozonami. Bozony opisywane są jako jedna całość, więc te 2 elektrony działają wspólnie w tym samym czasie. Opór zanika przez brak zderzeń między elektronami a dodatnimi jonami. To efekt kolektywnego ruchu całej chmury par Coopera. Wizualizacja działania pary Coopera. Źródło zdjęcia. Efekt Meissnera Interesującym zjawiskiem (oraz najbardziej efektownym), które jest nieodłącznie związane z nadprzewodnikami jest Efekt Meissnera. W normalnych warunkach zewnętrzne pole magnetyczne wnika do przewodnika. Jeżeli materiał nadprzewodnikowy obniżymy poniżej temperatury krytycznej oraz zadziałamy na niego zewnętrznym polem magnetycznym, to pole magnetyczne będzie wypychane z nadprzewodnika. Powodem jest indukowanie się prądu w wierzchniej warstwie materiału, które kompensuje zewnętrzne pole magnetyczne. Skutkiem jest lewitacja magnetyczna. Nadprzewodnik jest uwięziony w liniach zewnętrznego pola magnetycznego, dlatego pozostaje on w jednym miejscu w przestrzeni. Warto wspomnieć, że przy odpowiednio silnym polu magnetycznym nadprzewodnik traci swoje właściwości nadprzewodnicze! Wizualizacja działania Efektu Meissnera. Po lewej nadprzewodnik o temperaturze większej niż temperatura krytyczna. Po lewej o temperaturze mniejszej niż krytyczna. Skutkiem jest wypychanie pola magnetycznego z materiału. Źródło zdjęcia. Zastosowania nadprzewodników Nadprzewodniki, dzięki swoim wyjątkowym właściwościom fizycznym, znajdują potencjalne zastosowanie w wielu dziedzinach nauki i technologii. Ich rosnące znaczenie wynika z możliwości, jakie oferują w zakresie nowoczesnych rozwiązań inżynieryjnych i przemysłowych. Jeszcze nie znamy wszystkich możliwych zastosowań nadprzewodników, ponieważ ich pełny potencjał ograniczają trudne warunki pracy. Wymagania te wiążą się z wysokimi kosztami i wyzwaniami technologicznymi, które obecnie ograniczają ich szersze zastosowanie. 1. Kable i przewody nadprzewodnikowe W odpowiedzi na rosnące zapotrzebowanie na wydajny przesył energii coraz większe znaczenie zyskują kriokable nadprzewodnikowe, zwłaszcza te wykonane z wysokotemperaturowych materiałów nadprzewodnikowych. Umożliwiają one przesył prądu elektrycznego przy minimalnych stratach mocy. To rozwiązanie szczególnie dobrze sprawdzałoby się w gęsto zabudowanych obszarach miejskich, gdzie przestrzeń dla infrastruktury energetycznej jest mocno ograniczona. Model kriokabla z wysokonapięciowymi doprowadzeniami prądowymi. Źródło zdjęcia. Takie przewody charakteryzują się bardzo małym przekrojem. Takie rozwiązania były już implementowane. 2. Kolej i pociągi nadprzewodnikowe Zastosowanie nadprzewodników pozwala na wytworzenie silnego i stabilnego pola magnetycznego, dzięki czemu możliwa jest bezoporowa lewitacja i poruszanie się z bardzo dużą prędkością. Brak tarcia sprawia, że takie pociągi są wyjątkowo ciche, co czyni je atrakcyjną alternatywą dla tradycyjnych środków transportu naziemnego. Budowa pociągu Maglev wykorzystującego nadprzewodniki. Źródło zdjęcia. 3. Kriotron – element przełączający Wykorzystując zmiany zewnętrznego pola magnetycznego, można nadprzewodnik włączać i wyłączać. Jest to sposób na stworzenie ultra szybkiego elementu przełączającego. Taki element jest nazywany kriotronem. Kriotron. Źródło zdjęcia. Kriotron jest ogromną nadzieją na stworzenie w pełni funkcjonalnego ultraszybkiego komputera. Podsumowanie Nadprzewodniki to wielka nadzieja dla współczesnej energetyki i technologii. Brak strat przy przesyle energii elektrycznej, lewitujące pociągi lub super szybkie elementy przełączające to tylko niektóre z obszernej gamy potencjalnych zastosowań nadprzewodników, których nie zdążyłem omówić w tym artykule. Przed nami wiele odkryć, biorąc pod uwagę, że badania nad tymi materiałami wciąż trwają. Mimo wielu postępów dokładny mechanizm nadprzewodnictwa wciąż nie jest w pełni poznany. Miejmy nadzieję, że szybko się to zmieni.
  8. 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!
  9. 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.
  10. 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.
  11. 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.
  12. 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.
  13. 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.
  14. 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.
  15. 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.
  16. 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
  17. 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.
  18. 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!
  19. 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.
  20. 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ę!
  21. 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!
  22. Dzień dobry, jak zasilić Arduino bateriami? Z góry dziękuję za odpowiedzi!
  23. 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ź.
  24. 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ź
  25. Dzień dobry, czy wie ktoś jak używać kalkulatora szerokości ścieżek na płytce drukowanej? Z góry dziękuję za odpowiedzi!
×
×
  • Utwórz nowe...