Spisu treści:

Robot Butter: robot Arduino z kryzysem egzystencjalnym: 6 kroków (ze zdjęciami)
Robot Butter: robot Arduino z kryzysem egzystencjalnym: 6 kroków (ze zdjęciami)

Wideo: Robot Butter: robot Arduino z kryzysem egzystencjalnym: 6 kroków (ze zdjęciami)

Wideo: Robot Butter: robot Arduino z kryzysem egzystencjalnym: 6 kroków (ze zdjęciami)
Wideo: Pass the butter robot from Rick and Morty 2024, Lipiec
Anonim
Image
Image

Ten projekt oparty jest na serialu animowanym „Rick and Morty”. W jednym z odcinków Rick tworzy robota, którego jedynym celem jest przynoszenie masła. Jako studenci z Bruface (Wydział Inżynierii w Brukseli) mamy zlecenie na projekt mechatroniczny polegający na zbudowaniu robota na podstawie zaproponowanego tematu. Zadanie dla tego projektu to: Zrób robota, który serwuje tylko masło. Może mieć kryzys egzystencjalny. Oczywiście robot w odcinku Rick and Morty to dość skomplikowany robot i trzeba wprowadzić pewne uproszczenia:

Ponieważ jedynym celem jest przynoszenie masła, istnieją prostsze alternatywy. Zamiast sprawiać, by robot wyglądał i chwytał masło, zanim przyniesie je odpowiedniej osobie, robot może cały czas nosić masło. Główną ideą jest więc stworzenie wózka, który transportuje masło tam, gdzie ma być.

Oprócz transportu masła robot musi wiedzieć, gdzie ma przynieść masło. W odcinku Rick używa swojego głosu, aby wezwać i rozkazać robotowi. Wymaga to drogiego systemu rozpoznawania głosu i byłoby zbyt skomplikowane. Zamiast tego, każdy przy stole dostaje przycisk: gdy ten przycisk jest aktywowany, robot może go zlokalizować i podejść do niego.

Podsumowując, robot musi spełniać następujące wymagania:

  • Musi być bezpieczny: musi omijać przeszkody i zapobiegać upadkowi stołu;
  • Robot musi być mały: przestrzeń na stole jest ograniczona i nikt nie chciałby robota, który serwuje masło, ale jest o połowę mniejszy od samego stołu;
  • Praca robota nie może zależeć od wielkości lub kształtu stołu, dzięki czemu może być używany na różnych stołach;
  • Musi przynieść masło odpowiedniej osobie przy stole.

Krok 1: Główna koncepcja

Wyżej wymienione wymagania można spełnić różnymi technikami. W tym kroku wyjaśniono decyzje dotyczące głównego projektu, które zostały podjęte. Szczegóły dotyczące wdrażania tych pomysłów można znaleźć w poniższych krokach.

Aby wykonać swój obowiązek, robot musi się poruszać, aż do celu. Biorąc pod uwagę zastosowanie robota, oczywiste jest, że użycie kół zamiast ruchu „kroczącego” lepiej sprawić, by się poruszał. Ponieważ stół jest płaską powierzchnią, a robot nie osiąga bardzo dużych prędkości, dwa napędzane koła i jedna kulka samonastawna to najprostsze i najłatwiejsze do kontrolowania rozwiązanie. Uruchamiane koła muszą być napędzane dwoma silnikami. Silniki muszą mieć duży moment obrotowy, ale nie muszą osiągać dużej prędkości, dlatego zostaną zastosowane serwosilniki ciągłe. Kolejną zaletą serwosilników jest prostota obsługi z Arduino.

Wykrywanie przeszkód może odbywać się za pomocą czujnika ultradźwiękowego mierzącego odległość, przymocowanego do serwomotoru, który wybiera kierunek pomiaru. Krawędzie można wykryć za pomocą czujników LDR. Korzystanie z czujników LDR będzie wymagało zbudowania urządzenia, które zawiera zarówno światło led, jak i czujnik LDR. Czujnik LDR mierzy odbite światło i może być postrzegany jako swego rodzaju czujnik odległości. Ta sama zasada obowiązuje w przypadku światła podczerwonego. Istnieją czujniki zbliżeniowe na podczerwień, które mają wyjście cyfrowe: blisko lub nie blisko. Właśnie tego potrzebuje robot, aby wykryć krawędzie. Łącząc 2 czujniki krawędziowe umieszczone jak dwie anteny owadów i jeden aktywowany czujnik ultradźwiękowy, robot powinien być w stanie omijać przeszkody i krawędzie.

Wykrywanie przycisku można również zrealizować za pomocą czujników podczerwieni i diod LED. Zaletą IR jest to, że jest niewidoczny, co sprawia, że korzystanie z niego nie przeszkadza osobom przy stole. Można by również użyć laserów, ale wtedy światło byłoby widoczne, a także niebezpieczne, gdy ktoś skierowałby laser w oko innej osoby. Ponadto użytkownik musiałby celować w czujniki robota tylko cienką wiązką lasera, co byłoby dość irytujące. Wyposażając robota w dwa czujniki podczerwieni i konstruując przycisk z diodą IR, robot wie, w którym kierunku musi iść, śledząc natężenie światła IR. Gdy nie ma przycisku, robot może się obracać, dopóki jedna z diod LED nie przechwyci sygnału z jednego z przycisków.

Masło umieszcza się w przegródce na górze robota. Ta komora może składać się z pudełka i uruchamianej pokrywy do otwierania pudełka. Aby otworzyć pokrywę i przesunąć czujnik ultradźwiękowy w celu przeskanowania i wykrycia przeszkód, potrzebujemy dwóch silników, a do tego celu bardziej przystosowane są nieciągłe serwomotory, ponieważ silniki muszą ustawić się w określonej pozycji i utrzymać tę pozycję.

Dodatkową cechą projektu była interakcja ze środowiskiem zewnętrznym za pomocą głosu robota. Brzęczyk jest prosty i przystosowany do tego celu, ale nie można go używać w dowolnym momencie, ponieważ pobór prądu jest wysoki.

Główne trudności projektu polegają na kodowaniu, ponieważ część mechaniczna jest dość prosta. Należy wziąć pod uwagę wiele przypadków, aby uniknąć zablokowania robota lub zrobienia czegoś niepożądanego. Główne problemy, które musimy rozwiązać, to utrata sygnału podczerwieni z powodu przeszkody i zatrzymanie, gdy dotrze do przycisku!

Krok 2: Materiały

Części mechaniczne

  • Drukarka 3D i maszyna do cięcia laserowego

    • PLA będzie używany do drukowania 3D, ale możesz również użyć ABS
    • Do cięcia laserowego zostanie użyta płyta ze sklejki brzozowej o grubości 3 mm, ponieważ daje to możliwość łatwego późniejszego modyfikowania, można również użyć pleksiglasu, ale trudniej jest go zmodyfikować po wycięciu laserem bez jego zniszczenia
  • Śruby, nakrętki, podkładki

    Większość elementów jest utrzymywana razem za pomocą śrub z łbem kulistym M3, podkładek i nakrętek, ale niektóre z nich wymagają zestawu śrub M2 lub M4. Długość śrub mieści się w zakresie 8-12 mm

  • Przekładki do PCB, 25 mm i 15 mm
  • 2 serwosilniki z kompatybilnymi kołami
  • Trochę grubego drutu metalowego o średnicy około 1-2 mm

Części elektroniczne

  • Mikrokontroler

    1 płyta arduino UNO

  • Serwosilniki

    • 2 duże serwomotory: Feetech ciągły 6Kg 360 stopni
    • 2 mikrosilniki serwo: Feetech FS90
  • Czujniki

    • 1 czujnik ultradźwiękowy
    • 2 czujniki zbliżeniowe IR
    • 2 fotodiody IR
  • Baterie

    • 1 uchwyt baterii 9V + bateria
    • 1 uchwyt baterii 4AA + baterie
    • 1 skrzynka na baterie 9 V + bateria
  • Dodatkowe komponenty

    • Trochę skaczących drutów, drutów i płytek lutowniczych
    • Niektóre rezystory
    • 1 dioda podczerwieni
    • 3 przełączniki
    • 1 brzęczyk
    • 1 przycisk
    • 1 złącze Arduino do akumulatora 9V

Krok 3: Testowanie elektroniki

Testowanie elektroniki
Testowanie elektroniki
Testowanie elektroniki
Testowanie elektroniki

Utworzenie przycisku:

Przycisk jest po prostu wykonany za pomocą przełącznika, diody podczerwieni i rezystora 220 Ohm, zasilanych baterią 9V. Jest on umieszczony w zestawie baterii 9 V, co zapewnia kompaktową i czystą konstrukcję.

Tworzenie modułów odbiornika podczerwieni:

Moduły te są wykonane z płytek do lutowania przewlekanego, które później zostaną przymocowane śrubami do robota. Obwody tych modułów są przedstawione na ogólnych schematach. Zasada polega na pomiarze natężenia światła podczerwonego. Aby poprawić pomiary, kolimatory (wykonane z rurek termokurczliwych) mogą być użyte do skupienia się na określonym kierunku zainteresowania.

Różne wymagania projektu muszą być zrealizowane za pomocą urządzeń elektronicznych. Liczba urządzeń powinna być ograniczona, aby zachować stosunkowo niską złożoność. Ten krok zawiera schematy okablowania i każdy kod do testowania wszystkich części osobno:

  • Ciągłe silniki serwo;
  • Czujnik ultradźwiękowy;
  • Serwosilniki nieciągłe;
  • Brzęczyk;
  • Wykrywanie kierunku przycisku IR;
  • Wykrywanie krawędzi przez czujniki zbliżeniowe;

Kody te mogą pomóc w zrozumieniu komponentów na początku, ale są również bardzo przydatne do debugowania na późniejszych etapach. Jeśli wystąpi pewien problem, błąd można łatwiej wykryć, testując wszystkie komponenty osobno.

Krok 4: Projektowanie drukowanych i wycinanych laserowo elementów 3D

Projektowanie drukowanych i wycinanych laserowo elementów 3D
Projektowanie drukowanych i wycinanych laserowo elementów 3D
Projektowanie drukowanych i wycinanych laserowo elementów 3D
Projektowanie drukowanych i wycinanych laserowo elementów 3D
Projektowanie drukowanych i wycinanych laserowo elementów 3D
Projektowanie drukowanych i wycinanych laserowo elementów 3D

Kawałki wycinane laserowo

Zespół składa się z trzech głównych poziomych płyt połączonych przekładkami PCB, aby uzyskać otwartą konstrukcję zapewniającą łatwy dostęp do elektroniki w razie potrzeby.

W płytach tych należy wyciąć niezbędne otwory w celu przykręcenia przekładek i innych elementów do końcowego montażu. Przede wszystkim wszystkie trzy płytki mają otwory w tym samym miejscu na przekładki i określone otwory na elektronikę zamocowane odpowiednio na każdej płytce. Zauważ, że środkowa płyta ma w środku otwór na przewody.

Mniejsze elementy przycina się do wymiarów dużego serwomechanizmu, aby przymocować je do zespołu.

Elementy drukowane 3D

Oprócz cięcia laserowego niektóre elementy będą musiały zostać wydrukowane w 3D:

  • Wsparcie dla czujnika ultradźwiękowego, który łączy go z jednym ramieniem mikroserwomotoru
  • Uchwyt na kółko samonastawne i dwa czujniki krawędziowe IR. Specjalna konstrukcja tego rodzaju końcówek w kształcie pudełka dla czujników podczerwieni działa jak ekran, aby uniknąć zakłóceń między przyciskiem emitującym sygnał podczerwieni a czujnikami podczerwieni, które muszą skupiać się tylko na tym, co dzieje się na ziemi
  • Wspornik dla mikrosilnika otwierającego pokrywę
  • I wreszcie sama pokrywa, złożona z dwóch części, aby mieć większy kąt działania, unikając kolizji z mikrosilnikiem otwierającym pokrywę:

    • Dolny, który zostanie przymocowany do górnej płyty
    • A góra, która jest połączona z dnem za pomocą zawiasu, a uruchamiana serwomechanizmem za pomocą grubego metalowego drutu. Postanowiliśmy nadać robotowi odrobinę osobowości, nadając mu głowę.

Po zaprojektowaniu wszystkich elementów i wyeksportowaniu plików w odpowiednim formacie dla używanych maszyn, elementy można faktycznie wykonać. Należy pamiętać, że drukowanie 3D zajmuje dużo czasu, zwłaszcza przy wymiarach górnej części pokrywy. Możesz potrzebować jednego lub dwóch dni na wydrukowanie wszystkich elementów. Cięcie laserowe to jednak tylko kwestia minut.

Wszystkie pliki SOLIDWORKS można znaleźć w skompresowanym folderze.

Krok 5: Montaż i okablowanie

Image
Image
Montaż i okablowanie
Montaż i okablowanie
Montaż i okablowanie
Montaż i okablowanie
Montaż i okablowanie
Montaż i okablowanie

Montaż będzie mieszanką okablowania i skręcania elementów razem, zaczynając od dołu do góry.

Płyta dolna

Dolna płyta jest montowana z pakietem baterii 4AA, serwomotorami, częścią drukowaną (mocując kółko kulkowe pod płytą), dwoma czujnikami krawędzi i 6 przekładkami męsko-żeńskimi.

Płyta środkowa

Następnie można zamontować płytę środkową, ściskając serwomotory między dwiema płytami. Płytkę tę można następnie przymocować, nakładając na nią kolejny zestaw przekładek. Niektóre kable można przeprowadzić przez środkowy otwór.

Moduł ultradźwiękowy można podłączyć do serwa nieciągłego, które jest zamocowane na środkowej płycie z Arduino, baterią 9V (zasilającą arduino) i dwoma modułami odbiornika podczerwieni z przodu robota. Moduły te wykonane są z płyt lutowniczych przewlekanych i mocowane śrubami do płytki. Obwody tych modułów są przedstawione na ogólnych schematach.

Górna płyta

W tej części montażu przełączniki nie są naprawione, ale robot może już robić wszystko poza czynnościami wymagającymi pokrywy, dzięki czemu możemy wykonać test, aby skorygować próg, dostosować kod ruchu i mieć łatwy dostęp do portów arduino.

Kiedy to wszystko zostanie osiągnięte, górną płytę można przymocować za pomocą przekładek. Ostatnie elementy, którymi są dwa przełączniki, przycisk, serwo, brzęczyk i system pokrywy, można ostatecznie przymocować do górnej płyty, aby zakończyć montaż.

Ostatnią rzeczą do sprawdzenia i poprawienia jest kąt serw, aby prawidłowo otworzyć pokrywę.

Próg czujników krawędziowych należy dostosować za pomocą dołączonego potencjometru (za pomocą płaskiego śrubokręta) do różnych powierzchni stołu. Biały stół powinien mieć niższy próg niż na przykład stół brązowy. Również wysokość czujników będzie miała wpływ na wymagany próg.

Pod koniec tego kroku montaż jest zakończony, a ostatnią pozostałą częścią są brakujące kody.

Krok 6: Kodowanie: składanie wszystkiego razem

Cały niezbędny kod do działania robota znajduje się w spakowanym pliku, który można pobrać. Najważniejszym z nich jest „główny” kod, który zawiera konfigurację i pętlę funkcjonalną robota. Większość pozostałych funkcji jest zapisywana w podplikach (również w spakowanym folderze). Te podpliki należy zapisać w tym samym folderze (o nazwie „główny”), co skrypt główny przed przesłaniem go do Arduino

Najpierw określa się ogólną prędkość robota wraz ze zmienną „przypomnij”. To „przypomnienie” to wartość, która zapamiętuje, w którym kierunku obracał się robot. Jeśli "przypomnij = 1", robot skręcał/skręca w lewo, jeśli "przypomnij = 2", robot skręcał/skręca w prawo.

prędkość wewnętrzna = 9; // Ogólna prędkość robota

int przypomnij = 1; // Początkowy kierunek

W konfiguracji robota inicjowane są różne podpliki programu. W tych podplikach zapisane są podstawowe funkcje dotyczące sterowania silnikami, czujnikami, …. Inicjując je w ustawieniach, funkcje opisane w każdym z tych plików mogą być używane w pętli głównej. Aktywując funkcję r2D2(), robot będzie wydawać dźwięk podobny do robota R2D2 z serii filmów Star Wars, gdy to się uruchamia. Tutaj funkcja r2D2() jest wyłączona, aby zapobiec pobieraniu przez brzęczyk zbyt dużego prądu.

//Konfiguracja @ reset//----------------

void setup(){ initialize_IR_sensors(); zainicjować_przeszkody_i_krawędzie(); zainicjuj_ruch(); zainicjuj_pokrywkę(); zainicjować_brzęczyk(); // r2D2(); int przypomnij = 1; // początkowy kierunek Starter(przypomnij); }

Funkcja Starter(remind) jest najpierw wywoływana w konfiguracji. Ta funkcja sprawia, że robot odwraca się i szuka sygnału podczerwieni jednego z przycisków. Po znalezieniu przycisku program wyjdzie z funkcji Starter, zmieniając zmienną 'cond' na false. Podczas obracania robota musi być świadomy swojego otoczenia: musi wykrywać krawędzie i przeszkody. Jest to sprawdzane za każdym razem, zanim nadal się obraca. Gdy robot wykryje przeszkodę lub krawędź, zostanie wykonany protokół unikania tych przeszkód lub krawędzi. Protokoły te zostaną wyjaśnione w dalszej części tego kroku. Funkcja Starter ma jedną zmienną, która jest zmienną przypominającą, o której była mowa wcześniej. Nadając wartość przypomnienia funkcji Starter, robot wie, w którym kierunku musi się skręcić, aby szukać przycisku.

//Starter Loop: odwróć się i wyszukaj przycisk//------------------------------------ ----------------

void Starter(int przypomnij) { if (isedgeleft() || isedgeright()) { // Wykryj krawędzie edgeDetected(przypomnij); } else { bool cond = prawda; while (cond == true) { if (buttonleft() == false && buttonright() == false && isButtonDetected() == true) { cond = false; } else { if (remind == 1) { // Skręcaliśmy w lewo if (isobstacleleft()) { stopspeed(); unikaj_przeszkody(przypomnij); } else if (isedgeleft() || isedgeright()) { // Wykryj krawędzie edgeDetected(remind); } else { skręć w lewo (prędkość); } } else if (przypomnij == 2) { if (isobstacleright()) { stopspeed(); unikaj_przeszkody(przypomnij); } else if (isedgeleft() || isedgeright()) { // Wykryj krawędzie edgeDetected(remind); } else { skręt w prawo(prędkość); } } } } } }

Jeżeli robot odnajdzie przycisk, to wychodzi z pierwszej pętli Starter i rozpoczyna się główna, funkcjonalna pętla robota. Ta główna pętla jest dość złożona, ponieważ za każdym razem robot musi wykryć, czy przed nią znajduje się przeszkoda lub krawędź. Główną ideą jest to, że robot podąża za przyciskiem, znajdując go i gubiąc za każdym razem. Stosując dwa czujniki podczerwieni możemy wyróżnić trzy sytuacje:

  • różnica między światłem podczerwonym wykrytym przez lewy i prawy czujnik jest większa niż określony próg i jest przycisk.
  • różnica w świetle podczerwonym jest mniejsza niż próg, a przed robotem znajduje się przycisk.
  • różnica w świetle podczerwonym jest mniejsza niż próg, a przed robotem NIE ma przycisku.

Sposób działania procedury śledzenia jest następujący: po wykryciu przycisku robot porusza się w kierunku przycisku, obracając się w tym samym kierunku, w którym się obracał (za pomocą zmiennej przypomnienie), a jednocześnie porusza się nieco do przodu. Jeśli robot skręci za daleko, przycisk zostanie ponownie zgubiony i w tym momencie robot pamięta, że musi skręcić w innym kierunku. Odbywa się to również podczas przesuwania się trochę do przodu. Robiąc to, robot nieustannie skręca w lewo i skręca w prawo, ale w międzyczasie wciąż zbliża się do przycisku. Za każdym razem, gdy robot znajdzie przycisk, po prostu obraca się, dopóki go nie zgubi, w którym to przypadku zaczyna poruszać się w innym kierunku. Zwróć uwagę na różnicę w funkcjach, które są używane w pętli Starter i pętli głównej: pętla Starter używa "turnleft()" lub "turnright()", podczas gdy główna pętla używa "moveleft()" i "moveright()". Funkcje ruchu w lewo/w prawo nie tylko sprawiają, że robot obraca się, ale także porusza się jednocześnie do przodu.

/* Pętla funkcjonalna ---------------------------- Tu jest tylko procedura śledzenia */

int utracone = 0; // Jeśli utracony = 0 przycisk zostanie znaleziony, jeśli utracony = 1 przycisk zostanie utracony void loop() { if (isedgeleft() || isedgeright()) {

jeśli (!isobstacle()) {

naprzód (prędkość); opóźnienie(5); } else { Avoid_obstacle(przypomnij); } else {if (remind == 1 && lost == 1) { // Skręcaliśmy w lewo stopspeed(); if (!isobstacleright()) { moveright(speed); // Odwróć się, aby znaleźć przycisk } else { Avoid_obstacle(remind); } przypomnij = 2; } else if (przypomnij == 2 && stracił == 1) { stopspeed(); if (!isobstacleleft()) { moveleft(speed); //Skręcaliśmy w prawo } else { Avoid_obstacle(przypomnij); } przypomnij = 1; }else if (lost == 0) { if (remind == 1) { // Skręcaliśmy w lewo if (!isobstacleleft()) { moveleft(speed); //Skręcaliśmy w prawo } else { stopspeed(); unikaj_przeszkody(przypomnij); } // } else if (przypomnij == 2) { if (!isobstacleright()) { moveright(speed); // Odwróć się, aby znaleźć przycisk } else { stopspeed(); unikaj_przeszkody(przypomnij); } } } opóźnienie(10); utracone = 0; } } //} }

Teraz krótkie wyjaśnienie dwóch najbardziej złożonych procedur:

Unikaj krawędzi

Protokół unikania krawędzi jest zdefiniowany w funkcji o nazwie „edgeDetection()”, która jest zapisana w podpliku „ruch”. Ten protokół opiera się na fakcie, że robot powinien napotkać krawędź dopiero po osiągnięciu celu: przycisku. Gdy robot wykryje krawędź, pierwszą rzeczą, jaką robi, jest cofnięcie się nieco, aby znaleźć się w bezpiecznej odległości od krawędzi. Po wykonaniu tej czynności robot czeka 2 sekundy. Jeśli ktoś naciśnie przycisk z przodu robota w ciągu tych dwóch sekund, robot wie, że dotarł do osoby, która chce masło, otwiera komorę na masło i podaje masło. W tym momencie ktoś może zabrać robotowi masło. Po kilku sekundach robot zmęczy się czekaniem i po prostu zamknie pokrywkę masła. Po zamknięciu pokrywy robot wykona pętlę Starter, aby poszukać innego przycisku. Jeśli zdarzy się, że robot napotka krawędź przed dotarciem do celu, a przycisk z przodu robota nie zostanie wciśnięty, robot nie otworzy pokrywki masła i natychmiast wykona pętlę Starter.

Unikaj przeszkód

Funkcja Avoid_obstacle() również znajduje się w podpliku „ruch”. Trudność w unikaniu przeszkód polega na tym, że robot ma dość duży martwy punkt. Czujnik ultradźwiękowy jest umieszczony z przodu robota, co oznacza, że może wykrywać przeszkody, ale nie wie, kiedy go mija. Aby rozwiązać ten problem, stosuje się następującą zasadę: Gdy robot napotka przeszkodę, wykorzystuje zmienną reming, aby skręcić w innym kierunku. W ten sposób robot unika uderzenia w przeszkodę. Robot obraca się, dopóki czujnik ultradźwiękowy nie wykryje już przeszkody. W czasie, gdy robot się obraca, licznik jest zwiększany, aż przeszkoda nie zostanie już wykryta. Licznik ten podaje wtedy przybliżoną długość przeszkody. Poruszając się następnie do przodu i jednocześnie zmniejszając licznik można ominąć przeszkodę. Gdy licznik osiągnie 0, funkcja Starter może być ponownie użyta do zmiany położenia przycisku. Oczywiście robot wykonuje funkcję Starter, obracając się w kierunku, w którym pamiętał, że jedzie, zanim napotkał przeszkodę (znowu używając zmiennej przypomnienia).

Teraz, gdy w pełni rozumiesz kod, możesz zacząć go używać!

Pamiętaj, aby dostosować progi do swojego środowiska (na przykład odbicie podczerwieni jest wyższe na białych stołach) i dostosować różne parametry do swoich potrzeb. Dużą uwagę należy również zwrócić na zasilanie różnych modułów. Istotne jest to, że serwosilniki nie są zasilane z portu Arduino 5V, ponieważ pobierają dużo prądu (mogłoby to uszkodzić mikrokontroler). Jeśli do czujników zostanie użyte to samo źródło zasilania, co do zasilania serwomechanizmów, mogą wystąpić pewne problemy z pomiarami.

Zalecana: