{"id":2849,"date":"2021-04-30T15:45:00","date_gmt":"2021-04-30T15:45:00","guid":{"rendered":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/?p=2849"},"modified":"2021-05-07T06:55:05","modified_gmt":"2021-05-07T06:55:05","slug":"sterowanie-serwem-za-pomoca-joysticka-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-3-3-2-2-2-2-2-2-2-2-3-2-3-3-2-3-2-2-2-2-2-2-2","status":"publish","type":"post","link":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/?p=2849","title":{"rendered":"2x BT master i slave + Maskotka + RGB"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Wojny robot\u00f3w: <\/h2>\n\n\n\n<p>Prace podzieli\u0142y si\u0119 na dwa tory &#8211; niezale\u017cnie powstaje sterowanie, niezale\u017cnie poznawane s\u0105 mo\u017cliwo\u015bci kolorowych LED-\u00f3w WS2812B. Dzi\u0119ki takiemu podzia\u0142owi projekt brnie do przodu, cho\u0107 przyzna\u0107 trzeba, \u017ce powstanie tylko jedno sterowanie &#8211; bez konkurencji, wi\u0119c&#8230; oby by\u0142o dobre \ud83d\ude09 <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">BT master<\/h2>\n\n\n\n<p>Pan Rafa\u0142 postanowi\u0142 wykorzysta\u0107 dwa modu\u0142y Bluetooth (BT) aby komunikowa\u0107 si\u0119 pomi\u0119dzy pojazdem a kontrolerem (bez czekania na wykorzystanie radi\u00f3wek nRF24L &#8211; szkoda&#8230; ale do tego pewnie jeszcze wr\u00f3cimy). <\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"573\" src=\"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2021\/05\/DSC_1114-1-1024x573.jpg\" alt=\"\" class=\"wp-image-2851\" srcset=\"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2021\/05\/DSC_1114-1-1024x573.jpg 1024w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2021\/05\/DSC_1114-1-300x168.jpg 300w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2021\/05\/DSC_1114-1-768x430.jpg 768w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2021\/05\/DSC_1114-1-1536x860.jpg 1536w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2021\/05\/DSC_1114-1.jpg 1800w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>Pojazd (z lewej, modu\u0142 BT MASTER) oraz &#8222;kontroler&#8221; do sterowania (z prawej, BT SLAVE)<\/figcaption><\/figure><\/div>\n\n\n\n<p>Dotychczas to telefon z aplikacj\u0105 na Androida by\u0142 MASTEREM (kontrolerem) \u0142\u0105cz\u0105cym si\u0119 z pojazdem, czyli  BT SLAV-em. Teraz jednak u\u017cywamy dw\u00f3ch BT w tym celu &#8211; cho\u0107 przyzna\u0107 trzeba, \u017ce pro\u015bciej, efektywniej i taniej wydaje si\u0119  zastosowanie wspomnianych na wst\u0119pie modu\u0142\u00f3w nRF24L. <\/p>\n\n\n\n<p>Kontroler ma pod\u0142\u0105czony modu\u0142 JOY-stica oraz modu\u0142 BT, kt\u00f3ry wysy\u0142a odczyty. Odbiorc\u0105 tych pakiet\u00f3w jest modu\u0142 BT w poje\u017cdzie, kt\u00f3ry \u0142\u0105czy si\u0119 z naszym kontrolerem. Aby to by\u0142o mo\u017cliwe nale\u017cy MASTERA skonfigurowa\u0107 tak, aby po jego uruchomieniu &#8222;szuka\u0142&#8221; kontrolera i si\u0119 z nim \u0142\u0105czy\u0142. Realizuje si\u0119 to przez <strong>tryb komend AT<\/strong>. <\/p>\n\n\n\n<p>W tym celu pod\u0142\u0105czamy BT z dodatkowym pinem ustawionym na HIGH (poni\u017cej pin #6 z Arduino, nazwany KEY, po\u0142\u0105czony z pinem STATUS w module XM-15B) i programikiem wed\u0142ug poni\u017cszego schematu:<\/p>\n\n\n\n<div class=\"wp-block-image is-style-default\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"796\" src=\"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2021\/05\/tryb_komendAT-1024x796.png\" alt=\"\" class=\"wp-image-2852\" srcset=\"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2021\/05\/tryb_komendAT-1024x796.png 1024w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2021\/05\/tryb_komendAT-300x233.png 300w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2021\/05\/tryb_komendAT-768x597.png 768w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2021\/05\/tryb_komendAT.png 1078w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption>Wej\u015bcie w tryb komend AT.<\/figcaption><\/figure><\/div>\n\n\n\n<p>Jak wida\u0107 program czyta bajty z portu szeregowego PC-ta i wysy\u0142a je do modu\u0142u BT pod\u0142\u0105czonego do Arduino (metody readString() oraz write()). Sprawdzamy, czy mamy wszystko poprawnie dzia\u0142aj\u0105ce wywo\u0142uj\u0105c komend\u0119 AT+NAME. Powinna pojawi\u0107 si\u0119 nazwa naszego modu\u0142u (uwaga: nawet niepoprawnie wy\u015bwietlona) ORAZ  nowa <strong>linia z napisem OK<\/strong>. Je\u015bli tak nie jest, trzeba sprawdzi\u0107 pod\u0142\u0105czenia.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"878\" height=\"414\" src=\"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2021\/05\/BT_MASTER-monitor.png\" alt=\"\" class=\"wp-image-2853\" srcset=\"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2021\/05\/BT_MASTER-monitor.png 878w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2021\/05\/BT_MASTER-monitor-300x141.png 300w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2021\/05\/BT_MASTER-monitor-768x362.png 768w\" sizes=\"auto, (max-width: 878px) 100vw, 878px\" \/><figcaption>Modu\u0142 BT w trybie komend AT. Zwr\u00f3\u0107 uwag\u0119 na znacznik ko\u0144ca linii: NL+CR.<\/figcaption><\/figure><\/div>\n\n\n\n<p>Tryb komend AT umo\u017cliwia nam zmian\u0119 nazwy urz\u0105dzenia BT, zmian\u0119 has\u0142a czy innych parametr\u00f3w komunikacji (np. szybko\u015b\u0107 transmisji szeregowej). Ale my wykorzystujemy go najpierw do odczytania numeru identyfikacyjnego urz\u0105dzenia BT SLAVE &#8211; naszego kontrolera. Parowanie urz\u0105dze\u0144 BT odbywa si\u0119 przez ten numer (a nie przez przyjazne nazwy, jak w Androidzie). Wydajeny komend\u0119 AT+ADDR i mamy odpowied\u017a: u nas 001135938823. Teraz wychodzimy z tryb AT dla kontrolera (BT SLAVE) i wgrywamy ten sam program na Arduino z BT MASTEREM.<\/p>\n\n\n\n<p>Pojazd (BT MASTER) ma si\u0119 \u0142\u0105czy\u0107 z konkretnym modu\u0142em BT &#8211; znamy jego ID. Musimy wi\u0119c najpierw ustawi\u0107 go w tryb MASTER-a (komenda AT+ROLE zwr\u00f3ci 0 gdy modu\u0142 jest SLAVE-em, a 1 gdy MASTER-em; zmiana trybu odbywa si\u0119 komend\u0105 AT+ROLE=1). Nast\u0119pnie zapisujemy adres kontrolera poleceniem AT+BIND=001135938823. Teraz mo\u017cna ju\u017c wy\u0142\u0105czy\u0107 program dla modu\u0142\u00f3w BT pracuj\u0105cych w trybie AT i wgra\u0107 nasz w\u0142asny programik na Arduino, kt\u00f3re przez UART b\u0119dzie odczytywa\u0107 dane przesy\u0142ane przez kontroler modu\u0142ami BT (oczywi\u015bcie &#8211; je\u015bli w\u0142\u0105czymy pojazd, a kontroler nie b\u0119dzie w\u0142\u0105czony &#8211; nie nast\u0105pi komunikacja i pojazd nie b\u0119dzie otrzymywa\u0107 instrukcji steruj\u0105ych).  <\/p>\n\n\n\n<p>Kto ma by\u0107 MASTER, kto ma by\u0107 SLAVE?<\/p>\n\n\n\n<p>Pan Rafa\u0142 zdecydowa\u0142, \u017ce kontroler b\u0119dzie SLAVE, a pojazd MASTEREM. Czy to dobrze? Mo\u017cna by\u0142o by zrobi\u0107 na odwr\u00f3t&#8230; I takie w\u0142a\u015bnie rozwi\u0105zanie jest <strong>chyba lepsze<\/strong>, bo pojazd jako SLAVE czeka na dane wysy\u0142ane przez&#8230; dowolne sparowane urz\u0105dznie! Mo\u017ce to by\u0107 dedykowany kontroler (kt\u00f3ry w\u0142a\u015bnie tu powstaje) ale tak\u017ce jaka\u015b apka na Androidzie &#8211; w\u00f3wczas telefon jako MASTER mo\u017ce sterowa\u0107 naszym pojazdem. Takie rozwi\u0105zanie jest bardziej uniwersalne, wi\u0119c pewnie w przysz\u0142o\u015bci b\u0119dzie zastosowane. <\/p>\n\n\n\n<p>Mo\u017cna te\u017c zajrze\u0107 do opisu \u0142\u0105czenia modu\u0142\u00f3w BT master &lt;-&gt; slave na <a rel=\"noreferrer noopener\" href=\"https:\/\/howtomechatronics.com\/tutorials\/arduino\/how-to-configure-pair-two-hc-05-bluetooth-module-master-slave-commands\/\" target=\"_blank\">tej stronie<\/a> &#8211; polecam. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">WS2812B<\/h2>\n\n\n\n<p>Pan Tomasz postawi\u0142 sobie zadanie p\u0142ynnego przej\u015bcia kolor\u00f3w: od niebieskiego do czerwonego w module WS2812B. Te dwa kolory maj\u0105 by\u0107 odpowiedzialne za warto\u015bci odczytanego pola magnetyczna magnesu. Zapis kolor\u00f3w w systemie RGB nie jest tutaj najwygoniejszy, wi\u0119c wyb\u00f3r pad\u0142 na zastosowanie modelu HSV.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"271\" height=\"271\" src=\"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2021\/05\/opencv-rgb-diagram.png\" alt=\"\" class=\"wp-image-2858\" srcset=\"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2021\/05\/opencv-rgb-diagram.png 271w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2021\/05\/opencv-rgb-diagram-150x150.png 150w\" sizes=\"auto, (max-width: 271px) 100vw, 271px\" \/><figcaption>Model kolor\u00f3w RGB. Przej\u015bcie od czerwieni do niebieskiego to jednoczesna zmiana dw\u00f3ch amplitud kolor\u00f3w: R i B.<\/figcaption><\/figure><\/div>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"850\" height=\"504\" src=\"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2021\/05\/HSV-color-space-and-RGB-color-transformation.png\" alt=\"\" class=\"wp-image-2859\" srcset=\"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2021\/05\/HSV-color-space-and-RGB-color-transformation.png 850w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2021\/05\/HSV-color-space-and-RGB-color-transformation-300x178.png 300w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2021\/05\/HSV-color-space-and-RGB-color-transformation-768x455.png 768w\" sizes=\"auto, (max-width: 850px) 100vw, 850px\" \/><figcaption>Model kolor\u00f3w HSV. Droga od czerwieni do niebieskiego to zmiana jednego parametru &#8211; &#8222;k\u0105ta&#8221;, czyli warto\u015bci H.<\/figcaption><\/figure><\/div>\n\n\n\n<p>Wi\u0119cej&#8230;<br><br>Fajny link: https:\/\/www.arduinoslovakia.eu\/blog\/2018\/4\/neopixel-ring-hsv-test?lang=en<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Maskotka &#8211; sterowanie.<\/h2>\n\n\n\n<p>Sam PID nie wystarczy\u0142. Modu\u0142 JOY-sticka ma mechaniczn\u0105 &#8222;wad\u0119&#8221;, \u017ce wychyla si\u0119 g\u00f3ra\/d\u00f3\u0142 (lewo\/prawo) <strong>mniej<\/strong> ni\u017c &#8222;pod k\u0105tem&#8221;. Maksymalne odczyty (1023 w przypadku Arduino UNO) otrzymuje si\u0119 przy skrajnym wychyleniu w g\u00f3r\u0119\/prawo (d\u00f3\u0142\/lewo) ale wychylaj\u0105c joy &#8222;po skosie&#8221; mamy (teoretycznie) o pierwiastek z dw\u00f3ch wi\u0119cej! Dlatego te\u017c to w\u0142a\u015bnie wychylenia &#8222;pod k\u0105tem&#8221; maj\u0105 warto\u015bci 1023 a skrajne pionowe\/poziome uzyskuj\u0105 te warto\u015bci jeszcze przed swoim maksymalnym wychyleniem &#8211; dalsze wychylanie nic ju\u017c nie daje (mamy ci\u0105gle 1023 &#8211; zakres ruchu joya &#8222;zmarnowany&#8221;). Aby to zniwelowa\u0107 Pan Bartek znalaz\u0142 ciekawe mapowanie kwadratu na k\u00f3\u0142ko:<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large is-resized\"><a href=\"https:\/\/www.xarg.org\/2017\/07\/how-to-map-a-square-to-a-circle\/\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2021\/05\/square-circle-mapping.png\" alt=\"\" class=\"wp-image-2863\" width=\"558\" height=\"290\" srcset=\"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2021\/05\/square-circle-mapping.png 744w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2021\/05\/square-circle-mapping-300x156.png 300w\" sizes=\"auto, (max-width: 558px) 100vw, 558px\" \/><\/a><figcaption>Odwzorowanie kwadratu na okr\u0105g (kliknij obrazek aby przej\u015b\u0107 do \u017ar\u00f3d\u0142a).<\/figcaption><\/figure><\/div>\n\n\n\n<p>Taka modyfikacja sterowania pozytywnie wp\u0142yn\u0119\u0142a na kontrolowanie Maskotki. Gratulacje!<\/p>\n\n\n\n<p>Kolejne spotkanie: czwartek 6 maj 2021, godz. 15:15. <\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wojny robot\u00f3w: Prace podzieli\u0142y si\u0119 na dwa tory &#8211; niezale\u017cnie powstaje sterowanie, niezale\u017cnie poznawane s\u0105 mo\u017cliwo\u015bci kolorowych LED-\u00f3w WS2812B. Dzi\u0119ki takiemu podzia\u0142owi projekt brnie do przodu, cho\u0107 przyzna\u0107 trzeba, \u017ce powstanie tylko jedno sterowanie &#8211; bez konkurencji, wi\u0119c&#8230; oby by\u0142o dobre \ud83d\ude09 BT master Pan Rafa\u0142 postanowi\u0142 wykorzysta\u0107 dwa modu\u0142y Bluetooth (BT) aby komunikowa\u0107 si\u0119 [&hellip;]<\/p>\n","protected":false},"author":5,"featured_media":2851,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[52],"tags":[58,234,275,307],"class_list":{"0":"post-2849","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","6":"hentry","7":"category-fibot","8":"tag-bluetooth","9":"tag-maskotka","10":"tag-pid","11":"tag-wojny","13":"post-with-thumbnail","14":"post-with-thumbnail-large"},"_links":{"self":[{"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=\/wp\/v2\/posts\/2849","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2849"}],"version-history":[{"count":7,"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=\/wp\/v2\/posts\/2849\/revisions"}],"predecessor-version":[{"id":2868,"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=\/wp\/v2\/posts\/2849\/revisions\/2868"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=\/wp\/v2\/media\/2851"}],"wp:attachment":[{"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2849"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2849"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2849"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}