{"id":260160,"date":"2015-06-26T10:11:03","date_gmt":"2015-06-26T06:11:03","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=260160"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=260160","title":{"rendered":"\u041a\u0443\u0448\u0430\u0442\u044c \u043f\u043e\u0434\u0430\u043d\u043e, \u0441\u0430\u0434\u0438\u0442\u0435\u0441\u044c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430"},"content":{"rendered":"<p>     \t\u0421\u0435\u0433\u043e\u0434\u043d\u044f Intel Edison \u0441 \u043d\u0430\u0431\u043e\u0440\u043e\u043c \u0434\u0430\u0442\u0447\u0438\u043a\u043e\u0432 \u0438 \u0430\u043a\u0442\u044e\u0430\u0442\u043e\u0440\u043e\u0432 \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435: \u0441\u044b\u0433\u0440\u0430\u0442\u044c \u043f\u0435\u0441\u0435\u043d\u043a\u0443 \u00ab\u0412 \u0442\u0440\u0430\u0432\u0435 \u0441\u0438\u0434\u0435\u043b \u043a\u0443\u0437\u043d\u0435\u0447\u0438\u043a\u00bb, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c, \u0445\u043e\u0440\u043e\u0448\u043e \u043b\u0438 \u0442\u0435\u0447\u0435\u0442 \u0432\u043e\u0434\u0430, \u0433\u043e\u0440\u0438\u0442 \u043b\u0438 \u043e\u0433\u043e\u043d\u044c, \u043f\u0435\u0440\u0435\u043a\u0430\u0447\u0430\u0442\u044c \u0432\u043e\u0434\u0443, \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0435\u0441\u0442\u044c \u043b\u0438 \u0432 \u0432\u043e\u0437\u0434\u0443\u0445\u0435 \u043f\u0430\u0440\u044b \u0441\u043f\u0438\u0440\u0442\u0430, \u043f\u044b\u043b\u044c\u043d\u0430\u044f \u043b\u0438 \u043a\u043e\u043c\u043d\u0430\u0442\u0430, \u043f\u0440\u043e\u0441\u043b\u0435\u0434\u0438\u0442\u044c, \u043a\u0430\u043a \u0437\u0430\u043a\u0438\u043f\u0430\u0435\u0442 \u0447\u0430\u0439\u043d\u0438\u043a, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0441\u0432\u043e\u0438 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b, \u043d\u0430\u0439\u0442\u0438 \u043c\u0430\u0433\u043d\u0438\u0442. \u0418 \u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u0435\u0449\u0451. <\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/51d\/425\/c33\/51d425c3307e4977866edbed05bcb7e8.jpg\"\/><br \/>  <a name=\"habracut\"><\/a><br \/>  \u041c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0434\u0430\u0442\u0447\u0438\u043a\u0438 \u0438 \u0430\u043a\u0442\u044e\u0430\u0442\u043e\u0440\u044b, \u0438 \u043a\u0430\u043a \u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441 Intel Edison.  <\/p>\n<ul>\n<li>Grove \u2014 Hall Sensor \u2013 \u0434\u0430\u0442\u0447\u0438\u043a \u0425\u043e\u043b\u043b\u0430.<\/li>\n<li>Grove \u2013 Speaker \u2013 \u0434\u0438\u043d\u0430\u043c\u0438\u043a.<\/li>\n<li>Grove \u2014 Flame Sensor \u2013 \u0434\u0430\u0442\u0447\u0438\u043a \u043e\u0433\u043d\u044f.<\/li>\n<li>Grove \u2014 LED Bar \u2013 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043d\u044b\u0439 \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440.<\/li>\n<li>Grove \u2013 Encoder \u2013 \u0434\u0430\u0442\u0447\u0438\u043a \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430.<\/li>\n<li>Grove \u2014 Gas Sensor (MQ5) \u2013 \u0434\u0430\u0442\u0447\u0438\u043a \u0433\u0430\u0437\u0430.<\/li>\n<li>Grove \u2014 Air quality sensor \u2013 \u0434\u0430\u0442\u0447\u0438\u043a \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u0432\u043e\u0437\u0434\u0443\u0445\u0430.<\/li>\n<li>Grove \u2014 Infrared Temperature Sensor \u2013 \u0418\u041a \u0438\u0437\u043c\u0435\u0440\u0438\u0442\u0435\u043b\u044c \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u044b.<\/li>\n<li>G1\/4&quot; Water Flow Sensor \u2013 \u0434\u0430\u0442\u0447\u0438\u043a \u043f\u043e\u0442\u043e\u043a\u0430 \u0432\u043e\u0434\u044b.<\/li>\n<li>Grove \u2014 I2C Motor Driver \u2013 \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u043c\u043e\u0442\u043e\u0440\u0430.<\/li>\n<li>6V mini water pump \u2013 \u0432\u043e\u0434\u043d\u044b\u0439 \u043d\u0430\u0441\u043e\u0441.<\/li>\n<li>Grove \u2014 Digital Light Sensor \u2013 \u0434\u0430\u0442\u0447\u0438\u043a \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u044f.<\/li>\n<li>Grove \u2014 Alcohol Sensor \u2013 \u0434\u0430\u0442\u0447\u0438\u043a \u0430\u043b\u043a\u043e\u0433\u043e\u043b\u044f.<\/li>\n<li>Grove \u2014 Dust Sensor \u2013 \u0434\u0430\u0442\u0447\u0438\u043a \u043f\u044b\u043b\u0438.<\/li>\n<li>Planet Geared Motor F280 \u2013 \u043c\u043e\u0442\u043e\u0440.<\/li>\n<li>Grove \u2013 GPS \u2013 GPS-\u043c\u043e\u0434\u0443\u043b\u044c.<\/li>\n<\/ul>\n<p>  \u041f\u0440\u0438\u043c\u0435\u0440\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u0434\u0430\u0442\u0447\u0438\u043a\u043e\u0432 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u0432\u0438\u0434\u0435\u043e:<\/p>\n<p>  <iframe loading=\"lazy\" width=\"560\" height=\"349\" src=\"\/\/www.youtube.com\/embed\/tyvLY57t09c?wmode=opaque\" frameborder=\"0\" allowfullscreen><\/iframe><\/p>\n<p>  \u0415\u0441\u043b\u0438 \u0432\u044b \u0434\u043e \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u043c\u0435\u043d\u0442\u0430 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u0441 \u0434\u0430\u0442\u0447\u0438\u043a\u0430\u043c\u0438 \u0438 Intel Edison \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 <a href=\"http:\/\/habrahabr.ru\/company\/intel\/blog\/260259\/\">\u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0443\u044e \u0441\u0442\u0430\u0442\u044c\u044e<\/a>.<br \/>  \u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043d\u0430\u0447\u043d\u0435\u043c, \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u0437\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u0435. \u0415\u0441\u043b\u0438 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432, \u0443 \u0432\u0430\u0441 \u0431\u0443\u0434\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438 UPM, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435:  <\/p>\n<pre><code class=\"bash\">Cannot find module 'jsupm_rotaryencoder'<\/code><\/pre>\n<p>  \u0417\u043d\u0430\u0447\u0438\u0442, \u0432\u0430\u043c \u043d\u0430\u0434\u043e \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 UPM. \u0414\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u044d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e, \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439:  <\/p>\n<pre><code class=\"bash\">opkg upgrade<\/code><\/pre>\n<p>  \u0416\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u0438 \u043f\u0440\u043e\u0448\u0438\u0432\u043a\u0443 \u0441\u0430\u043c\u043e\u0439 \u043f\u043b\u0430\u0442\u044b. <\/p>\n<h2><font color=\"#0071c5\">\u0414\u0430\u0442\u0447\u0438\u043a \u0425\u043e\u043b\u043b\u0430<\/font><\/h2>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/b1a\/445\/909\/b1a4459092df4549a26d5adaa776c8c7.JPG\"\/><\/p>\n<p>  <a href=\"http:\/\/www.seeedstudio.com\/depot\/Grove-Hall-Sensor-p-965.html\">Grove \u2014 Hall Sensor<\/a>. SKU: SEN14034P<\/p>\n<p>  \u041f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435: \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043d\u0430\u043b\u0438\u0447\u0438\u044f \u043c\u0430\u0433\u043d\u0438\u0442\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044f. \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044f. <br \/>  \u0414\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044f, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043a\u043e\u043b\u0435\u0441\u0430, \u043c\u043e\u0436\u043d\u043e \u0443\u043a\u0440\u0435\u043f\u0438\u0442\u044c \u043c\u0430\u0433\u043d\u0438\u0442 \u043d\u0430 \u043a\u043e\u043b\u0435\u0441\u0435 \u0438 \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0434\u0430\u0442\u0447\u0438\u043a \u0440\u044f\u0434\u043e\u043c \u0441 \u0442\u0435\u043c \u043c\u0435\u0441\u0442\u043e\u043c, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442\u044c \u043c\u0430\u0433\u043d\u0438\u0442, \u043f\u0440\u0438 \u0432\u0440\u0430\u0449\u0435\u043d\u0438\u0438. \u0422\u043e\u0433\u0434\u0430 \u0432 \u043c\u043e\u043c\u0435\u043d\u0442 \u0438\u0445 \u0441\u0431\u043b\u0438\u0436\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u0441\u0438\u0433\u043d\u0430\u043b.<\/p>\n<p>  \u0414\u0430\u0442\u0447\u0438\u043a \u0425\u043e\u043b\u043b\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043a \u043b\u044e\u0431\u043e\u043c\u0443 \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u043c\u0443 \u0432\u0445\u043e\u0434\u0443 D2-D8. \u0412\u044b\u0434\u0430\u0435\u0442 0 \u2013 \u043f\u0440\u0438 \u043d\u0430\u043b\u0438\u0447\u0438\u0438 \u043c\u0430\u0433\u043d\u0438\u0442\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044f, 1 \u2013 \u043f\u0440\u0438 \u0435\u0433\u043e \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0438. \u041d\u0430 \u043f\u043b\u0430\u0442\u0435 \u0434\u0430\u0442\u0447\u0438\u043a\u0430 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u0438 \u043c\u0430\u0433\u043d\u0438\u0442\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044f.<\/p>\n<p>  \u041f\u0440\u0438\u043c\u0435\u0440 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043f\u0440\u0438 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0438 \u043c\u0430\u0433\u043d\u0438\u0442\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044f \u0433\u043e\u0440\u0438\u0442 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u043d\u0430 \u043f\u043b\u0430\u0442\u0435 Intel Edison \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434. \u0410 \u043f\u0440\u0438 \u043d\u0430\u043b\u0438\u0447\u0438\u0438 \u043e\u043d \u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f.<br \/>  \u0414\u0430\u0442\u0447\u0438\u043a \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043a D2.<\/p>\n<p>  \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0430 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434 (D13), \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0441\u0447\u0438\u0442\u0430\u043d\u043d\u043e\u0435 \u0441 \u0434\u0430\u0442\u0447\u0438\u043a\u0430 \u0425\u043e\u043b\u043b\u0430. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 MRAA.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 main.js<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"javascript\">var mraa = require('mraa');  var hallSensor = new mraa.Gpio(2); hallSensor.dir(mraa.DIR_IN);  var myOnboardLed = new mraa.Gpio(13); myOnboardLed.dir(mraa.DIR_OUT);  periodicActivity();  function periodicActivity() {     var value = hallSensor.read();     myOnboardLed.write(value);     setTimeout(periodicActivity,20); }<\/code><\/pre>\n<\/div>\n<\/div>\n<p>  <\/p>\n<h2><font color=\"#0071c5\">\u0414\u0438\u043d\u0430\u043c\u0438\u043a<\/font><\/h2>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/2cc\/352\/7c6\/2cc3527c64224353ab13f629930c5fa6.JPG\"\/><\/p>\n<p>  <a href=\"http:\/\/www.seeedstudio.com\/depot\/Grove-Speaker-p-1445.html\">Grove \u2013 Speaker<\/a>. SKU: COM05051P<\/p>\n<p>  \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043a \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u043c\u0443 \u0432\u044b\u0445\u043e\u0434\u0443. \u0421\u0438\u0433\u043d\u0430\u043b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0434\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u044d\u0442\u043e\u0442 \u0432\u044b\u0445\u043e\u0434, \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0434\u0438\u043d\u0430\u043c\u0438\u043a\u0435. \u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u0435\u0441\u043b\u0438 \u0431\u044b\u0441\u0442\u0440\u043e \u043c\u0435\u043d\u044f\u0442\u044c \u0441\u0438\u0433\u043d\u0430\u043b \u0441 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u0447\u0430\u0441\u0442\u043e\u0442\u043e\u0439, \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u0437\u0432\u0443\u043a. \u0413\u0440\u043e\u043c\u043a\u043e\u0441\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u043c\u0435\u043d\u044f\u0442\u044c \u043f\u043e\u0434\u0441\u0442\u0440\u043e\u0435\u0447\u043d\u044b\u043c \u0440\u0435\u0437\u0438\u0441\u0442\u043e\u0440\u043e\u043c.<\/p>\n<p>  \u0412 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 UPM \u0435\u0441\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0434\u0438\u043d\u0430\u043c\u0438\u043a\u043e\u043c. <\/p>\n<p>  \u041f\u0440\u0438\u043c\u0435\u0440 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043e\u0434\u043d\u043e\u0439 \u043d\u043e\u0442\u044b.  <\/p>\n<pre><code class=\"javascript\">var groveSpeaker = require('jsupm_grovespeaker'); var mySpeaker = new groveSpeaker.GroveSpeaker(2); \/\/ \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043a D2 mySpeaker.playSound('a\u2019, true, &quot;med&quot;);\/\/ \u041b\u044f<\/code><\/pre>\n<p>  \u0424\u0443\u043d\u043a\u0446\u0438\u044f:  <\/p>\n<pre><code class=\"javascript\">playSound('a', false, &quot;med&quot;);<\/code><\/pre>\n<p>  \u041f\u0435\u0440\u0432\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440, \u043d\u043e\u0442\u0430 &#8216;a&#8217;, &#8216;b&#8217;, &#8216;c&#8217;, &#8216;d&#8217;, &#8216;e&#8217;, &#8216;f&#8217;, \u0438\u043b\u0438 &#8216;g&#8217; (\u043b\u044f, \u0441\u0438, \u0434\u043e, \u0440\u0435, \u043c\u0438, \u0444\u0430, \u0441\u043e\u043b\u044c).<br \/>  \u0412\u0442\u043e\u0440\u043e\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440, \u043d\u0430\u0434\u043e \u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0414\u0438\u0435\u0437 \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u043d\u043e\u0442\u044b.<br \/>  \u0422\u0440\u0435\u0442\u0438\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440, \u043e\u043a\u0442\u0430\u0432\u0430, \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u00ablow\u00bb, \u00abmed\u00bb, \u0438\u043b\u0438 \u00abhigh\u00bb.<br \/>  \u0414\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u0435\u043b\u044c\u0437\u044f, \u043d\u043e \u043a\u0430\u0436\u0434\u0430\u044f \u043d\u043e\u0442\u0430 \u0437\u0432\u0443\u0447\u0438\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e 0.1 \u0441\u0435\u043a\u0443\u043d\u0434\u044b.<\/p>\n<p>  \u041f\u043e\u0445\u043e\u0436\u0435, \u0447\u0442\u043e \u0437\u0432\u0443\u043a \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e, \u0442. \u043a. \u0434\u0438\u043d\u0430\u043c\u0438\u043a \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u043a \u043b\u044e\u0431\u043e\u043c\u0443 \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u043c\u0443 \u0432\u044b\u0445\u043e\u0434\u0443. \u0418 \u0438\u0437-\u0437\u0430 \u044d\u0442\u043e\u0433\u043e \u0437\u0432\u0443\u043a \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043d\u0435 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0447\u0438\u0441\u0442\u044b\u0439, \u043e\u043d \u043f\u043e\u0434\u0445\u0440\u0438\u043f\u044b\u0432\u0430\u0435\u0442.<\/p>\n<p>  \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u043e \u0437\u0432\u0443\u043a\u043e\u043c \u0443\u0434\u043e\u0431\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0428\u0418\u041c, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u043d \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0438\u0433\u043d\u0430\u043b. (\u041f\u0440\u043e \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u0428\u0418\u041c, \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432 <a href=\"http:\/\/habrahabr.ru\/company\/intel\/blog\/260259\/\">\u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435<\/a>).<\/p>\n<p>  \u0414\u0438\u043d\u0430\u043c\u0438\u043a \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043c \u043a D3, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u043d \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0428\u0418\u041c. (\u041a\u043e\u043d\u0442\u0430\u043a\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442 \u0428\u0418\u041c, \u043d\u0430 \u043f\u043b\u0430\u0442\u0435 \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0442\u0441\u044f \u0442\u0438\u043b\u044c\u0434\u043e\u0439 &quot;~&quot;, \u044d\u0442\u043e D3, D5, D6).<\/p>\n<p>  \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u043e\u0442 \u0442\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0441\u0442\u0438 \u043d\u043e\u0442\u0443 \u041b\u044f \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0435 \u043e\u0434\u043d\u043e\u0439 \u0441\u0435\u043a\u0443\u043d\u0434\u044b.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 main.js<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"javascript\">var mraa = require(&quot;mraa&quot;);  var pwm3 = new mraa.Pwm(3);  freq = 440; \/\/ \u041d\u043e\u0442\u0430 \u041b\u044f var period = 1000000 \/ freq;  pwm3.period_us(period); pwm3.pulsewidth_us(period\/2); pwm3.enable(true);  setTimeout( function(){pwm3.enable(false);}, 1000);<\/code><\/pre>\n<\/div>\n<\/div>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043a \u0445\u0430\u0440\u0434\u043a\u043e\u0440\u0443 \u0438 \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0437\u0430\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u0443\u0435\u043c \u043c\u0435\u043b\u043e\u0434\u0438\u044e \u00ab\u0412 \u0442\u0440\u0430\u0432\u0435 \u0441\u0438\u0434\u0435\u043b \u043a\u0443\u0437\u043d\u0435\u0447\u0438\u043a\u00bb, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0443\u0434\u0435\u0442 \u0437\u0432\u0443\u0447\u0430\u0442\u044c \u0447\u0438\u0441\u0442\u043e \u0438 \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 main.js<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"javascript\">var mraa = require(&quot;mraa&quot;);  var pwm3 = new mraa.Pwm(3);  \/\/ \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u043d\u043e\u0442 \u043f\u0435\u0440\u0432\u043e\u0439 \u043e\u043a\u0442\u0430\u0432\u044b \u0432 \u0413\u0446 \/\/ \u0414\u043e, \u0414\u043e-\u0434\u0438\u0435\u0437, \u0420\u0435, \u0420\u0435-\u0434\u0438\u0435\u0437, \u041c\u0438, \u0424\u0430, \u0424\u0430-\u0434\u0438\u0435\u0437, \u0421\u043e\u043b\u044c, \u0421\u043e\u043b\u044c-\u0434\u0438\u0435\u0437, \u041b\u044f, \u0421\u0438-\u0431\u0435\u043c\u043e\u043b\u044c, \u0421\u0438 var freq = [261.63, 277.18, 293.66, 311.13, 329.63, 349.23, 369.99, 392.00, 415.30, 440.00, 466.16, 493.88 ];  \/\/ \u0412 \u0442\u0440\u0430\u0432\u0435 \u0441\u0438\u0434\u0435\u043b \u043a\u0443\u0437\u043d\u0435\u0447\u0438\u043a \/\/ \u043c\u0435\u043b\u043e\u0434\u0438\u044f. \u043f\u0430\u0440\u044b N,V \/\/ N-\u043d\u043e\u043c\u0435\u0440 \u043d\u043e\u0442\u044b (-1-\u043f\u0430\u0443\u0437\u0430), \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c 1\/V var notes = [ 9,4, 4,4, 9,4, 4,4, 9,4, 8,4, 8,2, 8,4, 4,4, 8,4, 4,4, 8,4, 9,4, 9,2, 9,4, 4,4, 9,4, 4,4, 9,4, 8,4, 8,2, 8,4, 4,4, 8,4, 4,4, 8,4, 9, 1.33];  var currNote = 0; var baseValue = 1000;\/\/ \u0431\u0430\u0437\u043e\u0432\u0430\u044f \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043d\u043e\u0442\u044b \u0432 \u043c\u0441  nextNote();  function nextNote() {     pwm3.enable(false);          if( currNote &gt;= notes.length \/ 2  )     {         return;     }          var note =  notes[currNote*2];     var value = notes[currNote*2+1];          \/\/ \u041a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u043e\u043a\u0442\u0430\u0432\u044b:     \/\/ 0.25 - \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u043e\u043a\u0442\u0430\u0432\u0430     \/\/ 0.5 - \u043c\u0430\u043b\u0430\u044f \u043e\u043a\u0442\u0430\u0432\u0430     \/\/ 1 - \u043f\u0435\u0440\u0432\u0430\u044f \u043e\u043a\u0442\u0430\u0432\u0430     \/\/ 2 - \u0432\u0442\u043e\u0440\u0430\u044f \u043e\u043a\u0442\u0430\u0432\u0430     \/\/ 4 - \u0442\u0440\u0435\u0442\u044c\u044f \u043e\u043a\u0442\u0430\u0432\u0430     \/\/ 8 - \u0447\u0435\u0442\u0432\u0435\u0440\u0442\u0430\u044f \u043e\u043a\u0442\u0430\u0432\u0430     \/\/ 16 - \u043f\u044f\u0442\u0430\u044f \u043e\u043a\u0442\u0430\u0432\u0430     var octaveScale = 2;\/\/ \u0421\u044b\u0433\u0440\u0430\u0435\u043c \u0432\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u043e\u043a\u0442\u0430\u0432\u0435, \u0442\u0430\u043a \u0432\u0435\u0441\u0435\u043b\u0435\u0435           console.log('note='+note+' value='+value);          if( note &gt;= 0 )     {         var frequency = freq[ note ] * octaveScale;         var period = 1000000 \/ frequency;          console.log('frequency='+frequency+ ' Hz');                  pwm3.period_us(period);         pwm3.pulsewidth_us(period\/2);         pwm3.enable(true);     }          currNote++;     setTimeout( nextNote, baseValue\/value);    }<\/code><\/pre>\n<\/div>\n<\/div>\n<p>  <\/p>\n<h2><font color=\"#0071c5\">\u0414\u0430\u0442\u0447\u0438\u043a \u043f\u043e\u0442\u043e\u043a\u0430 \u0432\u043e\u0434\u044b<\/font><\/h2>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/097\/7c4\/851\/0977c4851ca64cc1b029ac3883d6b48d.JPG\"\/><\/p>\n<p>  <a href=\"http:\/\/www.seeedstudio.com\/depot\/G14-Water-Flow-Sensor-p-1345.html\">G1\/4&quot; Water Flow Sensor<\/a>. SKU: TEM01071B<\/p>\n<p>  \u0414\u0430\u0442\u0447\u0438\u043a \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0449\u0435\u0439 \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0433\u043e \u0432\u043e\u0434\u044b. \u0414\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u043e\u0442 0.3 \u0434\u043e 6 \u043b\u0438\u0442\u0440\u043e\u0432 \u0432 \u043c\u0438\u043d\u0443\u0442\u0443. \u041d\u0430 \u043a\u0440\u044b\u0448\u043a\u0435 \u0441\u0442\u0440\u0435\u043b\u043a\u043e\u0439 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u043e \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u0432\u043e\u0434\u044b.<br \/>  \u0412\u043d\u0443\u0442\u0440\u0438 \u0441\u0435\u043d\u0441\u043e\u0440\u0430 \u0441\u0442\u043e\u0438\u0442 \u0434\u0430\u0442\u0447\u0438\u043a \u0425\u043e\u043b\u043b\u0430, \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u043f\u0440\u0438 \u0432\u0440\u0430\u0449\u0435\u043d\u0438\u0438 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0435\u0439 \u043a\u0440\u044b\u043b\u044c\u0447\u0430\u0442\u043a\u0438. \u0427\u0430\u0441\u0442\u043e\u0442\u0430 \u0435\u0433\u043e \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u043f\u043e\u0440\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u0430 \u043e\u0431\u044a\u0435\u043c\u0443 \u043f\u0440\u043e\u0442\u0435\u043a\u0430\u044e\u0449\u0435\u0439 \u0432\u043e\u0434\u044b. \u041d\u0430 \u0432\u044b\u0432\u043e\u0434\u0435 \u0434\u0430\u0442\u0447\u0438\u043a\u0430 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0441\u0438\u0433\u043d\u0430\u043b 0 \u0438 1. \u041c\u044b \u0431\u0443\u0434\u0435\u043c \u0441\u043b\u0435\u0434\u0438\u0442\u044c \u0437\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u0441\u0438\u0433\u043d\u0430\u043b\u0430 \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u0441\u0435\u043d\u0441\u043e\u0440\u0430 \u0438 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0441 0 \u043d\u0430 1.<br \/>  \u041f\u043e\u0434\u0441\u0447\u0438\u0442\u0430\u0435\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0438\u043c\u043f\u0443\u043b\u044c\u0441\u043e\u0432 \u0437\u0430 \u0441\u0435\u043a\u0443\u043d\u0434\u0443, \u0442\u043e \u0435\u0441\u0442\u044c \u0447\u0430\u0441\u0442\u043e\u0442\u0443 \u0438\u0445 \u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f. \u0424\u043e\u0440\u043c\u0443\u043b\u0430 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0430 \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u0432 \u043f\u043e\u0442\u043e\u043a, \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f:<br \/>  <i>L = Q \/73<\/i>,<br \/>  \u0433\u0434\u0435 Q \u2013 \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u0438\u043c\u043f\u0443\u043b\u044c\u0441\u043e\u0432 (\u0413\u0446).<br \/>  L \u2013 \u043f\u043e\u0442\u043e\u043a (\u043b\/\u043c\u0438\u043d\u0443\u0442\u0443)<\/p>\n<p>  \u0421 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u0434\u0430\u0442\u0447\u0438\u043a\u0430 \u0435\u0441\u0442\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b. \u0423 \u043d\u0435\u0433\u043e \u043d\u0435\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u0440\u0430\u0437\u044a\u0435\u043c\u043e\u0432. \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u0442\u0440\u0435\u0445\u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043d\u044b\u0439, \u0430 \u043d\u0430\u0434\u043e \u0447\u0435\u0442\u044b\u0440\u0451\u0445. \u041d\u043e \u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u043e, \u0435\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u0442\u0440\u0438 \u043f\u0440\u043e\u0432\u043e\u0434\u0430 Male-Male. \u041e\u043d\u0438 \u0445\u043e\u0440\u043e\u0448\u043e \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0432 \u0440\u0430\u0437\u044a\u0435\u043c\u044b.<\/p>\n<p>  \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043c \u0434\u0430\u0442\u0447\u0438\u043a \u043a D2.<br \/>  \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c. \u0421\u0434\u0435\u043b\u0430\u0435\u043c \u0434\u0432\u0430 \u0442\u0430\u0439\u043c\u0435\u0440\u0430. \u041f\u0435\u0440\u0432\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0440\u0430\u0437 \u0432 \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0434\u0430\u0442\u0447\u0438\u043a\u0430. \u0415\u0441\u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438\u0437 0 \u043f\u0435\u0440\u0435\u0448\u043b\u043e \u0432 1, \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u043c \u0441\u0447\u0435\u0442\u0447\u0438\u043a \u0438\u043c\u043f\u0443\u043b\u044c\u0441\u043e\u0432.<br \/>  \u0412\u0442\u043e\u0440\u043e\u0439 \u0442\u0430\u0439\u043c\u0435\u0440 \u0431\u0443\u0434\u0435\u0442 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0440\u0430\u0437 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443. \u041e\u043d \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u0434\u0441\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0445 \u0438\u043c\u043f\u0443\u043b\u044c\u0441\u043e\u0432.<br \/>  \u0422\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u0431\u0435\u0440\u0435\u043c 1 \u0441\u0435\u043a\u0443\u043d\u0434\u0443 \u0434\u043b\u044f \u043d\u0430\u043a\u043e\u043f\u043b\u0435\u043d\u0438\u044f, \u0442\u043e \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u0442\u043e\u043a\u0430 \u0431\u0443\u0434\u0435\u0442 1\/73 = 0.013 \u043b\/\u043c\u0438\u043d.<br \/>  \u041d\u0430\u0434\u043e \u0443\u0447\u0435\u0441\u0442\u044c, \u0447\u0442\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0431\u0435\u0437 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u043d\u0438\u0439 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043c\u0435\u043d\u0435\u0435 \u0442\u043e\u0447\u043d\u043e, \u0442\u0430\u043a \u043a\u0430\u043a \u0435\u0441\u043b\u0438 \u0438\u043c\u043f\u0443\u043b\u044c\u0441\u044b \u043f\u0440\u0438\u0445\u043e\u0434\u044f\u0442 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0447\u0430\u0441\u0442\u043e, \u0442\u043e \u043c\u044b \u0438\u0445 \u043d\u0435 \u0437\u0430\u043c\u0435\u0442\u0438\u043c. \u0423 \u043c\u0435\u043d\u044f \u043d\u0430 \u0442\u0435\u0441\u0442\u0430\u0445, \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e \u043e\u043a\u043e\u043b\u043e 230 \u0438\u043c\u043f\u0443\u043b\u044c\u0441\u043e\u0432 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443, \u044d\u0442\u043e \u043e\u043a\u043e\u043b\u043e 3 \u043b\u0438\u0442\u0440\u043e\u0432 \u0432 \u043c\u0438\u043d\u0443\u0442\u0443. \u0415\u0441\u043b\u0438 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0442\u044c \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c, \u0442\u043e \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0442\u044c\u0441\u044f. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043d\u0430 LCD \u044d\u043a\u0440\u0430\u043d. \u0414\u043b\u044f \u043f\u043e\u0434\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043a \u0434\u0430\u0442\u0447\u0438\u043a\u0443 \u0432\u043e\u0434\u044b, \u044f \u043a\u0443\u043f\u0438\u043b \u0432 \u043c\u0430\u0433\u0430\u0437\u0438\u043d\u0435 \u0448\u043b\u0430\u043d\u0433 \u0434\u0438\u0430\u043c\u0435\u0442\u0440\u043e\u043c 4 \u043c\u043c. <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 main.js<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"javascript\">var mraa = require('mraa');   var jsUpmI2cLcd = require ('jsupm_i2clcd'); var lcd = new jsUpmI2cLcd.Jhd1313m1(0, 0x3E, 0x62);  lcd.setColor(10,10,10);  var waterFlowSensor = new mraa.Gpio(2);   waterFlowSensor.dir(mraa.DIR_IN);   var prev = waterFlowSensor.read(); var count  = 0;  setInterval( checkSensor, 1 ); setInterval( countProc, 1000 );  function checkSensor() {     var curr = waterFlowSensor.read();          \/\/ \u041e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0435\u043c \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043d\u0430 1     if( prev === 0 && curr === 1 )     {         count++;     }          prev = curr; }  function countProc() {     var litres = count \/ 73;     var currCount = count;     count = 0;          console.log('count='+currCount+ ' water=' + litres + ' Litres\/hour, water=' + (litres\/60) + 'L\/min');          lcd.setCursor(0,0);     lcd.write(&quot;Count=&quot; + currCount + '    ');     lcd.setCursor(1,0);     lcd.write(&quot;Flow=&quot; + parseFloat(litres).toFixed(2)+ ' L\/min   '); }<\/code><\/pre>\n<\/div>\n<\/div>\n<p>  <\/p>\n<h2><font color=\"#0071c5\">\u0414\u0430\u0442\u0447\u0438\u043a \u043e\u0433\u043d\u044f<\/font><\/h2>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/b4a\/089\/acc\/b4a089accf704875ab082bf7d6cd62d7.JPG\"\/><\/p>\n<p>  <a href=\"http:\/\/www.seeedstudio.com\/depot\/Grove-Flame-Sensor-p-1450.html\">Grove \u2014 Flame Sensor<\/a>. SKU: SEN05082P<\/p>\n<p>  \u0414\u0430\u0442\u0447\u0438\u043a \u0440\u0435\u0430\u0433\u0438\u0440\u0443\u0435\u0442 \u043d\u0430 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435 \u043e\u0433\u043d\u044f, \u0430 \u0442\u043e\u0447\u043d\u0435\u0435 \u043d\u0430 \u0438\u0437\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0441 \u0434\u043b\u0438\u043d\u043d\u043e\u0439 \u0432\u043e\u043b\u043d\u044b 760nm \u2014 1100nm. \u0415\u0441\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u0447\u0443\u0432\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u043e\u0434\u0441\u0442\u0440\u043e\u0435\u0447\u043d\u043e\u0433\u043e \u0440\u0435\u0437\u0438\u0441\u0442\u043e\u0440\u0430. \u0423 \u043c\u0435\u043d\u044f \u0432 \u0442\u0435\u0441\u0442\u0435 \u0434\u0430\u0442\u0447\u0438\u043a \u043d\u0435 \u0440\u0435\u0430\u0433\u0438\u0440\u043e\u0432\u0430\u043b \u043d\u0430 \u043f\u043e\u043c\u0435\u0449\u0435\u043d\u043d\u044b\u0439 \u0440\u044f\u0434\u043e\u043c \u0441 \u043d\u0438\u043c \u0437\u0435\u043b\u0451\u043d\u044b\u0439 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434. \u0420\u0435\u0430\u0433\u0438\u0440\u043e\u0432\u0430\u043b \u043d\u0430 \u0431\u0435\u043b\u044b\u0439 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043d\u044b\u0439 \u0444\u043e\u043d\u0430\u0440\u0438\u043a, \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u0433\u0434\u0430 \u0446\u0435\u043d\u0442\u0440 \u0435\u0433\u043e \u043b\u0443\u0447\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u043b\u0441\u044f \u043d\u0430 \u0441\u0435\u043d\u0441\u043e\u0440. \u041f\u0440\u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u0433\u0430\u0437\u043e\u0432\u043e\u0439 \u0437\u0430\u0436\u0438\u0433\u0430\u043b\u043a\u0438, \u0434\u0430\u0442\u0447\u0438\u043a \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b \u043d\u0430 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u043e\u043a\u043e\u043b\u043e 50 \u0441\u0430\u043d\u0442\u0438\u043c\u0435\u0442\u0440\u043e\u0432. \u041f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043d\u0430 \u0442\u0430\u043a\u043e\u043c \u0436\u0435 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u043e\u043d \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b \u043e\u0442 \u0437\u0430\u0436\u0436\u0435\u043d\u043d\u043e\u0439 \u0441\u043f\u0438\u0447\u043a\u0438. \u0414\u0430\u0442\u0447\u0438\u043a \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0438 \u043e\u0442 \u043f\u0443\u043b\u044c\u0442\u0430 \u0434\u0438\u0441\u0442\u0430\u043d\u0446\u0438\u043e\u043d\u043d\u043e\u0433\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f. \u0421\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0442\u0430\u043a\u043e\u0439 \u0436\u0435 \u0444\u043e\u0442\u043e\u0434\u0438\u043e\u0434, \u043a\u0430\u043a \u0432 \u0431\u044b\u0442\u043e\u0432\u043e\u0439 \u0442\u0435\u0445\u043d\u0438\u043a\u0435. \u0420\u0435\u0430\u0433\u0438\u0440\u0443\u0435\u0442 \u043d\u0430 \u0441\u043e\u043b\u043d\u0435\u0447\u043d\u044b\u0439 \u0441\u0432\u0435\u0442. \u041d\u043e \u0442\u0430\u043a \u043a\u0430\u043a \u0447\u0443\u0432\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u0441\u0442\u0440\u043e\u0438\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0431\u044b\u043b\u043e \u043b\u043e\u0436\u043d\u044b\u0445 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u0439.<br \/>  \u0412 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0441\u043a\u0430\u0437\u0430\u043d\u043e, \u0447\u0442\u043e \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043d\u0438\u044f 0-1 \u043c.<\/p>\n<p>  \u041f\u0440\u0438\u043c\u0435\u0440, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0434\u0430\u0442\u0447\u0438\u043a \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043a D2 \u0438 \u0435\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u043e\u043c \u043d\u0430 \u043f\u043b\u0430\u0442\u0435 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u0435.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 main.js<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"javascript\">var mraa = require('mraa');  var flameSensor = new mraa.Gpio(2); flameSensor.dir(mraa.DIR_IN);  var myOnboardLed = new mraa.Gpio(13); myOnboardLed.dir(mraa.DIR_OUT);  periodicActivity();  function periodicActivity() {     var value = flameSensor.read();     myOnboardLed.write(1-value);     setTimeout(periodicActivity,20); }<\/code><\/pre>\n<\/div>\n<\/div>\n<p>  <\/p>\n<h2><font color=\"#0071c5\">\u0411\u0435\u0441\u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043d\u044b\u0439 \u0418\u041a \u0434\u0430\u0442\u0447\u0438\u043a \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u044b<\/font><\/h2>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/953\/1a3\/615\/9531a3615c704274b7d0b376e1785c0e.JPG\"\/><\/p>\n<p>  <a href=\"http:\/\/www.seeedstudio.com\/depot\/Grove-Infrared-Temperature-Sensor-p-1058.html\">Grove \u2014 Infrared Temperature Sensor<\/a>. SKU: SEN01041P<\/p>\n<p>  \u0411\u0435\u0441\u043a\u043e\u043d\u0442\u0430\u043a\u0442\u043d\u044b\u0439 \u0438\u043d\u0444\u0440\u0430\u043a\u0440\u0430\u0441\u043d\u044b\u0439 \u0434\u0430\u0442\u0447\u0438\u043a \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u044b. \u0420\u0430\u0431\u043e\u0447\u0435\u0435 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 9 \u0441\u043c. \u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u0431\u0438\u0440\u0430\u0442\u044c \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e, \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u044f \u043f\u043e \u0442\u0430\u044e\u0449\u0435\u0439 \u0438 \u043a\u0438\u043f\u044f\u0449\u0435\u0439 \u0432\u043e\u0434\u0435.<br \/>  \u041d\u0430\u0434\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c UPM. \u0414\u0430\u0442\u0447\u0438\u043a \u0432\u044b\u0434\u0430\u0435\u0442 \u0434\u0432\u0435 \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u044b. \u041e\u0434\u043d\u0443 \u043e\u043a\u0440\u0443\u0436\u0430\u044e\u0449\u0435\u0439 \u0441\u0440\u0435\u0434\u044b, \u0434\u0440\u0443\u0433\u0443\u044e \u0438\u0437\u043c\u0435\u0440\u044f\u0435\u043c\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430. \u0412\u043d\u0443\u0442\u0440\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0441\u0435\u043d\u0441\u043e\u0440 TP-538U. <\/p>\n<p>  \u041f\u0440\u0438\u043c\u0435\u0440 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b. \u0414\u0430\u0442\u0447\u0438\u043a \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043c \u043a A0 (\u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u044b \u043f\u0438\u043d\u044b A0 \u0438 A1). \u0414\u0430\u043d\u043d\u044b\u0435 \u0432\u044b\u0432\u043e\u0434\u044f\u0442\u0441\u044f \u043d\u0430 \u043a\u043e\u043d\u0441\u043e\u043b\u044c \u0438 \u0416\u041a-\u044d\u043a\u0440\u0430\u043d.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 main.js<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"javascript\">var OTP538U_AREF = 5.0;\/\/ \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435 \u043f\u0438\u0442\u0430\u043d\u0438\u044f var tempIRSensor_lib = require('jsupm_otp538u');  \/\/ \u0416\u041a-\u044d\u043a\u0440\u0430\u043d var jsUpmI2cLcd = require ('jsupm_i2clcd'); var lcd = new jsUpmI2cLcd.Jhd1313m1(0, 0x3E, 0x62);  \/\/ \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043a A0 (\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043f\u0438\u043d\u044b A0 \u0438 A1) \/\/ A0 - \u0432\u043d\u0435\u0448\u043d\u044f\u044f \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430 \/\/ A1 - \u0442\u0435\u043c\u043f\u0435\u0440\u0430\u0442\u0443\u0440\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 var tempIRSensor_obj = new tempIRSensor_lib.OTP538U(0, 1, OTP538U_AREF);  function checkTemp() {     var tempAmb = tempIRSensor_obj.ambientTemperature();     var tempObj = tempIRSensor_obj.objectTemperature();      var tempAmbStr = parseFloat(tempAmb).toFixed(2);     var tempObjStr = parseFloat(tempObj).toFixed(2);          var outputStr = &quot;Ambient temp: &quot; + tempAmbStr + &quot; C, &quot;                     +&quot;Object temp: &quot; + tempObjStr + &quot; C&quot;;          lcd.setCursor(0,0);     lcd.write('amb='+tempAmbStr+'    ');      lcd.setCursor(1,0);     lcd.write('obj='+tempObjStr+'    ');      console.log(outputStr); }  setInterval(checkTemp, 1000);<\/code><\/pre>\n<\/div>\n<\/div>\n<p>  <\/p>\n<h2><font color=\"#0071c5\">\u0414\u0430\u0442\u0447\u0438\u043a \u0443\u043b\u044c\u0442\u0440\u0430\u0444\u0438\u043e\u043b\u0435\u0442\u0430<\/font><\/h2>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/b5f\/a91\/121\/b5fa91121018496792eb126dba1f4b2e.JPG\"\/><\/p>\n<p>  <a href=\"http:\/\/www.seeedstudio.com\/depot\/Grove-UV-Sensor-p-1540.html\">Grove \u2014 UV Sensor<\/a>. SKU: SEN00700P<\/p>\n<p>  \u0414\u0430\u0442\u0447\u0438\u043a \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043a \u0430\u043d\u0430\u043b\u043e\u0433\u043e\u0432\u043e\u043c\u0443 \u0432\u0445\u043e\u0434\u0443. \u041c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0430 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c UPM \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0430 \u0432 \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0441\u0430\u043c\u0430 \u0443\u0441\u0440\u0435\u0434\u043d\u044f\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044f \u0441\u0435\u0440\u0438\u044e \u0437\u0430\u043c\u0435\u0440\u043e\u0432. \u0418\u0437-\u0437\u0430 \u044d\u0442\u043e\u0433\u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u0434\u0430\u0442\u0447\u0438\u043a\u0430 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0442\u043e\u0440\u043c\u0430\u0436\u0438\u0432\u0430\u0442\u044c.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 main.js<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"javascript\">var UVSensor = require('jsupm_guvas12d');  \/\/ \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043a A0 var myUVSensor = new UVSensor.GUVAS12D(0);  var g_GUVAS12D_AREF = 5.0;\/\/ \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435 var g_SAMPLES_PER_QUERY = 1024;  setInterval(function() {     var val = myUVSensor.value(g_GUVAS12D_AREF, g_SAMPLES_PER_QUERY);     var valStr = parseFloat(val).toFixed(6);  \tvar outputStr = &quot;AREF: &quot; + g_GUVAS12D_AREF  \t\t\t\t\t+ &quot;, Voltage value (higher means more UV): &quot; \t\t\t\t\t+ valStr; \tconsole.log(outputStr); }, 1000);<\/code><\/pre>\n<\/div>\n<\/div>\n<p>  \u0412 \u043a\u043e\u043c\u043d\u0430\u0442\u0435 \u0441 \u0445\u043e\u0440\u043e\u0448\u0438\u043c \u0441\u043e\u043b\u043d\u0435\u0447\u043d\u044b\u043c \u0440\u0430\u0441\u0441\u0435\u044f\u043d\u043d\u044b\u043c \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u0435\u043c, \u043d\u043e \u0441 \u0437\u0430\u043a\u0440\u044b\u0442\u044b\u043c\u0438 \u043e\u043a\u043d\u0430\u043c\u0438, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 0.283203. \u0415\u0441\u043b\u0438 \u043f\u043e\u0434\u043d\u0435\u0441\u0442\u0438 \u0435\u0433\u043e \u043a \u043e\u043a\u043d\u0443 \u043d\u0430 \u043f\u0440\u044f\u043c\u044b\u0435 \u043b\u0443\u0447\u0438 \u043e\u0442 \u0441\u043e\u043b\u043d\u0446\u0430, \u043d\u043e \u0437\u0430 \u0442\u0440\u043e\u0439\u043d\u044b\u043c \u0441\u0442\u0435\u043a\u043b\u043e\u043f\u0430\u043a\u0435\u0442\u043e\u043c, \u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u0434\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0434\u043e 0.473633. \u0415\u0441\u043b\u0438 \u0436\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u043e\u043a\u043d\u043e, \u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c 4.980469.<\/p>\n<h2><font color=\"#0071c5\">\u041f\u0440\u043e\u0433\u0440\u0435\u0441\u0441 \u0431\u0430\u0440<\/font><\/h2>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/90d\/ab7\/64e\/90dab764e3804e0e99d6f50f57e7e9da.JPG\"\/><\/p>\n<p>  <a href=\"http:\/\/www.seeedstudio.com\/depot\/Grove-LED-Bar-p-1178.html\">Grove \u2014 LED Bar<\/a>. SKU: LED05031P<\/p>\n<p>  \u041f\u0440\u043e\u0433\u0440\u0435\u0441\u0441 \u0431\u0430\u0440 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 10 \u0441\u0432\u0435\u0442\u043e\u0434\u0438\u043e\u0434\u043e\u0432. \u0412\u0441\u0435 \u043e\u043d\u0438 \u0437\u0435\u043b\u0435\u043d\u043e\u0433\u043e \u0446\u0432\u0435\u0442\u0430, \u043a\u0440\u043e\u043c\u0435 \u0434\u0432\u0443\u0445 \u043a\u0440\u0430\u0439\u043d\u0438\u0445, \u0436\u0435\u043b\u0442\u043e\u0433\u043e \u0438 \u043a\u0440\u0430\u0441\u043d\u043e\u0433\u043e. \u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043b\u0443\u0447\u0448\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 UPM. \u041e\u043d\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0437\u0430\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u0442\u043e\u0440\u043e\u043d\u0443, \u0433\u0434\u0435 \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0434\u043e \u0437\u0430\u0436\u0435\u0447\u044c. \u0414\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043e\u0431\u0430 \u043f\u0440\u043e\u0432\u043e\u0434\u043d\u0438\u043a\u0430 (\u0434\u0430\u043d\u043d\u044b\u0435 \u0438 \u0442\u0430\u043a\u0442\u043e\u0432\u044b\u0435 \u0438\u043c\u043f\u0443\u043b\u044c\u0441\u044b). \u041a\u043e\u0433\u0434\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043c \u043a D2, \u044d\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0438\u043d-2 \u0438 \u043f\u0438\u043d-3.<\/p>\n<p>  \u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f, \u043c\u0435\u043d\u044f\u044f \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 main.js<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"javascript\">var LEDBar = require(&quot;jsupm_my9221&quot;); var myLEDBar = new LEDBar.MY9221(2, 3);\/\/ \u0420\u0430\u0437\u044a\u0435\u043c D2 (pin-D2,pin-D3) var directionBool = true;  setInterval(function() { \tshow_LED(1, directionBool); }, 1500 );  function show_LED(level, direction) { \tif (level &lt;= 10) \t{ \t\tmyLEDBar.setBarLevel(level, directionBool); \t\tsetTimeout(show_LED, 50, ++level, directionBool);\t \t} \telse     { \t\tdirectionBool = !directionBool;     } }<\/code><\/pre>\n<\/div>\n<\/div>\n<p>  <\/p>\n<h2><font color=\"#0071c5\">\u0414\u0430\u0442\u0447\u0438\u043a \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430 360 \u0433\u0440\u0430\u0434\u0443\u0441\u043e\u0432. \u042d\u043d\u043a\u043e\u0434\u0435\u0440<\/font><\/h2>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/af0\/b93\/248\/af0b93248e3b41f48d1c449ca9045ef2.JPG\"\/><\/p>\n<p>  <a href=\"http:\/\/www.seeedstudio.com\/depot\/Grove-Encoder-p-1352.html\">Grove \u2013 Encoder<\/a>. SKU: COM01112P<\/p>\n<p>  \u042d\u043d\u043a\u043e\u0434\u0435\u0440, \u0434\u0430\u0442\u0447\u0438\u043a \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430. \u041c\u043e\u0436\u0435\u0442 \u043f\u043e\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c \u043d\u0430 \u043f\u043e\u043b\u043d\u044b\u0439 \u043e\u0431\u043e\u0440\u043e\u0442 \u0432 \u043b\u044e\u0431\u0443\u044e \u0441\u0442\u043e\u0440\u043e\u043d\u0443.<br \/>  \u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 UPM. \u041f\u0440\u0438 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0442\u044c\u0441\u044f, \u043f\u0440\u0438 \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0435 \u0432 \u0434\u0440\u0443\u0433\u0443\u044e \u0441\u0442\u043e\u0440\u043e\u043d\u0443, \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0442\u044c\u0441\u044f. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043c\u043e\u0436\u0435\u0442 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f \u043c\u0435\u043d\u044c\u0448\u0435 \u043d\u0443\u043b\u044f. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u0432\u0430 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0445 \u0441\u0438\u0433\u043d\u0430\u043b\u0430. <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 main.js<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"javascript\">var rotaryEncoder = require(&quot;jsupm_rotaryencoder&quot;);  \/\/ \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043a D2 (\u043f\u0438\u043d D2, D3) var myRotaryEncoder = new rotaryEncoder.RotaryEncoder(2, 3);  getValue();  function getValue() {     var v = myRotaryEncoder.position(); \tconsole.log(&quot;Position: &quot; + v);          setTimeout(getValue,100); }<\/code><\/pre>\n<\/div>\n<\/div>\n<p>  <\/p>\n<h2><font color=\"#0071c5\">\u0414\u0430\u0442\u0447\u0438\u043a \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u044f I2C<\/font><\/h2>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/819\/b96\/b6a\/819b96b6a3f14104a5d0c2f5a434d99f.JPG\"\/><\/p>\n<p>  <a href=\"http:\/\/www.seeedstudio.com\/depot\/Grove-Digital-Light-Sensor-p-1281.html\">Grove \u2014 Digital Light Sensor<\/a>. SKU: SEN10171P<\/p>\n<p>  \u0414\u0430\u0442\u0447\u0438\u043a \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u044f. \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043a \u0448\u0438\u043d\u0435 I2C. \u0412\u044b\u0434\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 \u041b\u044e\u043a\u0441\u0430\u0445. \u041f\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043b\u0435\u0436\u0430\u0442 \u0432 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 0-40000.<\/p>\n<p>  \u041d\u0430 \u0442\u0435\u0441\u0442\u0430\u0445 \u0443 \u043c\u0435\u043d\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u0432 \u0441\u0432\u0435\u0442\u043b\u043e\u0439 \u043a\u043e\u043c\u043d\u0430\u0442\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u0440\u044f\u0434\u043a\u0430 500. \u041d\u0430 \u0441\u043e\u043b\u043d\u0446\u0435 \u0447\u0435\u0440\u0435\u0437 \u043e\u043a\u043d\u043e \u0441 \u0436\u0430\u043b\u044e\u0437\u0438 \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0435\u0442 20000-40000. \u0415\u0441\u043b\u0438 \u0432\u044b\u043d\u0435\u0441\u0442\u0438 \u043d\u0430 \u043f\u0440\u044f\u043c\u043e\u0435 \u0441\u043e\u043b\u043d\u0446\u0435, \u0442\u043e \u0435\u0433\u043e \u0437\u0430\u0448\u043a\u0430\u043b\u0438\u0432\u0430\u0435\u0442 \u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0430\u0434\u0430\u0435\u0442 \u0434\u043e 4000. \u041d\u0430\u0434\u043e \u0438\u043c\u0435\u0442\u044c \u044d\u0442\u043e \u0432 \u0432\u0438\u0434\u0443.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 main.js<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"javascript\">var digitalLightSensor = require('jsupm_tsl2561');  \/\/ \u0441\u0435\u043d\u0441\u043e\u0440 TSL2561 on I2C var myDigitalLightSensor = new digitalLightSensor.TSL2561();   setInterval(function() { \tconsole.log(&quot;Light value is &quot; + myDigitalLightSensor.getLux() + ' Lux'); }, 1000);<\/code><\/pre>\n<\/div>\n<\/div>\n<p>  <\/p>\n<h2><font color=\"#0071c5\">\u0414\u0430\u0442\u0447\u0438\u043a \u0433\u0430\u0437\u0430 MQ5<\/font><\/h2>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/82b\/84a\/fe8\/82b84afe872e4129bc67cccf9b3505e0.JPG\"\/><\/p>\n<p>  <a href=\"http:\/\/www.seeedstudio.com\/depot\/grove-gas-sensormq5-p-938.html\">Grove \u2014 Gas Sensor (MQ5)<\/a>. SKU: SEN90502P<\/p>\n<p>  \u0414\u0430\u0442\u0447\u0438\u043a \u0433\u0430\u0437\u0430. \u0420\u0435\u0430\u0433\u0438\u0440\u0443\u0435\u0442 \u043d\u0430 \u0436\u0438\u0434\u043a\u0438\u0435 \u0440\u0430\u0441\u0442\u0432\u043e\u0440\u0438\u0442\u0435\u043b\u0438, \u043f\u0440\u0438\u0440\u043e\u0434\u043d\u044b\u0439 \u0433\u0430\u0437. \u0427\u0443\u0432\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u043e\u043c\u0435\u0442\u0440\u043e\u043c. <\/p>\n<p>  \u0412\u044b\u0434\u0430\u0435\u0442 \u0430\u043d\u0430\u043b\u043e\u0433\u043e\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u041c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0431\u0440\u0430\u0442\u044c \u0435\u0433\u043e, \u043d\u043e \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 UPM. \u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442 \u0441\u0440\u0435\u0434\u043d\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u044f \u0441\u0435\u0440\u0438\u044e \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0439, \u043d\u043e \u0438\u0437-\u0437\u0430 \u044d\u0442\u043e\u0433\u043e \u0432\u044b\u0437\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u043f\u0440\u0438\u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443.<\/p>\n<p>  \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0434\u0430\u0442\u0447\u0438\u043a\u0430, \u0447\u0442\u043e \u043e\u043d \u043e\u0449\u0443\u0442\u0438\u043c\u043e \u043d\u0430\u0433\u0440\u0435\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435. \u042d\u0442\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u0442\u0430\u043a\u0438\u0445 \u0434\u0435\u0442\u0435\u043a\u0442\u043e\u0440\u043e\u0432. \u041f\u0435\u0440\u0435\u0434 \u043d\u0430\u0447\u0430\u043b\u043e\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u0434\u0430\u0442\u0447\u0438\u043a \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u0440\u043e\u0433\u0440\u0435\u0442\u044c\u0441\u044f. \u0412 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e, \u0447\u0442\u043e \u043d\u0430\u0438\u043b\u0443\u0447\u0448\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043d\u0430\u0433\u0440\u0435\u0432\u0430 24 \u0447\u0430\u0441\u0430, \u0445\u043e\u0442\u044f \u044d\u0442\u043e \u043a\u0430\u043a-\u0442\u043e \u0441\u0442\u0440\u0430\u043d\u043d\u043e.<\/p>\n<p>  \u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043c \u0434\u0430\u0442\u0447\u0438\u043a \u043a A0 \u0438 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c UPM.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 main.js<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"javascript\">var upmMQ5 = require(&quot;jsupm_gas&quot;);  \/\/ \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043c \u043a A0 var myMQ5 = new upmMQ5.MQ5(0);  var threshContext = new upmMQ5.thresholdContext; threshContext.averageReading = 0; threshContext.runningAverage = 0; threshContext.averagedOver = 2;  while(1) {     var buffer = new upmMQ5.uint16Array(128);     var len = myMQ5.getSampledWindow(2, 128, buffer);     if (len)     {         var thresh = myMQ5.findThreshold(threshContext, 30, buffer, len);         myMQ5.printGraph(threshContext, 5);     } }<\/code><\/pre>\n<\/div>\n<\/div>\n<p>  <\/p>\n<h2><font color=\"#0071c5\">\u0414\u0430\u0442\u0447\u0438\u043a \u043f\u044b\u043b\u0438<\/font><\/h2>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/405\/9c4\/7bc\/4059c47bcab942bab232ef2f2366b2c4.JPG\"\/><\/p>\n<p>  <a href=\"http:\/\/www.seeedstudio.com\/depot\/Grove-Dust-Sensor-p-1050.html\">Grove \u2014 Dust Sensor<\/a>. SKU: SEN12291P<\/p>\n<p>  \u0414\u0430\u0442\u0447\u0438\u043a \u043f\u044b\u043b\u0438. \u0412\u044b\u0434\u0430\u0435\u0442 \u0438\u043c\u043f\u0443\u043b\u044c\u0441\u044b \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0437\u0430\u043f\u044b\u043b\u0451\u043d\u043d\u043e\u0441\u0442\u0438 \u0432\u043e\u0437\u0434\u0443\u0445\u0430. \u0420\u0435\u0430\u0433\u0438\u0440\u0443\u0435\u0442 \u043d\u0430 \u0447\u0430\u0441\u0442\u0438\u0446\u044b \u043f\u044b\u043b\u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c 1 \u043c\u043a\u043c \u0438 \u0431\u043e\u043b\u044c\u0448\u0435. \u0416\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 UPM.<\/p>\n<p>  \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c, \u0447\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f getData \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0435 30 \u0441\u0435\u043a\u0443\u043d\u0434. <\/p>\n<p>  \u0412\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 \u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u044b. \u042d\u0442\u043e \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435:<\/p>\n<pre><code class=\"bash\">Low pulse occupancy: 1829533 Ratio: 6.0984462 Concentration: 3279.9744018259016<\/code><\/pre>\n<p>  \u0410 \u044d\u0442\u043e \u044f \u043f\u043e\u0442\u0440\u044f\u0441 \u0440\u044f\u0434\u043e\u043c \u0441 \u0434\u0430\u0442\u0447\u0438\u043a\u043e\u043c \u043f\u044b\u043b\u044c\u043d\u043e\u0439 \u0442\u0440\u044f\u043f\u043a\u043e\u0439:<\/p>\n<pre><code class=\"bash\">Low pulse occupancy: 5541164 Ratio: 18.470549560000002 Concentration: 15240.471566321306<\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 main.js<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"javascript\">var dustSensor = require('jsupm_ppd42ns'); \/\/ \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043a D2 var myDustSensor = new dustSensor.PPD42NS(2);  var data;  var notice = &quot;This program will give readings &quot;; notice += &quot;every 30 seconds until you stop it&quot; console.log(notice); while(1) { \tdata = myDustSensor.getData(); \tconsole.log(&quot;Low pulse occupancy: &quot; + data.lowPulseOccupancy); \tconsole.log(&quot;Ratio: &quot; + data.ratio); \tconsole.log(&quot;Concentration: &quot; + data.concentration); }<\/code><\/pre>\n<\/div>\n<\/div>\n<p>  <\/p>\n<h2><font color=\"#0071c5\">\u0414\u0430\u0442\u0447\u0438\u043a \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u0432\u043e\u0437\u0434\u0443\u0445\u0430<\/font><\/h2>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/f78\/c23\/ef9\/f78c23ef9d354b0abe25005f17422b1d.JPG\"\/><\/p>\n<p>  <a href=\"http:\/\/www.seeedstudio.com\/depot\/Grove-Air-quality-sensor-p-1065.html\">Grove \u2014 Air quality sensor<\/a>. SKU: SEN01111P<\/p>\n<p>  \u0414\u0430\u0442\u0447\u0438\u043a \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u0432\u043e\u0437\u0434\u0443\u0445\u0430. \u0421\u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d \u0434\u043b\u044f \u0437\u0430\u043a\u0440\u044b\u0442\u044b\u0445 \u043f\u043e\u043c\u0435\u0449\u0435\u043d\u0438\u0439. \u0420\u0435\u0430\u0433\u0438\u0440\u0443\u0435\u0442 \u043d\u0430 \u0443\u0433\u0430\u0440\u043d\u044b\u0439 \u0433\u0430\u0437, \u0432\u043e\u0434\u043e\u0440\u043e\u0434, \u0430\u043b\u043a\u043e\u0433\u043e\u043b\u044c, \u0430\u0446\u0435\u0442\u043e\u043d, \u0440\u0430\u0441\u0442\u0432\u043e\u0440\u0438\u0442\u0435\u043b\u0438, \u0444\u043e\u0440\u043c\u0430\u043b\u044c\u0434\u0435\u0433\u0438\u0434\u044b \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0442\u043e\u043a\u0441\u0438\u0447\u043d\u044b\u0435 \u0433\u0430\u0437\u044b.<br \/>  \u042f \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b \u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u0443 \u0441\u043e \u0441\u043f\u0438\u0440\u0442\u043e\u043c \u0438 \u0433\u0430\u0437\u043e\u043c \u0438\u0437 \u0437\u0430\u0436\u0438\u0433\u0430\u043b\u043a\u0438. \u041e\u043d \u0438\u0445 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u043b. <br \/>  \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043a \u0430\u043d\u0430\u043b\u043e\u0433\u043e\u0432\u043e\u043c\u0443 \u0432\u0445\u043e\u0434\u0443. \u0412 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043a A0. \u041f\u0440\u043e\u0441\u0442\u043e \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 main.js<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"javascript\">var mraa = require('mraa');  var gas = new mraa.Aio(0);   getGas();  function getGas() {     var g = gas.read();     console.log(gas='+g);       setTimeout(getGas,500);  }<\/code><\/pre>\n<\/div>\n<\/div>\n<p>  <\/p>\n<h2><font color=\"#0071c5\">\u0414\u0430\u0442\u0447\u0438\u043a \u0430\u043b\u043a\u043e\u0433\u043e\u043b\u044f<\/font><\/h2>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/fea\/231\/bfc\/fea231bfc79e4990940121de3b7129f5.JPG\"\/><\/p>\n<p>  <a href=\"http:\/\/www.seeedstudio.com\/depot\/Grove-Alcohol-Sensor-p-764.html\">Grove \u2014 Alcohol Sensor<\/a>. SKU: SEN21723P<\/p>\n<p>  \u0414\u0430\u0442\u0447\u0438\u043a \u0430\u043b\u043a\u043e\u0433\u043e\u043b\u044f. \u0412\u044b\u0434\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0430 \u0430\u043d\u0430\u043b\u043e\u0433\u043e\u0432\u044b\u0439 \u043f\u0438\u043d. \u041d\u043e \u0435\u043c\u0443 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c \u0435\u0449\u0435 \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0439 \u043f\u0438\u043d, \u0434\u043b\u044f \u0440\u0430\u0437\u043e\u0433\u0440\u0435\u0432\u0430 \u0441\u0430\u043c\u043e\u0433\u043e \u0434\u0430\u0442\u0447\u0438\u043a\u0430. \u0415\u0441\u043b\u0438 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0448\u0438\u043b\u0434 \u0434\u043b\u044f \u0434\u0430\u0442\u0447\u0438\u043a\u043e\u0432, \u0442\u043e\u0433\u0434\u0430 \u043d\u0430 \u0440\u0430\u0437\u044a\u0435\u043c\u0435 A0 \u0431\u0443\u0434\u0443\u0442 \u043f\u0438\u043d\u044b A0 \u0438 A1. \u0410 \u043f\u0438\u043d A1 \u044d\u0442\u043e \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0446\u0438\u0444\u0440\u043e\u0432\u043e\u0439 \u043f\u0438\u043d D15. <br \/>  \u041f\u0435\u0440\u0435\u0434 \u043d\u0430\u0447\u0430\u043b\u043e\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u0434\u0430\u0442\u0447\u0438\u043a \u0436\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0433\u0440\u0435\u0442\u044c \u0432 \u0442\u0435\u0447\u0435\u043d\u0438\u0435 2 \u043c\u0438\u043d\u0443\u0442.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 main.js<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"javascript\">\/\/ \u0434\u0430\u0442\u0447\u0438\u043a \u0430\u043b\u043a\u043e\u0433\u043e\u043b\u044f MQ303A var mq303a = require('jsupm_mq303a');  \/\/ \u0434\u0430\u0442\u0447\u0438\u043a mq303a \/\/ A0 \u2013 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \/\/ A1, \u043e\u043d \u0436\u0435 D15 \u0434\u043b\u044f \u0440\u0430\u0437\u043e\u0433\u0440\u0435\u0432\u0430 var myAlcoholObj = new mq303a.MQ303A(0, 15);  console.log(&quot;Enabling heater and waiting 2 minutes for warmup.&quot;);  \/\/ \u041f\u043e\u043a\u0430\u0436\u0435\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u044f \u0447\u0435\u0440\u0435\u0437 30 \u0441\u0435\u043a\u0443\u043d\u0434 statusMessage(1); statusMessage(2); statusMessage(3);  function statusMessage(amt) { \tsetTimeout(function() \t{ \t\tconsole.log((amt * 30) + &quot; seconds have passed&quot;); \t}, 30000 * amt); }  \/\/ \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u043c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0447\u0435\u0440\u0435\u0437 2 \u043c\u0438\u043d\u0443\u0442\u044b setTimeout(runAlcoholSensor, 120000);  function runAlcoholSensor() { \tvar notice = &quot;This sensor may need to warm &quot; + \t\t\t\t&quot;until the value drops below about 450.&quot; \tconsole.log(notice);  \tsetInterval(function() \t{ \t\tvar val = myAlcoholObj.value(); \t\tvar msg = &quot;Alcohol detected &quot;; \t\tmsg += &quot;(higher means stronger alcohol): &quot;; \t\tconsole.log(msg + val); \t}, 1000); }<\/code><\/pre>\n<\/div>\n<\/div>\n<p>  <\/p>\n<h2><font color=\"#0071c5\">GPS \u043c\u043e\u0434\u0443\u043b\u044c<\/font><\/h2>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/be8\/f51\/679\/be8f51679d2f4457be5d3b2452edff99.JPG\"\/><\/p>\n<p>  <a href=\"http:\/\/www.seeedstudio.com\/depot\/Grove-GPS-p-959.html\">Grove \u2013 GPS<\/a>. SKU: SEN10752P<\/p>\n<p>  \u041c\u043e\u0434\u0443\u043b\u044c \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0442 GPS. \u042d\u0442\u043e\u0442 \u043c\u043e\u0434\u0443\u043b\u044c \u0432\u044b\u0434\u0430\u0435\u0442 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e \u0441\u0435\u0440\u0438\u0439\u043d\u043e\u043c\u0443 \u043f\u043e\u0440\u0442\u0443. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0435\u0433\u043e \u043a \u0440\u0430\u0437\u044a\u0435\u043c\u0443, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043a\u0430\u043a \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u043e\u0440\u0442. \u042d\u0442\u043e \u0440\u0430\u0437\u044a\u0435\u043c \u0441 \u043d\u0430\u0434\u043f\u0438\u0441\u044c\u044e UART.<\/p>\n<p>  \u0414\u0430\u043d\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442 \u0432 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u043c \u0432\u0438\u0434\u0435 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 NMEA 0183. \u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u043e\u043b\u0435\u0439 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c <a href=\"http:\/\/www.gpsinformation.org\/dale\/nmea.htm\">\u0437\u0434\u0435\u0441\u044c<\/a>. <\/p>\n<p>  \u0412\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u044b\u0439 \u0432\u044b\u0432\u043e\u0434 \u0441 \u043c\u043e\u0434\u0443\u043b\u044f:<\/p>\n<pre><code class=\"javascript\">$GPGGA,183227.000,5619.7971,N,04400.5751,E,2,4,3.28,36.7,M,9.4,M,0000,0000*59 $GPGSA,A,3,16,27,19,22,,,,,,,,,3.43,3.28,0.99*05 $GPGSV,3,1,12,18,73,111,,27,61,264,22,22,56,212,26,21,41,107,*70 $GPGSV,3,2,12,19,38,302,22,15,30,054,,16,16,234,25,20,12,062,*78 $GPGSV,3,3,12,13,11,026,,14,06,169,,30,03,340,,04,03,281,*7A $GPRMC,183227.000,A,5619.7971,N,04400.5751,E,0.00,87.99,230615,,,D*53<\/code><\/pre>\n<p>  \u0414\u043b\u044f \u043d\u0430\u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u0441 $GPRMC<br \/>  183227 \u2013 \u0432\u0440\u0435\u043c\u044f 18:32:27 \u0432 UTC.<br \/>  5619.7971,N \u2014 \u0448\u0438\u0440\u043e\u0442\u0430<br \/>  04400.5751,E \u2013 \u0434\u043e\u043b\u0433\u043e\u0442\u0430<\/p>\n<p>  \u042d\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u043a\u0430\u0440\u0442\u0430\u0445 yandex maps, \u0443\u043a\u0430\u0437\u0430\u0432 \u0438\u0445 \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 \u043f\u043e\u0438\u0441\u043a\u0430 \u0432 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u0444\u043e\u0440\u043c\u0430\u0442\u0435:  <\/p>\n<pre><code class=\"bash\">N56 19.7971 E44 00.5751<\/code><\/pre>\n<p>  \u0415\u0441\u043b\u0438 \u0441\u043f\u0443\u0442\u043d\u0438\u043a\u0438 \u043d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u044b, \u0442\u043e \u0432\u044b\u0432\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a\u043e\u0439:  <\/p>\n<pre><code class=\"bash\">$GPGGA,235958.800,,,,,0,0,,,M,,M,,*40 $GPGSA,A,1,,,,,,,,,,,,,,,*1E $GPGSV,1,1,00*79 $GPRMC,235958.800,V,,,,,0.00,0.00,050180,,,N*49<\/code><\/pre>\n<p>  \u042d\u0442\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 serialport, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0435\u0435 \u043d\u0430\u0434\u043e \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044f\u0445 \u0432 \u0444\u0430\u0439\u043b\u0435 package.json:<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 package.json<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"javascript\">{   &quot;name&quot;: &quot;OnboardLEDBlink&quot;,   &quot;description&quot;: &quot;&quot;,   &quot;version&quot;: &quot;0.0.0&quot;,   &quot;main&quot;: &quot;main.js&quot;,   &quot;engines&quot;: {     &quot;node&quot;: &quot;&gt;=0.10.0&quot;   },   &quot;dependencies&quot;: {       &quot;serialport&quot; : &quot;1.7.4&quot;   } }<\/code><\/pre>\n<\/div>\n<\/div>\n<p>  \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u043d\u0430 \u043a\u043e\u043d\u0441\u043e\u043b\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c\u044b\u0435 \u043e\u0442 GPS \u043c\u043e\u0434\u0443\u043b\u044f.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 main.js<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"javascript\">var mraa = require('mraa'); \/\/require mraa var uartdev = new mraa.Uart(0);  var com = require('serialport');  \/\/ \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043f\u0443\u0442\u044c \u043a UART var portName = uartdev.getDevicePath();\/\/  '\/dev\/ttyMFD1';  var serialPort = new com.SerialPort(portName, {     baudrate: 9600,\t\t\t\t     dataBits: 8,      parity: 'none',      stopBits: 1,      flowControl: false    });  serialPort.on('open',function(){     console.log('Port open');     serialPort.write('\\n'); });  serialPort.on('data', function(data){     console.log(data.toString());     console.log('---'); });  serialPort.on('close', function() {   console.log('close'); });  serialPort.on('close', function(error) {   console.log('error='+error); });<\/code><\/pre>\n<\/div>\n<\/div>\n<p>  \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u043e\u0441\u043b\u043e\u0436\u043d\u0435\u0435, \u0442\u0430\u043a \u043a\u0430\u043a \u0432 \u043d\u0435\u043c \u0441\u0434\u0435\u043b\u0430\u043d \u0440\u0430\u0437\u0431\u043e\u0440 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u0432\u043b\u0435\u0447\u044c \u0438\u0437 \u043d\u0438\u0445 \u0433\u0435\u043e\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0438 \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u0438\u0445 \u043d\u0430 \u0416\u041a-\u044d\u043a\u0440\u0430\u043d.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 main.js<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"javascript\">var jsUpmI2cLcd = require ('jsupm_i2clcd'); var lcd = new jsUpmI2cLcd.Jhd1313m1(0, 0x3E, 0x62); lcd.setColor(0,0,0);  var mraa = require('mraa'); \/\/require mraa var uartdev = new mraa.Uart(0);  var com = require('serialport');  var portName = uartdev.getDevicePath();\/\/  '\/dev\/ttyMFD1';  var serialPort = new com.SerialPort(portName, {     baudrate: 9600,\t\t\t\t\/\/ default for serial communication \tdataBits: 8,  \tparity: 'none',  \tstopBits: 1,  \tflowControl: false,     parser: com.parsers.readline('\\r\\n')   });  serialPort.on('open',function() {   console.log('Port open');     serialPort.write('\\n');      });  serialPort.on('data', function(data) {   console.log(data.toString());   console.log('---');        var str = data.toString();         var vals = str.split(',');          if( vals[0] === '$GPRMC' )     {         var tm = vals[1].split('.')[0];         var lat = parseFloat(parseFloat(vals[3])).toFixed(1);         var latS = vals[4];          var lon = parseFloat(parseFloat(vals[5])).toFixed(1);         var lonS = vals[6];                  \/\/var time= Math.floor(tm);                  var time = [tm.substring(0,2),         tm.substring(2,4),         tm.substring(4,6)].join(':');                  var str1 = 'time='+time;         var str21 = latS+lat.substr(0,2) +' ' + lat.substr(2);         var str22 = lonS+lon.substr(0,2) +' ' + lon.substr(2);                  var str2 = str21 + ' ' + str22;                           lcd.setCursor(0,0);         lcd.write(str1);                  lcd.setCursor(1,0);         lcd.write(str2);                  console.log('time=' + time + ' lat=' + lat + latS + ' lon=' + lon + lonS);          console.log(str1);         console.log(str2);     } });   serialPort.on('close', function() {   console.log('close'); });  serialPort.on('close', function(error) {   console.log('error='+error); });<\/code><\/pre>\n<\/div>\n<\/div>\n<p>  <\/p>\n<h2><font color=\"#0071c5\">\u0414\u0440\u0430\u0439\u0432\u0435\u0440 \u043c\u043e\u0442\u043e\u0440\u0430<\/font><\/h2>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/930\/31e\/651\/93031e65164d48eab1a2fb46d04b97fc.jpg\"\/><\/p>\n<p>  <a href=\"http:\/\/www.seeedstudio.com\/depot\/Grove-I2C-Motor-Driver-p-907.html\">Grove \u2014 I2C Motor Driver<\/a>. SKU: ROB72212P<\/p>\n<p>  \u0414\u0440\u0430\u0439\u0432\u0435\u0440 \u043c\u043e\u0442\u043e\u0440\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0438\u043b\u0438 \u0434\u0432\u0430 \u043e\u0431\u044b\u0447\u043d\u044b\u0445 \u043c\u043e\u0442\u043e\u0440\u0430 \u0438\u043b\u0438 \u043e\u0434\u0438\u043d \u0447\u0435\u0442\u044b\u0440\u0435\u0445 \u043f\u0440\u043e\u0432\u043e\u0434\u043d\u043e\u0439 \u0434\u0432\u0443\u0445 \u0444\u0430\u0437\u043d\u044b\u0439 \u0448\u0430\u0433\u043e\u0432\u044b\u0439 \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u044c. \u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u043e \u0448\u0438\u043d\u0435 I2C. \u0422\u043e\u043a \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0434\u043e 2\u0410 \u043d\u0430 \u043a\u0430\u043d\u0430\u043b. \u041f\u0440\u0438 \u0442\u0430\u043a\u043e\u043c \u0431\u043e\u043b\u044c\u0448\u043e\u043c \u0442\u043e\u043a\u0435 \u043c\u0438\u043a\u0440\u043e\u0441\u0445\u0435\u043c\u044b \u043c\u043e\u0433\u0443\u0442 \u043d\u0430\u0433\u0440\u0435\u0432\u0430\u0442\u044c\u0441\u044f. \u041d\u0430 \u043f\u043b\u0430\u0442\u0435 \u0435\u0441\u0442\u044c \u043a\u043d\u043e\u043f\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u0438.<br \/>  \u041d\u0430 \u043f\u043b\u0430\u0442\u0435 \u0435\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0437\u0430\u0434\u0430\u044e\u0442 \u0430\u0434\u0440\u0435\u0441 I2C \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u043d\u0430 \u0448\u0438\u043d\u0435. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043e\u043d \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u0432 1111, \u0447\u0442\u043e \u0440\u0430\u0432\u043d\u043e 15.<br \/>  \u041d\u0430 \u043f\u043b\u0430\u0442\u0435 \u0435\u0441\u0442\u044c \u0440\u0430\u0437\u044a\u0435\u043c \u0434\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043f\u0438\u0442\u0430\u043d\u0438\u044f. \u0414\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u0438 \u0437\u0430\u043f\u0438\u0442\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043e\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u043f\u0438\u0442\u0430\u043d\u0438\u044f. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044d\u0442\u043e \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u0438 \u043d\u0430 \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435 \u043e\u0442\u043b\u0438\u0447\u043d\u043e\u0435 \u043e\u0442 5 \u0412. \u0412 \u043d\u0430\u0448\u0438\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445, \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u043e\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u0430 \u043d\u0435\u0433\u043e \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435 \u0441 \u0441\u0430\u043c\u043e\u0439 \u043f\u043b\u0430\u0442\u044b Intel Edison, \u0442\u0430\u043a \u043f\u0440\u043e\u0449\u0435.<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/930\/31e\/651\/93031e65164d48eab1a2fb46d04b97fc.jpg\"\/><\/p>\n<p>  \u041f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 UPM \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0434\u043b\u044f \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u0435\u0439 \u0437\u0430\u0434\u0430\u044e\u0442\u0441\u044f \u0441\u0440\u0430\u0437\u0443 \u043f\u0430\u0440\u043e\u0439.<br \/>  \u0412\u043d\u0430\u0447\u0430\u043b\u0435 \u043d\u0430\u0434\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u044f.<\/p>\n<pre><code class=\"javascript\">my_MotorDriver_obj1.setMotorDirections(     groveMotorDriver_lib.GroveMD.DIR_CCW,     groveMotorDriver_lib.GroveMD.DIR_CW);<\/code><\/pre>\n<p>  \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043f\u0435\u0440\u0432\u044b\u0439 \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u044c \u0431\u0443\u0434\u0435\u0442 \u0432\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u043e\u0442\u0438\u0432 \u0447\u0430\u0441\u043e\u0432\u043e\u0439 \u0441\u0442\u0440\u0435\u043b\u043a\u0438, \u0430 \u0432\u0442\u043e\u0440\u043e\u0439 \u043f\u043e \u0447\u0430\u0441\u043e\u0432\u043e\u0439 \u0441\u0442\u0440\u0435\u043b\u043a\u0435.<\/p>\n<p>  \u0417\u0430\u0442\u0435\u043c \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044f 0-255. \u041f\u0440\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0438 255 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0434\u0430\u043d\u043e \u043f\u043e\u043b\u043d\u043e\u0435 \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u044c.<\/p>\n<pre><code class=\"javascript\">my_MotorDriver_obj1.setMotorSpeeds(255, 127);<\/code><\/pre>\n<p>  \u041f\u0435\u0440\u0432\u044b\u0439 \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u044c \u0431\u0443\u0434\u0435\u0442 \u0432\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u043f\u043e\u043b\u043d\u043e\u0439 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438, \u0432\u0442\u043e\u0440\u043e\u0439 \u043d\u0430 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u043d\u043e\u0439.<\/p>\n<p>  \u0412 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0432\u043a\u043b\u044e\u0447\u0438\u043c \u0432\u0442\u043e\u0440\u043e\u0439 \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u044c \u043f\u0440\u043e\u0442\u0438\u0432 \u0447\u0430\u0441\u043e\u0432\u043e\u0439 \u0441\u0442\u0440\u0435\u043b\u043a\u0438 \u043d\u0430 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u043d\u043e\u043c \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0438.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 main.js<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"javascript\">var groveMotorDriver_lib = require('jsupm_grovemd'); var i2c_addr1 = 15;  var my_MotorDriver_obj1 = new groveMotorDriver_lib.GroveMD(         groveMotorDriver_lib.GROVEMD_I2C_BUS,          i2c_addr1     );  my_MotorDriver_obj1.setMotorDirections(     groveMotorDriver_lib.GroveMD.DIR_CCW,     groveMotorDriver_lib.GroveMD.DIR_CCW);   my_MotorDriver_obj1.setMotorSpeeds(0, 127);<\/code><\/pre>\n<\/div>\n<\/div>\n<p>  <\/p>\n<h2><font color=\"#0071c5\">\u0414\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u044c<\/font><\/h2>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/c9f\/866\/ed9\/c9f866ed9e594dbfa56f673b824588ed.JPG\"\/><\/p>\n<p>  <a href=\"http:\/\/www.seeedstudio.com\/depot\/Planet-Geared-Motor-F280-p-2018.html\">Planet Geared Motor F280<\/a>. SKU: 316070006<\/p>\n<p>  \u0414\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u044c \u0441\u043e \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u043c \u0440\u0435\u0434\u0443\u043a\u0442\u043e\u0440\u043e\u043c. \u0420\u0430\u0431\u043e\u0447\u0435\u0435 \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435 3-24 \u0412. \u0427\u0430\u0441\u0442\u043e\u0442\u0430 \u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044f 80-800 \u043e\u0431\/\u043c\u0438\u043d. \u041c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u043e\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u0430 \u043d\u0435\u0433\u043e 5\u0412, \u0442\u0430\u043a \u043a\u0430\u043a \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u043f\u0438\u0442\u0430\u043d\u0438\u044f. \u041f\u0440\u0438 \u0440\u0430\u0431\u043e\u0442\u0435 \u043e\u0442 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430 \u043c\u043e\u0442\u043e\u0440\u0430 \u0438 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0438 255, \u0435\u0433\u043e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043e\u043a\u043e\u043b\u043e 120 \u043e\u0431\/\u043c\u0438\u043d.<\/p>\n<p>  \u0423 \u043c\u043e\u0442\u043e\u0440\u0430 \u043d\u0435\u0442 \u0440\u0430\u0437\u044a\u0435\u043c\u0430 \u0434\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f, \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u044b, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u0434\u043e \u043f\u0440\u0438\u043f\u0430\u044f\u0442\u044c \u043f\u0440\u043e\u0432\u043e\u0434\u0430.<\/p>\n<p>  \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0434\u0430\u0442\u0447\u0438\u043a \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430 (\u044d\u043d\u043a\u043e\u0434\u0435\u0440), \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c\u044e \u0438 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u043c \u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u044f. \u041d\u0430 \u0416\u041a-\u044d\u043a\u0440\u0430\u043d \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043f\u043e\u0434\u0430\u0432\u0430\u0435\u043c\u043e\u0435 \u043d\u0430 \u043c\u043e\u0442\u043e\u0440.<br \/>  \u0414\u0430\u0442\u0447\u0438\u043a \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043a D4. \u0416\u041a-\u044d\u043a\u0440\u0430\u043d \u043a I2C. \u0414\u0440\u0430\u0439\u0432\u0435\u0440 \u043c\u043e\u0442\u043e\u0440\u0430 \u043a I2C.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 main.js<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"javascript\">var groveMotorDriver_lib = require('jsupm_grovemd');  var rotaryEncoder = require(&quot;jsupm_rotaryencoder&quot;); var myRotaryEncoder = new rotaryEncoder.RotaryEncoder(4, 5);  var jsUpmI2cLcd = require ('jsupm_i2clcd'); var lcd = new jsUpmI2cLcd.Jhd1313m1(0, 0x3E, 0x62); lcd.setColor(0,0,0);  var i2c_addr1 = 15;  var my_MotorDriver_obj1 = new groveMotorDriver_lib.GroveMD( groveMotorDriver_lib.GROVEMD_I2C_BUS,  i2c_addr1 );  my_MotorDriver_obj1.setMotorDirections(     groveMotorDriver_lib.GroveMD.DIR_CCW,     groveMotorDriver_lib.GroveMD.DIR_CCW);       my_MotorDriver_obj1.setMotorSpeeds(0, 0);  checkButton();   function checkButton() {     var v = myRotaryEncoder.position();     var speed = v*10;          if( speed &lt; -255 )     {         speed = -255;     }          if( speed &gt; 255)     {        speed = 255;        }              var dir;          if( speed &gt; 0)     {         dir = groveMotorDriver_lib.GroveMD.DIR_CCW;     }     else     {         speed = -speed;         dir = groveMotorDriver_lib.GroveMD.DIR_CW;     }          my_MotorDriver_obj1.setMotorDirections( 0, dir);         my_MotorDriver_obj1.setMotorSpeeds(0, speed);      lcd.setCursor(0,0);     lcd.write('v='+v+'   ');      lcd.setCursor(1,0);     lcd.write('speed='+speed+'    ');          setTimeout(checkButton,100); }<\/code><\/pre>\n<\/div>\n<\/div>\n<p>  <\/p>\n<h2><font color=\"#0071c5\">\u041c\u0438\u043d\u0438 \u043d\u0430\u0441\u043e\u0441<\/font><\/h2>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/f19\/28e\/728\/f1928e7282fb4009a6269ebd6f6af325.JPG\"\/><\/p>\n<p>  <a href=\"http:\/\/www.seeedstudio.com\/depot\/6V-Mini-Water-Pump-p-1945.html\">6V mini water pump<\/a>. SKU: 114990073<\/p>\n<p>  \u0412\u043e\u0434\u043d\u044b\u0439 \u043d\u0430\u0441\u043e\u0441. \u0421\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043c\u043e\u0442\u043e\u0440, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043c\u043e\u0436\u043d\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u0434\u0440\u0430\u0439\u0432\u0435\u0440 \u043c\u043e\u0442\u043e\u0440\u0430.<br \/>  \u0414\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0432\u043e\u0434\u044b \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c 4 \u043c\u043c \u0442\u0440\u0443\u0431\u043a\u0438.<br \/>  \u0423 \u043c\u043e\u0442\u043e\u0440\u0430 \u043d\u0435\u0442 \u0440\u0430\u0437\u044a\u0435\u043c\u0430 \u0434\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f, \u0442\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u044b, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u0434\u043e \u043f\u0440\u0438\u043f\u0430\u044f\u0442\u044c \u043f\u0440\u043e\u0432\u043e\u0434\u0430.<br \/>  \u041d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435 \u043f\u0438\u0442\u0430\u043d\u0438\u044f 6 \u0412, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u0438\u0435\u043c 5 \u0412 \u0441 \u043f\u043b\u0430\u0442\u044b.<br \/>  \u041d\u0435 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u043d\u0430\u0441\u043e\u0441 \u0431\u0435\u0437 \u0432\u043e\u0434\u044b, \u0442\u0430\u043a \u043a\u0430\u043a \u043c\u043e\u0433\u0443\u0442 \u0438\u0441\u043f\u043e\u0440\u0442\u0438\u0442\u0441\u044f \u043f\u043b\u0430\u0441\u0442\u043c\u0430\u0441\u0441\u043e\u0432\u044b\u0435 \u043b\u0435\u043f\u0435\u0441\u0442\u043a\u0438 \u0432\u043d\u0443\u0442\u0440\u0438. \u041f\u0440\u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u043f\u0438\u0442\u0430\u043d\u0438\u044f \u043d\u0430\u0434\u043e \u0441\u043e\u0431\u043b\u044e\u0434\u0430\u0442\u044c \u043f\u043e\u043b\u044f\u0440\u043d\u043e\u0441\u0442\u044c. \u041f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u043e\u043d\u0442\u0430\u043a\u0442 \u043f\u043e\u043c\u0435\u0447\u0435\u043d \u043a\u0440\u0430\u0441\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u043e\u0439. \u041f\u0440\u0438 \u0442\u0430\u043a\u043e\u043c \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u0432\u043e\u0434\u0430 \u0437\u0430\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u043d\u0438\u0436\u043d\u0435\u0435 \u043e\u0442\u0432\u0435\u0440\u0441\u0442\u0438\u0435, \u0430 \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u0447\u0435\u0440\u0435\u0437 \u0431\u043e\u043a\u043e\u0432\u043e\u0435. \u041c\u043e\u0436\u043d\u043e \u043b\u0438 \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0432 \u043e\u0431\u0440\u0430\u0442\u043d\u0443\u044e \u0441\u0442\u043e\u0440\u043e\u043d\u0443, \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u043d\u0435 \u0441\u043a\u0430\u0437\u0430\u043d\u043e.<\/p>\n<p>  \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u043e\u0445\u043e\u0436 \u043d\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u0441 \u043c\u043e\u0442\u043e\u0440\u043e\u043c. \u0412 \u043d\u0435\u043c \u0442\u0430\u043a \u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u0430\u0442\u0447\u0438\u043a \u043f\u043e\u0432\u043e\u0440\u043e\u0442\u0430 \u0438 \u0416\u041a-\u044d\u043a\u0440\u0430\u043d. \u041e\u0442\u043b\u0438\u0447\u0438\u0435 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0434\u0432\u0438\u0433\u0430\u0442\u0435\u043b\u044c \u043d\u0435 \u043c\u0435\u043d\u044f\u0435\u0442 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0432\u0440\u0430\u0449\u0435\u043d\u0438\u044f.<\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 main.js<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"javascript\">var groveMotorDriver_lib = require('jsupm_grovemd');  var rotaryEncoder = require(&quot;jsupm_rotaryencoder&quot;); var myRotaryEncoder = new rotaryEncoder.RotaryEncoder(4, 5);   var jsUpmI2cLcd = require ('jsupm_i2clcd'); var lcd = new jsUpmI2cLcd.Jhd1313m1(0, 0x3E, 0x62); lcd.setColor(0,0,0);  var i2c_addr1 = 15;  var my_MotorDriver_obj1 = new groveMotorDriver_lib.GroveMD( groveMotorDriver_lib.GROVEMD_I2C_BUS,  i2c_addr1 );   my_MotorDriver_obj1.setMotorDirections(     groveMotorDriver_lib.GroveMD.DIR_CCW,     groveMotorDriver_lib.GroveMD.DIR_CCW);    checkButton();  \/\/ 255 - 2 \u043e\u0431 \u0432 \u0441\u0435\u043a \/\/my_MotorDriver_obj1.setMotorSpeeds(0, 127); \/\/set the speeds of the motors on board 1  function checkButton() {          var v = 10 * myRotaryEncoder.position();          if( v &lt; 0 )     {         v = 0;     }          if( v &gt; 255)     {        v = 255;        }              my_MotorDriver_obj1.setMotorSpeeds(0, v);      lcd.setCursor(0,0);     lcd.write('Speed='+v+'  ');          setTimeout(checkButton,100); }<\/code><\/pre>\n<\/div>\n<\/div>\n<p>  \u0412\u043e\u0442 \u0432\u0430\u043c \u0434\u0430\u0442\u0447\u0438\u043a\u0438, \u043a\u0430\u043a \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u0441\u044f, \u043d\u0430 \u0432\u0441\u0435 \u0441\u043b\u0443\u0447\u0430\u0438 \u0436\u0438\u0437\u043d\u0438. \u042d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u0439\u0442\u0435 \u043d\u0430 \u0437\u0434\u043e\u0440\u043e\u0432\u044c\u0435!     \t<\/p>\n<div class=\"clear\"><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/261123\/\"> http:\/\/habrahabr.ru\/post\/261123\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>     \t\u0421\u0435\u0433\u043e\u0434\u043d\u044f Intel Edison \u0441 \u043d\u0430\u0431\u043e\u0440\u043e\u043c \u0434\u0430\u0442\u0447\u0438\u043a\u043e\u0432 \u0438 \u0430\u043a\u0442\u044e\u0430\u0442\u043e\u0440\u043e\u0432 \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435: \u0441\u044b\u0433\u0440\u0430\u0442\u044c \u043f\u0435\u0441\u0435\u043d\u043a\u0443 \u00ab\u0412 \u0442\u0440\u0430\u0432\u0435 \u0441\u0438\u0434\u0435\u043b \u043a\u0443\u0437\u043d\u0435\u0447\u0438\u043a\u00bb, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c, \u0445\u043e\u0440\u043e\u0448\u043e \u043b\u0438 \u0442\u0435\u0447\u0435\u0442 \u0432\u043e\u0434\u0430, \u0433\u043e\u0440\u0438\u0442 \u043b\u0438 \u043e\u0433\u043e\u043d\u044c, \u043f\u0435\u0440\u0435\u043a\u0430\u0447\u0430\u0442\u044c \u0432\u043e\u0434\u0443, \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0435\u0441\u0442\u044c \u043b\u0438 \u0432 \u0432\u043e\u0437\u0434\u0443\u0445\u0435 \u043f\u0430\u0440\u044b \u0441\u043f\u0438\u0440\u0442\u0430, \u043f\u044b\u043b\u044c\u043d\u0430\u044f \u043b\u0438 \u043a\u043e\u043c\u043d\u0430\u0442\u0430, \u043f\u0440\u043e\u0441\u043b\u0435\u0434\u0438\u0442\u044c, \u043a\u0430\u043a \u0437\u0430\u043a\u0438\u043f\u0430\u0435\u0442 \u0447\u0430\u0439\u043d\u0438\u043a, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u0441\u0432\u043e\u0438 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b, \u043d\u0430\u0439\u0442\u0438 \u043c\u0430\u0433\u043d\u0438\u0442. \u0418 \u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c \u0435\u0449\u0451. <\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/51d\/425\/c33\/51d425c3307e4977866edbed05bcb7e8.jpg\"\/>  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-260160","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/260160","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=260160"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/260160\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=260160"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=260160"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=260160"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}