{"id":389,"date":"2016-10-05T11:33:56","date_gmt":"2016-10-05T11:33:56","guid":{"rendered":"http:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/?p=389"},"modified":"2016-10-05T11:36:12","modified_gmt":"2016-10-05T11:36:12","slug":"zajecia-nr-5-sygnaly-cyfrowe-analogowe-2","status":"publish","type":"post","link":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/?p=389","title":{"rendered":"Zaj\u0119cia nr 5 &#8211; sygna\u0142y cyfrowe, analogowe&#8230;"},"content":{"rendered":"<h2>Sygna\u0142y cyfrowe &#8211; czujka ruchu PIR<\/h2>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignleft\" src=\"http:\/\/www.vetco.net\/catalog\/images\/VUPN5943-1.jpg\" alt=\"\" width=\"172\" height=\"141\" \/>Prosta w obs\u0142udze czujka ruchu. Trzy piny \u00a0&#8211; zasilanie, masa oraz wyj\u015bcie. W przypadku wykrycia ruchu wyj\u015bcie jest w stanie wysokim (5V) przez chwil\u0119 (mo\u017cna sterowa\u0107 tym czasem), \u00a0a gdy ruchu brak &#8211; wyj\u015bcie przechodzi w stan niski (0V). Aby to odczyta\u0107 przy pomocy Arduino poznali\u015bmy dwie nowe rzeczy:<\/p>\n<ul>\n<li>pinMode(7,\u00a0<strong>INPUT<\/strong>) &#8211; czyli w\u0142a\u015bnie informujemy Arduino, \u017ce b\u0119dziemy odczytywa\u0107 warto\u015b\u0107 napi\u0119cia na konkretnym pinie (w tym przypadku: pinie numer 7),<\/li>\n<li><strong>digitalRead<\/strong>(7) &#8211; funkcja odczytuj\u0105ca napi\u0119cie i zwracaj\u0105ca warto\u015b\u0107\u00a0<strong>1 (jedynka)<\/strong>\u00a0gdy napi\u0119cie jest wysokie (2.4 &#8211; 5V) oraz\u00a0<strong>0 (zero)<\/strong> gdy napi\u0119cie jest niskie (0 &#8211; 0.8V).<\/li>\n<\/ul>\n<p>Warto pami\u0119ta\u0107, \u017ce Arduino UNO ma 14 pin\u00f3w cyfrowych, a inne modele &#8211; patrz specyfikacja (kupuj\u0105c p\u0142ytk\u0119 dla siebie we\u017a to pod uwag\u0119).<\/p>\n<h2>Sygna\u0142y analogowe<\/h2>\n<p>Czyli czytanie napi\u0119cia z przedzia\u0142u od zera do 5V z rozdzielczo\u015bci\u0105 10 bit\u00f3w &#8211; a wi\u0119c 1024 poziom\u00f3w napi\u0119\u0107 (bo 2 do pot\u0119gi 10-tej to w\u0142a\u015bnie 1024). Nasze p\u0142ytki s\u0105 ju\u017c lekko zdezelowane i wcale na wyj\u015bciu pinu 5V z Arduino nie mamy 5V a np. 4.57V, <strong>dlatego warto<\/strong> to mie\u0107 na uwadze czytaj\u0105c konkretn\u0105 warto\u015b\u0107 napi\u0119cia. Poznali\u015bmy:<\/p>\n<ul>\n<li>wej\u015bcia analogowe:\u00a0<strong>A0, A1, A2, &#8230;, A5<\/strong> (6 sztuk w UNO)<\/li>\n<li><strong>analogRead(<\/strong>A0<strong>)\u00a0<\/strong> &#8211; funkcja odczytuj\u0105ca napi\u0119cie i zwracaj\u0105ca warto\u015bci od 0..1023 w zale\u017cno\u015bci od napi\u0119cia na wej\u015bciu A0.<\/li>\n<li>wej\u015bcie\u00a0<strong>AREF<\/strong> na p\u0142ytce Arduino do podawania napi\u0119cia referencyjnego z przedzia\u0142u 0..5V oraz funckj\u0119\u00a0<strong>analogReference(EXTERNAL)\u00a0<\/strong>uruchamiaj\u0105c\u0105 t\u0119 funkcj\u0119. Dzi\u0119ki temu mo\u017cna wykorzysta\u0107 ca\u0142\u0105 rozdzielczo\u015b\u0107 10-ciu bit\u00f3w na czytanie napi\u0119cia w przedziale 0..AREF V &#8211; ale tego nie testowali\u015bmy w praktyce.<\/li>\n<li>inne mo\u017cliwo\u015bci ustawienia punktu odniesienia w funkcji analogReference, np. <strong>INTERNAL1v1\u00a0<\/strong>w zale\u017cno\u015bci od p\u0142ytki Arduino daje to po\u017cliwo\u015b\u0107 wykorzystania ca\u0142ej rozdzielczo\u015bci 10-ciu bit\u00f3w w zakresie 0..1V.<\/li>\n<\/ul>\n<h2>Galeria:<\/h2>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-large wp-image-391\" src=\"http:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2016\/10\/DSC_2177-1024x576.jpg\" alt=\"dsc_2177\" width=\"640\" height=\"360\" srcset=\"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2016\/10\/DSC_2177-1024x576.jpg 1024w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2016\/10\/DSC_2177-300x169.jpg 300w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2016\/10\/DSC_2177-768x432.jpg 768w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2016\/10\/DSC_2177.jpg 1800w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/><\/p>\n<p>Na zdj\u0119ciu: 4-ka wspania\u0142ych czyli ma\u0142a lecz silna grupa, kt\u00f3ra soboty ma wolne \ud83d\ude09 A ten pi\u0105ty? wida\u0107, \u017ce nie z grupy, taki na peryferiach&#8230; soboty ciekawie sp\u0119dza \ud83d\ude09 zreszt\u0105 nie tylko On, inni (spoza kadru) te\u017c.<\/p>\n<h2>Potencjometr liniowy &#8211; dzielnik napi\u0119\u0107 (3 piny, nie &#8222;bolce&#8221; !!!)<\/h2>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-390 alignleft\" src=\"http:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2016\/10\/potencjometr-osiowy-liniowy-5k-150x150.jpg\" alt=\"potencjometr-osiowy-liniowy-5k\" width=\"221\" height=\"221\" srcset=\"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2016\/10\/potencjometr-osiowy-liniowy-5k-150x150.jpg 150w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2016\/10\/potencjometr-osiowy-liniowy-5k-300x300.jpg 300w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2016\/10\/potencjometr-osiowy-liniowy-5k.jpg 600w\" sizes=\"auto, (max-width: 221px) 100vw, 221px\" \/>Bardzo przydatny element elektroniczny &#8211; b\u0119dziemy go wielokrotnie wykorzystywa\u0107. Dlatego przypominam, \u017ce dzia\u0142anie oparte jest na\u00a0<strong>dzielniku napi\u0119\u0107<\/strong>, i nale\u017cy pami\u0119ta\u0107 roli 3 n\u00f3\u017cek tego elementu (prosz\u0119 nie nazywa\u0107 pin\u00f3w &#8222;bolcami&#8221; &#8211; to ma\u0142o profesjonalne):<\/p>\n<ul>\n<li>pierwsza &#8211; zasilanie (np. 5V)<\/li>\n<li>druga &#8211; napi\u0119cie na wyj\u015bciu, czyli zmodyfikowane konkretnym ustawieniem ga\u0142ki potencjometru (np. 1.2V)<\/li>\n<li>trzecia &#8211; masa (0V)<\/li>\n<\/ul>\n<p>Oczywi\u015bcie n\u00f3\u017cki piersza i trzecia mog\u0105 by\u0107 zamienione rolami. Przy pomocy miernika uniwersalnego sprawdzili\u015bmy w praktyce dzia\u0142anie tego potencjometru, a ju\u017c po chwili wczytywali\u015bmy do Arduino to napi\u0119cie i pisali\u015bmy na ekranie &#8211; dzi\u0119ki funkcji \u00a0Serial.println().<\/p>\n<p><strong>Wa\u017cne:<\/strong> zauwa\u017cyli\u015bmy, \u017ce ustawiony potencjometr w <strong>jednej pozycji<\/strong> i <strong>nie poruszany<\/strong> daje lekko r\u00f3\u017cne warto\u015bci, np. 600, 600, 601, 600, 600, 600, 598, 600, 600, 601, 600&#8230; Niby wida\u0107, \u017ce odczytana warto\u015b\u0107 wynosi 600, a te drobne odst\u0119pstwa nazywamy\u00a0<strong>fluktuacjami<\/strong>. Dzieje si\u0119 tak gdy\u017c przetwornik DAC w Arduino nie jest doskona\u0142y (a niby co jest?!), wra\u017cliwy na szumy i inne rzeczy. <strong>Warto o tym pami\u0119ta\u0107.<\/strong><\/p>\n<h2>Sygna\u0142y PWM &#8211; sygna\u0142y cyfrowe<\/h2>\n<p>Czyli\u00a0<strong>Pulse Width Modulation<\/strong> &#8211; sygna\u0142y szybkozmienne w czasie (Arduino UNO &#8211; 2ms, czyli 500Hz), o dw\u00f3ch warto\u015bciach &#8211; 0V i 5V.\u00a0Mamy mo\u017cliwo\u015b\u0107 wybrania <strong>wype\u0142nienia<\/strong> sygna\u0142u 5V &#8211; czyli jak d\u0142ugo warto\u015b\u0107 5V utrzymuje si\u0119 w okresie 2ms (a nast\u0119pnie wszystko si\u0119 powtarza). Mamy 8 bit\u00f3w do sterowania wype\u0142nieniem &#8211; a wi\u0119c warto\u015bci z przedzia\u0142u 0..255.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.arduino.cc\/en\/uploads\/Tutorial\/pwm.gif\" alt=\"\" \/><\/p>\n<p>Ku pami\u0119ci:<\/p>\n<ul>\n<li>PWM jest dla sygna\u0142\u00f3w cyfrowych, oznaczonych <em>tyld\u0105<\/em> w Arduino (a wi\u0119c ~3, ~5, ~6, ~9, ~10 &#8211; a\u017c 6 takich wyj\u015b\u0107!)<\/li>\n<li>pinMode(7, OUTPUT)<\/li>\n<li><strong>analogWrite<\/strong>(3, 127) &#8211; funkcja steruj\u0105ca wype\u0142nieniem (w tym przyk\u0142adzie 50%, gdy\u017c poda\u0142em 127, a maksymalna warto\u015b\u0107 to 255)<\/li>\n<\/ul>\n<h2>Przyk\u0142ady -&gt; 01 Basics -&gt; Fade<\/h2>\n<p>Om\u00f3wienie przyk\u0142adu, zbudowanie uk\u0142adu i uruchomienie.<\/p>\n<h2>Pami\u0119taj:<\/h2>\n<p><strong>wybieraj\u0105c p\u0142ytk\u0119<\/strong> Arduino dla siebie pami\u0119taj o jej <strong>parametrach<\/strong>: z dzisiejszych zaj\u0119\u0107 ju\u017c wiesz, \u017ce musisz zwraca\u0107 uwag\u0119 na liczb\u0119 pin\u00f3w cyfrowych, analogowych oraz pin\u00f3w cyfrowych z mo\u017cliwo\u015bci\u0105 PWM. Zajrzyj na specyfikacj\u0119 Arduino Mega i por\u00f3wnaj z UNO &#8211; zobaczysz r\u00f3\u017cnic\u0119. A kolejne istotne parametry poznasz na dalszych zaj\u0119ciach.<\/p>\n<h2>Praca domowa<\/h2>\n<p>Prosz\u0119 zaprogramowa\u0107 w wirtualnym Arduino (przypominam: 123d.circuits.io) uk\u0142ad potencometr 10k + LED sterowany PWM tak, by LED rozja\u015bnia\u0142 si\u0119 wskutek nastwie\u0144 potencjometu. W tym celu trzeba 1) czyta\u0107 potencjometr analogowo, 2) sterowa\u0107 jasno\u015bci\u0105 LEDa przez PWM (podobnie do omawianego przyk\u0142adu Fade).<\/p>\n<p>Podpowied\u017a: analogRead() zwr\u00f3ci nam warto\u015bci od 0..1023, a PWM potrzebuje warto\u015bci od 0..255. Jak wida\u0107 te warto\u015bci do siebie nie pasuj\u0105&#8230; rozwi\u0105zanie najprostrze to podzielenie przez 4 wczytanej warto\u015bci i ustawienie w\u0142a\u015bnie na tyle PWMa. Lepsze\u00a0rozwi\u0105zania tego &#8222;problemu&#8221; poznamy na kolejnych zaj\u0119ciach.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Sygna\u0142y cyfrowe &#8211; czujka ruchu PIR Prosta w obs\u0142udze czujka ruchu. Trzy piny \u00a0&#8211; zasilanie, masa oraz wyj\u015bcie. W przypadku wykrycia ruchu wyj\u015bcie jest w stanie wysokim (5V) przez chwil\u0119 (mo\u017cna sterowa\u0107 tym czasem), \u00a0a gdy ruchu brak &#8211; wyj\u015bcie przechodzi w stan niski (0V). Aby to odczyta\u0107 przy pomocy Arduino poznali\u015bmy dwie nowe rzeczy: [&hellip;]<\/p>\n","protected":false},"author":5,"featured_media":247,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[81],"tags":[67,66,68,9],"class_list":{"0":"post-389","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","6":"hentry","7":"category-talentyxxiw_bis","8":"tag-analogread","9":"tag-fade","10":"tag-pinmode","11":"tag-pwm","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\/389","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=389"}],"version-history":[{"count":4,"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=\/wp\/v2\/posts\/389\/revisions"}],"predecessor-version":[{"id":395,"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=\/wp\/v2\/posts\/389\/revisions\/395"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=\/wp\/v2\/media\/247"}],"wp:attachment":[{"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=389"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=389"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=389"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}