{"id":1372,"date":"2018-11-23T17:36:18","date_gmt":"2018-11-23T17:36:18","guid":{"rendered":"http:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/?p=1372"},"modified":"2018-11-27T08:45:04","modified_gmt":"2018-11-27T08:45:04","slug":"sterowanie-serwem-za-pomoca-joysticka-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2-2","status":"publish","type":"post","link":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/?p=1372","title":{"rendered":"Pojazd (autonomiczny), refleks (LEDy + przyciski) oraz line follower"},"content":{"rendered":"<p>Ci\u0105gle dwa\/trzy niezale\u017cne projekty. Wygl\u0105da na to, \u017ce b\u0119d\u0105 jednak trzy, bo Pan Bartek &#8222;atakuje&#8221; temat line followera (\u015bwietnie!)<\/p>\n<p>1) zesp\u00f3\u0142 od pojazdu po sukcesie sterowania pojazdem przez cz\u0142owieka (bluetooth) poznawa\u0142 temat czujki odleg\u0142o\u015bci HC-SR04. Zamontowali ju\u017c nawet &#8222;trzymak&#8221; w poje\u017adzie &#8211; bez u\u017cycia wkr\u0119taki! zuchy! \ud83d\ude09 Tak, tak &#8211; to &#8222;oklepany&#8221; uk\u0142ad, ale ka\u017cdy od czego\u015b zaczyna &#8211; prawda? Trzymam wi\u0119c kciuki za poprawne oprogramowanie go w poje\u017adzie i zrobienie autonomicznego robota (poruszaj\u0105cego si\u0119 bez ingerencji cz\u0142owieka, w tym przypadku: wykrywaj\u0105cego kolizje i zmieniaj\u0105cego kierunek ruchu).<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-1397 size-large\" src=\"http:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2018\/11\/mDSC_6501-1024x576.jpg\" alt=\"\" width=\"640\" height=\"360\" srcset=\"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2018\/11\/mDSC_6501-1024x576.jpg 1024w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2018\/11\/mDSC_6501-300x169.jpg 300w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2018\/11\/mDSC_6501-768x432.jpg 768w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2018\/11\/mDSC_6501.jpg 1200w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/p>\n<p>2) &#8222;refleks&#8221; przeszed\u0142 w stan rozbudowany i teraz sk\u0142ada si\u0119 z 3 losowo zapalanych LED\u00f3w, i \u0142apaniu reakcji przez 3 przyciski. Uk\u0142ad:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-1396 size-large\" src=\"http:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2018\/11\/mDSC_6505-1024x576.jpg\" alt=\"\" width=\"640\" height=\"360\" srcset=\"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2018\/11\/mDSC_6505-1024x576.jpg 1024w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2018\/11\/mDSC_6505-300x169.jpg 300w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2018\/11\/mDSC_6505-768x432.jpg 768w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2018\/11\/mDSC_6505.jpg 1200w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/p>\n<p>oraz program (+du\u017co komentarzy):<\/p>\n<pre class=\"lang:arduino decode:true  \" title=\"refleks-v3\">\/\/piny z podlaczonymi przyciskami\r\nint btn[]={2,4,6};\r\n\/\/piny z podlaczonymi ledami\r\nint led[]={3,5,7};\r\n\r\nvoid setup() {\r\n  Serial.begin(9600);\r\n  for (int i=0; i&lt;3; i++){\r\n    pinMode(btn[i],INPUT_PULLUP);\r\n    pinMode(led[i], OUTPUT);\r\n  }\r\n}\r\n\r\nunsigned int i;\r\nunsigned int cr,tstart,tstop;\r\nbyte bt1, bt2, bt3, LOS;\r\n\r\nvoid loop() {\r\n  \/\/\"dysko-mode\" informujace o poczatku rozgrywki\r\n  for(i=0;i&lt;3;i++){\r\n        digitalWrite(led[0], HIGH);\r\n        delay(100);\r\n        digitalWrite(led[1], HIGH);\r\n        digitalWrite(led[0], LOW);\r\n        delay(100);\r\n        digitalWrite(led[2], HIGH);\r\n        digitalWrite(led[1], LOW);\r\n        delay(100);\r\n        digitalWrite(led[2], LOW);\r\n        delay(100);\r\n    }\/\/\"dysko-mode\"\r\n      \r\n   \/\/(pseudo)losowe czekanie: od 1s do 5s\r\n   delay(random(1000,5000));\r\n\r\n   \/\/wybor LEDa do zaswiecenia: 1,2 lub 3\r\n   LOS=random(1,4);\r\n   \r\n   \/\/wersja tylko do testow: wypisywanie na ekran losowania\r\n   Serial.print(\"LOS=\");\r\n   Serial.println(LOS);\r\n\r\n   \/\/wlaczenie wylosowanego LEDa     \r\n   \/\/dzieki zapisaniu numerow pin-ow do tablicy jest to teraz bardzo proste!\r\n   digitalWrite(led[LOS-1], HIGH);\r\n\r\n   \/\/rozpoczecie mierzenia czasu\r\n   tstart = millis();\r\n       \r\n   \/\/czekanie na rekacje uzytkownika - wcisniecie jednego z trzech pyrzycsikow\r\n   \/\/zapamietujemy w zmiennych, ktore przyciski sa wcisniete\r\n   do{                \r\n       bt1 = digitalRead(btn[0]);\r\n       bt2 = digitalRead(btn[1]);\r\n       bt3 = digitalRead(btn[2]);                \r\n   }while(bt1+bt2+bt3==0); \/\/petla wykonuje sie tak dlugo, az przynajmniej jeden z przyciskow zostanie wcisniety                          \r\n\r\n   \/\/zatrzymanie \"stopera\" skoro cos zostalo wcisniete\r\n   tstop = millis();\r\n   digitalWrite(led[LOS-1], LOW);     \r\n\r\n   \/\/okreslenie poprawnosci wcisniecia przycisku:\r\n   \/\/zakladamy, ze zle wcisniety przycisk (tak wygodniej)\r\n   bool ok=false;   \/\/czy wygralem? \r\n\r\n   \/\/sprawdzenie, czy moze jednak zostal wcisniety odpowieni przycisk\r\n   switch(LOS){\r\n      case 1: if ((bt1==1)&amp;&amp;(bt2==0)&amp;&amp;(bt3==0)) ok=true;break;\r\n      case 2: if ((bt2==1)&amp;&amp;(bt1==0)&amp;&amp;(bt3==0)) ok=true;break;\r\n      case 3: if ((bt3==1)&amp;&amp;(bt1==0)&amp;&amp;(bt2==0)) ok=true;break;\r\n    }\/\/swicth\r\n\r\n    \/\/jesli wygrales, to stosowny komunikat\r\n    if (ok){    \r\n      cr = tstop-tstart; \/\/cr = \"czas rekacji\"\r\n      Serial.print(\"brako! gratulacje! \");    \r\n      Serial.print(\"czas reakcji:\");\r\n      Serial.println(cr);\r\n    }\/\/ok==true\r\n    else{    \r\n      Serial.println(\"pud\u0142o! nie ten przycisk!\");    \r\n    }     \r\n    delay(1000);\r\n}\/\/loop\r\n         \r\n        \r\n\r\n\r\n\r\n<\/pre>\n<p>Mo\u017cna jeszcze popracowa\u0107 nad tym kodem &#8211; mo\u017cna doda\u0107 kolejny (inny) &#8222;dysko-mode&#8221; informuj\u0105ce, \u017ce si\u0119 poprawnie wybra\u0142o przycisk, albo za\u015bwieci\u0107 wszystkimi LED-ami, gdy u\u017cytkownik &#8222;spud\u0142owa\u0142&#8221;. W przysz\u0142o\u015bci dodamy do uk\u0142adu wy\u015bwietlacz LCD aby tam pojawi\u0142 si\u0119 stosowny komunikat, a nie na ekranie pod\u0142\u0105czonego komputera.<\/p>\n<p>3) na bazie TSOP5000 (<a href=\"http:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/?p=727\">kiedy\u015b ju\u017c j\u0105 poznawali\u015bmy<\/a>) powstanie czujnik do pojazdu typu <a href=\"https:\/\/forbot.pl\/blog\/poznaj-8-sekretow-szybkiego-linefollowera-id5482\">line follower<\/a> &#8211; praca si\u0119 w\u0142a\u015bnie rozpoczyna. Dzia\u0142a ju\u017c (podw\u00f3jny) uk\u0142ad czujnik\u00f3w, wi\u0119c teraz rozpocz\u0105\u0142 si\u0119 drugi etap: uk\u0142ad 3\/4\/5? czujek na <span style=\"text-decoration: underline;\">w\u0142asnor\u0119cznej<\/span> p\u0142ytce prototypowej + pojazd na sterowniku L298.<\/p>\n<p>Dlaczego w\u0142asnor\u0119cznie robiona czujka, a nie jedna z &#8222;kupnych&#8221;, jak te ze zdj\u0119\u0107 poni\u017cej?<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-1373\" src=\"http:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2018\/11\/tcrt5000-modul2-300x300.jpg\" alt=\"\" width=\"300\" height=\"300\" srcset=\"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2018\/11\/tcrt5000-modul2-300x300.jpg 300w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2018\/11\/tcrt5000-modul2-150x150.jpg 150w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2018\/11\/tcrt5000-modul2.jpg 700w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/> <img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-medium wp-image-1374\" src=\"http:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2018\/11\/tcrt5000-modul.jpg\" alt=\"\" width=\"300\" height=\"300\" srcset=\"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2018\/11\/tcrt5000-modul.jpg 300w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2018\/11\/tcrt5000-modul-150x150.jpg 150w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/>Odpowied\u017a jest prosta: bo to fajniejsze i mamy wi\u0119cej zabawy podczas pracy, a o to w\u0142a\u015bnie chodzi!<\/p>\n<p>&nbsp;<\/p>\n<p style=\"text-align: right;\"><em>KG, 2018<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ci\u0105gle dwa\/trzy niezale\u017cne projekty. Wygl\u0105da na to, \u017ce b\u0119d\u0105 jednak trzy, bo Pan Bartek &#8222;atakuje&#8221; temat line followera (\u015bwietnie!) 1) zesp\u00f3\u0142 od pojazdu po sukcesie sterowania pojazdem przez cz\u0142owieka (bluetooth) poznawa\u0142 temat czujki odleg\u0142o\u015bci HC-SR04. Zamontowali ju\u017c nawet &#8222;trzymak&#8221; w poje\u017adzie &#8211; bez u\u017cycia wkr\u0119taki! zuchy! \ud83d\ude09 Tak, tak &#8211; to &#8222;oklepany&#8221; uk\u0142ad, ale ka\u017cdy [&hellip;]<\/p>\n","protected":false},"author":5,"featured_media":1397,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[52],"tags":[250,212,251,99,252,4,174,7,213,210,29,40],"class_list":{"0":"post-1372","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","6":"hentry","7":"category-fibot","8":"tag-250","9":"tag-button","10":"tag-follower","11":"tag-led","12":"tag-line","13":"tag-pojazd","14":"tag-przycisk","15":"tag-pull-up","16":"tag-refleks","17":"tag-sesja","18":"tag-tcrt","19":"tag-tcrt5000","21":"post-with-thumbnail","22":"post-with-thumbnail-large"},"_links":{"self":[{"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=\/wp\/v2\/posts\/1372","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=1372"}],"version-history":[{"count":11,"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=\/wp\/v2\/posts\/1372\/revisions"}],"predecessor-version":[{"id":1407,"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=\/wp\/v2\/posts\/1372\/revisions\/1407"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=\/wp\/v2\/media\/1397"}],"wp:attachment":[{"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1372"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1372"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1372"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}