{"id":293,"date":"2017-11-16T02:46:05","date_gmt":"2017-11-16T04:46:05","guid":{"rendered":"http:\/\/vejas.defas.lt\/?p=293"},"modified":"2018-02-06T15:26:41","modified_gmt":"2018-02-06T17:26:41","slug":"vejo-greitis-nuo-matavimo-iki-reiksmes-parodymo","status":"publish","type":"post","link":"http:\/\/vejas.defas.lt\/?p=293","title":{"rendered":"V\u0117jo greitis: nuo matavimo iki reik\u0161m\u0117s parodymo"},"content":{"rendered":"<p>V\u0117jo grei\u010dio reik\u0161m\u0117 paprastai ir pakankamai tiksliai pamatuojama, ta\u010diau duomen\u0173 i\u0161vedimas yra sud\u0117tingas. \u0160iame straipsnyje apra\u0161ysiu vis\u0105 proces\u0105 nuo daviklio iki reik\u0161m\u0117s parodymo ekrane.<br \/>\nV\u0117jo grei\u010diui matuoti skirtas prietaisas vadinamas anemometru. Naudosime Three Cup Anemometer Aluminium Alloyed DC12-24V su skaitmeniniu duomen\u0173 perdavimu per RS485 port\u0105. Taip pat i\u0161duodamas meandro formos impulsinis signalas, kurio da\u017enis tiesiogiai priklausomas nuo v\u0117jo grei\u010dio. Chakteristikose nurodoma: 1m\/sek. greit\u012f atitinka 12 impuls\u0173.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-294 aligncenter\" src=\"http:\/\/vejas.defas.lt\/wp-content\/uploads\/2017\/11\/Anemometer.jpg\" alt=\"\" width=\"220\" height=\"244\" \/><\/p>\n<p><!--more-->\u0160io prietaiso i\u0161duodamas signalas yra meandro formos impulsai:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-300 aligncenter\" src=\"http:\/\/vejas.defas.lt\/wp-content\/uploads\/2017\/11\/meandras_impulsai-1-300x115.png\" alt=\"\" width=\"300\" height=\"115\" srcset=\"http:\/\/vejas.defas.lt\/wp-content\/uploads\/2017\/11\/meandras_impulsai-1-300x115.png 300w, http:\/\/vejas.defas.lt\/wp-content\/uploads\/2017\/11\/meandras_impulsai-1.png 362w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><br \/>\n&#8230;Daugeliui pa\u017e\u012fstamas senovinis graik\u0173 ornamentas yra vadinamas Meandru. \u0160\u012f pavadinim\u0105 ornamentas gavo nuo Meandro (gr. <span lang=\"el-GR\">\u039c\u03b1\u03af\u03b1\u03bd\u03b4\u03c1\u03bf\u03c2<\/span><span lang=\"lt-LT\">)<\/span - labai vingiuotos up\u0117s Ma\u017eojoje Azijoje.\n<img loading=\"lazy\" decoding=\"async\" class=\"size-medium wp-image-295 aligncenter\" src=\"http:\/\/vejas.defas.lt\/wp-content\/uploads\/2017\/11\/meandras-300x116.jpg\" alt=\"\" width=\"300\" height=\"116\" srcset=\"http:\/\/vejas.defas.lt\/wp-content\/uploads\/2017\/11\/meandras-300x116.jpg 300w, http:\/\/vejas.defas.lt\/wp-content\/uploads\/2017\/11\/meandras.jpg 311w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><br \/>\n\u017er daugiau: <a href=\"http:\/\/www.istidom.lt\/2015\/10\/kas-yra-meandras.html\">kas-yra-meandras<\/a>.<br \/>\nV\u0117jo greitis yra tiesiogiai priklausomas nuo meandro da\u017enio, arba vieno periodo trukm\u0117s. Trukm\u0117 matuojama Arduino procesoriuje milisekund\u0117mis. Signalas nuo daviklio per LM358 komparatori\u0173, kuris atlieka buferavimo funkcij\u0105<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-303\" src=\"http:\/\/vejas.defas.lt\/wp-content\/uploads\/2017\/11\/vgr-300x96.jpg\" alt=\"\" width=\"738\" height=\"236\" srcset=\"http:\/\/vejas.defas.lt\/wp-content\/uploads\/2017\/11\/vgr-300x96.jpg 300w, http:\/\/vejas.defas.lt\/wp-content\/uploads\/2017\/11\/vgr-768x245.jpg 768w, http:\/\/vejas.defas.lt\/wp-content\/uploads\/2017\/11\/vgr.jpg 892w\" sizes=\"auto, (max-width: 738px) 100vw, 738px\" \/>paduodamas \u012f D7 procesoriais i\u0161vad\u0105.<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\" wp-image-302 alignnone\" src=\"http:\/\/vejas.defas.lt\/wp-content\/uploads\/2017\/11\/vgrout-300x208.jpg\" alt=\"\" width=\"734\" height=\"509\" srcset=\"http:\/\/vejas.defas.lt\/wp-content\/uploads\/2017\/11\/vgrout-300x208.jpg 300w, http:\/\/vejas.defas.lt\/wp-content\/uploads\/2017\/11\/vgrout.jpg 495w\" sizes=\"auto, (max-width: 734px) 100vw, 734px\" \/><br \/>\n<del>Laiko matavimas atliekamas standartine Arduino C funkcija pulseIn. Programos dalis.<\/del><\/p>\n<pre style=\"font-size: small;\">unsigned long A, B, C;\r\nA=pulseIn(VGROUT, HIGH, 100000); \r\nB=pulseIn(VGROUT, LOW, 100000); \r\nC=(A+B)\/2;\r\ndat[15]=lowByte(C); dat[16]=highByte(C);\r\n<\/pre>\n<p>PulseIn() funkcijos apra\u0161ymas:<\/p>\n<pre style=\"font-size: small;\">Reads a pulse (either HIGH or LOW) on a pin. For example, if value is HIGH, pulseIn() waits for the pin to go HIGH, starts timing, then waits for the pin to go LOW and stops timing. Returns the length of the pulse in microseconds or 0 if no complete pulse was received within the timeout.\r\nThe timing of this function has been determined empirically and will probably show errors in shorter pulses. Works on pulses from 10 microseconds to 3 minutes in length. Please also note that if the pin is already high when the function is called, it will wait for the pin to go LOW and then HIGH before it starts counting. This routine can be used only if interrupts are activated. Furthermore the highest resolution is obtained with short intervals.\r\nSyntax\r\npulseIn(pin, value)\r\npulseIn(pin, value, timeout)\r\nParameters\r\npin: the number of the pin on which you want to read the pulse. (int)\r\nvalue: type of pulse to read: either HIGH or LOW. (int)\r\ntimeout (optional): the number of microseconds to wait for the pulse to be completed: the function returns 0 if no complete pulse was received within the timeout. Default is one second (unsigned long). \r\nReturns\r\nthe length of the pulse (in microseconds) or 0 if no pulse is completed before the timeout (unsigned long) \r\n<\/pre>\n<p><del>Unsigned long formatas: Unsigned long variables are extended size variables for number storage, and store 32 bits (4 bytes).<\/del><\/p>\n<p>B\u016bt\u0173 gerai naudoti pertraukim1 v\u0117jo grei\u010dio matavimui, ta\u010diau ne visi Arduino i\u0161vadai tam tinka. pvz Arduino UNO, kur\u012f dabar naudojame galima naudoti tik 2 ir 3 skaitmeninius i\u0161vadus. Daugiau informacijos: <a href=\"https:\/\/www.arduino.cc\/reference\/en\/language\/functions\/external-interrupts\/attachinterrupt\/\" target=\"_blank\" rel=\"noopener\">https:\/\/www.arduino.cc\/reference\/en\/language\/functions\/external-interrupts\/attachinterrupt\/<\/a><br \/>\nAtliksiu koregavim\u0105 Arduino programoje. Pakeitimas &#8211; naudojama pertraukimo proced\u016bra &#8211; efektyvesnis programos veikimas. Gaunasi kur kas stabiliau, tiksliau matuojamos ma\u017e\u0173 v\u0117j\u0173 reik\u0161m\u0117s.<br \/>\nTaigi\/ \u012e RPI perduodama Arduino kintamasis VejoGreitis_us. Jis matuojamas kaip laiko skirtumas tarp dviej\u0173 kylan\u010di\u0173 2 skaitmeninio \u012fvado front\u0173. Pertraukim\u0173 inicializavimas vyksta eilute:<\/p>\n<pre style=\"font-size: small;\">attachInterrupt(digitalPinToInterrupt(VGROUT), rising1, RISING);<\/pre>\n<p>\u010cia VGROUT v\u0117jo daviklio paduodamas signalas \u012f Arduino. Visas programinis kodas dalyvaujantis \u0161iame procese:<\/p>\n<pre style=\"font-size: small;\">...\r\nsigned long VejoGreitis_us;\r\nsigned long prev_time_us;\r\n...\r\nconst int VGROUT=2;\/\/sukeiciau 2 ir 7 vietomis, kad tur\u0117\u010diau pertraukim\u0105, kurie galimi 2 ir 3 pin'uose UNO versijai\r\n...\r\nvoid setup (void){\r\n...\r\n\tpinMode(VGROUT, INPUT);\r\n\tattachInterrupt(digitalPinToInterrupt(VGROUT), rising1, RISING);\r\n...\r\nvoid rising1() {\r\n  attachInterrupt(digitalPinToInterrupt(VGROUT), falling1, FALLING);\r\n  VejoGreitis_us=micros()-prev_time_us;\r\n  prev_time_us = micros();\r\n}\r\nvoid falling1() {\r\n  attachInterrupt(digitalPinToInterrupt(VGROUT), rising1, RISING);\r\n}\r\n<\/pre>\n<p>Sekantis \u017eingsnis suri\u0161ti pamatuot\u0105 v\u0117jo greit\u012f su apkrovos koeficientu.<br \/>\nBetz&#8217;o kreiv\u0117s numatytosios (teorin\u0117s) reik\u0161m\u0117s sura\u0161ytos Arduino programinio kodo kitam\u0105jame Betz:<\/p>\n<pre style=\"font-size: small;\">byte BETZ[256]={0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x01,0x01,0x01,0x02,0x02,0x02,0x02,0x02,0x02,0x02,0x03,0x03,0x03,0x03,0x03,0x03,0x04,0x04,0x04,0x04,0x04,0x04,0x04,0x05,0x05,0x05,0x05,0x05,0x05,0x05,0x06,0x06,0x06,0x06,0x07,0x07,0x07,0x08,0x08,0x08,0x08,0x09,0x09,0x09,0x0A,0x0A,0x0A,0x0A,0x0B,0x0B,0x0B,0x0C,0x0C,0x0C,0x0D,0x0D,0x0D,0x0E,0x0E,0x0E,0x0F,0x10,0x11,0x11,0x12,0x12,0x13,0x14,0x14,0x15,0x15,0x16,0x17,0x17,0x18,0x18,0x19,0x1A,0x1A,0x1B,0x1B,0x1C,0x1C,0x1D,0x1E,0x1F,0x1F,0x20,0x20,0x21,0x22,0x23,0x24,0x25,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3E,0x3F,0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x48,0x49,0x4B,0x4D,0x4E,0x4F,0x52,0x53,0x55,0x57,0x58,0x5A,0x5C,0x5D,0x5F,0x60,0x62,0x64,0x65,0x66,0x67,0x69,0x6A,0x6C,0x6E,0x6F,0x71,0x72,0x73,0x74,0x76,0x78,0x7B,0x7D,0x80,0x83,0x85,0x88,0x8A,0x8D,0x8F,0x92,0x94,0x97,0x9A,0x9C,0x9D,0x9F,0xA1,0xA4,0xA6,0xA9,0xAC,0xAE,0xB1,0xB4,0xB6,0xB9,0xBB,0xBF,0xC1,0xC2,0xC3,0xC5,0xC6,0xC8,0xCA,0xCC,0xCE,0xD0,0xD2,0xD4,0xD6,0xD8,0xDA,0xDC,0xDE,0xE0,0xE1,0xE3,0xE5,0xE7,0xE9,0xEB,0xED,0xEF,0xF1,0xF3,0xF4,0xF7,0xF9,0xFB,0xFD,0xFF};\r\n<\/pre>\n<p>Priimame, kad 0 indeksas atitinka 0m\/s v\u0117jo greit\u012f, o 255 indeksas atitinka 16m\/s (tarkim tai maksimalus galimas v\u0117jo greitis Lietuvoje) v\u0117jo greit\u012f. U\u017eduotis gaut\u0105 parametr\u0105 VejoGreitis_us, kas rei\u0161kia meandro trukm\u0119 mikrosekund\u0117mis paversti \u012f v\u0117jo greit\u012f metrais per sekund\u0119. V\u0117jo grei\u010dio daviklio duomenys sako, kad 1m\/s greit\u012f atitinka 12 impuls\u0173, arba 67 milisekund\u0117s. Didesnio grei\u010dio priklausomyb\u0117 yra prie\u0161ingai proporcinga impulso periodo trukmei.<\/p>\n<p>Deklaruojame VGRmpers kaip integer &#8211; vieno baito 256 reiksmi\u0173 kintam\u0105j\u012f, kuris bus Betz kintamojo indeksas.<br \/>\nunsigned int VGRmpers;\/\/unsigned int &#8211; 0&#8230;256, signed int, -127&#8230;+127 reiksmes<br \/>\n\/\/paruosiame apkrovai vejo greit\u012f padaugint\u0105 i\u0161 16 (u\u017epildysime 0-16m\/s kiekvien\u0105 i\u0161 16 v\u0117jo greicio 16 tarpini\u0173 reiksmiu &#8211; viso 256 reiksmes)<br \/>\nVGRmpers=1000000*16\/12\/VejoGreitis_us;\/\/VGRmpers rei\u0161kia v\u0117jo greit\u012f padaugint\u0105 is 16<br \/>\nanalogWrite(Power1, BETZ[VGRmpers]);<br \/>\nanalogWrite(Power2, BETZ[VGRmpers]);<\/p>\n<p>p.s. pataisyti schem\u0105 ir apra\u0161ymus pakei\u010diant VGROUT \u012fvedimo \u012f Arduino \u012f\u0161vad\u0105. B\u016bt\u0173 gerai pakeisti ir pa\u010dio signalo pavadinim\u0105. \u017dodis OUT &#8211; glumina, tarsi tai procesoriaus i\u0161vadas.<br \/>\np.p.s. perduoti gen da\u017enio reik\u0161m\u0119 &#8211; padidinti perduodam\u0173 bait\u0173 skai\u010di\u0173 ir pakeisti spi lentel\u0117s strukt\u016br\u0105.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>V\u0117jo grei\u010dio reik\u0161m\u0117 paprastai ir pakankamai tiksliai pamatuojama, ta\u010diau duomen\u0173 i\u0161vedimas yra sud\u0117tingas. \u0160iame straipsnyje apra\u0161ysiu vis\u0105 proces\u0105 nuo daviklio iki reik\u0161m\u0117s parodymo ekrane. V\u0117jo grei\u010diui matuoti skirtas prietaisas vadinamas anemometru. Naudosime Three Cup Anemometer Aluminium Alloyed DC12-24V su skaitmeniniu duomen\u0173 perdavimu per RS485 port\u0105. Taip pat i\u0161duodamas meandro formos impulsinis signalas, kurio da\u017enis tiesiogiai &hellip; <a href=\"http:\/\/vejas.defas.lt\/?p=293\" class=\"more-link\">Skaityti toliau: <span class=\"screen-reader-text\">V\u0117jo greitis: nuo matavimo iki reik\u0161m\u0117s parodymo<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_bbp_topic_count":0,"_bbp_reply_count":0,"_bbp_total_topic_count":0,"_bbp_total_reply_count":0,"_bbp_voice_count":0,"_bbp_anonymous_reply_count":0,"_bbp_forum_subforum_count":0,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-293","post","type-post","status-publish","format-standard","hentry","category-be-kategorijos"],"acf":[],"_links":{"self":[{"href":"http:\/\/vejas.defas.lt\/index.php?rest_route=\/wp\/v2\/posts\/293","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/vejas.defas.lt\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/vejas.defas.lt\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/vejas.defas.lt\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/vejas.defas.lt\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=293"}],"version-history":[{"count":29,"href":"http:\/\/vejas.defas.lt\/index.php?rest_route=\/wp\/v2\/posts\/293\/revisions"}],"predecessor-version":[{"id":382,"href":"http:\/\/vejas.defas.lt\/index.php?rest_route=\/wp\/v2\/posts\/293\/revisions\/382"}],"wp:attachment":[{"href":"http:\/\/vejas.defas.lt\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=293"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/vejas.defas.lt\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=293"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/vejas.defas.lt\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=293"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}