{"id":25151,"date":"2025-09-23T13:45:00","date_gmt":"2025-09-23T11:45:00","guid":{"rendered":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/?p=25151"},"modified":"2025-09-24T19:55:44","modified_gmt":"2025-09-24T17:55:44","slug":"jak-zbudowac-system-recznego-sterowania-robotem-astorino-za-pomoca-joystickow-i-arduino","status":"publish","type":"post","link":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/jak-zbudowac-system-recznego-sterowania-robotem-astorino-za-pomoca-joystickow-i-arduino\/","title":{"rendered":"Jak zbudowa\u0107 system r\u0119cznego sterowania robotem Astorino za pomoc\u0105 joystick\u00f3w i Arduino"},"content":{"rendered":"\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"dowiesz-sie\">\n<h3>Z tego artyku\u0142u dowiesz si\u0119:<\/h3>\n<ul class=\"bulleted\">\n<li>jak skonstruowa\u0107 uk\u0142ad sterowania robotem Astorino, wykorzystuj\u0105cy mikrokontroler Arduino,<\/li>\n<li>jak uruchomi\u0107 komunikacj\u0119 mi\u0119dzy Arduino a Astorino,<\/li>\n<li>jak napisa\u0107 kod aplikacji steruj\u0105cej.<\/li>\n<\/ul>\n<\/div>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Przedstawiamy praktyczny przewodnik, kt\u00f3ry umo\u017cliwi stworzenie manualnego systemu sterowania robotem Astorino z wykorzystaniem dw\u00f3ch analogowych joystick\u00f3w oraz mikrokontrolera Arduino. Ca\u0142o\u015b\u0107 zosta\u0142a opracowana z my\u015bl\u0105 o intuicyjnej obs\u0142udze robota w czasie rzeczywistym \u2013 bez konieczno\u015bci programowania trajektorii ruchu.<\/p>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Wprowadzenie<\/h2>\n\n\n\n<p>Sterowanie robotem za pomoc\u0105 joystick\u00f3w to rozwi\u0105zanie umo\u017cliwiaj\u0105ce intuicyjne i precyzyjne kontrolowanie pozycji oraz orientacji robota, bez potrzeby programowania trajektorii ruchu. W projekcie wykorzystano dwa analogowe joysticki oraz mikrokontroler Arduino, kt\u00f3re wsp\u00f3lnie tworz\u0105 interfejs do r\u0119cznego sterowania robotem w sze\u015bciu osiach.<\/p>\n\n\n\n<p>Sygna\u0142y z joystick\u00f3w s\u0105 odczytywane przez przetworniki analogowo\u2013cyfrowe (ADC) mikrokontrolera, nast\u0119pnie przetwarzane na uproszczone komendy znakowe i przesy\u0142ane do robota w czasie rzeczywistym \u2013 w zale\u017cno\u015bci od wychylenia dr\u0105\u017ck\u00f3w oraz stanu przycisk\u00f3w.<\/p>\n\n\n\n<p>Takie rozwi\u0105zanie mo\u017ce by\u0107 wykorzystywane zar\u00f3wno do nauki podstaw sterowania robotem (obs\u0142uga r\u00f3\u017cnych komend ruchu), jak i jako baza do dalszego rozwoju bardziej zaawansowanych aplikacji.<\/p>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"900\" height=\"1052\" src=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/image02-1.jpg\" alt=\"\" class=\"wp-image-25085\" srcset=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/image02-1.jpg 900w, https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/image02-1-628x734.jpg 628w, https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/image02-1-768x898.jpg 768w\" sizes=\"auto, (max-width: 900px) 100vw, 900px\" \/><\/figure>\n<\/div>\n\n\n<div style=\"height:50px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Opis wymaganych element\u00f3w<\/h2>\n\n\n\n<p>Do wykonania uk\u0142adu sterowania robotem niezb\u0119dne s\u0105 nast\u0119puj\u0105ce komponenty:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Robot edukacyjny Astorino.<\/li>\n\n\n\n<li>Komputer z zainstalowanym \u015brodowiskiem programistycznym Arduino IDE oraz oprogramowaniem do obs\u0142ugi robota edukacyjnego Astorino.<\/li>\n\n\n\n<li>Mikrokontroler Arduino (np. Arduino UNO R3 z uk\u0142adem ATmega328P).<\/li>\n\n\n\n<li>Dwa analogowe joysticki 3\u2013osiowe z przyciskiem \u2013 ka\u017cdy joystick wyposa\u017cony jest w dwa potencjometry (do sterowania osiami) oraz wbudowany przycisk s\u0142u\u017c\u0105cy do zmiany trybu pracy lub sterowania chwytakiem.<\/li>\n\n\n\n<li>Przewody po\u0142\u0105czeniowe typu m\u0119sko-m\u0119skie i m\u0119sko-\u017ce\u0144skie (dupont).<\/li>\n\n\n\n<li>Wydrukowana w technologii 3D obudowa (gamepad) dla monta\u017cu joystick\u00f3w i Arduino.<\/li>\n<\/ul>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Za\u0142o\u017cenia projektu<\/h2>\n\n\n\n<p>Projekt zak\u0142ada\u0142 stworzenie systemu umo\u017cliwiaj\u0105cego manualne sterowanie robotem za pomoc\u0105 dw\u00f3ch analogowych joystick\u00f3w pod\u0142\u0105czonych do mikrokontrolera Arduino. Celem by\u0142o prze\u0142o\u017cenie fizycznych wychyle\u0144 dr\u0105\u017ck\u00f3w na ruchy robota w osiach przestrzennych oraz zmiany orientacji, bez konieczno\u015bci programowania trajektorii ruchu.<\/p>\n\n\n\n<p>Arduino odczytuje warto\u015bci analogowe z osi X, Y i Z oraz stany logiczne przycisk\u00f3w, a nast\u0119pnie przetwarza je na uproszczone komendy znakowe, kt\u00f3re s\u0105 przesy\u0142ane do robota za po\u015brednictwem interfejsu UART. Robot interpretuje przes\u0142ane dane i wykonuje odpowiednie ruchy w czasie rzeczywistym.<\/p>\n\n\n\n<p>Joystick 1 odpowiada za sterowanie pozycj\u0105 robota w osiach X i Y oraz obs\u0142ug\u0119 chwytaka poprzez przycisk. Joystick 2 s\u0142u\u017cy do sterowania ruchem w osi Z oraz do zmiany trybu pracy \u2013 po aktywacji przycisku, joystick przechodzi w tryb sterowania orientacj\u0105 robota (rotacja wok\u00f3\u0142 osi Rx, Ry, Rz).<\/p>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Implementacja oprogramowania<\/h2>\n\n\n\n<p>Kod zosta\u0142 podzielony na logiczne cz\u0119\u015bci \u2013 ka\u017cda odpowiada za nast\u0119pny krok, kt\u00f3ry nale\u017cy wykona\u0107.<\/p>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Monta\u017c uk\u0142adu elektronicznego<\/strong><\/h3>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Uk\u0142ad zosta\u0142 zbudowany bez u\u017cycia p\u0142ytki stykowej \u2013 wszystkie komponenty zosta\u0142y bezpo\u015brednio pod\u0142\u0105czone do pin\u00f3w Arduino Uno R3 za pomoc\u0105 przewod\u00f3w po\u0142\u0105czeniowych.<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4 class=\"wp-block-heading\">Poprawne po\u0142\u0105czenie joystick\u00f3w<\/h4>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Ka\u017cdy z joystick\u00f3w posiada nast\u0119puj\u0105ce wyprowadzenia:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>zasilanie +5 V,<\/li>\n\n\n\n<li>masa GND,<\/li>\n\n\n\n<li>dwa wyj\u015bcia analogowe: VRx i VRy (odpowiadaj\u0105ce za odczyt wychylenia potencjometr\u00f3w),<\/li>\n\n\n\n<li>jedno wyj\u015bcie cyfrowe: SW (s\u0142u\u017c\u0105ce do obs\u0142ugi przycisku w joysticku).<\/li>\n<\/ul>\n\n\n\n<p>Wyj\u015bcia VRx i VRy nale\u017cy pod\u0142\u0105czy\u0107 do wej\u015b\u0107 analogowych mikrokontrolera (A0\u2013A3), natomiast sygna\u0142 SW \u2013 do wej\u015bcia cyfrowego (D6, D7).<\/p>\n\n\n\n<p>Piny analogowe umo\u017cliwiaj\u0105 odczyt napi\u0119cia w zakresie od 0 do 5V, co pozwala na dok\u0142adne okre\u015blenie stopnia wychylenia joysticka. Z kolei piny cyfrowe rozr\u00f3\u017cniaj\u0105 tylko dwa stany logiczne: 0 (LOW) i 1 (HIGH).<\/p>\n\n\n\n<p>Nieprawid\u0142owe pod\u0142\u0105czenie wyprowadze\u0144 (np. pod\u0142\u0105czenie VRx do pinu cyfrowego) uniemo\u017cliwia poprawny odczyt danych \u2013 zamiast rzeczywistego stopnia wychylenia otrzymamy warto\u015b\u0107 nieokre\u015blon\u0105 lub zero. W konsekwencji uk\u0142ad nie b\u0119dzie dzia\u0142a\u0142 prawid\u0142owo, a sterowanie robotem mo\u017ce by\u0107 niemo\u017cliwe.<\/p>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4 class=\"wp-block-heading\">Komunikacja UART<\/h4>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Do przesy\u0142ania danych mi\u0119dzy Arduino a robotem wykorzystano interfejs komunikacyjny UART (Universal Asynchronous Receiver-Transmitter). Jest to dwukierunkowy protok\u00f3\u0142 szeregowy, co oznacza, \u017ce mo\u017cliwe jest zar\u00f3wno wysy\u0142anie, jak i odbieranie danych.<\/p>\n\n\n\n<p>Aby komunikacja mog\u0142a si\u0119 odby\u0107, nale\u017cy:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>po\u0142\u0105czy\u0107 pin TX (Transmit) Arduino z pinem RX (Receive) robota \u2013 aby wysy\u0142a\u0107 dane z Arduino do robota,<\/li>\n\n\n\n<li>(opcjonalnie) po\u0142\u0105czy\u0107 pin RX Arduino z pinem TX robota, je\u017celi planujemy odbiera\u0107 dane z robota.<\/li>\n<\/ul>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4 class=\"wp-block-heading\">Uwaga \u2013 diagnostyka problem\u00f3w oraz schemat po\u0142\u0105czenia<\/h4>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong>Uwaga:<\/strong> je\u017celi poziomy napi\u0119\u0107 UART robota r\u00f3\u017cni\u0105 si\u0119 od 5V (np. pracuje na 3.3V), nale\u017cy zastosowa\u0107 konwerter poziom\u00f3w logicznych, aby unikn\u0105\u0107 uszkodzenia sprz\u0119tu.<\/p>\n\n\n\n<p>Schemat przedstawiaj\u0105cy kompletne po\u0142\u0105czenia uk\u0142adu znajduje si\u0119 poni\u017cej.<\/p>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1312\" height=\"693\" src=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/image03-12.png\" alt=\"\" class=\"wp-image-25087\" srcset=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/image03-12.png 1312w, https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/image03-12-840x444.png 840w, https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/image03-12-768x406.png 768w\" sizes=\"auto, (max-width: 1312px) 100vw, 1312px\" \/><\/figure>\n<\/div>\n\n\n<div style=\"height:50px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Nawi\u0105zanie komunikacji za pomoc\u0105 UART i sprawdzenie poprawno\u015bci jej dzia\u0142ania<\/strong><\/h3>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4 class=\"wp-block-heading\">Komunikacja Arduino<\/h4>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Po poprawnym pod\u0142\u0105czeniu wszystkich element\u00f3w uk\u0142adu do p\u0142ytki Arduino, nale\u017cy sprawdzi\u0107, czy komunikacja z robotem dzia\u0142a prawid\u0142owo. W tym celu w programie Arduino IDE tworzymy nowy projekt, wybieraj\u0105c <strong>File \u2192 New Sketch<\/strong>. Otworzy si\u0119 nowe okno, w kt\u00f3rym mo\u017cna nazwa\u0107 projekt.<\/p>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"2548\" height=\"1379\" src=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/image04-13.png\" alt=\"\" class=\"wp-image-25088\" srcset=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/image04-13.png 2548w, https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/image04-13-840x455.png 840w, https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/image04-13-768x416.png 768w, https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/image04-13-1536x831.png 1536w, https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/image04-13-2048x1108.png 2048w\" sizes=\"auto, (max-width: 2548px) 100vw, 2548px\" \/><\/figure>\n<\/div>\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Nast\u0119pnie w g\u00f3rnym pasku narz\u0119dzi klikamy nazw\u0119 p\u0142ytki (np. <strong>Arduino Uno<\/strong>) i wybieramy <strong>Select other board and port\u2026<\/strong> W nowym oknie wyszukiwania wpisujemy model swojej p\u0142ytki (np. <strong>Arduino Uno R3<\/strong>) oraz wybieramy port COM, do kt\u00f3rego zosta\u0142a pod\u0142\u0105czona. Zatwierdzamy wyb\u00f3r klikaj\u0105c <strong>OK<\/strong>.<\/p>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"2560\" height=\"1381\" src=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/image07-1.jpg\" alt=\"\" class=\"wp-image-25089\" srcset=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/image07-1.jpg 2560w, https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/image07-1-840x453.jpg 840w, https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/image07-1-768x414.jpg 768w, https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/image07-1-1536x829.jpg 1536w, https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/image07-1-2048x1105.jpg 2048w\" sizes=\"auto, (max-width: 2560px) 100vw, 2560px\" \/><\/figure>\n<\/div>\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Aby sprawdzi\u0107, czy dane s\u0105 poprawnie wysy\u0142ane, mo\u017cna napisa\u0107 bardzo prosty program testowy, kt\u00f3ry co sekund\u0119 wysy\u0142a znak \u201e1\u201d przez UART. Do podgl\u0105du danych u\u017cywamy narz\u0119dzia <strong>Serial Monitor<\/strong>, kt\u00f3re uruchamiamy <strong>ikon\u0105 lupy<\/strong> w prawym g\u00f3rnym rogu Arduino IDE.<\/p>\n\n\n\n<p><strong>Wa\u017cne:<\/strong> komunikacja z robotem Astorino odbywa si\u0119 z pr\u0119dko\u015bci\u0105 115200 bps, dlatego tak\u0105 sam\u0105 warto\u015b\u0107 nale\u017cy ustawi\u0107 w dolnym pasku Serial Monitora.<\/p>\n\n\n\n<p>Je\u017celi wszystko dzia\u0142a poprawnie, w Serial Monitorze powinny pojawia\u0107 si\u0119 cykliczne znaki &nbsp;&#8222;1&#8221; wysy\u0142ane co sekund\u0119.<\/p>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"2560\" height=\"1170\" src=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/image08-12.png\" alt=\"\" class=\"wp-image-25090\" srcset=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/image08-12.png 2560w, https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/image08-12-840x384.png 840w, https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/image08-12-768x351.png 768w, https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/image08-12-1536x702.png 1536w, https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/image08-12-2048x936.png 2048w\" sizes=\"auto, (max-width: 2560px) 100vw, 2560px\" \/><\/figure>\n<\/div>\n\n\n<div style=\"height:50px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4 class=\"wp-block-heading\">Komunikacja Astorino<\/h4>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>W pierwszym kroku sprawdzimy po\u0142\u0105czenie z robotem Astorino. W tym celu otw\u00f3rz aplikacj\u0119 Astorino, a nast\u0119pnie po\u0142\u0105cz robota z komputerem, w\u0142\u0105cz nap\u0119dy, wykonaj zerowanie osi i przejd\u017a do pozycji domowej.<\/p>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1015\" height=\"1057\" src=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/image09-12.png\" alt=\"\" class=\"wp-image-25091\" srcset=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/image09-12.png 1015w, https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/image09-12-705x734.png 705w, https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/image09-12-768x800.png 768w\" sizes=\"auto, (max-width: 1015px) 100vw, 1015px\" \/><\/figure>\n<\/div>\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Teraz nale\u017cy przej\u015b\u0107 do zak\u0142adki <strong>Program<\/strong> i utworzy\u0107 nowy program, zatwierdzaj\u0105c przyciskiem <strong>OK<\/strong>.<\/p>\n\n\n\n<p>W nowym programie nale\u017cy ustawi\u0107 parametry pocz\u0105tkowe, a nast\u0119pnie stworzy\u0107 p\u0119tl\u0119 <strong>WHILE<\/strong>, kt\u00f3ra sprawdzi po\u0142\u0105czenie szeregowe. W p\u0119tli <strong>WHILE<\/strong> nale\u017cy zastosowa\u0107 komend\u0119 <strong>EXISTCOM<\/strong>, kt\u00f3ra zwraca informacj\u0119 o stanie komunikacji:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Je\u017celi komunikacja <strong>nie zosta\u0142a nawi\u0105zana<\/strong>, program utknie w tej p\u0119tli.<\/li>\n\n\n\n<li>Je\u017celi komunikacja dzia\u0142a poprawnie, robot przejdzie dalej \u2013 co pozwala kontynuowa\u0107 programowanie logiki ruchu.<\/li>\n<\/ul>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1149\" height=\"289\" src=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/image10-1.jpg\" alt=\"\" class=\"wp-image-25092\" srcset=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/image10-1.jpg 1149w, https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/image10-1-840x211.jpg 840w, https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/image10-1-768x193.jpg 768w\" sizes=\"auto, (max-width: 1149px) 100vw, 1149px\" \/><\/figure>\n<\/div>\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Dla potwierdzenia poprawno\u015bci po\u0142\u0105czenia mo\u017cna utworzy\u0107 prost\u0105 p\u0119tl\u0119 niesko\u0144czon\u0105 (<strong>WHILE TRUE<\/strong>), w kt\u00f3rej robot wykonuje dowoln\u0105 bezpieczn\u0105 instrukcje. Je\u017celi zielony wska\u017anik wykonania znajduje si\u0119 wewn\u0105trz tej p\u0119tli, oznacza to, \u017ce robot otrzymuje dane i program dzia\u0142a prawid\u0142owo.<\/p>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"824\" height=\"197\" src=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/image11-11.png\" alt=\"\" class=\"wp-image-25093\" srcset=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/image11-11.png 824w, https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/image11-11-768x184.png 768w\" sizes=\"auto, (max-width: 824px) 100vw, 824px\" \/><\/figure>\n<\/div>\n\n\n<div style=\"height:50px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4 class=\"wp-block-heading\">Uwagi \u2013 diagnostyka problem\u00f3w<\/h4>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong>Uwaga:<\/strong> Arduino nie pozwala na wgrywanie nowego programu, je\u015bli linia transmisji UART (pin TX) jest po\u0142\u0105czona z urz\u0105dzeniem zewn\u0119trznym (np. robotem). Aby wgra\u0107 program:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>od\u0142\u0105cz przew\u00f3d komunikacyjny z pinu TX lub RX,<\/li>\n\n\n\n<li>wgraj kod,<\/li>\n\n\n\n<li>po wgraniu ponownie pod\u0142\u0105cz przew\u00f3d.<\/li>\n<\/ul>\n\n\n\n<p><strong>Uwaga: <\/strong>W przypadku braku nawi\u0105zania komunikacji nale\u017cy sprawdzi\u0107:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>poprawno\u015b\u0107 monta\u017cu uk\u0142adu (w przypadku b\u0142\u0119du, na robocie b\u0119dzie \u015bwieci\u0107 si\u0119 czerwona dioda),<\/li>\n\n\n\n<li>czy odpowiednio ustalona jest warto\u015b\u0107 bps (115200).<\/li>\n<\/ul>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Odczyt wychyle\u0144 joystick\u00f3w \u2013 tworzenie ADC<\/strong><\/h3>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4 class=\"wp-block-heading\">Deklaracja zmiennych<\/h4>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>ADC (Analog\u2013to\u2013Digital Converter) to przetwornik analogowo\u2013cyfrowy, kt\u00f3ry przekszta\u0142ca sygna\u0142 napi\u0119ciowy z urz\u0105dzenia analogowego na warto\u015b\u0107 liczbow\u0105 zrozumia\u0142\u0105 dla mikrokontrolera. Joystick dzia\u0142a tak, jak dwa potencjometry \u2013 dla osi X i Y \u2013 kt\u00f3re zmieniaj\u0105 napi\u0119cie w zakresie od 0 do 5 V w zale\u017cno\u015bci od wychylenia dr\u0105\u017cka.<\/p>\n\n\n\n<p>Mikrokontroler Arduino Uno wyposa\u017cony jest w 10\u2013bitowy przetwornik ADC. Oznacza to, \u017ce napi\u0119cie w&nbsp; przedziale 0\u20135 V b\u0119dzie przeliczone na warto\u015b\u0107 liczbow\u0105 w zakresie od 0 do 1023.<\/p>\n\n\n\n<p>Aby odczytywa\u0107 dane z joystick\u00f3w, najpierw nale\u017cy wskaza\u0107 mikrokontrolerowi, z kt\u00f3rych pin\u00f3w b\u0119dzie korzysta\u0142. Dla trzech osi ruchu (X, Y, Z) wykorzystujemy wej\u015bcia analogowe A0, A1 i A2. W tym celu, jeszcze przed funkcj\u0105 setup musimy zadeklarowa\u0107 sta\u0142e.<\/p>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"229\" height=\"105\" src=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/image12-11.png\" alt=\"\" class=\"wp-image-25094\"\/><\/figure>\n<\/div>\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>U\u017cycie s\u0142owa kluczowego <strong>const<\/strong> oznacza, \u017ce przypisanie pinu nie mo\u017ce si\u0119 zmieni\u0107 podczas dzia\u0142ania programu. To logiczne \u2013 o\u015b X zawsze b\u0119dzie odczytywana z tego samego pinu.<\/p>\n\n\n\n<p>Warto\u015bci napi\u0119\u0107 (czyli wychylenia) b\u0119d\u0105 zapisywane do zmiennych, kt\u00f3re musz\u0105 by\u0107 zdefiniowane w funkcji <strong>loop()<\/strong> \u2013 dzi\u0119ki temu b\u0119d\u0105 aktualizowane na bie\u017c\u0105co, w ka\u017cdej p\u0119tli programu:<\/p>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"305\" height=\"81\" src=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/image13-11.png\" alt=\"\" class=\"wp-image-25095\" srcset=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/image13-11.png 305w, https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/image13-11-301x81.png 301w\" sizes=\"auto, (max-width: 305px) 100vw, 305px\" \/><\/figure>\n<\/div>\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Gdyby zmienne zosta\u0142y zadeklarowane w <strong>setup()<\/strong>, odczyt nast\u0105pi\u0142by tylko raz \u2013 na pocz\u0105tku dzia\u0142ania programu.<\/p>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4 class=\"wp-block-heading\">Martwa strefa<\/h4>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Pozycja neutralna dr\u0105\u017cka joysticka teoretycznie odpowiada warto\u015bci ADC oko\u0142o <strong>512<\/strong>, ale w praktyce mo\u017ce si\u0119 lekko r\u00f3\u017cni\u0107. Dlatego stosujemy tzw. <strong>martw\u0105 stref\u0119<\/strong> (ang. <em>dead zone<\/em>), np. \u00b150 jednostek, aby zignorowa\u0107 drobne odchylenia i zapewni\u0107 stabilno\u015b\u0107.<br>Na poni\u017cszym rysunku przedstawiono przyk\u0142adow\u0105 interpretacj\u0119 wychylenia:<\/p>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"945\" height=\"242\" src=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/image14-11.png\" alt=\"\" class=\"wp-image-25096\" srcset=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/image14-11.png 945w, https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/image14-11-840x215.png 840w, https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/image14-11-768x197.png 768w\" sizes=\"auto, (max-width: 945px) 100vw, 945px\" \/><\/figure>\n<\/div>\n\n\n<div style=\"height:50px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4 class=\"wp-block-heading\">Interpretacja stopnia wychylenia dr\u0105\u017cka<\/h4>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Aby przypisa\u0107 okre\u015blone dzia\u0142anie do danego zakresu ruchu, wykorzystano instrukcje warunkowe <strong>if<\/strong>. Dla ka\u017cdej osi tworzona jest osobna funkcja, kt\u00f3ra przypisuje warto\u015b\u0107:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>1 \u2013 ruch w jednym kierunku,<\/li>\n\n\n\n<li>2 \u2013 w przeciwnym,<\/li>\n\n\n\n<li>0 \u2013 brak ruchu (martwa strefa).<\/li>\n<\/ul>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"760\" height=\"646\" src=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/image15.jpg\" alt=\"\" class=\"wp-image-25097\"\/><\/figure>\n<\/div>\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>W projekcie zdecydowano si\u0119 na przesy\u0142anie pojedynczych cyfr (0, 1, 2) zamiast tekstowych komend typu &#8222;X+&#8221; lub &#8222;LEFT&#8221;, ze wzgl\u0119du na:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>mniejszy rozmiar danych \u2013 pojedynczy znak to tylko 1 bajt,<\/li>\n\n\n\n<li>szybsze przetwarzanie po stronie robota,<\/li>\n\n\n\n<li>mniejsze zu\u017cycie pami\u0119ci RAM,<\/li>\n\n\n\n<li>wi\u0119ksz\u0105 przejrzysto\u015b\u0107 struktury komunikacji UART.<\/li>\n<\/ul>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4 class=\"wp-block-heading\">Przygotowanie danych do wysy\u0142ki<\/h4>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Po zinterpretowaniu wychyle\u0144 tworzone s\u0105 nowe zmienne (np. <strong>mappX<\/strong>, <strong>mappY<\/strong>, <strong>mappZ<\/strong>), kt\u00f3re zawieraj\u0105 przypisan\u0105 warto\u015b\u0107 (0, 1 lub 2) i b\u0119d\u0105 wysy\u0142ane przez UART. Zmienna ta mo\u017ce by\u0107 nadpisywana w ka\u017cdej p\u0119tli programu \u2013 dzi\u0119ki temu komunikaty odzwierciedlaj\u0105 aktualne po\u0142o\u017cenie joysticka.<\/p>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"527\" height=\"113\" src=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/image16-10.png\" alt=\"\" class=\"wp-image-25098\"\/><\/figure>\n<\/div>\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Na ko\u0144cu p\u0119tli <strong>loop()<\/strong> dane s\u0105 wysy\u0142ane przez UART do robota. Aby u\u0142atwi\u0107 rozpoznawanie warto\u015bci, oddzielono je znakiem uko\u015bnika \u201e\/\u201d. Dzi\u0119ki temu robot otrzymuje prosty, uporz\u0105dkowany komunikat w postaci [0\/0\/0\/]<\/p>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"374\" height=\"186\" src=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/image17-10.png\" alt=\"\" class=\"wp-image-25099\"\/><\/figure>\n<\/div>\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>W tym etapie usuwamy ju\u017c wcze\u015bniejszy testowy <strong>Serial.print(&#8222;1&#8221;);<\/strong>, a op\u00f3\u017anienie <strong>delay(1000)<\/strong> zast\u0119pujemy warto\u015bci\u0105 <strong>delay(200)<\/strong>, pozwoli to uzyska\u0107 szybsz\u0105 i bardziej p\u0142ynn\u0105 reakcj\u0119 robota na ruch joysticka.<\/p>\n\n\n\n<p>Ca\u0142y kod ADC:<\/p>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1158\" height=\"1086\" src=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/image18.jpg\" alt=\"\" class=\"wp-image-25100\" srcset=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/image18.jpg 1158w, https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/image18-783x734.jpg 783w, https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/image18-768x720.jpg 768w\" sizes=\"auto, (max-width: 1158px) 100vw, 1158px\" \/><\/figure>\n<\/div>\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Otrzymany przyk\u0142adowy rezultat (r\u00f3\u017cnice mog\u0105 polega\u0107 na innym wychyleniu joystick\u00f3w):<\/p>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"662\" height=\"272\" src=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/image19-8.png\" alt=\"\" class=\"wp-image-25101\"\/><\/figure>\n<\/div>\n\n\n<div style=\"height:50px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4 class=\"wp-block-heading\">Uwaga \u2013 diagnostyka problem\u00f3w<\/h4>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong>UWAGA! <\/strong>Je\u017celi pomimo braku wychylenia odbierasz komunikat \u201e1\u201d lub \u201e2\u201d, oznacza to wypi\u0119ty lub nie podpi\u0119ty przew\u00f3d GND lub +5V.<\/p>\n\n\n\n<p><strong>UWAGA! <\/strong>Je\u017celi pomimo ruchu joystickiem ci\u0105gle otrzymujesz warto\u015b\u0107 \u201e0\u201d, sprawd\u017a poprawno\u015b\u0107 po\u0142\u0105czenia.<\/p>\n\n\n\n<p><strong>PAMI\u0118TAJ! <\/strong>Jedna z osi joysticka nie zosta\u0142a podpi\u0119ta, oznacza to \u017ce drugi joystick b\u0119dzie reagowa\u0107 tylko na ruch prz\u00f3d\u2013ty\u0142<strong>.<\/strong><\/p>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Odbieranie komunikacji przez robota<\/strong><\/h3>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Odbi\u00f3r danych z mikrokontrolera Arduino po stronie robota odbywa si\u0119 przy u\u017cyciu instrukcji:<\/p>\n\n\n\n<p><strong>$nazwa_zmiennej = RECEIVE<\/strong><\/p>\n\n\n\n<p>Instrukcja ta odpowiada za pobranie \u0142a\u0144cucha znak\u00f3w wys\u0142anego przez port szeregowy UART. Jednak samo odebranie danych to nie wszystko \u2013 nale\u017cy je jeszcze poprawnie zdekodowa\u0107 i rozdzieli\u0107 na pojedyncze warto\u015bci. W tym celu stosujemy funkcj\u0119:<\/p>\n\n\n\n<p><strong>$nowa_nazwa = DECODE ($nazwa_zmiennej, \u201eznak_oddzielaj\u0105cy\u201d)<\/strong><\/p>\n\n\n\n<p>Dzi\u0119ki temu mo\u017cliwe jest rozdzielenie ca\u0142ego komunikatu na oddzielne fragmenty, kt\u00f3re mo\u017cna dalej przetwarza\u0107. Aby uzyska\u0107 konkretn\u0105 warto\u015b\u0107 z danego segmentu, u\u017cywamy polecenia:<\/p>\n\n\n\n<p><strong>zmienna = VAL ($nowa_nazwa)<\/strong><\/p>\n\n\n\n<p>Mo\u017cna w ten spos\u00f3b rozbudowa\u0107 wcze\u015bniejsz\u0105 p\u0119tl\u0119 warunkow\u0105, w kt\u00f3rej sprawdzali\u015bmy jedynie istnienie po\u0142\u0105czenia (EXISTCOM). Teraz, poza potwierdzeniem odbioru danych, mo\u017cliwe jest r\u00f3wnie\u017c wykonanie konkretnego ruchu zale\u017cnie od zawarto\u015bci przes\u0142anego komunikatu.<\/p>\n\n\n\n<p>Poniewa\u017c ramk\u0119, kt\u00f3ra wysy\u0142amy ma posta\u0107 [0\/0\/0\/], trzeba zastosowa\u0107 trzy zmienne odpowiadaj\u0105ce kolejna na wychylenie w osi X, Y, Z.<\/p>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"557\" height=\"396\" src=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/image20-1.jpg\" alt=\"\" class=\"wp-image-25102\"\/><\/figure>\n<\/div>\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Dzi\u0119ki temu zabiegowi faktycznie odbieramy informacje o wychyleniu joysticka w trzech osiach, ale fizycznie nie widzimy tego w kodzie programu. Mo\u017cemy to zmieni\u0107 za pomoc\u0105 dodania instrukcji <strong>PRINT $ZMN<\/strong>.<\/p>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"388\" height=\"76\" src=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/image21-6.png\" alt=\"\" class=\"wp-image-25103\"\/><\/figure>\n<\/div>\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Spowoduje to, \u017ce w zak\u0142adce <strong>ust. Sys.<\/strong> b\u0119dziemy mogli odczyta\u0107 odbieran\u0105 ramk\u0119.<\/p>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1021\" height=\"1054\" src=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/image22-5.png\" alt=\"\" class=\"wp-image-25104\" srcset=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/image22-5.png 1021w, https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/image22-5-711x734.png 711w, https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/image22-5-768x793.png 768w\" sizes=\"auto, (max-width: 1021px) 100vw, 1021px\" \/><\/figure>\n<\/div>\n\n\n<div style=\"height:50px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Nadanie plece\u0144 ruchu w zale\u017cno\u015bci od odczytu ADC<\/strong><\/h3>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4 class=\"wp-block-heading\">Logika ruchu robota<\/h4>\n\n\n\n<div style=\"height:25px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Po odebraniu i zdekodowaniu informacji o aktualnym stanie joystick\u00f3w mo\u017cemy przej\u015b\u0107 do implementacji logiki ruchu robota.<\/p>\n\n\n\n<p>W zale\u017cno\u015bci od sposobu, w jaki chcemy sterowa\u0107 robotem, mo\u017cemy wykorzysta\u0107 r\u00f3\u017cne typy polece\u0144 ruchu, np.:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>DRIVE<\/strong> \u2013 niezale\u017cne sterowanie ka\u017cd\u0105 osi\u0105,<\/li>\n\n\n\n<li><strong>DRAW<\/strong> \u2013 ruch wzgl\u0119dem uk\u0142adu wsp\u00f3\u0142rz\u0119dnych bazy robota,<\/li>\n\n\n\n<li><strong>TDRAW<\/strong> \u2013 ruch wzgl\u0119dem uk\u0142adu wsp\u00f3\u0142rz\u0119dnych narz\u0119dzia.<\/li>\n<\/ul>\n\n\n\n<p>Aby zapewni\u0107 jak najbardziej intuicyjne sterowanie, w projekcie zastosowano polecenie:<\/p>\n\n\n\n<p><strong>DRAW(ruchX, ruchY, ruchZ, obr\u00f3tX, obr\u00f3tY, obr\u00f3tZ)<\/strong><\/p>\n\n\n\n<p>Funkcja ta pozwala na r\u00f3wnoczesne zadawanie ruchu liniowego w trzech osiach przestrzennych oraz obrot\u00f3w wok\u00f3\u0142 tych osi.<\/p>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4 class=\"wp-block-heading\">Ruch w linii prostej<\/h4>\n\n\n\n<div style=\"height:25px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Na podstawie odczytanych danych z joystick\u00f3w mo\u017cna napisa\u0107 prost\u0105 instrukcj\u0119 warunkow\u0105:<strong><\/strong><\/p>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"757\" height=\"138\" src=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/image23-5.png\" alt=\"\" class=\"wp-image-25105\"\/><\/figure>\n<\/div>\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Jak zinterpretowa\u0107 t\u0119 instrukcj\u0119?Je\u017celi zmienna <strong>DATAX<\/strong> ma warto\u015b\u0107 1 (czyli joystick zosta\u0142 wychylony w lewo), to robot powinien przesun\u0105\u0107 si\u0119 o 3 mm w lewo wzd\u0142u\u017c osi X.<\/p>\n\n\n\n<p>W sytuacji, gdy ruch ma odbywa\u0107 si\u0119 tylko w jednej osi, warto\u015bci dla pozosta\u0142ych osi nale\u017cy ustawi\u0107 na 0 (lub pomin\u0105\u0107 je, je\u015bli sk\u0142adnia na to pozwala).<\/p>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4 class=\"wp-block-heading\">Ruch po skosie<\/h4>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Je\u015bli zale\u017cy nam na wykonaniu ruchu po skosie (czyli jednocze\u015bnie w wi\u0119cej ni\u017c jednej osi), wystarczy poda\u0107 odpowiednie warto\u015bci w wielu argumentach funkcji DRAW.<\/p>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"761\" height=\"137\" src=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/image24-5.png\" alt=\"\" class=\"wp-image-25106\"\/><\/figure>\n<\/div>\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Jak zinterpretowa\u0107 t\u0119 instrukcj\u0119? Je\u017celi <strong>DATAX = 2<\/strong> (czyli wychylenie joysticka w prawo), a <strong>DATAY = 1<\/strong> (wychylenie w lewo), to robot wykona ruch o 3 mm w prawo wzd\u0142u\u017c osi X oraz o 3 mm w lewo wzd\u0142u\u017c osi Y \u2013 tym samym poruszy si\u0119 po skosie.<\/p>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4 class=\"wp-block-heading\">Uzupe\u0142nienie<\/h4>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Analogicznie nale\u017cy rozbudowa\u0107 logik\u0119 o warunki sterowania ruchem:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>w osi Z,<\/li>\n\n\n\n<li>wok\u00f3\u0142 osi Rx, Ry, Rz (czyli orientacj\u0105 narz\u0119dzia),<\/li>\n<\/ul>\n\n\n\n<p>Kompletny kod steruj\u0105cy ruchem robota znajduje si\u0119 TUTAJ (LINK).<\/p>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Programowa bistabilizacja przycisku<\/strong><\/h3>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Zastosowany w uk\u0142adzie przycisk joysticka jest fizycznie monostabilny, co oznacza, \u017ce dzia\u0142a tylko podczas wci\u015bni\u0119cia \u2013 po puszczeniu natychmiast wraca do stanu pocz\u0105tkowego. Aby wykorzysta\u0107 go jako prze\u0142\u0105cznik trybu (czyli: klik \u2013 w\u0142\u0105cz, klik \u2013 wy\u0142\u0105cz), nale\u017ca\u0142o zaprogramowa\u0107 jego zachowanie w spos\u00f3b bistabilny.<\/p>\n\n\n\n<p>Efekt bistabilno\u015bci osi\u0105gni\u0119to przez wprowadzenie zmiennej logicznej (<strong>bool<\/strong>), kt\u00f3ra zmienia sw\u00f3j stan (1\/0) po ka\u017cdym naci\u015bni\u0119ciu przycisku. Program rozpoznaje moment wci\u015bni\u0119cia, por\u00f3wnuj\u0105c bie\u017c\u0105cy stan przycisku ze stanem poprzednim. Je\u017celi nast\u0105pi zmiana z 1 na 0 (czyli przycisk zosta\u0142 wci\u015bni\u0119ty), zmienna steruj\u0105ca prze\u0142\u0105cza si\u0119 na przeciwn\u0105 warto\u015b\u0107.<\/p>\n\n\n\n<p>Jak to zrobi\u0107?<\/p>\n\n\n\n<p>Nale\u017cy zadeklarowa\u0107 wej\u015bcia przycisk\u00f3w do pin\u00f3w cyfrowych, z kt\u00f3rych b\u0119d\u0105 pobiera\u0107 informacje. Dodatkowo potrzebujemy zna\u0107 obecny stan przycisku (0\/1) oraz jaki by\u0142 ostatni stan (0\/1).<\/p>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"400\" height=\"256\" src=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/image25-5.png\" alt=\"\" class=\"wp-image-25107\"\/><\/figure>\n<\/div>\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>W projekcie do obs\u0142ugi przycisk\u00f3w zastosowano specjalny tryb konfiguracji wej\u015bcia cyfrowego: <strong>INPUT_PULLUP<\/strong>. Jest to wbudowana w Arduino funkcja, kt\u00f3ra automatycznie aktywuje wewn\u0119trzny rezystor podci\u0105gaj\u0105cy (pull\u2013up resistor) dla danego pinu. Dzi\u0119ki temu pin w stanie spoczynku (gdy przycisk nie jest wci\u015bni\u0119ty) przyjmuje poziom logiczny <strong>HIGH<\/strong> (1), a w momencie naci\u015bni\u0119cia \u2013 jest \u015bci\u0105gany do masy (<strong>GND<\/strong>), co daje poziom <strong>LOW<\/strong> (0).<\/p>\n\n\n\n<p>Schemat dzia\u0142ania:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Gdy przycisk jest roz\u0142\u0105czony, pin odczytuje <strong>HIGH<\/strong> (bo jest podci\u0105gni\u0119ty do +5 V wewn\u0119trznie),<\/li>\n\n\n\n<li>Gdy przycisk jest wci\u015bni\u0119ty, \u0142\u0105czy pin z <strong>GND<\/strong>, co daje <strong>LOW<\/strong>.<\/li>\n<\/ul>\n\n\n\n<p>Ten spos\u00f3b pozwala zrezygnowa\u0107 z dodatkowych zewn\u0119trznych rezystor\u00f3w, upraszcza monta\u017c i eliminuje przypadkowe \u201ep\u0142ywaj\u0105ce\u201d stany wej\u015b\u0107.<\/p>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"409\" height=\"74\" src=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/image26-5.png\" alt=\"\" class=\"wp-image-25108\"\/><\/figure>\n<\/div>\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Aby wykry\u0107 rzeczywiste klikni\u0119cie przycisku (czyli moment jego wci\u015bni\u0119cia, a nie sam fakt bycia wci\u015bni\u0119tym), program por\u00f3wnuje stan aktualny z poprzednim stanem przycisku. Dzi\u0119ki temu system rozpoznaje tylko moment przej\u015bcia z <strong>HIGH<\/strong> na <strong>LOW<\/strong>, co oznacza jedno, pojedyncze klikni\u0119cie.<\/p>\n\n\n\n<p>Ten mechanizm zapobiega wielokrotnemu wykonaniu akcji, gdy u\u017cytkownik trzyma przycisk d\u0142u\u017cej ni\u017c jedn\u0105 iteracj\u0119 p\u0119tli <strong>loop()<\/strong>.<\/p>\n\n\n\n<p>Zastosowano uproszczon\u0105 form\u0119 warunku logicznego:<\/p>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"489\" height=\"262\" src=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/image27-3.png\" alt=\"\" class=\"wp-image-25109\"\/><\/figure>\n<\/div>\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>W celu wys\u0142ania stanu przycisk\u00f3w przez UART, zastosowano skr\u00f3cony zapis instrukcji warunkowej w postaci <strong>operatora tr\u00f3jargumentowego<\/strong>:<\/p>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"281\" height=\"72\" src=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/image28-3.png\" alt=\"\" class=\"wp-image-25110\"\/><\/figure>\n<\/div>\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Ten zapis oznacza:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>je\u015bli zmienna <strong>stan1<\/strong> ma warto\u015b\u0107 <strong>true<\/strong> \u2013 zostanie wys\u0142any znak \u201e0\u201d,<\/li>\n\n\n\n<li>je\u015bli <strong>stan1<\/strong> ma warto\u015b\u0107 <strong>false<\/strong> \u2013 zostanie wys\u0142any znak \u201e1\u201d.<\/li>\n<\/ul>\n\n\n\n<p>Operator tr\u00f3jargumentowy pozwala zapisa\u0107 t\u0119 logik\u0119 w jednej, czytelnej linijce kodu \u2013 zamiast rozbudowanej instrukcji <strong>if&#8230;else<\/strong>.<\/p>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Sterowanie narz\u0119dziem<\/strong><\/h3>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4 class=\"wp-block-heading\">Dekodowanie nowej ramki znak\u00f3w<\/h4>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Aby m\u00f3c sterowa\u0107 narz\u0119dziem, a p\u00f3\u017aniej orientacj\u0105 robota, musimy zmieni\u0107 spos\u00f3b odbierania ramki. Wcze\u015bniejsza ramka, kt\u00f3r\u0105 odbierali\u015bmy mia\u0142a posta\u0107 (0\/0\/0\/), teraz wygl\u0105da (0\/0\/0\/0\/0\/). W zwi\u0105zku z tym nale\u017cy zdekodowa\u0107 j\u0105 na nowo i odczyta\u0107, poni\u017cej znajduje si\u0119 poprawnie zdekodowana nowa ramka.<\/p>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"530\" height=\"385\" src=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/image29.jpg\" alt=\"\" class=\"wp-image-25111\"\/><\/figure>\n<\/div>\n\n\n<div style=\"height:50px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h4 class=\"wp-block-heading\">Instrukcja warunkowa steruj\u0105ca chwytakiem<\/h4>\n\n\n\n<div style=\"height:20px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Aby m\u00f3c teraz sterowa\u0107 chwytakiem, kt\u00f3ry podpi\u0119ty jest do sygna\u0142u 57, nale\u017cy napisa\u0107 poni\u017csz\u0105 komend\u0119 warunkow\u0105:<\/p>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"439\" height=\"237\" src=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/image30-3.png\" alt=\"\" class=\"wp-image-25112\"\/><\/figure>\n<\/div>\n\n\n<div style=\"height:50px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Sterowanie orientacj\u0105 robota<\/strong><\/h3>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Aby m\u00f3c sterowa\u0107 orientacj\u0105 robota, nale\u017cy prze\u0142\u0105czy\u0107 stan logiczny przycisku pierwszego z 0 na 1. Nast\u0119pnie nale\u017cy napisa\u0107 instrukcje warunkow\u0105:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>IF STAN1==1\nTHEN\n\t(logika ruchu kt\u00f3ra by\u0142a do tej pory)\nELSE\n\t(logika ruch, kt\u00f3ra by\u0142a do tej pory ze zmian\u0105 na obr\u00f3t w okre\u015blonych osiach)<\/code><\/pre>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Rezultat<\/h2>\n\n\n\n<p>Gdy mamy ju\u017c napisan\u0105 pe\u0142n\u0105 logik\u0119 kodu, mo\u017cemy przej\u015b\u0107 do test\u00f3w, czy wszystko dzia\u0142a poprawnie zgodnie z naszymi przewidywaniami i intuicj\u0105. Realizacja ruchu, kt\u00f3r\u0105 otrzymali\u015bmy:<\/p>\n\n\n\n<p>Je\u017celi <strong>stan1 = 1<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>joystick 1 w lewo: ruch robota w lewo,<\/li>\n\n\n\n<li>joystick 1 w prawo: ruch robota w prawo,<\/li>\n\n\n\n<li>joystick 1 do g\u00f3ry: robot si\u0119 cofa,<\/li>\n\n\n\n<li>joystick 1 do do\u0142u: robot \u201eidzie w nasz\u0105 stron\u0119\u201d,<\/li>\n\n\n\n<li>joystick 2 do g\u00f3ry: ruch robota w d\u00f3\u0142,<\/li>\n\n\n\n<li>joystick 2 do do\u0142u: ruch robota w g\u00f3r\u0119.<\/li>\n<\/ul>\n\n\n\n<p>Je\u017celi <strong>stan1 = 0<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>joystick 1 w lewo: obr\u00f3t robota wzgl\u0119dem X w lewo,<\/li>\n\n\n\n<li>joystick 1 w prawo: obr\u00f3t robota wzgl\u0119dem X w prawo,<\/li>\n\n\n\n<li>joystick 1 do g\u00f3ry: obr\u00f3t robota wzgl\u0119dem Y w lewo,<\/li>\n\n\n\n<li>joystick 1 do do\u0142u: obr\u00f3t robota wzgl\u0119dem Y w prawo,<\/li>\n\n\n\n<li>joystick 2 do g\u00f3ry: obr\u00f3t robota wzgl\u0119dem Z w lewo,<\/li>\n\n\n\n<li>joystick 2 do do\u0142u: obr\u00f3t robota wzgl\u0119dem Z w prawo.<\/li>\n<\/ul>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1422\" height=\"807\" src=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/image31.jpg\" alt=\"\" class=\"wp-image-25113\" srcset=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/image31.jpg 1422w, https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/image31-840x477.jpg 840w, https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/image31-768x436.jpg 768w\" sizes=\"auto, (max-width: 1422px) 100vw, 1422px\" \/><\/figure>\n<\/div>\n\n\n<div style=\"height:50px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Pomys\u0142y na rozbudow\u0119 projektu<\/h2>\n\n\n\n<p>Stworzony system sterowania robotem za pomoc\u0105 joystick\u00f3w i Arduino mo\u017ce stanowi\u0107 solidn\u0105 baz\u0119 do dalszego rozwoju. Potencjalne rozszerzenia funkcjonalno\u015bci obejmuj\u0105:<\/p>\n\n\n\n<p>1. <strong>Sterowanie pr\u0119dko\u015bci\u0105 na podstawie wychylenia joysticka<\/strong>. Zamiast przesy\u0142a\u0107 tylko kierunek ruchu, mo\u017cna analizowa\u0107, jak bardzo joystick jest wychylony, i przelicza\u0107 to na pr\u0119dko\u015b\u0107 (np. za pomoc\u0105 funkcji <strong>map()<\/strong> lub prog\u00f3w ADC).<\/p>\n\n\n\n<p>2. <strong>Zastosowanie wy\u015bwietlacza OLED lub LCD<\/strong>. Mo\u017cna doda\u0107 ekran, na kt\u00f3rym b\u0119d\u0105 wy\u015bwietlane aktualne dane: stan joystick\u00f3w, tryb pracy, status chwytaka, odebrane dane UART, itp.<\/p>\n\n\n\n<p>3. <strong>Zapis i odtwarzanie sekwencji ruch\u00f3w<\/strong>. Arduino mog\u0142oby rejestrowa\u0107 wykonywane ruchy i umo\u017cliwi\u0107 ich odtworzenie jako zaprogramowana \u015bcie\u017cka pracy robota (tryb \u201enagrywania\u201d).<\/p>\n\n\n\n<p>4. <strong>Interfejs graficzny (GUI) na komputerze lub smartfonie<\/strong>. Rozszerzenie systemu o graficzne sterowanie \u2013 np. aplikacja na PC lub telefon, kt\u00f3ra pokazuje aktualne pozycje i pozwala na sterowanie przyciskami ekranowymi.<\/p>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Pliki z programem<\/h2>\n\n\n\n<p><a href=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/1_REAL_TIME_C.zip\">Gotowy program Arduino w j\u0119zyku C++<\/a>.<\/p>\n\n\n\n<p><a href=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/2-REAL-TIME-ASORIENTATION.zip\">Gotowy program w j\u0119zyku AS \u2013 sterowanie pozycj\u0105 i orientacj\u0105<\/a>.<\/p>\n\n\n\n<p><a href=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/3-REAL-TIME-ASDRIVE.zip\">Gotowy program w j\u0119zyku AS \u2013 sterowanie pozycj\u0105 za pomoc\u0105 komend DRAW oraz DRIVE<\/a>.<\/p>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Opis b\u0142\u0119d\u00f3w<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>E099 \u2013 Poza zasi\u0119giem ramienia<\/strong><\/h3>\n\n\n\n<p>Komunikat:<\/p>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"483\" height=\"275\" src=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/image32-3.png\" alt=\"\" class=\"wp-image-25114\"\/><\/figure>\n<\/div>\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong>Mo\u017cliwa przyczyna:<\/strong> Robot otrzyma\u0142 komend\u0119, kt\u00f3ra wymusza ruch poza jego fizyczny zasi\u0119g, np. zbyt dalekie wysuni\u0119cie w osi X lub z osi\u0105gnieciem k\u0105ta, kt\u00f3rego nie jest w stanie wykona\u0107.<\/p>\n\n\n\n<p>Rozwi\u0105zanie:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Zresetuj pozycj\u0119 robota do puntku domowego (<strong>HOME<\/strong>) lub wykonaj ruch w przestrzeni roboczej.<\/li>\n\n\n\n<li>Sprawd\u017a ograniczenie przestrzeni roboczej w aplikacji Astorino.<\/li>\n<\/ul>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>E067 \u2013 Bufor zosta\u0142 przepe\u0142niony RECEIVE \u2013 maks 128 bajt\u00f3w<\/strong><\/h3>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Komunikat:<\/p>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"792\" height=\"274\" src=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/image33-3.png\" alt=\"\" class=\"wp-image-25115\" srcset=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/image33-3.png 792w, https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/image33-3-768x266.png 768w\" sizes=\"auto, (max-width: 792px) 100vw, 792px\" \/><\/figure>\n<\/div>\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p><strong>Uwaga!<\/strong> B\u0142\u0105d ten pojawia si\u0119 po wprowadzeniu robota w tryb <strong>Hold<\/strong>, po resecie b\u0142\u0119du robot mo\u017ce kontynuowa\u0107 prac\u0119.<\/p>\n\n\n\n<p>Mo\u017cliwe przyczyny:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Zbyt kr\u00f3tki odst\u0119p mi\u0119dzy wysy\u0142anymi komunikatami.<\/li>\n\n\n\n<li>Zbyt du\u017co danych przesy\u0142anych w czasie bez mo\u017cliwo\u015bci ich przetworzenia.<\/li>\n\n\n\n<li>Robot pracuje w trybie pracy <strong>Teach<\/strong>.<\/li>\n<\/ul>\n\n\n\n<p>Rozwi\u0105zanie:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Restart b\u0142\u0119du.<\/li>\n\n\n\n<li>Zwi\u0119kszenie op\u00f3\u017anie\u0144 przesy\u0142a informacji .<\/li>\n\n\n\n<li>Rozpocz\u0119cie pracy w trybie <strong>Repeat<\/strong>.<\/li>\n<\/ul>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>E046 \u2013 B\u0142\u0105d komunikacji<\/strong><\/h3>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Komunikat:<\/p>\n\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"473\" height=\"285\" src=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/image34-1.png\" alt=\"\" class=\"wp-image-25116\"\/><\/figure>\n<\/div>\n\n\n<div style=\"height:40px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p>Mo\u017cliwe przyczyny:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Utrata komunikacji z robotem.<\/li>\n<\/ul>\n\n\n\n<p>Rozwi\u0105zanie:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Nawi\u0105zanie ponownego po\u0142\u0105czenia.<\/li>\n<\/ul>\n\n\n\n<div style=\"height:30px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"dowiesz-sie\">\n<p>Autorka artyku\u0142u:<\/p><\/br>\n<h2 class=\"wp-block-heading\"><strong>Natalia Smolira<\/strong><\/h2>\n<p>Praktykantka ASTOR<\/p>\n<p>Studentka III roku kierunku Automatyka i robotyka na Politechnice Krakowskiej<\/p>\n<\/div>\n\n\n\n<div style=\"height:50px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n            <div id=\"mailerlite-form_9\" data-temp-id=\"69e1771c6f6c0\">\n                <div class=\"mailerlite-form\">\n                    <form action=\"\" method=\"post\" novalidate>\n                                                    <div class=\"mailerlite-form-title\"><h3>Newsletter Poradnika Automatyka<\/h3><\/div>\n                                                <div class=\"mailerlite-form-description\"><p>Czytaj trendy i inspiracje, podstawy automatyki, automatyk\u0119 w praktyce<\/p>\n<\/div>\n                        <div class=\"mailerlite-form-inputs\">\n                                                                                            <div class=\"mailerlite-form-field\">\n                                    <label for=\"mailerlite-9-field-email\">Email<\/label>\n                                    <input id=\"mailerlite-9-field-email\"\n                                           type=\"email\" required=\"required\"                                            name=\"form_fields[email]\"\n                                           placeholder=\"Email\"\/>\n                                <\/div>\n                                                        <div class=\"mailerlite-form-loader\">Please wait...<\/div>\n                            <div class=\"mailerlite-subscribe-button-container\">\n                                <button class=\"mailerlite-subscribe-submit\" type=\"submit\">\n                                    Zapisz si\u0119                                <\/button>\n                            <\/div>\n                            <input type=\"hidden\" name=\"form_id\" value=\"9\"\/>\n                            <input type=\"hidden\" name=\"action\" value=\"mailerlite_subscribe_form\"\/>\n                            <input type=\"hidden\" name=\"ml_nonce\" value=\"a591b055c4\"\/>\n                        <\/div>\n                        <div class=\"mailerlite-form-response\">\n                                                            <h4><p>Dzi\u0119kujemy za zapis do newslettera!<\/p>\n<\/h4>\n                                                    <\/div>\n                    <\/form>\n                <\/div>\n            <\/div>\n        <script type=\"text\/javascript\" src='https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/plugins\/official-mailerlite-sign-up-forms\/assets\/js\/localization\/validation-messages.js'><\/script>\n         <script type=\"text\/javascript\"> var selectedLanguage = \"pl\"; var validationMessages = messages[\"en\"]; if(selectedLanguage) { validationMessages = messages[selectedLanguage]; } window.addEventListener(\"load\", function () { var form_container = document.querySelector(`#mailerlite-form_9[data-temp-id=\"69e1771c6f6c0\"] form`); let submitButton = form_container.querySelector('.mailerlite-subscribe-submit'); submitButton.disabled = true; fetch('https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-admin\/admin-ajax.php', { method: 'POST', headers:{ 'Content-Type': 'application\/x-www-form-urlencoded', }, body: new URLSearchParams({ \"action\" : \"ml_create_nonce\", \"ml_nonce\" : form_container.querySelector(\"input[name='ml_nonce']\").value }) }) .then((response) => response.json()) .then((json) => { if(json.success) { form_container.querySelector(\"input[name='ml_nonce']\").value = json.data.ml_nonce; submitButton.disabled = false; } }) .catch((error) => { console.error('Error:', error); }); form_container.addEventListener('submit', (e) => { e.preventDefault(); let data = new URLSearchParams(new FormData(form_container)).toString(); let validationError = false; document.querySelectorAll('.mailerlite-form-error').forEach(el => el.remove()); Array.from(form_container.elements).forEach((input) => { if(input.type !== 'hidden') { if(input.required) { if(input.value == '') { validationError = true; let error = document.createElement(\"span\"); error.className = 'mailerlite-form-error'; error.textContent = validationMessages.required; input.after(error); return false; } } if((input.type == \"email\") && (!validateEmail(input.value))) { validationError = true; let error = document.createElement(\"span\"); error.className = 'mailerlite-form-error'; error.textContent = validationMessages.email; input.after(error); return false; } } }); if(validationError) { return false; } fade.out(form_container.querySelector('.mailerlite-subscribe-button-container'), () => { fade.in(form_container.querySelector('.mailerlite-form-loader')); }); fetch('https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-admin\/admin-ajax.php', { method: 'POST', headers:{ 'Content-Type': 'application\/x-www-form-urlencoded', }, body: data }) .then((response) => { fade.out(form_container.querySelector('.mailerlite-form-inputs'), () => { fade.in(form_container.querySelector('.mailerlite-form-response')); }); }) .catch((error) => { console.error('Error:', error); }); }); }, false); var fade = { out: function(el, fn = false) { var fadeOutEffect = setInterval(function () { if (!el.style.opacity) { el.style.opacity = 1; } if (el.style.opacity > 0) { el.style.opacity -= 0.1; } else { el.style.display = 'none'; clearInterval(fadeOutEffect); } }, 50); if( typeof (fn) == 'function') { fn(); } }, in: function(el) { var fadeInEffect = setInterval(function () { if (!el.style.opacity) { el.style.opacity = 0; } if (el.style.opacity < 1) { el.style.opacity = Number(el.style.opacity) + 0.1; } else { el.style.display = 'block'; clearInterval(fadeInEffect); } }, 50); } }; function validateEmail(email){ if(email.match( \/^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$\/ )) { return true; } return false; } <\/script> \n","protected":false},"excerpt":{"rendered":"<p>Przedstawiamy praktyczny przewodnik, kt\u00f3ry umo\u017cliwi stworzenie manualnego systemu sterowania robotem Astorino z wykorzystaniem dw\u00f3ch analogowych joystick\u00f3w oraz mikrokontrolera Arduino. Ca\u0142o\u015b\u0107 zosta\u0142a opracowana z my\u015bl\u0105 o intuicyjnej obs\u0142udze robota w czasie rzeczywistym \u2013 bez konieczno\u015bci programowania trajektorii ruchu.<\/p>\n","protected":false},"author":91,"featured_media":25082,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[234],"tags":[237,293],"class_list":["post-25151","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-automatyka-w-praktyce","tag-astorino","tag-kawasaki-robotics"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\r\n<title>Jak zbudowa\u0107 system r\u0119cznego sterowania robotem Astorino za pomoc\u0105 joystick\u00f3w i Arduino | Poradnik Automatyka<\/title>\r\n<meta name=\"description\" content=\"Prezentujemy manualny system sterowania robotem Astorino z wykorzystaniem dw\u00f3ch analogowych joystick\u00f3w oraz mikrokontrolera Arduino.\" \/>\r\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\r\n<link rel=\"canonical\" href=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/jak-zbudowac-system-recznego-sterowania-robotem-astorino-za-pomoca-joystickow-i-arduino\/\" \/>\r\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\r\n<meta property=\"og:type\" content=\"article\" \/>\r\n<meta property=\"og:title\" content=\"Jak zbudowa\u0107 system r\u0119cznego sterowania robotem Astorino za pomoc\u0105 joystick\u00f3w i Arduino | Poradnik Automatyka\" \/>\r\n<meta property=\"og:description\" content=\"Prezentujemy manualny system sterowania robotem Astorino z wykorzystaniem dw\u00f3ch analogowych joystick\u00f3w oraz mikrokontrolera Arduino.\" \/>\r\n<meta property=\"og:url\" content=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/jak-zbudowac-system-recznego-sterowania-robotem-astorino-za-pomoca-joystickow-i-arduino\/\" \/>\r\n<meta property=\"og:site_name\" content=\"Poradnik Automatyka\" \/>\r\n<meta property=\"article:published_time\" content=\"2025-09-23T11:45:00+00:00\" \/>\r\n<meta property=\"article:modified_time\" content=\"2025-09-24T17:55:44+00:00\" \/>\r\n<meta property=\"og:image\" content=\"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/astorino-joystick-head.jpg\" \/>\r\n\t<meta property=\"og:image:width\" content=\"800\" \/>\r\n\t<meta property=\"og:image:height\" content=\"298\" \/>\r\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\r\n<meta name=\"author\" content=\"\u0141ukasz Giza\" \/>\r\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\r\n<meta name=\"twitter:label1\" content=\"Napisane przez\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u0141ukasz Giza\" \/>\n\t<meta name=\"twitter:label2\" content=\"Szacowany czas czytania\" \/>\n\t<meta name=\"twitter:data2\" content=\"24 minuty\" \/>\r\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.astor.com.pl\\\/poradnikautomatyka\\\/jak-zbudowac-system-recznego-sterowania-robotem-astorino-za-pomoca-joystickow-i-arduino\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.astor.com.pl\\\/poradnikautomatyka\\\/jak-zbudowac-system-recznego-sterowania-robotem-astorino-za-pomoca-joystickow-i-arduino\\\/\"},\"author\":{\"name\":\"\u0141ukasz Giza\",\"@id\":\"https:\\\/\\\/www.astor.com.pl\\\/poradnikautomatyka\\\/#\\\/schema\\\/person\\\/cd2e7a3880df4d415ae02a8dbadc6452\"},\"headline\":\"Jak zbudowa\u0107 system r\u0119cznego sterowania robotem Astorino za pomoc\u0105 joystick\u00f3w i Arduino\",\"datePublished\":\"2025-09-23T11:45:00+00:00\",\"dateModified\":\"2025-09-24T17:55:44+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.astor.com.pl\\\/poradnikautomatyka\\\/jak-zbudowac-system-recznego-sterowania-robotem-astorino-za-pomoca-joystickow-i-arduino\\\/\"},\"wordCount\":3382,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.astor.com.pl\\\/poradnikautomatyka\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.astor.com.pl\\\/poradnikautomatyka\\\/jak-zbudowac-system-recznego-sterowania-robotem-astorino-za-pomoca-joystickow-i-arduino\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.astor.com.pl\\\/poradnikautomatyka\\\/wp-content\\\/uploads\\\/2025\\\/09\\\/astorino-joystick-head.jpg\",\"keywords\":[\"Astorino\",\"kawasaki robotics\"],\"articleSection\":[\"Automatyka w praktyce\"],\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.astor.com.pl\\\/poradnikautomatyka\\\/jak-zbudowac-system-recznego-sterowania-robotem-astorino-za-pomoca-joystickow-i-arduino\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.astor.com.pl\\\/poradnikautomatyka\\\/jak-zbudowac-system-recznego-sterowania-robotem-astorino-za-pomoca-joystickow-i-arduino\\\/\",\"url\":\"https:\\\/\\\/www.astor.com.pl\\\/poradnikautomatyka\\\/jak-zbudowac-system-recznego-sterowania-robotem-astorino-za-pomoca-joystickow-i-arduino\\\/\",\"name\":\"Jak zbudowa\u0107 system r\u0119cznego sterowania robotem Astorino za pomoc\u0105 joystick\u00f3w i Arduino | Poradnik Automatyka\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.astor.com.pl\\\/poradnikautomatyka\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.astor.com.pl\\\/poradnikautomatyka\\\/jak-zbudowac-system-recznego-sterowania-robotem-astorino-za-pomoca-joystickow-i-arduino\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.astor.com.pl\\\/poradnikautomatyka\\\/jak-zbudowac-system-recznego-sterowania-robotem-astorino-za-pomoca-joystickow-i-arduino\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.astor.com.pl\\\/poradnikautomatyka\\\/wp-content\\\/uploads\\\/2025\\\/09\\\/astorino-joystick-head.jpg\",\"datePublished\":\"2025-09-23T11:45:00+00:00\",\"dateModified\":\"2025-09-24T17:55:44+00:00\",\"description\":\"Prezentujemy manualny system sterowania robotem Astorino z wykorzystaniem dw\u00f3ch analogowych joystick\u00f3w oraz mikrokontrolera Arduino.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.astor.com.pl\\\/poradnikautomatyka\\\/jak-zbudowac-system-recznego-sterowania-robotem-astorino-za-pomoca-joystickow-i-arduino\\\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.astor.com.pl\\\/poradnikautomatyka\\\/jak-zbudowac-system-recznego-sterowania-robotem-astorino-za-pomoca-joystickow-i-arduino\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\\\/\\\/www.astor.com.pl\\\/poradnikautomatyka\\\/jak-zbudowac-system-recznego-sterowania-robotem-astorino-za-pomoca-joystickow-i-arduino\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.astor.com.pl\\\/poradnikautomatyka\\\/wp-content\\\/uploads\\\/2025\\\/09\\\/astorino-joystick-head.jpg\",\"contentUrl\":\"https:\\\/\\\/www.astor.com.pl\\\/poradnikautomatyka\\\/wp-content\\\/uploads\\\/2025\\\/09\\\/astorino-joystick-head.jpg\",\"width\":800,\"height\":298},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.astor.com.pl\\\/poradnikautomatyka\\\/jak-zbudowac-system-recznego-sterowania-robotem-astorino-za-pomoca-joystickow-i-arduino\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Automatyka w praktyce\",\"item\":\"https:\\\/\\\/www.astor.com.pl\\\/poradnikautomatyka\\\/category\\\/automatyka-w-praktyce\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Jak zbudowa\u0107 system r\u0119cznego sterowania robotem Astorino za pomoc\u0105 joystick\u00f3w i Arduino\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.astor.com.pl\\\/poradnikautomatyka\\\/#website\",\"url\":\"https:\\\/\\\/www.astor.com.pl\\\/poradnikautomatyka\\\/\",\"name\":\"Poradnik Automatyka\",\"description\":\"Poradnik Automatyka to przydatne kursy, u\u017cyteczne artyku\u0142y i merytoryczne webinary dla ka\u017cdego automatyka i elektryka.\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.astor.com.pl\\\/poradnikautomatyka\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.astor.com.pl\\\/poradnikautomatyka\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pl-PL\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.astor.com.pl\\\/poradnikautomatyka\\\/#organization\",\"name\":\"ASTOR\",\"url\":\"https:\\\/\\\/www.astor.com.pl\\\/poradnikautomatyka\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\\\/\\\/www.astor.com.pl\\\/poradnikautomatyka\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.astor.com.pl\\\/poradnikautomatyka\\\/wp-content\\\/uploads\\\/2018\\\/08\\\/ASTOR_zwykly_sam_logotyp.png\",\"contentUrl\":\"https:\\\/\\\/www.astor.com.pl\\\/poradnikautomatyka\\\/wp-content\\\/uploads\\\/2018\\\/08\\\/ASTOR_zwykly_sam_logotyp.png\",\"width\":3322,\"height\":1078,\"caption\":\"ASTOR\"},\"image\":{\"@id\":\"https:\\\/\\\/www.astor.com.pl\\\/poradnikautomatyka\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.astor.com.pl\\\/poradnikautomatyka\\\/#\\\/schema\\\/person\\\/cd2e7a3880df4d415ae02a8dbadc6452\",\"name\":\"\u0141ukasz Giza\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\\\/\\\/www.astor.com.pl\\\/poradnikautomatyka\\\/wp-content\\\/uploads\\\/2023\\\/12\\\/lukasz-giza-1.jpg\",\"url\":\"https:\\\/\\\/www.astor.com.pl\\\/poradnikautomatyka\\\/wp-content\\\/uploads\\\/2023\\\/12\\\/lukasz-giza-1.jpg\",\"contentUrl\":\"https:\\\/\\\/www.astor.com.pl\\\/poradnikautomatyka\\\/wp-content\\\/uploads\\\/2023\\\/12\\\/lukasz-giza-1.jpg\",\"caption\":\"\u0141ukasz Giza\"},\"description\":\"In\u017cynier ds. osprz\u0119tu robotyki.\",\"url\":\"https:\\\/\\\/www.astor.com.pl\\\/poradnikautomatyka\\\/autor\\\/lukaszg\\\/\"}]}<\/script>\r\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Jak zbudowa\u0107 system r\u0119cznego sterowania robotem Astorino za pomoc\u0105 joystick\u00f3w i Arduino | Poradnik Automatyka","description":"Prezentujemy manualny system sterowania robotem Astorino z wykorzystaniem dw\u00f3ch analogowych joystick\u00f3w oraz mikrokontrolera Arduino.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/jak-zbudowac-system-recznego-sterowania-robotem-astorino-za-pomoca-joystickow-i-arduino\/","og_locale":"pl_PL","og_type":"article","og_title":"Jak zbudowa\u0107 system r\u0119cznego sterowania robotem Astorino za pomoc\u0105 joystick\u00f3w i Arduino | Poradnik Automatyka","og_description":"Prezentujemy manualny system sterowania robotem Astorino z wykorzystaniem dw\u00f3ch analogowych joystick\u00f3w oraz mikrokontrolera Arduino.","og_url":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/jak-zbudowac-system-recznego-sterowania-robotem-astorino-za-pomoca-joystickow-i-arduino\/","og_site_name":"Poradnik Automatyka","article_published_time":"2025-09-23T11:45:00+00:00","article_modified_time":"2025-09-24T17:55:44+00:00","og_image":[{"width":800,"height":298,"url":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/astorino-joystick-head.jpg","type":"image\/jpeg"}],"author":"\u0141ukasz Giza","twitter_card":"summary_large_image","twitter_misc":{"Napisane przez":"\u0141ukasz Giza","Szacowany czas czytania":"24 minuty"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/jak-zbudowac-system-recznego-sterowania-robotem-astorino-za-pomoca-joystickow-i-arduino\/#article","isPartOf":{"@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/jak-zbudowac-system-recznego-sterowania-robotem-astorino-za-pomoca-joystickow-i-arduino\/"},"author":{"name":"\u0141ukasz Giza","@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/#\/schema\/person\/cd2e7a3880df4d415ae02a8dbadc6452"},"headline":"Jak zbudowa\u0107 system r\u0119cznego sterowania robotem Astorino za pomoc\u0105 joystick\u00f3w i Arduino","datePublished":"2025-09-23T11:45:00+00:00","dateModified":"2025-09-24T17:55:44+00:00","mainEntityOfPage":{"@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/jak-zbudowac-system-recznego-sterowania-robotem-astorino-za-pomoca-joystickow-i-arduino\/"},"wordCount":3382,"commentCount":0,"publisher":{"@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/#organization"},"image":{"@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/jak-zbudowac-system-recznego-sterowania-robotem-astorino-za-pomoca-joystickow-i-arduino\/#primaryimage"},"thumbnailUrl":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/astorino-joystick-head.jpg","keywords":["Astorino","kawasaki robotics"],"articleSection":["Automatyka w praktyce"],"inLanguage":"pl-PL","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.astor.com.pl\/poradnikautomatyka\/jak-zbudowac-system-recznego-sterowania-robotem-astorino-za-pomoca-joystickow-i-arduino\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/jak-zbudowac-system-recznego-sterowania-robotem-astorino-za-pomoca-joystickow-i-arduino\/","url":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/jak-zbudowac-system-recznego-sterowania-robotem-astorino-za-pomoca-joystickow-i-arduino\/","name":"Jak zbudowa\u0107 system r\u0119cznego sterowania robotem Astorino za pomoc\u0105 joystick\u00f3w i Arduino | Poradnik Automatyka","isPartOf":{"@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/jak-zbudowac-system-recznego-sterowania-robotem-astorino-za-pomoca-joystickow-i-arduino\/#primaryimage"},"image":{"@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/jak-zbudowac-system-recznego-sterowania-robotem-astorino-za-pomoca-joystickow-i-arduino\/#primaryimage"},"thumbnailUrl":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/astorino-joystick-head.jpg","datePublished":"2025-09-23T11:45:00+00:00","dateModified":"2025-09-24T17:55:44+00:00","description":"Prezentujemy manualny system sterowania robotem Astorino z wykorzystaniem dw\u00f3ch analogowych joystick\u00f3w oraz mikrokontrolera Arduino.","breadcrumb":{"@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/jak-zbudowac-system-recznego-sterowania-robotem-astorino-za-pomoca-joystickow-i-arduino\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.astor.com.pl\/poradnikautomatyka\/jak-zbudowac-system-recznego-sterowania-robotem-astorino-za-pomoca-joystickow-i-arduino\/"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/jak-zbudowac-system-recznego-sterowania-robotem-astorino-za-pomoca-joystickow-i-arduino\/#primaryimage","url":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/astorino-joystick-head.jpg","contentUrl":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2025\/09\/astorino-joystick-head.jpg","width":800,"height":298},{"@type":"BreadcrumbList","@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/jak-zbudowac-system-recznego-sterowania-robotem-astorino-za-pomoca-joystickow-i-arduino\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Automatyka w praktyce","item":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/category\/automatyka-w-praktyce\/"},{"@type":"ListItem","position":2,"name":"Jak zbudowa\u0107 system r\u0119cznego sterowania robotem Astorino za pomoc\u0105 joystick\u00f3w i Arduino"}]},{"@type":"WebSite","@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/#website","url":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/","name":"Poradnik Automatyka","description":"Poradnik Automatyka to przydatne kursy, u\u017cyteczne artyku\u0142y i merytoryczne webinary dla ka\u017cdego automatyka i elektryka.","publisher":{"@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pl-PL"},{"@type":"Organization","@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/#organization","name":"ASTOR","url":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/","logo":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/#\/schema\/logo\/image\/","url":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2018\/08\/ASTOR_zwykly_sam_logotyp.png","contentUrl":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2018\/08\/ASTOR_zwykly_sam_logotyp.png","width":3322,"height":1078,"caption":"ASTOR"},"image":{"@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/#\/schema\/person\/cd2e7a3880df4d415ae02a8dbadc6452","name":"\u0141ukasz Giza","image":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2023\/12\/lukasz-giza-1.jpg","url":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2023\/12\/lukasz-giza-1.jpg","contentUrl":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-content\/uploads\/2023\/12\/lukasz-giza-1.jpg","caption":"\u0141ukasz Giza"},"description":"In\u017cynier ds. osprz\u0119tu robotyki.","url":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/autor\/lukaszg\/"}]}},"_links":{"self":[{"href":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-json\/wp\/v2\/posts\/25151","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-json\/wp\/v2\/users\/91"}],"replies":[{"embeddable":true,"href":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-json\/wp\/v2\/comments?post=25151"}],"version-history":[{"count":1,"href":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-json\/wp\/v2\/posts\/25151\/revisions"}],"predecessor-version":[{"id":25159,"href":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-json\/wp\/v2\/posts\/25151\/revisions\/25159"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-json\/wp\/v2\/media\/25082"}],"wp:attachment":[{"href":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-json\/wp\/v2\/media?parent=25151"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-json\/wp\/v2\/categories?post=25151"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.astor.com.pl\/poradnikautomatyka\/wp-json\/wp\/v2\/tags?post=25151"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}