{"id":92,"date":"2016-05-04T12:54:53","date_gmt":"2016-05-04T12:54:53","guid":{"rendered":"http:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/?p=92"},"modified":"2016-05-05T11:05:54","modified_gmt":"2016-05-05T11:05:54","slug":"arduino-przerwania-tcrt5000-do-wykrywania-szybkosci-obrotowej-kola-04-05-2016","status":"publish","type":"post","link":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/?p=92","title":{"rendered":"Arduino: Przerwania + TCRT5000 do wykrywania szybko\u015bci obrotowej ko\u0142a (04-05-2016)"},"content":{"rendered":"<p>Warto poczyta\u0107:\u00a0<a href=\"https:\/\/www.arduino.cc\/en\/Reference\/AttachInterrupt\" target=\"_blank\">https:\/\/www.arduino.cc\/en\/Reference\/AttachInterrupt<\/a><\/p>\n<p>oraz zapami\u0119ta\u0107:<\/p>\n<table>\n<tbody>\n<tr>\n<td>P\u0142ytka<\/td>\n<td>Piny cyfrowe pod kt\u00f3re mo\u017cemy podpi\u0105\u0107 przerwania<\/td>\n<\/tr>\n<tr>\n<td>Uno, Nano, Mini, other 328-based<\/td>\n<td>2, 3<\/td>\n<\/tr>\n<tr>\n<td>Mega, Mega2560, MegaADK<\/td>\n<td>2, 3, 18, 19, 20, 21<\/td>\n<\/tr>\n<tr>\n<td>Micro, Leonardo, other 32u4-based<\/td>\n<td>0, 1, 2, 3, 7<\/td>\n<\/tr>\n<tr>\n<td>Zero<\/td>\n<td>wszystkie, za wyj\u0105tkiem\u00a04<\/td>\n<\/tr>\n<tr>\n<td>MKR1000 Rev.1 0<\/td>\n<td>0, 1, 4, 5, 6, 7, 8, 9, A1, A2<\/td>\n<\/tr>\n<tr>\n<td>Due<\/td>\n<td>wszystkie<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>oraz ,,zdarzenia&#8221;, podczas kt\u00f3rych uaktywni si\u0119 funkcja przypisana pod dane przerwanie: <strong>LOW, CHANGE, RISING, FALLING<\/strong> (HIGH &#8211; tylko p\u0142ytka Due). Kr\u00f3tko: funkcja &#8222;podpi\u0119ta&#8221; do przerwania wywo\u0142a si\u0119 w\u00f3wczas, gdy na tym pinie (tym = zdefiniowanym podczas attachInterrupt) zajdzie konkretne &#8222;zdarzenie&#8221;, np. LOW. Oczywi\u015bcie taka funkcja ma by\u0107 szybka: ustalenie flagi, sterowanie napi\u0119ciem na pinach &#8211; digitalWrite &#8211; ale nie delay(ile\u015b-tam).<\/p>\n<p><strong>Przyk\u0142ad<\/strong>: Arduino + przycisk do b\u0142yskania diod\u0105 #13. <strong>Hardware<\/strong>: przycisk (mikroswicz pod\u0142\u0105czamy do GND a drug\u0105 n\u00f3\u017ck\u0105 do pinu #2 w Arduino).<\/p>\n<pre class=\"lang:arduino decode:true\">#define PIN 2\r\nbool stan=false;\r\n\r\nvoid setup() {\r\npinMode(13, OUTPUT);\r\ndigitalWrite(13, 0);\r\n\r\npinMode(PIN, INPUT_PULLUP);\r\nattachInterrupt(digitalPinToInterrupt(PIN), blysk, LOW);\r\n}\r\n\r\nvoid loop() {\r\ndelay(10000);\r\n}\r\n\r\nvoid blysk(){\r\nstan=!stan;\r\ndigitalWrite(13, stan); \r\n}\r\n<\/pre>\n<p>Gdy nic nie wiemy o przerwaniach, to przygl\u0105daj\u0105c si\u0119 funkcji\u00a0<strong>loop()<\/strong> mo\u017cna by powiedzie\u0107, \u017ce program NIC NIE ROBI! Tylko czeka 10s, a potem znowu czeka 10s, i tak w k\u00f3\u0142ko&#8230; Wi\u0119c sk\u0105d si\u0119 bierze b\u0142yskanie diody #13 w momencie klikania przycisku? Ot\u00f3\u017c wywo\u0142anie\u00a0<strong>delay()<\/strong> zatrzymuje dzia\u0142anie programu, ale przerwania ci\u0105gle dzia\u0142aj\u0105. Skoro wi\u0119c &#8222;podpi\u0119li\u015bmy&#8221; nasz\u0105 funkcj\u0119 (o nazwie\u00a0<strong>blysk()<\/strong>) do przerwania, to w\u0142a\u015bnie ona si\u0119 wywo\u0142a (gdy stan pinu #2 zmieni si\u0119 na LOW &#8211; to wszystko zosta\u0142o powiedziane w funkcji\u00a0<strong>setup()<\/strong>). W\u0142a\u015bnie taki mechanizm wykorzysta\u0142em do wykrycia kolizji przez zderzak naszego pojazdu &#8211; pisa\u0142em o tym <a href=\"http:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/2016\/05\/03\/arduino-software-do-zderzakow-przerwania\/\">w poprzednim po\u015bcie<\/a>. UWAGA: powy\u017cszy program dzia\u0142a do\u015b\u0107 dynamicznie, &#8222;nerwowo&#8221; reaguj\u0105c na wci\u015bni\u0119cie przycisku &#8211; oczywi\u015bcie jest to zjawisko <strong>drgania styk\u00f3w <\/strong>(ang. <em>bouncing<\/em>), o czym m\u00f3wili\u015bmy na naszych poprzednich spotkaniach (tutaj, dla przejrzysto\u015bci kodu nic z tym nie robi\u0119, brak jest <em>debouncing-u<\/em>).<\/p>\n<h2>Dodatkowo: zliczanie obrot\u00f3w ko\u0142a.<\/h2>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-78 size-large\" src=\"http:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2016\/05\/mDSC_1100-1024x576.jpg\" alt=\"mDSC_1100\" width=\"474\" height=\"267\" srcset=\"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2016\/05\/mDSC_1100-1024x576.jpg 1024w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2016\/05\/mDSC_1100-300x169.jpg 300w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2016\/05\/mDSC_1100-768x432.jpg 768w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2016\/05\/mDSC_1100.jpg 1600w\" sizes=\"auto, (max-width: 474px) 100vw, 474px\" \/><\/p>\n<p>pod\u0142\u0105czyli\u015bmy czujnik optyczny odbiciowy TCRT5000 do obudowy silniczka, a nast\u0119pnie wewn\u0105trz ko\u0142a umie\u015bcili\u015bmy bia\u0142\u0105 kartk\u0119 z czarn\u0105 krech\u0105. Czytamy warto\u015bci rejestrowane przez czujnik\u00a0<strong>ale nie na Serial monitorze<\/strong>, ale GRAFICZNIE, za pomoc\u0105 <strong><a href=\"https:\/\/processing.org\/\" target=\"_blank\">Processinga<\/a><\/strong>.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-81 size-full\" src=\"http:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2016\/05\/silniczek.png\" alt=\"silniczek\" width=\"1440\" height=\"900\" srcset=\"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2016\/05\/silniczek.png 1440w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2016\/05\/silniczek-300x188.png 300w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2016\/05\/silniczek-768x480.png 768w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2016\/05\/silniczek-1024x640.png 1024w\" sizes=\"auto, (max-width: 1440px) 100vw, 1440px\" \/><\/p>\n<p>Widzimy wyra\u017anie moment, gdy czujka mija czarn\u0105 kresk\u0119. Wida\u0107 te\u017c, \u017ce piki zdecydowanie r\u00f3\u017cni\u0105 si\u0119 od &#8222;t\u0142a&#8221;, cho\u0107 cz\u0119sto maj\u0105 r\u00f3\u017cn\u0105 warto\u015b\u0107 w maksimum. \u0141atwo wykombinowa\u0107 prosty algorytm (czy skuteczny? nied\u0142ugo si\u0119 o tym przekonamy) licz\u0105cy szybko\u015b\u0107 obrotow\u0105 ko\u0142a:<\/p>\n<ol>\n<li>\u00a0zapisujemy t1, czyli czas pojawienia si\u0119 maksimum (funkcja millis())<\/li>\n<li>czekamy na kolejne maksimum, gdy je z\u0142apiemy to<\/li>\n<li>zapisujemy t2, czyli czas pojawienia si\u0119 kolejnego maksimum- w\u00f3wczas r\u00f3\u017cnica czas\u00f3w t2 i t1 daje w\u0142a\u015bnie czas jednego, pe\u0142nego obrotu.<\/li>\n<\/ol>\n<p>Pewnie &#8222;diabe\u0142 tkwi w szczeg\u00f3\u0142ach&#8221; ale powinno dzia\u0142a\u0107. Jak powiedzia\u0142em na zaj\u0119ciach &#8211; wi\u0119cej kresek (ale z umiarem! powiedzmy 4 na pocz\u0105tek) powinny zwi\u0119kszy\u0107 rozdzielczo\u015b\u0107 zliczania liczby obrot\u00f3w ko\u0142a.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-79 size-large\" src=\"http:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2016\/05\/mDSC_1099-1024x576.jpg\" alt=\"mDSC_1099\" width=\"474\" height=\"267\" srcset=\"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2016\/05\/mDSC_1099-1024x576.jpg 1024w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2016\/05\/mDSC_1099-300x169.jpg 300w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2016\/05\/mDSC_1099-768x432.jpg 768w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2016\/05\/mDSC_1099.jpg 1600w\" sizes=\"auto, (max-width: 474px) 100vw, 474px\" \/><\/p>\n<p>B\u0119dziemy to programowa\u0107 na kolejnych zaj\u0119ciach&#8230;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Warto poczyta\u0107:\u00a0https:\/\/www.arduino.cc\/en\/Reference\/AttachInterrupt oraz zapami\u0119ta\u0107: P\u0142ytka Piny cyfrowe pod kt\u00f3re mo\u017cemy podpi\u0105\u0107 przerwania Uno, Nano, Mini, other 328-based 2, 3 Mega, Mega2560, MegaADK 2, 3, 18, 19, 20, 21 Micro, Leonardo, other 32u4-based 0, 1, 2, 3, 7 Zero wszystkie, za wyj\u0105tkiem\u00a04 MKR1000 Rev.1 0 0, 1, 4, 5, 6, 7, 8, 9, A1, A2 Due [&hellip;]<\/p>\n","protected":false},"author":5,"featured_media":81,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[52],"tags":[34,44,37,32,2,27,39,40],"class_list":{"0":"post-92","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","6":"hentry","7":"category-fibot","8":"tag-arduino","9":"tag-attachinterrupt","10":"tag-interrupts","11":"tag-l293","12":"tag-microswitch","13":"tag-mikroswicz","14":"tag-przerwania","15":"tag-tcrt5000","17":"post-with-thumbnail","18":"post-with-thumbnail-large"},"_links":{"self":[{"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=\/wp\/v2\/posts\/92","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=92"}],"version-history":[{"count":7,"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=\/wp\/v2\/posts\/92\/revisions"}],"predecessor-version":[{"id":105,"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=\/wp\/v2\/posts\/92\/revisions\/105"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=\/wp\/v2\/media\/81"}],"wp:attachment":[{"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=92"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=92"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=92"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}