{"id":770,"date":"2017-06-14T17:53:23","date_gmt":"2017-06-14T17:53:23","guid":{"rendered":"http:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/?p=770"},"modified":"2017-06-15T06:37:13","modified_gmt":"2017-06-15T06:37:13","slug":"zajecia-nr-5-serwo-silniki-map-bluetooth","status":"publish","type":"post","link":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/?p=770","title":{"rendered":"Zaj\u0119cia nr 5 &#8211; serwo silniki, map(), bluetooth"},"content":{"rendered":"<h2>&nbsp;Serwo silnik (a w\u0142a\u015bciwie mikro-serwo)<\/h2>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-290 alignleft\" src=\"http:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2016\/06\/serwo1-300x300.jpg\" alt=\"serwo1\" width=\"300\" height=\"300\" srcset=\"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2016\/06\/serwo1-300x300.jpg 300w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2016\/06\/serwo1-150x150.jpg 150w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2016\/06\/serwo1.jpg 500w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/>Czyli silnik, kt\u00f3ry obraca si\u0119 od 0 do 180 stopni (ma blokad\u0119 na inne wychylenia). Potem utrzymuje swoj\u0105 pozycj\u0119. S\u0142u\u017cy do tworzenia obrotowych ramion itd&#8230;<\/p>\n<p>Trzy przewody &#8211; zasilanie (czerowny +5V, czarny\/br\u0105zowy GND) oraz jeden steruj\u0105cy &#8211; <strong>musi by\u0107 PWM<\/strong>. Za du\u017co nie wnika\u0142em o co chodzi w sterowaniu tym silnikiem, tylko wspomnia\u0142em o potencjometrze wewn\u0105trz i o wype\u0142nieniu sygna\u0142u steruj\u0105cego&#8230; wi\u0119cej mo\u017ce p\u00f3\u017aniej? Zobaczymy.<\/p>\n<p>&nbsp;<\/p>\n<p>Do sterowania tym silnikiem u\u017cyli\u015bmy <span style=\"text-decoration: underline;\">2 nowych<\/span> funkcji z <span style=\"text-decoration: underline;\">nowej<\/span> biblioteki:<\/p>\n<ul style=\"list-style-type: circle;\">\n<li><strong>#include &lt;Servo.h&gt;<\/strong> &#8211; na pocz\u0105tku programu informujemy, \u017ce chcemy funkcje z tej nowej biblioteki<\/li>\n<li><strong>Servo <em>silniczek<\/em>;<\/strong> tworzymy zmienn\u0105 typu silnik-serwo, czyli w\u0142a\u015bnie o to nam chodzi!<\/li>\n<li><em><strong>silniczek.<\/strong><\/em><strong>attach(3);<\/strong> powoduje przekazanie informacji do Arduino, \u017ce sterujemy silnikiem przez pin numer 3 (przypominam: musi by\u0107 to pin PWM, czyli jak nie 3, to 5,9&#8230;)<\/li>\n<li><em><strong>silniczek.<\/strong><\/em><strong>write(133); <\/strong>ustawia nasz silnik w pozycji 133 stopni. Albo na dowolny inny z zakresu 0..180 stopni. Dziecinie proste \ud83d\ude09<\/li>\n<\/ul>\n<h2>Serwo sterowane z klawiatury<\/h2>\n<p>Przypomnieli\u015bmy sobie jak odczytywa\u0107 liczby z klawiatury (funkcja <strong>parseInt()<\/strong> dla obiektu Serial) i stworzyli\u015bmy program ustawiaj\u0105cy silnik w pozycji wczytanej z klawiatury. Proste a przyjemne. No i zawsze warto powtarza\u0107 wiedz\u0119 \ud83d\ude09<\/p>\n<h2>Serwo sterowane potencjometrem<\/h2>\n<p>Po\u0142\u0105czenie poprzednich zaj\u0119\u0107 &#8211; potencjometr liniowy (dzielnik napi\u0119\u0107!) wykorzystany do ustawiania pozycji serwa &#8211; ruszam &#8222;ga\u0142k\u0105&#8221; w lewo, orczyk w serwie obraca si\u0119 w lewo. Tak samo w prawo. Fajne!<\/p>\n<h2>Serwo sterowane potencjometrem &#8211; program PRO<\/h2>\n<p>Dbamy o szczeg\u00f3\u0142y &#8211; i nie chcemy ustawia\u0107 po\u0142o\u017cenia serwa w\u00f3wczas, gdy potencjometr nie zmini\u0142 swojej pozycji. Bez z\u0142o\u015bliwo\u015bci &#8211; my staramy si\u0119 <strong>programowa\u0107 na serio<\/strong>!&nbsp;<\/p>\n<h2>Pr\u0105d &#8222;zjadany&#8221; przez serwo &#8211; mierzymy!<\/h2>\n<p>W skrajnych ustawieniach serwa (tj. w okolicy 0 stopni, oraz w okolicach 180 stopni) s\u0142yszymy buczenie\/piszczenie serwo-silnika. Co\u015b si\u0119 dzieje. Amperomierz w gar\u015b\u0107 i <strong>mierzymy pr\u0105d<\/strong>.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-294 size-large\" src=\"http:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2016\/06\/serwo1-1024x654.png\" alt=\"serwo1\" width=\"640\" height=\"409\" srcset=\"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2016\/06\/serwo1-1024x654.png 1024w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2016\/06\/serwo1-300x192.png 300w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2016\/06\/serwo1-768x491.png 768w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2016\/06\/serwo1.png 1276w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/p>\n<p>Przyjrzyj si\u0119 uwa\u017cnie obrazkowi i zwr\u00f3\u0107 uwag\u0119, jak pod\u0142\u0105czony jest amperomierz.<\/p>\n<p>Oczywi\u015bcie w <strong>wirtualnym Arduino<\/strong>&nbsp;(ci\u0105gle polecam circuits.io) silniczek serwo jest idealny i nie widzimy tego, co by\u0142o u nas na zaj\u0119ciach&#8230;.<\/p>\n<p>Dodatkowo: w przypadku miernik\u00f3w uniwersalnych ustaw <strong>najwi\u0119ksz\u0105 warto\u015b\u0107 pr\u0105du<\/strong>, jak\u0105 si\u0119 spodziewasz dosta\u0107 &#8211; nie odwrotnie! W przeciwnym przypadku zwi\u0119kszaj\u0105c zakres <strong>przepalisz bezpiecznik<\/strong> w multimetrze&#8230;<\/p>\n<h2>Funkcja map()<\/h2>\n<p>Czyli skalowanie warto\u015bci z jednego zakresu na drugi zakres. Przyk\u0142ad, z kt\u00f3rym my si\u0119 bawili\u015bmy: serwo silniczek sterowany potencjometrem. Odczytujemy nastawy potencjometru z portu analogowego Arduino jako liczb\u0119 (nazwijmy j\u0105&nbsp;<strong>x<\/strong>) z zakresu&nbsp;<strong>0..1023<\/strong>, a nast\u0119pnie ustawiamy serwo w po\u0142o\u017ceniu z zakresu&nbsp;<strong>0..180<\/strong> stopni (nazwijmy te stopnie <strong>y<\/strong>). Czyli musimy dokona\u0107 zamiany wczytaj liczby&nbsp;<strong>x<\/strong> na&nbsp;<strong>y<\/strong>. Na zaj\u0119ciach pokaza\u0142em skalowanie funkcj\u0105 liniow\u0105, rozwi\u0105zali\u015bmy ten uk\u0142ad r\u00f3wna\u0144, ale Arduino jest tak\u017ce dla tych co tego nie umiej\u0105 zrobi\u0107 i przygotowa\u0142o funkcj\u0119&nbsp;<strong>map().<\/strong> W naszym przypadku b\u0119dzie to:<\/p>\n<pre class=\"lang:default decode:true \" title=\"Zamiana odczytu potencjometru na k\u0105t serwa.\">y=map(x, 0, 1023, 0, 180);<\/pre>\n<p>Nale\u017cy pami\u0119ta\u0107, \u017ce funkcja&nbsp;<strong>map()<\/strong> dzia\u0142a tylko na liczbach <strong>ca\u0142kowitych <\/strong>(int).<\/p>\n<h2>Serwo sterowane&nbsp;przez Androida &#8211; bluetooth XM-15B<\/h2>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-771 alignleft\" src=\"http:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2017\/06\/xm-15b.jpg\" alt=\"\" width=\"212\" height=\"212\" srcset=\"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2017\/06\/xm-15b.jpg 800w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2017\/06\/xm-15b-150x150.jpg 150w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2017\/06\/xm-15b-300x300.jpg 300w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2017\/06\/xm-15b-768x768.jpg 768w\" sizes=\"auto, (max-width: 212px) 100vw, 212px\" \/>Dlaczego ten? Bo dzia\u0142a w zakresie 3-6V, czyli mo\u017cna go bezpiecznie pod\u0142\u0105czy\u0107 do Arduino. Inne modele &#8211; popularne HC-05, HC-06 komunikuj\u0105 si\u0119 przez 3.3V i wymagaj\u0105 &#8222;zbijania&#8221; napi\u0119cia (np. dzielnikiem napi\u0119\u0107). To proste, ale&#8230; po co si\u0119 w to bawi\u0107, jak mo\u017cna kupi\u0107 w\u0142a\u015bnie modu\u0142 pozbawiony tej uci\u0105\u017cliwo\u015bci? Praujemy wi\u0119c z XM-15B.<\/p>\n<p>&nbsp;<\/p>\n<p>Pami\u0119tajmy o \u0142\u0105czeniu &#8222;na krzy\u017c&#8221; port\u00f3w RxD,TxD modu\u0142u XM-15B z portami RxD,TxD p\u0142ytki Arduino (tak\u017ce tymi wirtualnymi).<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-775\" src=\"http:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2017\/06\/bt.png\" alt=\"\" width=\"1061\" height=\"823\" srcset=\"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2017\/06\/bt.png 1061w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2017\/06\/bt-300x233.png 300w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2017\/06\/bt-768x596.png 768w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2017\/06\/bt-1024x794.png 1024w\" sizes=\"auto, (max-width: 1061px) 100vw, 1061px\" \/><\/p>\n<h1>Komunikacja z 8LAMP<\/h1>\n<p>Ze sklepu Play bierzemy <a href=\"https:\/\/play.google.com\/store\/apps\/details?id=dev.merahkemarun.btcontrollamp\">prost\u0105 apk\u0119<\/a> i sprawdzamy, co ona wysy\u0142a do naszego bluetootha. Kod:<\/p>\n<pre class=\"lang:arduino decode:true\" title=\"Odczytywanie z aplik 8Lamp\">#include &lt;SoftwareSerial.h&gt;\r\n\r\n#define RxD 8\r\n#define TxD 9\r\nSoftwareSerial btSerial(RxD,TxD);\r\n\r\nvoid setup() {\r\n  Serial.begin(9600);\r\n  btSerial.begin(9600);\r\n  Serial.println(\"start!\");\r\n}\r\n\r\nvoid loop() {\r\n  if (btSerial.available()){\r\n    Serial.print(\"Odebra\u0142em znak= \");\r\n    Serial.println(btSerial.read());\r\n  }  \r\n}\r\n<\/pre>\n<p>Nast\u0119pnie tak modyfikujemy ten program, by wczytany znak sterowa\u0142 naszym serwem &#8211; guzik '1&#8242; ustawia\u0142 serwo na 90 stopni, guzik '2&#8242; na 10 stopni i guzik '3&#8242; na 170 stopni. Inne modyfikacje mile widziane \ud83d\ude09<\/p>\n<h1>Wa\u017cne<\/h1>\n<p>Na nast\u0119pne zaj\u0119cia prosz\u0119 o zainstalowanie ze sklepu Play aplikacji <a href=\"https:\/\/play.google.com\/store\/apps\/details?id=eu.jahnestacado.arduinorc&amp;hl=pl\">Arduino Bluetooth Controler<\/a>&nbsp;bo b\u0119dziemy sterowa\u0107 pojazdem.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-777\" src=\"http:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2017\/06\/arduino-bt-controller.png\" alt=\"\" width=\"678\" height=\"407\" srcset=\"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2017\/06\/arduino-bt-controller.png 678w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2017\/06\/arduino-bt-controller-300x180.png 300w\" sizes=\"auto, (max-width: 678px) 100vw, 678px\" \/><\/p>\n","protected":false},"excerpt":{"rendered":"<p>&nbsp;Serwo silnik (a w\u0142a\u015bciwie mikro-serwo) Czyli silnik, kt\u00f3ry obraca si\u0119 od 0 do 180 stopni (ma blokad\u0119 na inne wychylenia). Potem utrzymuje swoj\u0105 pozycj\u0119. S\u0142u\u017cy do tworzenia obrotowych ramion itd&#8230; Trzy przewody &#8211; zasilanie (czerowny +5V, czarny\/br\u0105zowy GND) oraz jeden steruj\u0105cy &#8211; musi by\u0107 PWM. Za du\u017co nie wnika\u0142em o co chodzi w sterowaniu tym [&hellip;]<\/p>\n","protected":false},"author":5,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[169],"tags":[67,58,75,76,72,71,168],"class_list":["post-770","post","type-post","status-publish","format-standard","hentry","category-talentyxxiw_2017","tag-analogread","tag-bluetooth","tag-dzielnik-napiec","tag-map","tag-servo","tag-serwo","tag-xm-15b"],"_links":{"self":[{"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=\/wp\/v2\/posts\/770","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=770"}],"version-history":[{"count":5,"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=\/wp\/v2\/posts\/770\/revisions"}],"predecessor-version":[{"id":780,"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=\/wp\/v2\/posts\/770\/revisions\/780"}],"wp:attachment":[{"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=770"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=770"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=770"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}