<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Электронный научно-практический журнал «Современная техника и технологии» &#187; Трушин Александр Николаевич</title>
	<atom:link href="http://technology.snauka.ru/author/sviridoff/feed" rel="self" type="application/rss+xml" />
	<link>https://technology.snauka.ru</link>
	<description></description>
	<lastBuildDate>Fri, 30 Jan 2026 18:56:12 +0000</lastBuildDate>
	<language>ru</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Робототехнический комплекс для демонстрации русских дактильных жестов</title>
		<link>https://technology.snauka.ru/2017/04/13038</link>
		<comments>https://technology.snauka.ru/2017/04/13038#comments</comments>
		<pubDate>Sun, 16 Apr 2017 13:51:05 +0000</pubDate>
		<dc:creator>Трушин Александр Николаевич</dc:creator>
				<category><![CDATA[Общая рубрика]]></category>
		<category><![CDATA[anthropomorphic]]></category>
		<category><![CDATA[dactyl]]></category>
		<category><![CDATA[russian manual alphabet]]></category>
		<category><![CDATA[антропоморфный]]></category>
		<category><![CDATA[дактиль]]></category>
		<category><![CDATA[жестомимический интерфейс]]></category>
		<category><![CDATA[русская дактильная азбука]]></category>
		<category><![CDATA[человеко-компьютерное взаимодействие]]></category>

		<guid isPermaLink="false">https://technology.snauka.ru/2017/04/13038</guid>
		<description><![CDATA[Основные термины Дактиль (русская дактильная азбука) — вспомогательная система русского жестового языка, в которой каждому жесту одной руки соответствует буква русского языка Dactyl (the russian manual alphabet) is used for fingerspelling in Russian sign language. Антропоморфный &#8211; человекообразный, уподобленный человеку Anthropomorphic &#8211; described or thought of as being like human beings in appearance, behavior, etc. [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Основные термины</strong></p>
<p>Дактиль (русская дактильная азбука) — вспомогательная система русского жестового языка, в которой каждому жесту одной руки соответствует буква русского языка</p>
<p>Dactyl (the russian manual alphabet) is used for fingerspelling in Russian sign language.</p>
<p>Антропоморфный &#8211; человекообразный, уподобленный человеку</p>
<p>Anthropomorphic &#8211; described or thought of as being like human beings in appearance, behavior, etc.</p>
<p>Человеко-компьютерное взаимодействие — полидисциплинарное научное направление, существующее и развивающееся в целях совершенствования методов разработки, оценки и внедрения интерактивных компьютерных систем, предназначенных для использования человеком, а также в целях исследования различных аспектов этого использования</p>
<p>Human-computer interaction (HCI) researches the design and use of computer technology, focusing on the interfaces between people (users) and computers.</p>
<p>Жестомимический интерфейс – интерфейс взаимодействия посредствам жестов и мимики.</p>
<p>Interface with computers using gestures of the human body, typically hand movements, and facial expression</p>
<p><span style="times new roman; 14pt; background-color: white;"><strong>Введение<br />
</strong></span></p>
<p style="background: white;"><span>Робототехника играет важную роль в новой промышленной революции. Роботизация производства и внедрение аддитивных технологий набирают большую популярность. Данные процессы дополняют друг друга, так как внедрение 3D-печати существенно снижает затраты и объем работ. Робототехника становится двигателем любой индустрии, поскольку она способствует как НИОКР, так и производству изделий точной механики, электротехники, электроники, оптики, композитных материалов и т. д. [1]<br />
</span></p>
<p style="background: white;"><span>Развитие робототехники уже сегодня позволяет решать различные социальные проблемы, такие как уход за престарелыми людьми, снижение человеческих потерь в военных конфликтах и на транспорте. Также большое распространение робототехника получила в медицине. Существуют разные категории роботов, используемые в медицине: роботы-ассистенты, различные хирургические системы, роботизированные протезы, но самыми распространенными являются роботы-манекены, имитирующие человека. Такие роботы, как правило, отличаются особенностями конструкций и функциональными характеристиками<em>. </em>Тем самым, создание антропоморфных моделей роботов является актуальной и важной задачей.<br />
</span></p>
<p style="text-align: justify;"><span>Так как магистерская программа направлена на создание жестомимического интерфейса, то была поставлена задача создания антропоморфной модели руки <span style="background-color: white;">для исполнения дактильных жестов.</span> Исследования и разработки работы могут быть применены в инновационных системах коммуникативного взаимодействия в человекомашинной среде с использованием жестов, таких, как: с<em>истемы сурдоперевода, системы обучения антропоморфных роботов, жестомимический интерфейс в компьютерных играх, жестомимический интерфейс для реализации систем управления, Web-сервис с возможностью документирования разговора и речи глухих.</em> [2]<br />
</span></p>
<p><span><strong>Разработка робототехнической модели левой руки антропоморфного аватара<br />
</strong></span></p>
<p><span>    Для создания робототехнической модели руки был выбран прототип для доработки: проект «InMoov». InMoov является роботом-гуманоидом с открытым исходным кодом, построенный из 3D печатных пластиковых компонентов тела, и контролируется микроконтроллером Arduino. Проект очень популярен по всему миру и дорабатывается с большим темпом.<br />
</span></p>
<p><span><strong>1. Печать деталей<br />
</strong></span></p>
<p><span>Печать деталей производилась на 3d принтере Picaso 3D Designer. Picaso 3D Designer – персональный 3D принтер нового поколения, созданный компанией PICASO 3D, первым производителем устройств для 3D печати в России. Для сокращения количества деталей и экономии пластика, несколько деталей необходимо было объединять в единые модели. Например, количество деталей для кисти сократилось с 54 до 40. В качестве материала использовался АBS-пластик. Модели из ABS сохраняют прочность при нагреве до 90 °С. Данный вид пластика применяется при создании концептуальных и презентационные моделей.<br />
</span></p>
<p><span><strong>2. Подготовка деталей к сборке<br />
</strong></span></p>
<p><span>Перед началом сборки необходимо было очистить детали наждаком, ножом и кусачками. Острые края, отверстия для вставки других деталей стачивались наждаком; издержки печати, лишний пластик удалялся кусачками и тоже приводился к гладкому виду. Необходимые дырки для протягивания лески и соединения различных деталей высверливались самостоятельно. Для этого использовались сверла диаметрами 2мм и 3мм, в зависимости от размеров самой детали. Также во всех деталях ладони были проделаны условные верхние и нижнее отверстия для лески.<br />
</span></p>
<p><span><strong>3. Сборка и протягивание лески<br />
</strong></span></p>
<p><span>Сборка макета началась со сборки пальцев руки. Происходила сборка уже зачищенных и подготовленных деталей. Там, где было необходимо, детали подвергались дополнительной обработке: дополнительно зачищались, смазывались места стыковки подвижных частей, и т. п. Перед присоединением пальцев к самой ладони, необходимо провести леску. Рекомендуемый диаметр лески не должен быть меньше 0.17мм. Протягивание лески начинается с кончиков пальцев. Леска проходит через палец по его верхним отверстиям, далее через верхнюю часть ладони до запястья, там через специальные отверстия и до предплечья, где будут находится сервоприводы. Далее леска меняет вектор движения, её необходимо провести в обратную сторону через нижние отверстия до кончика пальца, где их закрепляют. Данный шаги повторяются для всех пальцев. После того, как леска проведена, начинается крепление отдельных частей модели. Крепление в основном проводится с помощью клея для пластика и специальных заклёпок или болтов. Также после крепления и сборки полной модели необходимо очистить остатки клея и прочие неровности.<br />
</span></p>
<p style="text-align: center;"><img src="https://technology.snauka.ru/wp-content/uploads/2017/04/041617_1349_1.png" alt="" /><span><br />
</span></p>
<p style="text-align: center;"><span>Рис. 1. Процесс сборки робототехнической модели<br />
</span></p>
<p><span><strong>4. Тестирование физических свойств руки<br />
</strong></span></p>
<p><span>Происходила проверка устойчивости лески. Поочередно, для каждого пальца, натягивалась леска, фиксировались пальцы в важных для дальнейшей работы положениях (палец согнутый, палец полностью прямой, палец наполовину согнут). Там, где было необходимо, для уменьшения трения лески, пластик подвергался дополнительной обработке: расширялись отверстия или места, где проходила леска.<br />
</span></p>
<p><span><strong>5. Подготовка аппаратной части<br />
</strong></span></p>
<p><span>Для проекта потребовались: контроллер Arduino Uno R3, макетная плата, провода-джамперы (папа-папа), провода-джамперы (папа-мама), сервоприводы FT5519M(5 штук), 16-канальный 12-битный ШИМ Серво контроллер PCA9685, батарейный отсек(5 AA), аккумуляторы NiMH AA(5шт).<br />
</span></p>
<p><span> Сначала было осуществлено ознакомление с драйвером сервоприводов PCA9685. Далее с помощью Arduino и PCA9685 каждый сервопривод подключался к драйверу и «вручную» калибровался: путем экспериментов подбирался корректный диапазон длин импульсов для крайних положений вала. После этого была собрана схема с одновременным подключением нескольких сервоприводов и протестирована ее работоспособность.<br />
</span></p>
<p><span><strong>6. Сборка аппаратной части<br />
</strong></span></p>
<p><span>На каждый сервопривод крепились пластиковые качельки, в крайние положения качелек вкручивались по одному винту. На винты крепилась и фиксировалась леска так, чтобы при вращении сервопривода в одну сторону (по часовой стрелке), леска натягивалась в одну сторону, при вращении в другую сторону (против часовой стрелки), леска натягивалась соответственно &#8211; в другую. Далее сервоприводы крепились в заранее обозначенных местах, в предплечье руки, при этом леска натягивалась таким образом, чтобы крайние положения вала сервопривода соответствовали крайним положениям пальца (согнут или прямой). Далее сервоприводы подключались по той же схеме, как и в предыдущем пункте. Сервоприводы подключались к драйверу PCA9685, драйвер в свою очередь подключался к контроллеру Arduino с помощью четырех проводов-джамперов. Также на драйвер подавалось дополнительное питание с батарейного отсека с 5 аккумуляторами NiMH типа AA.<br />
</span></p>
<p style="text-align: center;"><img src="https://technology.snauka.ru/wp-content/uploads/2017/04/041617_1349_2.png" alt="" /><span><br />
</span></p>
<p style="text-align: center;"><span>Рис. 2. Схема подключений<br />
</span></p>
<p><span><strong>7. Реализация программной части<br />
</strong></span></p>
<p><span>Была разработана программа (скетч) в среде Arduino IDE для управления положениями пяти сервоприводов (пять пальцев руки). Программа состоит из двух основных функций: setup() и loop(). В функции setup() задается скорость передачи данных по последовательному порту в бит/с (в нашем случае 9600 бит/с) и частота PWM сигнала для управления драйвером сервоприводов. Функция loop() выполняется непрерывно(циклично). Данная функция получает команды от пользователя, поступающие с последовательного порта, и, в зависимости от полученной команды, выполняет определенный жест. Для этого по каждому каналу передается ШИМ сигнал для изменения положения вала сервопривода и задается время исполнения. Номер канала драйвера обозначает номер подключенного сервопривода. [3]<br />
</span></p>
<p><span>В демонстрационной версии программы представлено несколько дактильных жестов.<br />
</span></p>
<p style="background: white;"><span>Язык программирования устройств Ардуино является стандартным C++ (используется компилятор AVR-GCC) со следующими особенностями:<br />
</span></p>
<ul>
<li>
<div style="background: white;"><span>Программы сохраняются в файлах с расширением ino. Эти файлы перед компиляцией обрабатываются препроцессором Ардуино. Также существует возможность создавать и подключать к проекту стандартные файлы C++.<br />
</span></div>
</li>
<li>
<div style="background: white;"><span>Обязательную в C++ функцию main() препроцессор Ардуино создает сам, вставляя туда необходимые «черновые» действия.<br />
</span></div>
</li>
<li>
<div style="background: white;"><span>Программист должен написать две обязательные для Ардуино функции setup() и loop(). Первая вызывается однократно при старте, вторая выполняется в цикле.<br />
</span></div>
</li>
<li>
<div style="background: white;"><span>В текст программы (скетча) программист не обязан вставлять заголовочные файлы используемых стандартных библиотек. Эти заголовочные файлы добавит препроцессор Ардуино в соответствии с конфигурацией проекта. Однако пользовательские библиотеки нужно указывать.<br />
</span></div>
</li>
<li>
<div style="background: white;"><span>Менеджер проекта Arduino IDE имеет нестандартный механизм добавления библиотек. Библиотеки в виде исходных текстов на стандартном C++ добавляются в специальную папку в рабочем каталоге IDE. При этом название библиотеки добавляется в список библиотек в меню IDE. Программист отмечает нужные библиотеки и они вносятся в список компиляции.<br />
</span></div>
</li>
<li>
<div style="background: white;"><span>Arduino IDE не предлагает никаких настроек компилятора и минимизирует другие настройки, что упрощает начало работы для новичков и уменьшает риск возникновения проблем.<br />
</span></div>
</li>
</ul>
<p><span style="times new roman; 14pt; background-color: white;"><strong>Заключение<br />
</strong></span></p>
<p><span style="times new roman; 14pt; background-color: white;">Задача создания систем человеко-компьютерного взаимодействия имеет огромную популярность на сегодняшний день. В результате выполнения проекта по магистерской программе был создан действующий макет роботизированной руки. Данный макет позволил сформировать основное направление дальнейших разработок, состоящее в создании комплекса программного обеспечения поддержки жестового коммуникативного взаимодействия, а также требования к программам управления мелкой моторикой роботизированной руки в процессе исполнения дактильных жестов.<br />
</span></p>
<p style="text-align: center;"><img src="https://technology.snauka.ru/wp-content/uploads/2017/04/041617_1349_3.png" alt="" /><span><br />
</span></p>
<p style="text-align: center;"><span>Рис. 3. <span style="background-color: white;">Действующий макет роботизированной руки</span></span></p>
]]></content:encoded>
			<wfw:commentRss>https://technology.snauka.ru/2017/04/13038/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Организация соединения и обмен данными по bluetooth между Arduino и iOS-приложением</title>
		<link>https://technology.snauka.ru/2017/05/13480</link>
		<comments>https://technology.snauka.ru/2017/05/13480#comments</comments>
		<pubDate>Wed, 24 May 2017 12:35:57 +0000</pubDate>
		<dc:creator>Трушин Александр Николаевич</dc:creator>
				<category><![CDATA[Общая рубрика]]></category>
		<category><![CDATA[Apple]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Bluetooth]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[command]]></category>
		<category><![CDATA[Daemon]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[код]]></category>
		<category><![CDATA[команда]]></category>
		<category><![CDATA[разработка]]></category>
		<category><![CDATA[управляющая программа]]></category>

		<guid isPermaLink="false">https://technology.snauka.ru/2017/05/13480</guid>
		<description><![CDATA[Предисловие Развитие технологий позволило уместить на одной небольшой плате несколько системных устройств, устройство получило название микроконтроллер. Одним из таких монокристаллических микрокомпьютеров является Arduino, которое состоит из микроконтроллера, установленного на печатной плате и минимально необходимых компонентов для работы. Для создания нового электронного устройства понадобится плата Arduino, кабель связи и компьютер. Для программного обеспечения в виде управляющей [...]]]></description>
			<content:encoded><![CDATA[<p><strong style="text-align: justify;">Предисловие</strong></p>
<p style="text-align: justify;"><span>Развитие технологий позволило уместить на одной небольшой плате несколько системных устройств, устройство получило название микроконтроллер. Одним из таких монокристаллических микрокомпьютеров является Arduino, которое состоит из микроконтроллера, установленного на печатной плате и минимально необходимых компонентов для работы. Для создания нового электронного устройства понадобится плата Arduino, кабель связи и компьютер. Для программного обеспечения в виде управляющей программы базовые знания варианта языка С/С++ для микроконтроллеров, поскольку добавлены компоненты, разрешающие писать программы без знания аппаратной части [1 Стр.18-19].<br />
</span></p>
<p style="text-align: justify;"><span><strong>Обмен данными через bluetooth</strong><br />
</span></p>
<p style="text-align: justify;"><span>Фактически модуль Bluetooth — это модем, поскольку он преобразует сигнал из одной среды в другую. Передаваемый электроимпульсами по проводникам последовательный TTL-сигнал преобразуется в радиосигнал в Bluetooth приёмопередающем устройстве и наоборот, из радиосигнала преобразует в электроимпульсный сигнал. Функция модема — устанавливать соединение с другими модемами для обмена информацией и разъединения канала связи. Для выполнения функций соединения в модемы заложено два рабочих режима:<br />
</span></p>
<p style="text-align: justify;"><span>командный – обмен информацией при данном режиме происходит с самим модемом;<br />
</span></p>
<p style="text-align: justify;"><span>режим данных – обмен информацией происходит через сам модем.<br />
</span></p>
<p style="text-align: justify;"><span>Модемы Bluetooth по своему принципу работы аналогичны любым другим типам модемов и в них заложен набор команд протокола Hayes АТ, аналогичный для телефонных модемов. Команды данного протокола прописываются в символах ASCII. Модемы на протоколе Hayes АТ работают в режиме данных и командном, переключение режимов осуществляется строкой +++ [2].<br />
</span></p>
<p style="text-align: justify;"><span><strong>Микроконтроллеры и управление приложением</strong><br />
</span></p>
<p style="text-align: justify;"><span>Микроконтроллер — микросхема с несколькими контактами «вход» и «выход». Управление через микросхему осуществляется по простейшему принципу и имеет три основных этапа:<br />
</span></p>
<p style="text-align: justify;"><span>1) к входам подключаются различные датчики, фиксирующие движение, звук, уровень освещения и т. д.<br />
</span></p>
<p style="text-align: justify;"><span>2) к выходам подключаются устройства управления, такие как системы освещения, динамики, электроприводы и т. д.<br />
</span></p>
<p style="text-align: justify;"><span>3) пишется программа управления микроконтроллером и приложением.<br />
</span></p>
<p style="text-align: justify;"><span>Управляющая программа:<br />
</span></p>
<p style="background: white;"><span style="color: #557799;">#include &lt;SPI.h&gt; <span style="color: #333333;"><br />
</span></span></p>
<p style="background: white;"><span style="color: #557799;">#include &lt;SD.h&gt;<span style="color: #333333;"><br />
</span></span></p>
<p style="background: white;"><span style="color: #008800;"><strong>const</strong><span style="color: #333333;"><br />
<span style="color: #333399;"><strong>int</strong><span style="color: #333333;"> chipSelect = <span style="color: #0000dd;"><strong>4</strong><span style="color: #333333;">;<br />
</span></span></span></span></span></span></p>
<p style="background: white;"><span style="color: #333399;"><strong>void</strong><span style="color: #333333;"><br />
<span style="color: #0066bb;"><strong>setup</strong><span style="color: #333333;">()<br />
</span></span></span></span></p>
<p style="background: white;"><span style="color: #333333;">{</span></p>
<p style="background: white;"><span style="color: #333333;"> <span style="color: #888888;">/* Open serial communications and wait for port to open: */<span style="color: #333333;"><br />
</span></span></span></p>
<p style="background: white;"><span style="color: #333333;"> Serial.begin(<span style="color: #0000dd;"><strong>9600</strong><span style="color: #333333;">);</span></span></span></p>
<p style="background: white;"><span style="color: #333333;"> <span style="color: #008800;"><strong>while</strong><span style="color: #333333;"> (!Serial) {} <span style="color: #888888;">/* wait for serial port to connect. Needed for Leonardo only */<span style="color: #333333;"><br />
</span></span></span></span></span></p>
<p style="background: white;"><span style="color: #333333;"> Serial.print(<span style="background-color: #fff0f0;">&#8220;Initializing SD card&#8230;&#8221;</span>);</span></p>
<p style="background: white;"><span style="color: #333333;"> <span style="color: #888888;">/* see if the card is present and can be initialized: */<span style="color: #333333;"><br />
</span></span></span></p>
<p style="background: white;"><span style="color: #333333;"><br />
<span style="color: #008800;"><strong>if</strong><span style="color: #333333;"> (!SD.begin(chipSelect)) {<br />
</span></span></span></p>
<p style="background: white;"><span style="color: #333333;"> Serial.println(<span style="background-color: #fff0f0;">&#8220;Card failed, or not present&#8221;</span>);</span></p>
<p style="background: white;"><span style="color: #333333;"> <span style="color: #888888;">// don&#8217;t do anything more:</span></span></p>
<p style="background: white;"><span style="color: #333333;"> <span style="color: #008800;"><strong>return</strong><span style="color: #333333;">;<br />
</span></span></span></p>
<p style="background: white;"><span style="color: #333333;"> }<br />
</span></p>
<p style="background: white;"><span style="color: #333333;"> Serial.println(<span style="background-color: #fff0f0;">&#8220;card initialized.&#8221;</span>);<br />
</span></p>
<p style="background: white;"><span style="color: #333333;">}<br />
</span></p>
<p style="background: white;"><span style="color: #333399;"><strong>void</strong><span style="color: #333333;"><br />
<span style="color: #0066bb;"><strong>loop</strong><span style="color: #333333;">()<br />
</span></span></span></span></p>
<p style="background: white;"><span style="color: #333333;">{</span></p>
<p style="background: white;"><span style="color: #333333;"> <span style="color: #888888;">// make a string for assembling the data to log:<span style="color: #333333;"><br />
</span></span></span></p>
<p style="background: white;"><span style="color: #333333;"> String dataString = <span style="background-color: #fff0f0;">&#8220;&#8221;</span>;</span></p>
<p style="background: white;"><span style="color: #333333;"> <span style="color: #888888;">// read three sensors and append to the string:</span></span></p>
<p style="background: white;"><span style="color: #333333;"> <span style="color: #008800;"><strong>for</strong><span style="color: #333333;"> (<span style="color: #333399;"><strong>int</strong><span style="color: #333333;"> analogPin = <span style="color: #0000dd;"><strong>0</strong><span style="color: #333333;">; analogPin &lt; <span style="color: #0000dd;"><strong>3</strong><span style="color: #333333;">; analogPin++) {</span></span></span></span></span></span></span></span></span></p>
<p style="background: white;"><span style="color: #333333;"> <span style="color: #333399;"><strong>int</strong><span style="color: #333333;"> sensor = analogRead(analogPin);<br />
</span></span></span></p>
<p style="background: white;"><span style="color: #333333;"> dataString += String(sensor);</span></p>
<p style="background: white;"><span style="color: #333333;"> <span style="color: #008800;"><strong>if</strong><span style="color: #333333;"> (analogPin &lt; <span style="color: #0000dd;"><strong>2</strong><span style="color: #333333;">) {<br />
</span></span></span></span></span></p>
<p style="background: white;"><span style="color: #333333;"> dataString += <span style="background-color: #fff0f0;">&#8220;,&#8221;</span>;<br />
</span></p>
<p style="background: white;"><span style="color: #333333;"> }<br />
</span></p>
<p style="background: white;"><span style="color: #333333;">}<br />
</span></p>
<p style="text-align: justify;"><span><strong>Arduino<br />
</strong></span></p>
<p style="text-align: justify;"><span>Arduino — открытая платформа, состоящая из платы микроконтроллера и программного обеспечения (ПО) – IDE (Integrated Development Environment). ПО для платы пишется в приложениях на компьютере и через канал соединения с платой загружается на устройство.<br />
</span></p>
<p style="text-align: justify;"><span>Основа программы под Arduino состоит из двух команд: setup() и loop(). Перед командой setup() пишутся переменные, задействуются библиотеки. Команда setup() выполняется только один раз после каждого подключения или сброса платы под управлением Arduino. Данная команда запускает переменные и работу портов входа и выхода платы. Данная команда обязательна для управляющей программы. Команда loop() предназначена для циклического выполнения команд, которые прописываются в её теле. Пример реализации данных команд в программе:<br />
</span></p>
<p style="background: white;"><span style="color: #333333;">setup()<br />
</span></p>
<p style="background: white;"><span style="color: #333333;">{<br />
</span></p>
<p style="background: white;"><span style="color: #333333;"> Serial.begin(<span style="color: #0000dd;"><strong>9600</strong><span style="color: #333333;">);<br />
</span></span></span></p>
<p style="background: white;"><span style="color: #333333;">}<br />
</span></p>
<p style="background: white;"><span style="color: #333333;">loop ()<br />
</span></p>
<p style="background: white;"><span style="color: #333333;">{<br />
</span></p>
<p style="background: white;"><span style="color: #333333;"> Serial.println(millis());<br />
</span></p>
<p style="background: white;"><span style="color: #333333;"> delay(<span style="color: #0000dd;"><strong>1000</strong><span style="color: #333333;">);<br />
</span></span></span></p>
<p style="background: white;"><span style="color: #333333;">}<br />
</span></p>
<p style="background: white;"><span>[1стр.47]. </span><span style="color: #333333;"><br />
</span></p>
<p style="text-align: justify;"><span>Набор кодов, сгруппированный в блок и имеющий имя, прописанное на данном коде, называется функцией. Выполнение набора кодов осуществляется при вызове функции. Для снижения ошибок в программе и выполнения повторяющихся команд прописываются различные функции. При написании функции в начале обозначается её предназначение. К примеру, значение, которое возвращается функцией – целое число (int). У функций, которые не возвращают значение, имеют тип – пусто (void). За функцией пишется её имя и в скобках параметры передаваемые функцией. К примеру:<br />
</span></p>
<p style="background: white;"><span style="color: #333333;">type <span style="color: #0066bb;"><strong>functionName</strong><span style="color: #333333;"> (parameters)<br />
</span></span></span></p>
<p style="background: white;"><span style="color: #333333;">{<br />
</span></p>
<p style="background: white;"><span style="color: #333333;"> statements;<br />
</span></p>
<p style="background: white;"><span style="color: #333333;">}<br />
</span></p>
<p style="text-align: justify;"><span>К цельному типу относится функция задержки или паузы delay(Val).<br />
</span></p>
<p style="text-align: justify;"><span>Скобки {} ставятся в начале и в конце функций. К примеру:<br />
</span></p>
<p style="background: white;"><span style="color: #333333;">type <span style="color: #0066bb;"><strong>function</strong><span style="color: #333333;">()<br />
</span></span></span></p>
<p style="background: white;"><span style="color: #333333;">{<br />
</span></p>
<p style="background: white;"><span style="color: #333333;"> statements;<br />
</span></p>
<p style="background: white;"><span style="color: #333333;">}<br />
</span></p>
<p style="text-align: justify;"><span>Количество открывающих скобок должно быть равным количеству закрывающих, иначе будут критические ошибки в программе. В Arduino есть удобная функция проверки парности скобок. Осуществляется проверка двумя способами: при выделении любой одной скобки парная скобка высвечивается, выделение точки за скобкой также подсвечивает пару скобок [3].<br />
</span></p>
<p style="text-align: justify;"><span>Обмен данными микроконтроллера с компьютером происходит через проводной интерфейс или по радиосигналу, обмен информацией осуществляется через библиотеку. В Arduino установлены стандартные библиотеки, но иногда их функции не рассчитаны на работу управляемым через микроконтроллер оборудованием. При необходимости устанавливаются дополнительные библиотеки. В папке &#8220;Libraries&#8221; установлены стандартные библиотеки, дополнительные библиотеки устанавливаются в папку libraries.<br />
</span></p>
<p style="text-align: justify;"><span><strong>Arduino и iOS-приложение </strong><br />
</span></p>
<p style="text-align: justify;"><span>Для того чтобы интегрировать Arduino с Apple (iPad или iPhone) понадобится приложение Arduino Code и среда разработки Blynk[4]. Arduino Code устанавливается на iPad или iPhone через данное приложение осуществляется интеграция устройств iOS и Arduino. Для написания управляющей программы платы Arduino будет использоваться Blynk. Помимо облачной среды для работы, у Blynk есть возможностью загрузки приложений на компьютер. Поскольку в Blynk для разработки имеются версии для iOS помимо Android, данное приложение было выбрано для интеграции с Apple. Немаловажно, что Blynk может связываться с устройствами по Bluetooth.<br />
</span></p>
<p style="text-align: justify;"><span>На первом этапе соединяем программируемую плату со смартфоном, через поддерживаемые интерфейсы: SeeedStudio Ethernet Shield V2.0 (W5200), Official Ethernet Shield (W5100), RN-XV WiFly, ESP8266, Official Arduino WiFi Shield, ESP8266 (WiFi modem), Adafruit CC3000 WiFi, ENC28J60 и USB (Serial). Интеграция Arduino с компьютерами Macintosh (Apple) осуществляется через меню Tools. Далее в меню выбирается строка Serial Port, далее подключение осуществляется через порт, у которого название начинается с /dev/cu.usbserial. На втором этапе в приложении добавляем виджеты (программы), настройку адресов выводов и при необходимости прописываем код. Для разработки виджета применяется drag&#8217;n'drop. В Blynk создаются программы к платам Arduino: Due, Mini, Uno и для других плат Arduino. Программа Arduino Code устанавливается на компьютер и для написания команд понадобится автодополнение (code complete). Приложение можно скачать из App Store&#8217;а. При загрузке программы на плату Arduino необходимо отключить Bluetooth модуль, поскольку связь с микроконтроллером осуществляется через один и тот же порт. В качестве источника питания для микроконтроллера будет использоваться блок питания на 9 Вольт. Также в приложении Arduino Manager есть возможность установить готовый widget. Для управления устройством замка подойдёт widget Rotary Switch. Этот widget по своей сути поворотный переключатель (как и следует из названия). Имеет два положения off/on. Простой и удобный widget для управления устройством, у которого только два режима закрыто/открыто.<br />
</span></p>
<p style="text-align: justify;"><span><strong>Создаём электронный замок из серии &#8220;умный дом&#8221;</strong><br />
</span></p>
<p style="text-align: justify;"><span>Для соединения платы Arduino будет использоваться плата Bluetooth HM-10. Данный модуль работает в режимах Master и Slave. Совместим с более старыми версиями под Arduino, такими как: HC-05;-06;-07. Для того чтобы устройства Apple могли обнаруживать Bluetooth сигнал от платы необходимо установить программу — LightBlue.<br />
</span></p>
<p style="text-align: justify;"><span>К плате под управлением Arduino подключаем привод, который будет управлять ригелем замка или электромагнитную задвижку, которая и будет выполнять функцию запирания двери. В данном случае программа управления будет негромоздкой и выглядеть следующим образом:<br />
</span></p>
<p style="background: white;"><span style="color: #557799;">#include &lt;Servo.h&gt;<span style="color: #333333;"><br />
</span></span></p>
<p style="background: white;"><span style="color: #333333;">Servo myservo;<br />
</span></p>
<p style="background: white;"><span style="color: #333399;"><strong>int</strong><span style="color: #333333;"> pos = <span style="color: #0000dd;"><strong>0</strong><span style="color: #333333;">;<br />
</span></span></span></span></p>
<p style="background: white;"><span style="color: #333399;"><strong>void</strong><span style="color: #333333;"><br />
<span style="color: #0066bb;"><strong>setup</strong><span style="color: #333333;">() {<br />
</span></span></span></span></p>
<p style="background: white;"><span style="color: #333333;"> myservo.attach(<span style="color: #0000dd;"><strong>10</strong><span style="color: #333333;">); <span style="color: #888888;">/* Назначаем 10 пин на управление приводом */<span style="color: #333333;"><br />
</span></span></span></span></span></p>
<p style="background: white;"><span style="color: #333333;">}<br />
</span></p>
<p style="background: white;"><span style="color: #333399;"><strong>void</strong><span style="color: #333333;"><br />
<span style="color: #0066bb;"><strong>loop</strong><span style="color: #333333;">() {</span></span></span></span></p>
<p style="background: white;"><span style="color: #333333;"> <span style="color: #008800;"><strong>for</strong><span style="color: #333333;">(pos = <span style="color: #0000dd;"><strong>0</strong><span style="color: #333333;">; pos &lt; <span style="color: #0000dd;"><strong>90</strong><span style="color: #333333;">; pos += <span style="color: #0000dd;"><strong>1</strong><span style="color: #333333;">)<span style="color: #888888;">/* движение от 0° до 90° */<span style="color: #333333;"><br />
</span></span></span></span></span></span></span></span></span></span></span></p>
<p style="background: white;"><span style="color: #333333;"> {<br />
</span></p>
<p style="background: white;"><span style="color: #333333;"> myservo.write(pos);<br />
</span></p>
<p style="background: white;"><span style="color: #333333;"> delay(<span style="color: #0000dd;"><strong>25</strong><span style="color: #333333;">); <span style="color: #888888;">/* Указываем время с задержкой (25 мс) для перехода в другое положение */<span style="color: #333333;"><br />
</span></span></span></span></span></p>
<p style="background: white;"><span style="color: #333333;"> }</span></p>
<p style="background: white;"><span style="color: #333333;"> <span style="color: #008800;"><strong>for</strong><span style="color: #333333;">(pos = <span style="color: #0000dd;"><strong>90</strong><span style="color: #333333;">; pos &gt; <span style="color: #0000dd;"><strong>0</strong><span style="color: #333333;">; pos -= <span style="color: #0000dd;"><strong>1</strong><span style="color: #333333;">) <span style="color: #888888;">/* Движение от 90° до 0° */<span style="color: #333333;"><br />
</span></span></span></span></span></span></span></span></span></span></span></p>
<p style="background: white;"><span style="color: #333333;"> {<br />
</span></p>
<p style="background: white;"><span style="color: #333333;"> myservo.write(pos);<br />
</span></p>
<p style="background: white;"><span style="color: #333333;"> delay(<span style="color: #0000dd;"><strong>25</strong><span style="color: #333333;">); <span style="color: #888888;">/* задержка 25мс для достижения обратного положения */<span style="color: #333333;"><br />
</span></span></span></span></span></p>
<p style="background: white;"><span style="color: #333333;"> }<br />
</span></p>
<p style="background: white;"><span style="color: #333333;">}<br />
</span></p>
<p style="text-align: justify;"><span>Связь будет осуществляться через приложение Arduino Manager, которое напрямую управляет контроллером через операционную систему iOS. При необходимости меняем настройку скорости подключения платы Bluetooth HM-10.<br />
</span></p>
<p style="background: white;"><span style="color: #888888;">// Connect HM10 <span style="color: #333333;"><br />
</span></span></p>
<p style="background: white;"><span style="color: #888888;">// Pin 7/TXD<span style="color: #333333;"><br />
</span></span></p>
<p style="background: white;"><span style="color: #888888;">// Pin 8/RXD <span style="color: #333333;"><br />
</span></span></p>
<p style="background: white;"><span style="color: #557799;">#if defined(ARDUINO_AVR_UNO)<span style="color: #333333;"><br />
</span></span></p>
<p style="background: white;"><span style="color: #557799;">#include &lt;SoftwareSerial.h&gt;<span style="color: #333333;"><br />
</span></span></p>
<p style="background: white;"><span style="color: #333333;">SoftwareSerial <span style="color: #0066bb;"><strong>mySerial</strong><span style="color: #333333;">(<span style="color: #0000dd;"><strong>7</strong><span style="color: #333333;">, <span style="color: #0000dd;"><strong>8</strong><span style="color: #333333;">); <span style="color: #888888;">// TX, RX<span style="color: #333333;"><br />
</span></span></span></span></span></span></span></span></span></p>
<p style="background: white;"><span style="color: #557799;">#endif<span style="color: #333333;"><br />
</span></span></p>
<p style="background: white;"><span style="color: #557799;">#if defined(ARDUINO_AVR_MEGA2560)<span style="color: #333333;"><br />
</span></span></p>
<p style="background: white;"><span style="color: #557799;">#define mySerial Serial3<span style="color: #333333;"><br />
</span></span></p>
<p style="background: white;"><span style="color: #557799;">#endif<span style="color: #333333;"><br />
</span></span></p>
<p style="background: white;"><span style="color: #557799;">#define DEVICE_SPEED 9600<span style="color: #333333;"><br />
</span></span></p>
<p style="background: white;"><span style="color: #557799;">#define CONSOLE_SPEED 9600<span style="color: #333333;"><br />
</span></span></p>
<p style="background: white;"><span style="color: #333399;"><strong>void</strong><span style="color: #333333;"><br />
<span style="color: #0066bb;"><strong>setup</strong><span style="color: #333333;">() {<br />
</span></span></span></span></p>
<p style="background: white;"><span style="color: #333333;"> Serial.begin(CONSOLE_SPEED);<br />
</span></p>
<p style="background: white;"><span style="color: #333333;"> pinMode(<span style="color: #0000dd;"><strong>7</strong><span style="color: #333333;">, OUTPUT);<br />
</span></span></span></p>
<p style="background: white;"><span style="color: #333333;"> pinMode(<span style="color: #0000dd;"><strong>8</strong><span style="color: #333333;">, INPUT);<br />
</span></span></span></p>
<p style="background: white;"><span style="color: #333333;"> mySerial.begin(DEVICE_SPEED);<br />
</span></p>
<p style="background: white;"><span style="color: #333333;"> Serial.println(<span style="background-color: #fff0f0;">&#8220;Ready&#8221;</span>);<br />
</span></p>
<p style="background: white;"><span style="color: #333333;">}<br />
</span></p>
<p style="background: white;"><span style="color: #333399;"><strong>void</strong><span style="color: #333333;"><br />
<span style="color: #0066bb;"><strong>loop</strong><span style="color: #333333;">() {</span></span></span></span></p>
<p style="background: white;"><span style="color: #333333;"> <span style="color: #333399;"><strong>char</strong><span style="color: #333333;"> c;</span></span></span></p>
<p style="background: white;"><span style="color: #333333;"> <span style="color: #008800;"><strong>if</strong><span style="color: #333333;"> (Serial.available()) {<br />
</span></span></span></p>
<p style="background: white;"><span style="color: #333333;"> c = Serial.read();<br />
</span></p>
<p style="background: white;"><span style="color: #333333;"> mySerial.print(c);<br />
</span></p>
<p style="background: white;"><span style="color: #333333;"> }</span></p>
<p style="background: white;"><span style="color: #333333;"> <span style="color: #008800;"><strong>if</strong><span style="color: #333333;"> (mySerial.available()) {<br />
</span></span></span></p>
<p style="background: white;"><span style="color: #333333;"> c = mySerial.read();<br />
</span></p>
<p style="background: white;"><span style="color: #333333;"> Serial.print(c);<br />
</span></p>
<p style="background: white;"><span style="color: #333333;"> }<br />
</span></p>
<p style="background: white;"><span style="color: #333333;">}<br />
</span></p>
<p style="text-align: justify;"><span><strong>Выводы</strong><br />
</span></p>
<p style="text-align: justify;"><span>Для создания подобного запорного механизма, несомненно, понадобится плата Arduino, сервоприводы и написание управляющей программы и других компонентов в зависимости от поставленной задачи. Управление устройством будет осуществляться на iPad или iPhone по Bluetooth через приложение Arduino Manager. Данное приложение загружается с App Store и предназначено для управления множеством устройств. Имеет лёгкую настройку управления и датчик обратной связи. Генератор кода позволяет создавать коммуникационную инфраструктуру связи между платой Arduino и устройством iOS и генерировать код для каждого выбранного устройства. Также есть возможность воспользоваться готовым widget-ом, для управления устройством.<br />
</span></p>
<p style="text-align: justify;"><span>Arduino даёт возможность экспериментировать и применять данный микроконтроллер для различных устройств. Приложение Arduino Manager управлять этими устройствами с iPad или iPhone.</span></p>
]]></content:encoded>
			<wfw:commentRss>https://technology.snauka.ru/2017/05/13480/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
