{"id":465,"date":"2016-11-15T16:00:23","date_gmt":"2016-11-15T16:00:23","guid":{"rendered":"http:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/?p=465"},"modified":"2016-11-16T13:29:03","modified_gmt":"2016-11-16T13:29:03","slug":"podstawy-wejscie-analogowe-potencjometr","status":"publish","type":"post","link":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/?p=465","title":{"rendered":"Podstawy &#8211; wej\u015bcie analogowe + potencjometr"},"content":{"rendered":"<h2>Podstawy &#8211; komunikacja szeregowa i obiekt Serial.<\/h2>\n<p>Z racji sporej liczby nowych ludzi (nie tylko student\u00f3w), g\u0142odnych wiedzy i \u017c\u0105dnych przyg\u00f3d (zdj\u0119\u0107 nie publikuj\u0119 &#8211; tak, jak si\u0119 umawiali\u015bmy) rozpocz\u0119li\u015bmy od przypomnienia podstaw&#8230; Na warsztat trafi\u0142o poj\u0119cie&nbsp;<strong>zmiennej<\/strong>. Aby to poj\u0119cie &#8222;namacalnie&#8221; zobrazowa\u0107 przygotowa\u0142em programik, w kt\u00f3rym poziom \u017cycia bohatera (np. Wied\u017amina) reprezentowane przez zmienn\u0105&nbsp;<strong>energia<\/strong>&nbsp;ci\u0105gle mala\u0142 (np. bohater ranny = krwawi). Aktualna warto\u015b\u0107 \u017cycia by\u0142 wypisywany na ekranie monitora (via obiekt Serial i metoda print\/println).<\/p>\n<pre class=\"lang:arduino decode:true\">byte energia=77;\r\n\r\nvoid setup(){\r\n  Serial.begin(9600);\r\n  energia=17;\r\n}\r\n\r\nvoid loop(){\r\n  Serial.print(\"Energia= \");  \r\n  Serial.println(energia);  \r\n  delay(1000);\r\n  energia= energia-1;  \r\n}<\/pre>\n<p>Powy\u017cszy programik pos\u0142u\u017cy\u0142 tak\u017ce do om\u00f3wienia poj\u0119\u0107&nbsp;<strong>bit<\/strong> i<strong> bajt<\/strong> oraz&nbsp;wielko\u015bci informacji, jak\u0105 mo\u017cna zapisa\u0107 wiadomo\u015bci za pomoc\u0105&nbsp;<strong>n<\/strong>-bit\u00f3w. Zapiski z tablicy w trakcie zaj\u0119\u0107 (pokolorowa\u0142em ju\u017c po zaj\u0119ciach):<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-466 aligncenter\" src=\"http:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2016\/11\/fibot2016-11-15-Note-19-03-1.jpg\" alt=\"fibot2016-11-15-note-19-03-1\" width=\"1823\" height=\"854\" srcset=\"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2016\/11\/fibot2016-11-15-Note-19-03-1.jpg 1823w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2016\/11\/fibot2016-11-15-Note-19-03-1-300x141.jpg 300w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2016\/11\/fibot2016-11-15-Note-19-03-1-768x360.jpg 768w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2016\/11\/fibot2016-11-15-Note-19-03-1-1024x480.jpg 1024w\" sizes=\"auto, (max-width: 1823px) 100vw, 1823px\" \/><\/p>\n<p>gdzie przypominam, ze&nbsp;<strong>RAM<\/strong> na moim super-obrazku przedstawia ca\u0142\u0105 pami\u0119\u0107 operacyjn\u0105 p\u0142ytki Arduino UNO (dlatego kom\u00f3rki pami\u0119ci &#8211; bajty &#8211; s\u0105 ponumerowane od 1..2048, bo UNO ma 2kB pami\u0119ci), gdzie mikrokontroler przechowuje w\u0142a\u015bnie&nbsp;<strong>zmienne<\/strong>. W szczeg\u00f3lno\u015bci w naszym programie zaznaczy\u0142em miejsce w pami\u0119ci, gdzie zadeklarowali\u015bmy zmienn\u0105&nbsp;<strong>energia<\/strong>. Na tym rysunku (modyfikowanym w trakcie zaj\u0119\u0107 &#8211; pami\u0119tacie?) zmienna ta zajmuje 2 kom\u00f3rki (bajty) i odpowiada to ju\u017c sytuacji innej ni\u017c z pierwszego listingu programu: mianowicie&nbsp;<strong>int energia=77;<\/strong> Zmienna typu&nbsp;<strong>int<\/strong> to 16 bit\u00f3w, czyli&nbsp;<strong>2^16<\/strong> r\u00f3\u017cnych informacji (kolor zielony na pokolorwanej tablicy, natomiast kolor \u017c\u00f3\u0142ty &#8211; to bity). Pierwotnie by\u0142a to zmienna&nbsp;<strong>byte<\/strong>, czyli 8 bit\u00f3w i 256 dopuszczalnych warto\u015bci (kolor niebieski). Ta pierwsza wersja programu by\u0142a bardzo tre\u015bciwa, gdy\u017c pokazywa\u0142a sytuacj\u0119 co si\u0119 dzieje z warto\u015bci\u0105 zmiennej, gdy przekraczamy jej dopuszczalny zakres: w naszym przypadku zmniejszali\u015bmy&nbsp;warto\u015b\u0107 zmiennej <strong>energia&nbsp;<\/strong>co 1 sekund\u0119 (<strong>delay(1000)<\/strong>)&nbsp;no i gdy mieli\u015bmy ju\u017c &#8222;na liczniku&#8221; 0 (zero) to wcale nie pojawi\u0142o si\u0119 -1 (minus jeden) tylko&#8230; 255! a potem juz 254&#8230; 253&#8230; itd. Warte to jest zapami\u0119tania (no i oczywi\u015bcie w drug\u0105 stron\u0119 &#8211; gdyby\u015bmy zwi\u0119kszali nasz\u0105 zmienn\u0119 z warto\u015bci 255 o jedne to&#8230; wiesz, co b\u0119dzie? je\u015bli nie, proponuj\u0119 sprawdzi\u0107!).<\/p>\n<h2>Potencjometr nastawny.<\/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.jpg\" alt=\"potencjometr-osiowy-liniowy-5k\" width=\"139\" height=\"139\" srcset=\"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2016\/10\/potencjometr-osiowy-liniowy-5k.jpg 600w, 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\" sizes=\"auto, (max-width: 139px) 100vw, 139px\" \/>Na spotkaniu poznawali\u015bmy <a href=\"https:\/\/pl.wikipedia.org\/wiki\/Potencjometr\">potencjometr nastawny<\/a> i jego pod\u0142\u0105czenie\/obs\u0142ug\u0119 przez Arduino. Ale najpierw zabawy z bateryjka i multimetrem &#8211; \u0107wiczenia obowi\u0105zkowe. Dodatkowo przypomnia\u0142em co to jest <a href=\"https:\/\/pl.wikipedia.org\/wiki\/Dzielnik_napi%C4%99cia\">dzielnik napi\u0119\u0107<\/a> i jak &#8222;to si\u0119 je&#8221;, a tym samym (mam nadziej\u0119) zrozumieli\u015bmy dzia\u0142anie potencjometru nastawnego (w naszym przypaku liniowego 10k).<img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-467\" src=\"http:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2016\/11\/potencometr.jpg\" alt=\"potencometr\" width=\"1234\" height=\"406\" srcset=\"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2016\/11\/potencometr.jpg 1234w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2016\/11\/potencometr-300x99.jpg 300w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2016\/11\/potencometr-768x253.jpg 768w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2016\/11\/potencometr-1024x337.jpg 1024w\" sizes=\"auto, (max-width: 1234px) 100vw, 1234px\" \/><\/p>\n<p>Powy\u017cszy schemat t\u0142umaczy dzia\u0142anie potencjometru&#8230; Warty zapami\u0119tania jest te\u017c taki rysunek:<img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-476 size-full\" src=\"http:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2016\/11\/fibot2016-11-15-Note-19-03-2-1.jpg\" width=\"653\" height=\"281\" srcset=\"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2016\/11\/fibot2016-11-15-Note-19-03-2-1.jpg 653w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2016\/11\/fibot2016-11-15-Note-19-03-2-1-300x129.jpg 300w\" sizes=\"auto, (max-width: 653px) 100vw, 653px\" \/><\/p>\n<p>kt\u00f3ry pokazuje co si\u0119 dzieje gdy mierzymy napi\u0119cie, lub raczej (prawid\u0142owo) r\u00f3\u017cnic\u0119 napi\u0119\u0107 (potencja\u0142\u00f3w). Pod\u0142aczamy do pinu nr 1 (kolor czerwony na rysunku, numeracja odnosi si\u0119 do schematu potencjometru z poprzedniego obrazka) &#8222;minus&#8221; z bateryjki, a do pinu 3 &#8222;plus&#8221; z bateryjki (niech to b\u0119dzie 4x bateria AAA &#8211; czyli w\u0142a\u015bnie 6V). Gdy ustawiemy potencjometr w takiej pozycji, aby zmierzone napi\u0119cie na pinie nr 2 wynosi\u0142o <strong>4V&nbsp;<\/strong>to w zale\u017cno\u015bci od tego, jak mierzymy (=jak pod\u0142\u0105czamy sondy multimetru) mo\u017cemy otrzyma\u0107 te\u017c wynik&nbsp;<strong>2V<\/strong>. Chodzi oczywi\u015bcie o <span style=\"text-decoration: underline;\">poziom odniesienia<\/span> (sonda czerwona jest ca\u0142y czas w &#8222;\u015brodkowej n\u00f3\u017cce&#8221;, czyli pinie nr 2, natomiast sonda czarna &#8211; poziom odniesienia w\u0142a\u015bnie &#8211; mo\u017ce by\u0107 w pinie 1 lub 3). Je\u015bli naszym poziomem b\u0119dzie&nbsp;<strong>GND<\/strong>&nbsp;(=0V, pin 1) to faktycznie otrzymamy 4V, ale gdy mierzymy napi\u0119cie pomi\u0119dzy &#8222;szczytem g\u00f3ry&#8221; a nasz\u0105 pozycj\u0105 (sonda czarna &#8222;na&nbsp;szczycie&#8221;, czyli pinie 3) to oczywi\u015bcie otrzymamy 2V. Wszystko jasne?<\/p>\n<p>Po zabawach z multimetrem (i LED-em pod\u0142\u0105czonym do potencjometru) przyszed\u0142 czas na pod\u0142\u0105czenie do Arduino i wpisanie nowego kodu programu:<\/p>\n<pre class=\"lang:arduino decode:true\">#define IN A0\r\n\r\nvoid setup(){\r\n  Serial.begin(9600);\r\n}\r\n\r\nvoid loop(){\r\n  int war = analogRead(IN);  \r\n  Serial.print(war);  \r\n  Serial.print(\"--&gt;\");  \r\n  Serial.print(war*5.0\/1024);  \r\n  Serial.println(\"V\");  \r\n  delay(100);  \r\n}<\/pre>\n<p>Ten program (dla odr\u00f3\u017cnienia si\u0119 od poprzedniego) wprowadza <strong>etykiety nazw<\/strong> (za pomoc\u0105 dyrektywy preprocesora <strong>#define<\/strong>) i nie pos\u0142uguje si\u0119 zmienn\u0105 w tym celu. Zmienna pojawia si\u0119 dopiero w funkcji loop(). Przypominam, \u017ce &#8222;zysk&#8221; ze stosowania etykiet nazw jest taki, \u017ce nie zajmuj\u0105 one pami\u0119ci RAM komputera&#8230; (ale s\u0105 i minusy).<\/p>\n<p>&#8222;Danie g\u0142\u00f3wne&#8221; dzisiejszego spotkania to piny analogowe Arduino, i aby je zrozumie\u0107 pos\u0142u\u017cy\u0142em si\u0119 takim rysuneczkiem:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-479\" src=\"http:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2016\/11\/fibot2016-11-15-Note-19-03-3.jpg\" alt=\"fibot2016-11-15-note-19-03-3\" width=\"1651\" height=\"517\" srcset=\"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2016\/11\/fibot2016-11-15-Note-19-03-3.jpg 1651w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2016\/11\/fibot2016-11-15-Note-19-03-3-300x94.jpg 300w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2016\/11\/fibot2016-11-15-Note-19-03-3-768x240.jpg 768w, https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/wp-content\/uploads\/sites\/6\/2016\/11\/fibot2016-11-15-Note-19-03-3-1024x321.jpg 1024w\" sizes=\"auto, (max-width: 1651px) 100vw, 1651px\" \/><\/p>\n<p>gdzie pokazuj\u0119&nbsp;<em>jaki\u015b<\/em> przebieg napi\u0119cia w czasie (krzywa czarna na wykresie V(t), minimalne napi\u0119cie 0, zaznaczone jest te\u017c poziom 5V), kt\u00f3ry teraz mo\u017cemy odczytywa\u0107 z rozdzielczo\u015bci\u0105 7-miu poziom\u00f3w (od 0..6). Mamy wi\u0119c odczyty jako napi\u0119cia jako liczby ca\u0142kowite 0,1,2,..,6 kt\u00f3re odpowiadaj\u0105 napi\u0119ciom 0V, 0.8333V, 1.666V, &#8230;, 5V (przedzia\u0142y napi\u0119cia to w\u0142a\u015bnie dV=5\/6V). Przy takiej rozdzielczo\u015bci nie ma mo\u017cliwo\u015bci odr\u00f3\u017cni\u0107 napi\u0119\u0107 0.2V, 0.6V czy 0.8V, gdy\u017c te odczyty trafiaj\u0105 do jednego &#8222;worka&#8221; (tu: zero). Dopiero poziom 0.84V zmienia warto\u015b\u0107 mojego odczytu (tu: jedynka).<\/p>\n<p>W przpadku Arduino mamy nie 7 dost\u0119pnych poziom\u00f3w, a 1024 (gdy\u017c jest tam przetwornik analogowo cyfrowy 10-cio bitowy, czyli 2^10=1024). St\u0105d te\u017c i dok\u0142adno\u015b\u0107 pomiar\u00f3w du\u017co lepsza ni\u017c na moim rysuneczku.&nbsp;<\/p>\n<p>Co&nbsp;<strong>najciekawsze<\/strong>, wykonali\u015bmy&nbsp;<strong>kalibracj\u0119<\/strong> odczyt\u00f3w z analogowego portu Arduino &#8211; pos\u0142u\u017cyli\u015bmy si\u0119 multimetrem. Okaza\u0142o si\u0119 bowiem, \u017ce bez tego cz\u0119sto pomiary by\u0142y baaaardzo nietrafione (tj. du\u017co si\u0119 r\u00f3\u017cni\u0142y wskazania woltomierza od wskaza\u0144 Arduino). Przyczyn\u0105 by\u0142y do\u015b &#8222;spracowane&#8221; p\u0142ytki Arduino&#8230;<\/p>\n<p><strong>Bardzo wa\u017cna<\/strong> by\u0142a te\u017c informacja o dzieleniu liczb: przypominam, \u017ce 5\/1024 jest zawsze 0 (zero), natomiast 5.0\/1024 ju\u017c nie.<\/p>\n<p>Zapraszam za tydzie\u0144!<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Podstawy &#8211; komunikacja szeregowa i obiekt Serial. Z racji sporej liczby nowych ludzi (nie tylko student\u00f3w), g\u0142odnych wiedzy i \u017c\u0105dnych przyg\u00f3d (zdj\u0119\u0107 nie publikuj\u0119 &#8211; tak, jak si\u0119 umawiali\u015bmy) rozpocz\u0119li\u015bmy od przypomnienia podstaw&#8230; Na warsztat trafi\u0142o poj\u0119cie&nbsp;zmiennej. Aby to poj\u0119cie &#8222;namacalnie&#8221; zobrazowa\u0107 przygotowa\u0142em programik, w kt\u00f3rym poziom \u017cycia bohatera (np. Wied\u017amina) reprezentowane przez zmienn\u0105&nbsp;energia&nbsp;ci\u0105gle mala\u0142 [&hellip;]<\/p>\n","protected":false},"author":5,"featured_media":466,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[52],"tags":[97,93,67,95,75,98,94,96],"class_list":{"0":"post-465","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","6":"hentry","7":"category-fibot","8":"tag-adc","9":"tag-analog","10":"tag-analogread","11":"tag-dzielnik","12":"tag-dzielnik-napiec","13":"tag-multimetr","14":"tag-potencjometr","15":"tag-serial","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\/465","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=465"}],"version-history":[{"count":16,"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=\/wp\/v2\/posts\/465\/revisions"}],"predecessor-version":[{"id":486,"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=\/wp\/v2\/posts\/465\/revisions\/486"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=\/wp\/v2\/media\/466"}],"wp:attachment":[{"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=465"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=465"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/physics.uwb.edu.pl\/wf\/fi-bot\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=465"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}