<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>http://wiki.me-robotics.ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=%D0%9F%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C</id>
	<title>me-robotics wiki - Вклад участника [ru]</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.me-robotics.ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=%D0%9F%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C"/>
	<link rel="alternate" type="text/html" href="http://wiki.me-robotics.ru/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/%D0%9F%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C"/>
	<updated>2026-07-10T20:09:30Z</updated>
	<subtitle>Вклад участника</subtitle>
	<generator>MediaWiki 1.35.2</generator>
	<entry>
		<id>http://wiki.me-robotics.ru/index.php?title=%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%90%D0%A6%D0%9F_%D0%B2_%D0%BC%D0%B8%D0%BA%D1%80%D0%BE%D0%BA%D0%BE%D0%BD%D1%82%D1%80%D0%BE%D0%BB%D0%BB%D0%B5%D1%80%D0%B5_AVR_ATmega16&amp;diff=1009</id>
		<title>Использование АЦП в микроконтроллере AVR ATmega16</title>
		<link rel="alternate" type="text/html" href="http://wiki.me-robotics.ru/index.php?title=%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%90%D0%A6%D0%9F_%D0%B2_%D0%BC%D0%B8%D0%BA%D1%80%D0%BE%D0%BA%D0%BE%D0%BD%D1%82%D1%80%D0%BE%D0%BB%D0%BB%D0%B5%D1%80%D0%B5_AVR_ATmega16&amp;diff=1009"/>
		<updated>2022-05-16T19:05:13Z</updated>

		<summary type="html">&lt;p&gt;Пользователь: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Аналого-цифровой преобразователь&amp;#039;&amp;#039;&amp;#039; - устройство, преобразующее входной аналоговый сигнал в цифровой. В электронике - это устройство, которое, например, преобразует ток или напряжение в цифровой код. Он нужен для того, чтобы микроконтроллеры и микропроцессоры способны понимать только бинарные сигналы - 0 или 1. И для того, чтобы микроконтроллер имел способность считывать аналоговый сигнал с помощью преобразования его в цифровой, используют АЦП. Существуют различные типы АЦП, каждый тип удобен для конкретных приложений. Наиболее популярные типы АЦП используют такие типы аппроксимаций как приближенная, последовательная и дельта-аппроксимация. &lt;br /&gt;
&lt;br /&gt;
В данной статье рассмотрим АЦП с последовательной аппроксимацией. В данном случае для каждого фиксированного аналогового уровня последовательно формируется серия соответствующих им цифровых кодов. Внутренний счетчик используется для их сравнения с аналоговым сигналом после конверсии. Генерация цифровых кодов останавливается, когда соответствующий им аналоговый уровень становится чуть-чуть больше чем аналоговый сигнал на входе АЦП. Этот цифровой код и будет представлять собой конвертированное значение аналогового сигнала. &lt;br /&gt;
&lt;br /&gt;
Для рассмотрения принципа работы АЦП используем встроенный в микроконтроллер AVR ATmega16 аналого-цифровой преобразователь. Практически все микроконтроллеры семейства AVR имеют встроенный АЦП. Однако есть микроконтроллеры, у которых нет собственных АЦП – в этом случае необходимо использовать внешние АЦП, выпускаемые в виде одной микросхемы.&lt;br /&gt;
&lt;br /&gt;
==АЦП в микроконтроллере AVR ATmega16==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Отличительные особенности&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
* 10-разрядное разрешение&lt;br /&gt;
* Интегральная нелинейность 0.5 мл. разр.&lt;br /&gt;
* Абсолютная погрешность ±2 мл. разр.&lt;br /&gt;
* Время преобразования 13 - 260 мкс. -Частота преобразования до 15 тыс. преобр. в сек. при максимальном разрешении&lt;br /&gt;
* 8 мультиплексированных однополярных каналов (входов)&lt;br /&gt;
* 7 дифференциальных каналов (входов)&lt;br /&gt;
* 2 дифференциальных канала (входа) с подключаемым усилением на 10 и 200&lt;br /&gt;
* Представление результата с левосторонним или правосторонним выравниванием в 16-разр. слове&lt;br /&gt;
* Диапазон входного напряжения ADC 0…VCC&lt;br /&gt;
* Выборочный внутренний ИОН (Reference Voltage) на 2.56 В&lt;br /&gt;
* Режимы одиночного преобразования и автоматического перезапуска&lt;br /&gt;
* Прерывание по завершении преобразования ADC&lt;br /&gt;
* Механизм подавления шумов в режиме сна&lt;br /&gt;
&lt;br /&gt;
Микроконтроллер ATmega16 имеет встроенный 10-битный 8-канальный АЦП. Разрядность 10 бит означает, что каждый входной аналоговый сигнал (для ATmega16 он должен быть в диапазоне 0-5В) представляется 1024 уровнями дискретного сигнала (2 в степени 10 = 1024), то есть дискретизируется с точностью Uвх/1024. 8-канальный означает что АЦП может быть задействован на 8 контактах микроконтроллера одновременно. &lt;br /&gt;
&lt;br /&gt;
[[Файл:АЦП в ATmega16.png|безрамки|центр|АЦП в ATmega16]]&lt;br /&gt;
&lt;br /&gt;
Весь порт A (GPIO33-GPIO40) может быть использован для операций АЦП. По умолчанию выводы порта А являются контактами ввода/вывода общего назначения. Чтобы задействовать на них функции АЦП необходимо сконфигурировать специальные регистры, ответственные за функции аналого-цифрового преобразования в микроконтроллере. Поэтому их и называют регистрами АЦП. &lt;br /&gt;
&lt;br /&gt;
ATmega16 содержит 10-разрядный АЦП последовательного приближения. АЦП связан с 8-канальным аналоговым мультиплексором, 8 однополярных (недифференциальных) входов которого связаны с ножками порта A, то есть весь порт А (GPIO33-GPIO40) может быть использован для операций АЦП. Недифференциальные входы измеряют потенциал напряжения относительно провода GND.&lt;br /&gt;
&lt;br /&gt;
ADC также поддерживает 16 вариантов конфигурации для дифференциальных входов. Два дифференциальных входа (ADC1, ADC0 и ADC3, ADC2) содержат каскад со ступенчатым программируемым усилением: 0 дБ (1x), 20 дБ (10x), или 46 дБ (200x) – непосредственно перед аналого-цифровым преобразованием. Семь дифференциальных аналоговых каналов используют общий инвертирующий вход (ADC1), а все остальные входы ADC выполняют функцию неинвертирующих входов.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Принцип действия АЦП в ATmega16.png|безрамки|центр|Принцип действия АЦП в ATmega16]]&lt;br /&gt;
&lt;br /&gt;
==Установка регистров АЦП в микроконтроллере ATmega16==&lt;br /&gt;
Регистр ADMUX (регистр выбора и мультиплексирования канала АЦП) - предназначен для выбора канала АЦП и опорного напряжения (reference voltage). Структура данного регистра представлена на следующем рисунке.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Регистры ATmega16.png|безрамки|центр|Регистры ATmega16]]&lt;br /&gt;
&lt;br /&gt;
Биты 0-4 используются для выбора канала&lt;br /&gt;
&lt;br /&gt;
[[Файл:Выбор канала.png|безрамки|центр]]&lt;br /&gt;
&lt;br /&gt;
Бит 5 используется для коррекции результата преобразования вправо или влево.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Бит5.png|безрамки|центр]]&lt;br /&gt;
&lt;br /&gt;
Биты 6-7 используются для выбора опорного напряжения АЦП.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Биты6-7.png|безрамки|центр]]&lt;/div&gt;</summary>
		<author><name>Пользователь</name></author>
	</entry>
	<entry>
		<id>http://wiki.me-robotics.ru/index.php?title=%D0%9B%D0%B0%D0%B7%D0%B5%D1%80%D0%BD%D1%8B%D0%B5_%D0%B4%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%BC%D0%B5%D1%80%D1%8B&amp;diff=1008</id>
		<title>Лазерные дальномеры</title>
		<link rel="alternate" type="text/html" href="http://wiki.me-robotics.ru/index.php?title=%D0%9B%D0%B0%D0%B7%D0%B5%D1%80%D0%BD%D1%8B%D0%B5_%D0%B4%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%BC%D0%B5%D1%80%D1%8B&amp;diff=1008"/>
		<updated>2022-05-16T19:00:08Z</updated>

		<summary type="html">&lt;p&gt;Пользователь: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Лазерный дальномер&amp;#039;&amp;#039;&amp;#039; — прибор для измерения расстояний с применением лазерного луча. &lt;br /&gt;
&lt;br /&gt;
По принципу действия лазерные дальномеры различаются на импульсные и фазовые. &lt;br /&gt;
&lt;br /&gt;
Импульсный лазерный дальномер — это устройство, состоящее из импульсного лазера и детектора излучения. Измеряя время, которое затрачивает луч на путь до отражателя и обратно, зная значение скорости света, рассчитывается расстояние между лазером и отражающим объектом. Импульсные лазерные дальномеры обладают большой дальностью работы, т.к. импульс можно выдать с большой мощностью и повышенной скрытностью.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Импульсный лазерный дальномер.png|центр|Импульсный лазерный дальномер]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Фазовые лазерные дальномеры на короткий промежуток времени включают подсветку объекта с разной модулированной частотой и по сдвигу фазы вычисляют расстояние до цели. Они не имеют таймера замера отражённого сигнала, поэтому дешевле, но имеют меньшую дальность.&lt;br /&gt;
[[Файл:Фазовый лазерный дальномер.png|центр|473x473пкс|Фазовый лазерный дальномер]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Laser Sensor&amp;#039;&amp;#039;&amp;#039; – модуль лазерного датчика для широкого круга применений позволяет обнаруживать объекты на расстоянии до 4-5 метров от места установки датчика. LaserSensor может быть использован для обнаружения препятствий и уклонения от них на роботах и автомобилях.&lt;br /&gt;
[[Файл:Лазерный дальномер.png|мини|Лазерный дальномер]]&lt;br /&gt;
&lt;br /&gt;
== Принцип работы ==&lt;br /&gt;
Лазерный датчик содержит в себе передатчик и приемник лазерного излучения. В передатчике располагается осциллирующая трубка, генерирующая сигнал на определенной частоте, который после усиления транзистором применяется для возбуждения лазерной трубки. Приемник содержит принимающую трубку резонансная частота которой соответствует генерирующей трубке. В связи с этим датчик может принять отраженный свет той же частоты, что и излученный, защищая тем самым датчик от видимого света и ложных срабатываний.&lt;br /&gt;
&lt;br /&gt;
==Особенности==&lt;br /&gt;
&lt;br /&gt;
*эффективная длина измерения 4-5 м;&lt;br /&gt;
*включает в себя схему усиления;&lt;br /&gt;
*индикатор принятого сигнала;&lt;br /&gt;
*напряжение питания: 2,5… 5,0 В;&lt;br /&gt;
*габаритные размеры: 47,7x17,9 мм.&lt;br /&gt;
&lt;br /&gt;
==Подключение==&lt;br /&gt;
&lt;br /&gt;
*VCC ↔ 2.5V ~ 5.0V&lt;br /&gt;
*GND ↔ земля&lt;br /&gt;
*DOUT ↔ MCU.IO (digital output)&lt;br /&gt;
&lt;br /&gt;
==Пример кода для проверки датчика==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
int laser_din = 2;&lt;br /&gt;
void setup(){&lt;br /&gt;
  pinMode(laser_din, INPUT);&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
  }&lt;br /&gt;
void loop(){&lt;br /&gt;
  if (digitalRead(laser_din) == LOW){&lt;br /&gt;
    Serial.println(&amp;quot;No obstacles!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
  else{&lt;br /&gt;
    Serial.println(&amp;quot;Obstacle!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Пользователь</name></author>
	</entry>
	<entry>
		<id>http://wiki.me-robotics.ru/index.php?title=SLAM&amp;diff=1007</id>
		<title>SLAM</title>
		<link rel="alternate" type="text/html" href="http://wiki.me-robotics.ru/index.php?title=SLAM&amp;diff=1007"/>
		<updated>2022-05-16T18:58:50Z</updated>

		<summary type="html">&lt;p&gt;Пользователь: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;  SLAM — это Simultaneous Localization And Mapping, что означает метод одновременной навигации и построения карты.&lt;br /&gt;
Это метод, который используется роботами и автономными транспортными средствами для построения карты в неизвестном пространстве или для обновления карты в заранее известном пространстве с контролем текущего местоположения и пройденного пути. Т.е. метод, который объединяет два самостоятельных процесса в постоянный оборот поочередных вычислений, при котором итоги одного процесса примут участие в вычислениях другого процесса.&lt;br /&gt;
&lt;br /&gt;
     SLAM :&lt;br /&gt;
1) построение карты исследованного пространства&lt;br /&gt;
2) построение траектории движения робота на карте.&lt;br /&gt;
&lt;br /&gt;
Чтобы понять работу SLAM, нужно представить себе робота, оснащенного некоторым набором приборов находящегося в некоторой неизвестной среде. Робот не имеет информацию об окружающей его среде, равно как и о своем местонахождении в ней. Все, что у него есть – информация с приборов и способность запоминать информацию о предыдущих полученных данных. Его цель – обойти всю местность и построить полную карту, всей местности. На практике это означает, что робот ищет ответы на вопрос: “Как выглядит мир вокруг?”. &lt;br /&gt;
В каждый момент времени в мозг робота передаются показания с приборов. На основе анализа дальномерных данных – робот может определять своё перемещение относительно предыдущего положения. В лучшем случае, когда его вычисления точны и безукоризненны, по одним этим данным можно воссоздать карту местности, где он уже побывал и полностью описать траекторию его движения. В настоящий же момент на каждом шаге возникает небольшая погрешность вычислений (ошибка замеров/помехи/ограничения, накладываемые алгоритмами и т.п.). С течением времени общая ошибка продолжает нарастать таким образом, что, несмотря на приемлемую точность определения локального смещения, общая глобальная карта положений робота будет полна искажений. Для этого и нужен Simultaneous Localization And Mapping или просто SLAM.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SLAM - делят на 2 метода. &lt;br /&gt;
&lt;br /&gt;
 Топологический метод  –  способ построения карты, основываясь на данных о связности элементов в пространстве в ущерб геометрической точности.&lt;br /&gt;
 Сеточный метод  – данный  метод хранит информацию о местности как о массиве квадратных или шестиугольных элементов, в которых хранятся дискретные данные о каждой клетке. В целях упрощения вычислений клетки считаются статистически независимыми, и чаще всего отображают реальный рельеф местности.&lt;br /&gt;
&lt;br /&gt;
	В общем случае SLAM можно описать как цикличная последовательность действий:&lt;br /&gt;
&lt;br /&gt;
1) распознавание окружающей среды; &lt;br /&gt;
2) определение перемещение путём сравнения текущего местоположения с предыдущим;&lt;br /&gt;
3) нахождение на текущем местоположении особенностей&lt;br /&gt;
4) сопоставление особенностей текущего местоположения с особенностями, полученными за всё время наблюдений;&lt;br /&gt;
5)обновление на основе этой информации местонахождения робота за всю историю наблюдений;&lt;br /&gt;
6) проверка на петли – не проходил ли робот повторно по одному и тому же пути;&lt;br /&gt;
7) обобщение нынешней карты той территории, отталкиваясь от положения особенностей и робота за всю историю наблюдений.&lt;/div&gt;</summary>
		<author><name>Пользователь</name></author>
	</entry>
	<entry>
		<id>http://wiki.me-robotics.ru/index.php?title=%D0%97%D1%83%D0%BC%D0%BC%D0%B5%D1%80&amp;diff=1006</id>
		<title>Зуммер</title>
		<link rel="alternate" type="text/html" href="http://wiki.me-robotics.ru/index.php?title=%D0%97%D1%83%D0%BC%D0%BC%D0%B5%D1%80&amp;diff=1006"/>
		<updated>2022-05-16T18:53:40Z</updated>

		<summary type="html">&lt;p&gt;Пользователь: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Зуммер (Trema-модуль) =&lt;br /&gt;
&amp;#039;&amp;#039;Trema-модуль зуммер пассивный и Trema-модуль зуммер активный&amp;#039;&amp;#039; - позволяют излучать звук различными способами, в зависимости от выбранной модели зуммера.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Зуммер.png|безрамки|216x216пкс]]&lt;br /&gt;
&lt;br /&gt;
== Спецификация: ==&lt;br /&gt;
&lt;br /&gt;
* Напряжение питания: 5 В&lt;br /&gt;
* Потребляемый ток: до 30 мА&lt;br /&gt;
* Интенсивность звука: &amp;gt;= 85 дБ&lt;br /&gt;
* Резонансная частота: 2048 Гц&lt;br /&gt;
* Сопротивление обмотки: 40 Ом&lt;br /&gt;
* Рабочая температура: -20 ... 70 °C&lt;br /&gt;
* Габариты: 30x30x9 (без учёта выводов)&lt;br /&gt;
&lt;br /&gt;
Все модули линейки &amp;quot;Trema&amp;quot; выполнены в одном формате&lt;br /&gt;
&lt;br /&gt;
[[Файл:2222222.png|безрамки|435x435пкс]]&lt;br /&gt;
&lt;br /&gt;
== Подключение: ==&lt;br /&gt;
&amp;#039;&amp;#039;Trema-модуль зуммер пассивный и Trema-модуль зуммер активный&amp;#039;&amp;#039; входят в линейку Trema-модулей, что позволяет подключить их к Arduino через Trema Shield по 3-проводному шлейфу (который идёт в комплекте с зуммером) без пайки, без дополнительных проводов и переходников. Их можно подключать к любому выводу Arduino, как цифровому, так и аналоговому.&lt;br /&gt;
&lt;br /&gt;
Модули имеют три вывода: Signal (S) - вход и два вывода питания Vcc (V) и GND (G).&lt;br /&gt;
&lt;br /&gt;
Модули удобно подключать 3 способами, в зависимости от ситуации:&lt;br /&gt;
&lt;br /&gt;
=== Способ - 1 :  Используя проводной шлейф и Piranha UNO ===&lt;br /&gt;
Используя провода «Папа — Мама», подключаем напрямую к контроллеру Piranha UNO.&lt;br /&gt;
&lt;br /&gt;
[[Файл:B0a8b5f52ec7f92392c40cf658215591.png]]&lt;br /&gt;
&lt;br /&gt;
===Способ - 2 :  Используя Trema Set Shield===&lt;br /&gt;
Модули можно подключить к любому из цифровых или аналоговых входов Trema Set Shield.&lt;br /&gt;
[[Файл:03f90a336625a8b33868656dde5b76a4.png|без|обрамить]]&lt;br /&gt;
&lt;br /&gt;
===Способ - 3 :  Используя проводной шлейф и Shield===&lt;br /&gt;
Используя 3-х проводной шлейф, к Trema Shield, Trema-Power Shield, Motor Shield, Trema Shield NANO и тд.&lt;br /&gt;
[[Файл:B17ae05dd294848791441d00dbe6435a.png|без|обрамить]]&lt;br /&gt;
&lt;br /&gt;
==Питание:==&lt;br /&gt;
Входное напряжение питания 5 В постоянного тока, подаётся на выводы Vcc (V) и GND (G).&lt;br /&gt;
&lt;br /&gt;
==Подробнее о модулях:==&lt;br /&gt;
Trema-модуль зуммер пассивный основан на электромагнитном излучателе, который состоит из кольцевого магнита, сердечника с электромагнитной катушкой и гибкой металлической мембраны. Электромагнитная катушка преобразует электрические колебания в магнитные, а мембрана преобразует магнитные колебания в механические. Полученные механические колебания распространяются по воздуху в виде звуковых волн. Пластиковый корпус, с отверстием, усиливает акустический эффект.&lt;br /&gt;
&lt;br /&gt;
Trema-модуль зуммер пассивный не имеет встроенного генератора, а преобразует электрический сигнал со входа (S) в механические колебания воздуха. Таким образом частота излучаемого звука соответствует частоте сигнала подаваемого на вход модуля. Чем выше частота, тем «тоньше» звук. Чем ближе частота к резонансной, тем звук сильнее.&lt;br /&gt;
&lt;br /&gt;
Самый простой способ получения звука заключается в применении функции &amp;#039;&amp;#039;&amp;#039;tone()&amp;#039;&amp;#039;&amp;#039;. Данная функция генерирует меандр (сигнал прямоугольной формы с равной длительностью импульсов и пауз), с заданной частотой и длительностью.&lt;br /&gt;
&lt;br /&gt;
Trema-модуль зуммер активный состоит из 5В генератора прямоугольных импульсов (меандра) с частотой 2,3 кГц, и электромагнитного излучателя в одном корпусе. Сигнал с генератора подается на электромагнитный излучатель и преобразуется в звуковые волны той же частоты.&lt;br /&gt;
&lt;br /&gt;
Trema-модуль зуммер активный уже имеет встроенный генератор и для генерации звука ему не требуется использование функции beep() и ей аналогичных (как для простого Trema-зуммера). Достаточно установить состояние логической «1» на выводе «S» и Вы услышите сигнал с частотой 2,3 кГц и уровнем звукового давления не ниже 85дБ/10см.&lt;br /&gt;
&lt;br /&gt;
==Примеры для зуммера пассивного :==&lt;br /&gt;
&lt;br /&gt;
===Вывод двух коротких звуковых сигнала функцией tone(), сигнализирующих о включении Arduino:===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
const uint8_t pinBF = 2; // определяем номер вывода, к которому подключён зуммер&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  tone(pinBF, 2048, 100); //выводим звуковой сигнал с частотой 2048 Гц и длительностью 0,1 с&lt;br /&gt;
  delay(200);             //не выводим звук 0,1 с (см. ниже)&lt;br /&gt;
  tone(pinBF, 2048, 100); //выводим звуковой сигнал с частотой 2048 Гц и длительностью 0,1 с&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() { // в примере не используется&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Обратите внимание на то, что в примере между двумя вызовами функции tone() устанавливается задержка на &amp;#039;&amp;#039;&amp;#039;0,2&amp;#039;&amp;#039;&amp;#039; секунды, а в комментарии написано «не выводим звук в течении &amp;#039;&amp;#039;&amp;#039;0,1&amp;#039;&amp;#039;&amp;#039; сек». Дело в том, что функция tone() выводит сигнал используя прерывания аппаратного таймера и не приостанавливает выполнение скетча на время вывода сигнала. Значит, сразу после начала вывода первого звукового сигнала, стартует функция delay(), приостанавливая выполнение скетча на 0,2 сек. но звук продолжает выводиться. Значит первые 0,1 сек - выводится сигнал, следующие 0,1 сек - тишина и последние 0,1 - опять выводится сигнал.&lt;br /&gt;
&lt;br /&gt;
Может возникнуть ситуация, когда использование функции tone() невозможно, например, если аппаратный таймер используется для других целей. Тогда сигнал придётся генерировать самим, используя функцию digitalWrite():&lt;br /&gt;
&lt;br /&gt;
===Тот же пример, но без использования функции tone():===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
void myTone(uint8_t, uint32_t, uint32_t);// определяем собственную функцию для генерации звука&lt;br /&gt;
const uint8_t pinBF = 2; // определяем номер вывода, к которому подключён зуммер&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  tone(pinBF, 2048, 100); //выводим звуковой сигнал с частотой 2048 Гц и длительностью 0,1 с&lt;br /&gt;
  delay(200);             //не выводим звук 0,1 с (см. ниже)&lt;br /&gt;
  tone(pinBF, 2048, 100); //выводим звуковой сигнал с частотой 2048 Гц и длительностью 0,1 с&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {}          // в данном примере не используется&lt;br /&gt;
void myTone(uint8_t i, uint32_t j, uint32_t k){ //определяем функцию&lt;br /&gt;
  j /= 500000;          //меняем значение j на время одного полупериода в мкс&lt;br /&gt;
  k += millis();        //меняем значение k на время завершения вывода сигнала&lt;br /&gt;
  pinMode(i, OUTPUT);   //конфигурируем вывод для вывода сигнала как выход&lt;br /&gt;
  while (k &amp;gt; millis()){ //выводим сигнал, пока не истечёт указанное время&lt;br /&gt;
    digitalWrite(i, HIGH); delayMicroseconds(j); //устанавливаем на выходе i уровень лог. 1 на время j&lt;br /&gt;
    digitalWrite(i, LOW); delayMicroseconds(j);  //устанавливаем на выходе i уровень лог. 0 на время j&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Обратите внимание на то, что теперь задержка между первым и вторым вызовом функции myTone() соответствует паузе между сигналами в 0,1 сек, так как функция myTone() приостанавливает выполнение скетча на время вывода звукового сигнала.&lt;br /&gt;
&lt;br /&gt;
Сама функция &amp;#039;&amp;#039;&amp;#039;myTone()&amp;#039;&amp;#039;&amp;#039; не сложна в понимании:&lt;br /&gt;
&lt;br /&gt;
*Сначала значение переменной &amp;#039;&amp;#039;&amp;#039;j&amp;#039;&amp;#039;&amp;#039; получившей частоту в Гц преобразуем в длительность одного полупериода в мкс. Период &amp;#039;&amp;#039;&amp;#039;T = 1 / F&amp;#039;&amp;#039;&amp;#039; (сек), значит полупериод &amp;#039;&amp;#039;&amp;#039;L = 0,5 T&amp;#039;&amp;#039;&amp;#039; (сек) = &amp;#039;&amp;#039;&amp;#039;0,5 / F&amp;#039;&amp;#039;&amp;#039; (сек) = &amp;#039;&amp;#039;&amp;#039;500&amp;#039;000 / F&amp;#039;&amp;#039;&amp;#039; (мкс).&lt;br /&gt;
*Далее к переменной &amp;#039;&amp;#039;&amp;#039;k&amp;#039;&amp;#039;&amp;#039; получившей длительность импульса, добавляется время с начала старта скетча &amp;#039;&amp;#039;&amp;#039;millis()&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*Конфигурируем вывод номер которого получила переменная &amp;#039;&amp;#039;&amp;#039;i&amp;#039;&amp;#039;&amp;#039; как выход&lt;br /&gt;
*Чередуем на выводе &amp;#039;&amp;#039;&amp;#039;i&amp;#039;&amp;#039;&amp;#039; логические уровни, устанавливая их на длительность &amp;#039;&amp;#039;&amp;#039;J&amp;#039;&amp;#039;&amp;#039; пока время прошедшее с момента старта скетча &amp;#039;&amp;#039;&amp;#039;millis()&amp;#039;&amp;#039;&amp;#039; не сравняется со значением переменной &amp;#039;&amp;#039;&amp;#039;k&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
==Примеры для зуммера активного:==&lt;br /&gt;
&lt;br /&gt;
===Вывод короткого звукового сигнала.===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
uint8_t pinBuzzer = 2;    //определяем № вывода к которому подключён зуммер со встроенным генератором&lt;br /&gt;
                                             //можно использовать любой вывод Arduino&lt;br /&gt;
void setup(){                                &lt;br /&gt;
  pinMode(pinBuzzer, OUTPUT);                //переводим вывод pinBuzzer в режим вывода&lt;br /&gt;
  digitalWrite(pinBuzzer, LOW);              //устанавливаем уровень лог. 0 на выводе pinBuzzer&lt;br /&gt;
  }&lt;br /&gt;
  &lt;br /&gt;
void loop(){&lt;br /&gt;
  digitalWrite(pinBuzzer, HIGH); delay(500); // включаем звук на 0,5 секунд&lt;br /&gt;
  digitalWrite(pinBuzzer, LOW); delay(1000); // выключаем звук на 1 секунду&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Как видно из скетча, управлять Trema-зуммером со встроенным генератором так же легко, как и обычным светодиодом.&lt;br /&gt;
&lt;br /&gt;
==Применение:==&lt;br /&gt;
&lt;br /&gt;
*Информирование о событиях&lt;br /&gt;
*Вывод мелодий&lt;br /&gt;
*Создание микровибраций&lt;/div&gt;</summary>
		<author><name>Пользователь</name></author>
	</entry>
	<entry>
		<id>http://wiki.me-robotics.ru/index.php?title=%D0%98%D0%9A-%D0%B4%D0%B0%D1%82%D1%87%D0%B8%D0%BA_%D0%B4%D0%B2%D0%B8%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F_HC-SR501&amp;diff=1005</id>
		<title>ИК-датчик движения HC-SR501</title>
		<link rel="alternate" type="text/html" href="http://wiki.me-robotics.ru/index.php?title=%D0%98%D0%9A-%D0%B4%D0%B0%D1%82%D1%87%D0%B8%D0%BA_%D0%B4%D0%B2%D0%B8%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F_HC-SR501&amp;diff=1005"/>
		<updated>2022-05-16T18:46:36Z</updated>

		<summary type="html">&lt;p&gt;Пользователь: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Файл:HC-sr5.jpg|мини|Внешний вид HC-SR501]]&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;HC-SR501&amp;#039;&amp;#039;&amp;#039; - пироэлектрический инфракрасный датчик движения, позволяет обнаруживать движение в контролируемой зоне. Представляет из себя модуль, состоящий из ИК сенсора 500BP, линзы Френеля, и управляющей модулем микросхемы BISS0001. Режим работы модуля задается перемычкой (режим H или режим L).&lt;br /&gt;
&lt;br /&gt;
В режиме H при срабатывании датчика несколько раз подряд на его выходе (на OUT) остается высокий логический уровень. В режиме L на выходе при каждом срабатывании датчика на выход подается отдельный импульс.&lt;br /&gt;
&lt;br /&gt;
Не рекомендуется использовать датчик в местах с резкими перепадами температур - резкий всплеск инфракрасного излучения от нагрева он будет воспринимать как появление перемещающегося объекта, что может вызвать ложное срабатывание.&lt;br /&gt;
&lt;br /&gt;
HC-SR501 часто применяется в охранных сигнализациях, а также в умных домах для контроля освещения при появлении в помещении человека.&lt;br /&gt;
&lt;br /&gt;
== Технические характеристики ==&lt;br /&gt;
&lt;br /&gt;
* Напряжение питания: 4.8В до 20В&lt;br /&gt;
* Статический ток: 50 мА&lt;br /&gt;
* Уровня выходного сигнала: 3.3 В / низкий 0 В&lt;br /&gt;
* Время задержки: 0.5 — 200с (регулируемая)&lt;br /&gt;
* Время блокировки: 2.5 с&lt;br /&gt;
* Угол работы: &amp;lt; 100&lt;br /&gt;
* Рабочая температура: -15С до + 70C&lt;br /&gt;
* Определение объектов: 23 мм&lt;br /&gt;
* Габариты: 33мм x 25мм x 24мм&lt;br /&gt;
На модуль установлена линза Френеля, которая фокусирует инфракрасные сигналы на пироэлектрический датчик под названием 500BP. Датчик называется PIR (Passive Infra-Red). Пассивный он потому, что для обнаружения движения не используется какая-либо дополнительная энергия, кроме той, что испускается самими объектами.&lt;br /&gt;
&lt;br /&gt;
500BP состоит из двух чувствительных элементов. Управляющая микросхема модуля регистрирует изменения сигналов от обоих элементов и по характеру их изменения обнаруживает движение объектов, испускающих инфракрасные сигналы (живых организмов).&lt;br /&gt;
&lt;br /&gt;
== Контакты датчика ==&lt;br /&gt;
&lt;br /&gt;
=== Назначение выводов: ===&lt;br /&gt;
Модуль HC-SR501 имеет 3 вывода:&lt;br /&gt;
&lt;br /&gt;
* VCC — положительное напряжение постоянного тока от 4,5 до 20 В постоянного тока.&lt;br /&gt;
* OUTPUT — логический выход на 3,3 вольта. LOW не указывает на обнаружение, HIGH означает, что кто-то был обнаружен.&lt;br /&gt;
* GND — заземление.&lt;br /&gt;
&lt;br /&gt;
=== Назначение перемычек: ===&lt;br /&gt;
&lt;br /&gt;
* H — это настройка Hold или Repeat. В этом положении HC-SR501 будет продолжать выдавать сигнал HIGH, пока он продолжает обнаруживать движение.&lt;br /&gt;
* L — Это параметр прерывания или без повтора. В этом положении выход будет оставаться HIGH в течение периода, установленного настройкой потенциометра TIME.&lt;br /&gt;
&lt;br /&gt;
[[Файл:14.jpg|мини|308x308пкс]]На плате HC-SR501 имеются дополнительные отверстия для двух компонентов, рядом расположена маркировка, посмотреть на нее можно сняв линзу Френеля.&lt;br /&gt;
&lt;br /&gt;
=== Назначение дополнительных отверстий: ===&lt;br /&gt;
&lt;br /&gt;
* RT — это предназначено для термистора или чувствительного к температуре резистора. Добавление этого позволяет использовать HC-SR501 в экстремальных температурах, а также в некоторой степени повышает точность работы детектора.&lt;br /&gt;
* RL — это соединение для светозависимого резистора или фоторезистора. Добавляя компонент, HC-SR501 будет работать только в темноте, что является общим приложением для чувствительных к движению систем освещения.&lt;br /&gt;
&lt;br /&gt;
== Подключение HC-SR501 к Ардуино Уно ==&lt;br /&gt;
[[Файл:IR motion схема1.png|мини|247x247пкс|Схема подключения]]&lt;br /&gt;
Для соединения с микроконтроллером или напрямую с реле у HC-SR501 имеется три вывода. Подключаем их к Ардуино по следующей схеме:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|HC-SR501&lt;br /&gt;
|GND&lt;br /&gt;
|VCC&lt;br /&gt;
|OUT&lt;br /&gt;
|}&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Ардуино Уно&lt;br /&gt;
|GND&lt;br /&gt;
| +5V&lt;br /&gt;
|2&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Программа для датчика ===&lt;br /&gt;
[[Файл:IR motion bb.png|мини|348x348пкс|Внешний вид макета]]&lt;br /&gt;
Как уже было сказано, цифровой выход датчика HC-SR501 генерирует высокий уровень сигнала при срабатывании. Напишем простую программу, которая будет отправлять в последовательный порт «1» если датчик увидел движение, и «0» в противном случае.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
const int movPin = 2&lt;br /&gt;
&lt;br /&gt;
void setup() &lt;br /&gt;
{&lt;br /&gt;
    Serial.begin(9600);&lt;br /&gt;
    pinMode(movPin, INPUT);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop()&lt;br /&gt;
{&lt;br /&gt;
    int val = digitalRead(movPin);&lt;br /&gt;
    Serial.println(val);&lt;br /&gt;
    delay(100);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Загружаем программу на Ардуино и проверяем работу датчика. Можно покрутить настройки датчика и посмотреть как это отразится на его работе.&lt;br /&gt;
&lt;br /&gt;
== Программа для управления светом при помощи датчика движения ==&lt;br /&gt;
[[Файл:Imagesh.png|мини|305x305пкс|Схема подключения]]&lt;br /&gt;
[[Файл:Imagevsh.png|мини|304x304пкс|Внешний вид макета с лампочкой]]&lt;br /&gt;
Теперь напишем программу, которая будет при срабатывании датчика включать реле, а следовательно и освещение в комнате.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
const int movPin = 2;&lt;br /&gt;
const int relPin = 3;&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
    Serial.begin(9600);&lt;br /&gt;
    pinMode(movPin, INPUT);&lt;br /&gt;
    pinMode(relPin, OUTPUT);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop(){&lt;br /&gt;
    int val = digitalRead(movPin);&lt;br /&gt;
    if (val)&lt;br /&gt;
        digitalWrite(relPin, HIGH);&lt;br /&gt;
    else&lt;br /&gt;
        digitalWrite(relPin, LOW);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Загружаем программу на Ардуино, аккуратно подключаем схему к бытовой сети и проверяем работу датчика.&lt;/div&gt;</summary>
		<author><name>Пользователь</name></author>
	</entry>
	<entry>
		<id>http://wiki.me-robotics.ru/index.php?title=%D0%9E%D0%B1%D1%8A%D0%B5%D0%B7%D0%B4_%D0%BF%D1%80%D0%B5%D0%BF%D1%8F%D1%82%D1%81%D1%82%D0%B2%D0%B8%D0%B9&amp;diff=1004</id>
		<title>Объезд препятствий</title>
		<link rel="alternate" type="text/html" href="http://wiki.me-robotics.ru/index.php?title=%D0%9E%D0%B1%D1%8A%D0%B5%D0%B7%D0%B4_%D0%BF%D1%80%D0%B5%D0%BF%D1%8F%D1%82%D1%81%D1%82%D0%B2%D0%B8%D0%B9&amp;diff=1004"/>
		<updated>2022-05-16T18:41:03Z</updated>

		<summary type="html">&lt;p&gt;Пользователь: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Файл:Лабиринт.png|мини]]&lt;br /&gt;
В рамках этой статьи мы постараемся составить свой алгоритм объезда препятствий для робота e-puck в среде Webots. Для примера будет построен лабиринт, где робот должен будет успешно избегать столкновений с препятствиями и объезжать их. Сначала нам необходимо будет построить сам лабиринт на арене, этот момент мы пропустим. Затем нам нужно добавить на арену робота e-puck и создать для него новый контроллер, программируемый python. Теперь, когда все готово, переходим к написанию самого алгоритма.&lt;br /&gt;
&lt;br /&gt;
Итак, обращаясь к конфигурации робота e-puck на официальном сайте Webots, мы знаем, что у нашего робота есть 2 двигателя, называемых мотором левого и правого колес соответственно. У нас также имеется 8 датчиков приближения, имеющих имена: PS0; ... ; PS8. Попробуем включить оба двигателя и все датчики.&lt;br /&gt;
&lt;br /&gt;
Включаем все двигатели:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
leftMotor = robot.getDevice(&amp;#039;left wheel motor&amp;#039;)&lt;br /&gt;
rightMotor = robot.getDevice(&amp;#039;right wheel motor&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
leftMotor.setPosition(float(&amp;#039;inf&amp;#039;))&lt;br /&gt;
leftMotor.setVelocity(0.0)&lt;br /&gt;
&lt;br /&gt;
rightMotor.setPosition(float(&amp;#039;inf&amp;#039;))&lt;br /&gt;
rightMotor.setVelocity(0.0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Включаем датчики:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
prox_sensors = []&lt;br /&gt;
for ind in range(8):&lt;br /&gt;
    sensor_name = &amp;#039;ps&amp;#039; + str(ind)&lt;br /&gt;
    prox_sensors.append(robot.getDistanceSensor(sensor_name))&lt;br /&gt;
    prox_sensors[ind].enable(timestep)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Считаем показания датчиков:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
for ind in range(8):&lt;br /&gt;
    print(&amp;quot;ind: {}, val: {}&amp;quot;.format(ind, prox_sensors[ind].getValue()))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После запуска симуляции, мы наблюдаем следующие показания в консоли:&lt;br /&gt;
[[Файл:ConsolePS Test.png|безрамки|альт=|центр]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Из технической документации на сайте Webots, мы знаем, что ps7 и ps0- это передний левый и правый датчики соответственно, ps5 и ps2-левый и правый, расположенные по бокам, а ps4 и ps3-задний левый и задний правый. Из консоли мы получаем значения, считываемые этими датчиками. Эти показания понадобятся нам для того, чтобы создать функцию поворота, по мере приближения к препятствию. e-puck может обнаружить стену перед собой, если мы подключим один из передних датчиков, проделаем это с ps7&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
left_wall = prox_sensors[5].getValue() &amp;gt; 80&lt;br /&gt;
front_wall = prox_sensors[7].getValue() &amp;gt; 80&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
И так, мы разрабатываем следующий алгоритм движения:&lt;br /&gt;
&lt;br /&gt;
опираясь на показания переднего и бокового левого датчиков, робот будет следовать вдоль левой стенки пока перед ним впереди не будет препятствий. Как только это условие будет нарушено, возникшем впереди препятствием, робот совершит поворот направо, если же стенки слева не будет, то робот должен будет выполнить поворот налево. И последнее условие: если стенки слева нет, а впереди есть препятствие, то робот поворачивает направо.&lt;br /&gt;
&lt;br /&gt;
При написании кода, не стоит забывать о том, что для успешного поворота на месте, скорость вращения одного колеса, должна быть значительно ниже другой.&lt;br /&gt;
&lt;br /&gt;
Здесь возможны ошибки!&lt;br /&gt;
&lt;br /&gt;
В процессе движения робот может слишком близко подойти к стенке, это может затруднить или вовсе остановить процесс его движения. Следовательно, нам нужно сделать так, чтобы робот мог отъехать от левой стенки, если она находится к нему слишком близко. Для этого задействует датчик ps6, который находится между левым боковым-ps5 и левым передним-ps7.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
left_wall = prox_sensors[5].getValue() &amp;gt; 80&lt;br /&gt;
left_corner = prox_sensors[6].getValue() &amp;gt; 80&lt;br /&gt;
front_wall = prox_sensors[7].getValue() &amp;gt; 80&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Так же добавляем соответствующие условие:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
if left_corner:&lt;br /&gt;
    left_speed = max_speed&lt;br /&gt;
    right_speed = max_speed/8&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Окончательный вариант этого алгоритма выглядит следующим образом:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
right_motor.setPosition(float(&amp;#039;inf&amp;#039;))&lt;br /&gt;
right_motor.setVelocity(0.0)&lt;br /&gt;
&lt;br /&gt;
prox_sensors = []&lt;br /&gt;
for ind in range(8):&lt;br /&gt;
    sensor_name = &amp;#039;ps&amp;#039; + str(ind)&lt;br /&gt;
    prox_sensors.append(robot.getDistanceSensor(sensor_name))&lt;br /&gt;
    prox_sensors[ind].enable(timestep)&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
while robot.step(timestep) != -1:&lt;br /&gt;
&lt;br /&gt;
    for ind in range(8):&lt;br /&gt;
        print(&amp;quot;ind: {}, val: {}&amp;quot;.format(ind, prox_sensors[ind].getValue()))&lt;br /&gt;
   &lt;br /&gt;
    left_wall = prox_sensors[5].getValue() &amp;gt; 80&lt;br /&gt;
    left_corner = prox_sensors[6].getValue() &amp;gt; 80&lt;br /&gt;
    front_wall = prox_sensors[7].getValue() &amp;gt; 80   &lt;br /&gt;
    &lt;br /&gt;
    left_speed = max_speed&lt;br /&gt;
    right_speed = max_speed&lt;br /&gt;
    &lt;br /&gt;
    if front wall:&lt;br /&gt;
        left_speed = max_speed&lt;br /&gt;
        right_speed = -max_speed&lt;br /&gt;
    else:&lt;br /&gt;
        if left wall:&lt;br /&gt;
            left_speed = max_speed&lt;br /&gt;
            right_speed = max_speed&lt;br /&gt;
        else:&lt;br /&gt;
            left_speed = max_speed/8&lt;br /&gt;
            right_speed = max_speed&lt;br /&gt;
        if left_corner:&lt;br /&gt;
            left_speed = max_speed&lt;br /&gt;
            right_speed = max_speed/8&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Пользователь</name></author>
	</entry>
	<entry>
		<id>http://wiki.me-robotics.ru/index.php?title=%D0%9A%D0%B0%D0%BB%D0%B8%D0%B1%D1%80%D0%BE%D0%B2%D0%BA%D0%B0&amp;diff=1003</id>
		<title>Калибровка</title>
		<link rel="alternate" type="text/html" href="http://wiki.me-robotics.ru/index.php?title=%D0%9A%D0%B0%D0%BB%D0%B8%D0%B1%D1%80%D0%BE%D0%B2%D0%BA%D0%B0&amp;diff=1003"/>
		<updated>2022-05-16T18:39:14Z</updated>

		<summary type="html">&lt;p&gt;Пользователь: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Калибровка - совокупность операций, устанавливающих соотношение между значением величины, полученным с помощью данного средства измерений и соответствующим значением величины, определенным с помощью эталона с целью определения действительных метрологических характеристик этого средства измерений.&lt;br /&gt;
==Калибровка датчика==&lt;br /&gt;
В измерительной технике, &amp;#039;&amp;#039;&amp;#039;калибровка датчика&amp;#039;&amp;#039;&amp;#039; – процедура определения взаимосвязи между значениями, полученными с измерительного прибора, и значениями, определенными с помощью эталонных измерительных приборов. Определение данной взаимосвязи происходит при определенных условиях, также учитываются погрешности измерительных приборов и эталонных измерительных средств.&lt;br /&gt;
&lt;br /&gt;
В процессе калибровки проверяется точность средств измерения, в частности, датчиков и измерительных систем, а также воспроизводимость результатов измерения. Откалиброванные датчики — необходимое предварительное условие для получения точных и достоверных результатов измерений. Калибровка — одно из ключевых предварительных условий эффективности обеспечения качества.&lt;br /&gt;
&lt;br /&gt;
Точность даже самых точных и наиболее чувствительных средств измерения может ухудшаться вследствие износа, старения и воздействия факторов окружающей среды, поэтому необходимо периодически проводить перекалибровку измерительного средства, необходимо постоянно контролировать испытательное оборудование и средства. &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Калибровка нуля&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
[[Файл:Калибровка нуля.png|мини|Калибровка нуля]]&lt;br /&gt;
Чаще всего у прибора можно регулировать нулевую точку и чувствительность. При калибровке датчика в первую очередь выполняется калибровка нулевой точки датчика, а уже после этого калибруется точка шкалы. Это связано с тем, что подстройка нуля осуществляется смещением характеристики датчика на величину начального отклонения от нулевого значения.&lt;br /&gt;
&lt;br /&gt;
Однако, после калибровки нуля характеристика датчика смещается вверх или вниз по всей длине, и датчик может показывать неверные значения, поэтому необходимо снова выполнить калибровку датчика.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Калибровка чувствительности&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
[[Файл:Калибровка чувствительности.png|мини|Калибровка чувствительности]]&lt;br /&gt;
Калибровка чувствительности (калибровка шкалы) выполняется после калибровки нуля. При калибровке чувствительности корректировка показаний датчика осуществляется наклоном характеристики датчика относительно нулевой точки. Как правило, корректировка чувствительности не влияет на положение нулевой точки датчика. Но в некоторых старых аналоговых приборах с механическими регуляторами может потребоваться подстройка нуля после коррекции чувствительности на величину более 10-20%. В этом случае нужно выполнить настройку нуля и чувствительности последовательно два и более раза, постепенно приближаясь к нужному результату.&lt;br /&gt;
&lt;br /&gt;
Как правило, калибровку чувствительности рекомендуют выполнять, подавая на датчик измеряемый параметр величиной, равной 40-100% шкалы измерения датчика. При калибровке чувствительности более низкими значениями можно получить увеличенную погрешность на конце диапазона измерения.&lt;/div&gt;</summary>
		<author><name>Пользователь</name></author>
	</entry>
	<entry>
		<id>http://wiki.me-robotics.ru/index.php?title=%D0%94%D0%B0%D1%82%D1%87%D0%B8%D0%BA_%D0%BF%D0%BE%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=1002</id>
		<title>Датчик положения</title>
		<link rel="alternate" type="text/html" href="http://wiki.me-robotics.ru/index.php?title=%D0%94%D0%B0%D1%82%D1%87%D0%B8%D0%BA_%D0%BF%D0%BE%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=1002"/>
		<updated>2022-05-16T18:32:07Z</updated>

		<summary type="html">&lt;p&gt;Пользователь: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Датчик&amp;#039;&amp;#039;&amp;#039; — маленькое, сложное устройство, которое превращает физические параметры в сигнал. Одним из самых распространённых видов датчиков является датчик положения. С помощью датчиков положения осуществляется вязь между механической и электронной частью оборудования устройства. Они используются для решения задач, связанных с автоматизацией технологических процессов и реализацией систем управления самого широкого назначения. Датчики положения используются в основном в беспилотных транспортных средствах, промышленных роботах, а также устройствах, требующих самобалансировки.&lt;br /&gt;
[[Файл:Промышленное применение датчиков положения.png|слева|мини|368x368пкс|Промышленное применение датчиков положения]]&lt;br /&gt;
[[Файл:Области применения датчиков положения.png|мини|528x528пкс|Области применения датчиков положения]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Задачи, решаемые с помощью датчиков положения и отрасли их применения==&lt;br /&gt;
&lt;br /&gt;
* Измерение положения и перемещения (угловое и линейное) органов в рабочих машинах, механизмах. Измерение может совмещаться с передачей данных.&lt;br /&gt;
* В АСУ, робототехнике может быть звеном обратной связи.&lt;br /&gt;
* Контроль степени открытия/закрытия элементов.&lt;br /&gt;
* Регулировка направляющих шкивов.&lt;br /&gt;
* Электропривод.&lt;br /&gt;
* Определение данных расстояния до предметов без привязки к ним.&lt;br /&gt;
* Могут осуществлять проверку функций механизмов в лабораториях, то есть провести испытания.&lt;br /&gt;
&lt;br /&gt;
== Классификация датчиков положения ==&lt;br /&gt;
Важно отметить, что датчики положения бывают &amp;#039;&amp;#039;&amp;#039;бесконтактные&amp;#039;&amp;#039;&amp;#039; и &amp;#039;&amp;#039;&amp;#039;контактные&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Бесконтактные&amp;#039;&amp;#039;&amp;#039;, в свою очередь, бывают: &lt;br /&gt;
&lt;br /&gt;
* индуктивные&lt;br /&gt;
* магнитные&lt;br /&gt;
* емкостные &lt;br /&gt;
* ультразвуковые&lt;br /&gt;
* оптические&lt;br /&gt;
&lt;br /&gt;
Они при помощи магнитного, электромагнитного или электростатического поля образуют связь с объектом.&lt;br /&gt;
&lt;br /&gt;
В категории &amp;#039;&amp;#039;&amp;#039;контактных датчиков&amp;#039;&amp;#039;&amp;#039; самым распространенным является энкодер.&lt;br /&gt;
&lt;br /&gt;
Далее в работе будут подробнее рассмотрены принципы работы видов бесконтактных датчиков движения.&lt;br /&gt;
&lt;br /&gt;
== Ультразвуковой датчик ==&lt;br /&gt;
Принцип действия построен на измерении времени между поданным ультразвуковым сигналом и регистрацией отраженного импульса.&lt;br /&gt;
&lt;br /&gt;
Эти датчики могут измерять расстояние от любых поверхностей: твердых, жидких, прозрачных, цветных, чистых, грязных, шершавых, гладких и т.д.&lt;br /&gt;
&lt;br /&gt;
Они нечувствительны к шуму, звуку, температуре и вибрации.&lt;br /&gt;
&lt;br /&gt;
Ультразвуковые сенсоры применяются для обнаружения различных объектов или для измерения расстояний на поверхности, а также применяются в акустической парковочной системе (АПС).&lt;br /&gt;
[[Файл:Ультразвуковой бесконтактный датчик положения Siemens Cylindrical ultrasonic proximity switches BERO 3RG64.png|слева|мини|363x363пкс|Ультразвуковой бесконтактный датчик положения Siemens Cylindrical ultrasonic proximity switches BERO 3RG64]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Оптический датчик ==&lt;br /&gt;
В приборах такого типа чувствительным элементом является фотосенсор (устройство, производящее реакцию на изменение светового потока). Принцип работы заключается в перекрытии светового луча непрозрачным объектом.&lt;br /&gt;
&lt;br /&gt;
В его состав входят: фотодетектор, источник света и устройства, которое управляет светом (это может быть линза или зеркало).&lt;br /&gt;
&lt;br /&gt;
Исходя из типа устройства оптические датчики подразделяются на:&lt;br /&gt;
&lt;br /&gt;
* Моноблочные. Приемник и излучатель находятся в одном корпусе.&lt;br /&gt;
* Двухблочные. Приемник оптического сигнала и источник излучения находятся в разных корпуса&lt;br /&gt;
&lt;br /&gt;
[[Файл:Image333.png|слева|мини|338x338пкс|Оптический датчик объезда препятствий]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Датчик бесконтактный индуктивный==&lt;br /&gt;
Является дискретным и используется для обнаружения металлических объектов. В основе работы лежит генератор с катушкой индуктивности. Распределяется переменное магнитное поле, силовые линии выходят из чувствительного элемента и проникают в чувствительную зону. При нахождении в этой зоне электрического или магнитного предмета поле ослабляется, датчик срабатывает и обнаруживает этот предмет.&lt;br /&gt;
&lt;br /&gt;
Индуктивные датчики активно применяются в промышленной автоматике.&lt;br /&gt;
[[Файл:Image4.png|слева|мини|387x387пкс|ВБИ-М18-56У-2123-С.51 Датчик бесконтактный индуктивный]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Емкостной датчик==&lt;br /&gt;
Емкостные датчики применяют для измерения угловых перемещений, очень малых линейных перемещений, вибраций, скорости движения и т. д., а также для воспроизведения заданных функций (гармонических, пилообраз­ных, прямоугольных и т. п.).&lt;br /&gt;
&lt;br /&gt;
Емкостные преобразователи, диэлектрическая проницаемость &amp;#039;&amp;#039;e&amp;#039;&amp;#039; которых изменяется за счет перемещения, деформации или изменения состава диэлектрика, применяют в качестве датчиков уровня непроводящих жидкостей, сыпучих и порошкообразных материалов, толщины слоя непроводящих материалов (толщино­меры), а также контроля влажности и состава вещества.&lt;br /&gt;
[[Файл:Image555.png|слева|мини|Емкостный датчик уровня CSB AC82A5-43P-10-LZS4]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Магнитный датчик==&lt;br /&gt;
Регистрируют объекты с постоянным магнитом. Могут обнаружить магнитную метку даже за стенкой, которая не состоит из магнитного материала, но пропускает магнитное поле.&lt;br /&gt;
&lt;br /&gt;
==Заключение==&lt;br /&gt;
В данной работе были рассмотрены основные виды бесконтактных датчиков, особенности и принципы их работы и,также, сферы их применения.&lt;br /&gt;
&lt;br /&gt;
Можно подвести итог, что бесконтактные датчики — это первичные приборы для автоматизации технологического процесса различных отраслей промышленности.&lt;br /&gt;
&lt;br /&gt;
Столь широкая область применения обусловлена большим количеством возможных технологических решений, реализуемых с их помощью:&lt;br /&gt;
&lt;br /&gt;
*подсчёт количества объектов,&lt;br /&gt;
*контроль положения объекта,&lt;br /&gt;
*регистрация наличия или отсутствия объекта,&lt;br /&gt;
*отбор объектов по их габаритам, цвету и другим физическим свойствам,&lt;br /&gt;
*определение скорости,&lt;br /&gt;
*определение угла поворота&lt;br /&gt;
&lt;br /&gt;
и многое другое&lt;/div&gt;</summary>
		<author><name>Пользователь</name></author>
	</entry>
	<entry>
		<id>http://wiki.me-robotics.ru/index.php?title=%D0%A1%D0%B5%D1%80%D0%B2%D0%BE%D0%BF%D1%80%D0%B8%D0%B2%D0%BE%D0%B4%D1%8B_SG90,_MG995&amp;diff=1001</id>
		<title>Сервоприводы SG90, MG995</title>
		<link rel="alternate" type="text/html" href="http://wiki.me-robotics.ru/index.php?title=%D0%A1%D0%B5%D1%80%D0%B2%D0%BE%D0%BF%D1%80%D0%B8%D0%B2%D0%BE%D0%B4%D1%8B_SG90,_MG995&amp;diff=1001"/>
		<updated>2022-05-16T18:18:00Z</updated>

		<summary type="html">&lt;p&gt;Пользователь: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Сервопривод&amp;#039;&amp;#039;&amp;#039; – это привод, предназначенный для осуществления контроля (угол поворота вала, скорость вращения/движения и т.д.) над различными объектами, находящимися в постоянном движении. Контроль производится в зависимости от заданных ему параметров извне.&lt;br /&gt;
[[Файл:Сервопривод- из чего состоит.png|мини|500x500пкс|Элементы Сервопривода]]&lt;br /&gt;
&lt;br /&gt;
== Принцип работы ==&lt;br /&gt;
Принцип работы сервоприводов сводится к использованию импульсного сигнала, который изменяется по трем параметрам – частоте повторения, минимальной и максимальной продолжительности. Именно длительность импульса задает угол поворота мотора.&lt;br /&gt;
&lt;br /&gt;
Сигналы, поступающие на сервопривод, имеют стандартную частоту, а их продолжительность может равняться от 0,8 до 2,2 мс (в зависимости от модели). Параллельно с получением управляющего импульса начинается работа генератора опорного импульса, который связан с датчиком обратной связи. Тот, в свою очередь, механически соединен с выходным валом и отвечает за изменение его положения.&lt;br /&gt;
&lt;br /&gt;
Электронный блок анализирует импульсы по длительности и на основе полученных величин определяет разницу между заданным извне положением вала и реальным (измеренным датчиком). С учетом этого происходит корректировка работы путем подачи напряжения на питание двигателя.&lt;br /&gt;
&lt;br /&gt;
== Сервопривод SG90 ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Сервопривод SG90&amp;#039;&amp;#039;&amp;#039; используется в основном для управления небольшими легкими механизмами, угол поворота которых ограничен диапазоном от 0 до 180 градусов.&lt;br /&gt;
[[Файл:Сервопривод SG90.png|мини|400x400пкс]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Технические характеристики&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Рабочее напряжение&amp;lt;u&amp;gt;&amp;lt;/u&amp;gt;&lt;br /&gt;
|4.8В (5В)&lt;br /&gt;
|-&lt;br /&gt;
|Угол поворота&lt;br /&gt;
|0...1805В°&lt;br /&gt;
|-&lt;br /&gt;
|Угловая скорость&lt;br /&gt;
|1 сек/60°&lt;br /&gt;
|-&lt;br /&gt;
|Материал шестеренок&lt;br /&gt;
|пластмасса&lt;br /&gt;
|-&lt;br /&gt;
|Рекомендуемый драйвер&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Размеры устройства&amp;lt;u&amp;gt;&amp;lt;/u&amp;gt;&lt;br /&gt;
|22мм x 11.5мм x 22.5мм&lt;br /&gt;
|-&lt;br /&gt;
|Вес&amp;lt;u&amp;gt;&amp;lt;/u&amp;gt;&lt;br /&gt;
|9 грамм&amp;lt;u&amp;gt;&amp;lt;/u&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Температура использования&amp;lt;u&amp;gt;&amp;lt;/u&amp;gt;&lt;br /&gt;
|от -0 до +55°С&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Подключение сервопривода&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Коричневый провод&amp;lt;u&amp;gt;&amp;lt;/u&amp;gt;&lt;br /&gt;
|Земля (подключается к пину GND на плате Arduino)&amp;lt;u&amp;gt;&amp;lt;/u&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Красный провод&amp;lt;u&amp;gt;&amp;lt;/u&amp;gt;&lt;br /&gt;
|Питание +5 V (подключается к пину 5V на плате Arduino)&amp;lt;u&amp;gt;&amp;lt;/u&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|Желтый провод&amp;lt;u&amp;gt;&amp;lt;/u&amp;gt;&lt;br /&gt;
|Сигнал управления (подключается к цифровому пину Arduino)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Описание SG90 ===&lt;br /&gt;
Цвета проводов стандартные. Сервопривод стоит недорого, он не обеспечивает точных настроек начальных и конечных позиций. Для того, чтобы избежать лишних перегрузок и характерного треска в положении 0 и 180 градусов лучше выставлять крайние точки в 10° и 170°. При работе устройства важно следить за напряжением питания. При сильном завышении этого показателя могут повредиться механические элементы зубчатых механизмов.&lt;br /&gt;
&lt;br /&gt;
===Схема соединения===&lt;br /&gt;
Так как из комплектующих у нас только серво и плата, то подключаем их согласно схеме:&lt;br /&gt;
[[Файл:Подключение Сервопривода SG90.png|центр|мини|700x700пкс|Подключение Сервопривода SG90]]&lt;br /&gt;
&amp;lt;span id=&amp;quot;optad360-branding__logo&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Код проекта===&lt;br /&gt;
Код, который нужно загрузить в нашу Ардуину вы можете скопировать ниже. &lt;br /&gt;
 #include &lt;br /&gt;
 int i = 0;&lt;br /&gt;
 int j = 0;&lt;br /&gt;
 int k = 0;&lt;br /&gt;
 Servo servo_3;&lt;br /&gt;
 void setup()&lt;br /&gt;
 {&lt;br /&gt;
   servo_3.attach(3);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 void loop()&lt;br /&gt;
 {&lt;br /&gt;
   for (i = 0; i &amp;lt;= 120; i += 1) { servo_3.write(i); delay(50); // Wait for 50 millisecond(s) } for (k = 120; k &amp;gt;= 0; k -= 1) {&lt;br /&gt;
     servo_3.write(k);&lt;br /&gt;
     delay(50); // Wait for 50 millisecond(s)&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
==Сервопривод MG995==&lt;br /&gt;
[[Файл:Сервопривод MG995.png|мини|400x400пкс|Сервопривод MG995]]&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Сервоприводы MG995&amp;#039;&amp;#039;&amp;#039; обладают хорошим крутящим моментом до 13 кг/см, металлическими шестернями и поэтому часто используются в авиамоделизме, в робототехнике (например, поворот головы или руки робота).&lt;br /&gt;
&lt;br /&gt;
MG995 является второй по популярности моделью сервоприводов, чаще всего подключаемых к проектам Arduino. Это относительно недорогие сервомоторы, обладающие гораздо лучшими характеристиками по сравнению с SG90.&lt;br /&gt;
&lt;br /&gt;
Выходной вал сервопривода поворачивается приблизительно на 120 градусов (60 градусов в каждом направлении). Для управления сервами MG995 можно использовать любые контроллеры с питанием логики 5 В, в том числе и Arduino.&lt;br /&gt;
&lt;br /&gt;
Сервомашинка изготавливается в пластиковом корпусе. На выходе стоит редуктор с металлическими шестернями. В комплекте поставляются пластиковые качалки различных форм-факторов.&lt;br /&gt;
&lt;br /&gt;
===Технические характеристики MG995===&lt;br /&gt;
&lt;br /&gt;
*Масса: 55 грамм;&lt;br /&gt;
*Размеры: примерно 40.7 х 19.7 х 42.9;&lt;br /&gt;
*Крутящий момент: 8.5 кг х см (при 4.8 В питания), 10 кг х см (при 6 В);&lt;br /&gt;
*Скорость: 0.2 с/60º (при 4.8 В), 0.16 с/60º (при 6 В);&lt;br /&gt;
*Рабочее питание: 4.8 - 7.2 В;&lt;br /&gt;
*Ширина мертвой зоны: 5 мкс;&lt;br /&gt;
*Диапазон рабочих температур: 0 ºC – 55 ºC.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Подключение Сервопривода MG995.png|мини|400x400пкс|Подключение Сервопривода MG995]]&lt;br /&gt;
&lt;br /&gt;
===Подключение к плате Arduino===&lt;br /&gt;
Для подключения сервопривода используют 3 провода:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;красный провод&amp;#039;&amp;#039;&amp;#039; – питание (внешний стабилизированный источник питания 4.8-7.2 В);&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;черный провод&amp;#039;&amp;#039;&amp;#039; –к выводу Arduino GND;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;оранжевый&amp;#039;&amp;#039;&amp;#039; – сигнальный (подключается к цифровому ШИМ выводу контроллера Arduino) (см. рис. 2).&lt;br /&gt;
&lt;br /&gt;
===Скетч для Arduino и MG995===&lt;br /&gt;
Для первого (тестового) запуска MG995, можно воспользоваться примером Sweep. В скетче используется библиотека Servo library. Пояснения и сам скетч приведены ниже.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;#include &amp;lt;Servo.h&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;Servo myservo; // создаем объект servo для управления серводвигателем&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;// можно создать 12 объектов servo на большинстве плат Arduino&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;int pos = 0; // переменная для хранения текущего положения сервы&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;void setup() {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;myservo.attach(9); // серва подключена к 9 пину&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;void loop() {&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;for (pos = 0; pos &amp;lt;= 180; pos += 1) { // вращаем ротор от 0 до 180 градусов&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;// с шагом в 1 градус&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;myservo.write(pos); // даем серве команду повернуться в положение, которое задается в переменной &amp;#039;pos&amp;#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;delay(15); // ждем 15 миллисекунд, пока ротор сервы выйдет в заданную позицию&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;for (pos = 180; pos &amp;gt;= 0; pos -= 1) { // вращение выходного вала от 180 градусов до 0 градусов&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;myservo.write(pos); // даем команду выйти в положение, которое записано в переменной &amp;#039;pos&amp;#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;delay(15); // ждем 15 мс, пока серва выйдет в заданное положение&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;}&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Пользователь</name></author>
	</entry>
	<entry>
		<id>http://wiki.me-robotics.ru/index.php?title=Bluetooth_%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8C_HC-06&amp;diff=1000</id>
		<title>Bluetooth модуль HC-06</title>
		<link rel="alternate" type="text/html" href="http://wiki.me-robotics.ru/index.php?title=Bluetooth_%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D1%8C_HC-06&amp;diff=1000"/>
		<updated>2022-05-16T18:14:35Z</updated>

		<summary type="html">&lt;p&gt;Пользователь: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Файл:HC-06.png|мини|Bluetooth модуль HC-06]]&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Модуль HC-06&amp;#039;&amp;#039;&amp;#039; (и старшая модель HC-05) представляет собой плату с Bluetooth-модемом с дополнительной обвязкой: стабилизатор с 5 на 3.3 вольта, светодиод, и конденсаторы на линиях питания. Также на плате установлен mosfet-транзистор (Q1), который при надобности может разрывать цепь питания блютуза, тем самым отключая его.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Bluetooth&amp;#039;&amp;#039;&amp;#039; — один из самых распространённых протоколов беспроводной связи на малом расстоянии для персональных электронных устройств. С его помощью работают различные устройства ввода и управления, аудиоустройства.&lt;br /&gt;
&lt;br /&gt;
Bluetooth в Arduino позволяет объединять различные устройства по беспроводному каналу связи. Вы можете передавать сообщения от датчиков и контроллеров Arduino на Android устройства и наоборот, получать команды со смартфонов по bluetooth. &lt;br /&gt;
&lt;br /&gt;
== Технические характеристики ==&lt;br /&gt;
&lt;br /&gt;
* Питание: 3,3В–6В&lt;br /&gt;
* Максимальное входное напряжение: 5В&lt;br /&gt;
* Максимальный ток: 45 мА&lt;br /&gt;
* Скорость передачи данных: 1200–1382400 бод&lt;br /&gt;
* Рабочие частоты: 2,40 ГГц – 2,48ГГц&lt;br /&gt;
* Поддержка спецификации bluetooth версии 2.1&lt;br /&gt;
* Дальность связи: 30 м&lt;br /&gt;
* Скорость передачи данных - 9600, имя модуля HС-06 (все настройки можно изменить AT-командой)&lt;br /&gt;
&lt;br /&gt;
== Распиновка: ==&lt;br /&gt;
Чаще всего HC-05 и HC-06 представляют собой две спаянные платы. Верхняя – заводская плата с микросхемой BC417. Нижняя – специальная плата для самодельных устройств, содержащая самые нужные ножки GPIO с шагом 2.54 мм, стабилизатор напряжения и кнопку сброса. На фотографии ниже плата с BC417:&lt;br /&gt;
[[Файл:Распиновка HC-06.png|мини|400x400пкс]]&lt;br /&gt;
&lt;br /&gt;
* EN — управление питанием;&lt;br /&gt;
* VCC — питание от 3,6 до 6 В;&lt;br /&gt;
* GND — земля;&lt;br /&gt;
* RX, TX — интерфейс UART;&lt;br /&gt;
* STATE — индикация работы;&lt;br /&gt;
* KEY — активация режима управления с помощью AT-команд.&lt;br /&gt;
&lt;br /&gt;
[[Файл:HС-06 (1).png|слева|мини]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Схема подключения HC-06 ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Подключение к Arduino выполняется следующими контактами:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
[[Файл:Схема подключения HC-06.png|мини|336x336пкс|Схема подключения HC-06]]&lt;br /&gt;
&lt;br /&gt;
* GND – GND;&lt;br /&gt;
* VCC – +5V;&lt;br /&gt;
*TXD – 10;&lt;br /&gt;
*RXD – 11;&lt;br /&gt;
*KEY при обычной работе модуля не используется. Для перехода в режим AT-команд его надо соединить с +3.3V.&lt;br /&gt;
&lt;br /&gt;
TXD и RXD соединены с пинами 10 и 11, потому что аппаратный UART будет использоваться для связи с компьютером.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Скетч Arduino для приема данных по Bluetooth==&lt;br /&gt;
В это примере проверяется на наличие данных UART порт. Передавать данные можно при помощи приложения для работы с arduino. &lt;br /&gt;
 &amp;lt;code&amp;gt;int val;&lt;br /&gt;
 &lt;br /&gt;
 void setup()&lt;br /&gt;
 &lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
 Serial.begin(9600);&lt;br /&gt;
 &lt;br /&gt;
 pinMode(13, OUTPUT); // 13 пин – светодиод, объявляется как выход&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 void loop()&lt;br /&gt;
 &lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
 if (Serial.available()) // проверка поданных команд&lt;br /&gt;
 &lt;br /&gt;
 {&lt;br /&gt;
 &lt;br /&gt;
 val = Serial.read();&lt;br /&gt;
 &lt;br /&gt;
 if (val == &amp;#039;1&amp;#039;) {digitalWrite(13, HIGH);} // при 1 включается светодиод&lt;br /&gt;
 &lt;br /&gt;
 if (val == &amp;#039;0&amp;#039;) {digitalWrite(13, LOW);} // при 0 выключается светодиод&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;br /&gt;
После того как скетч закачан в нашу Arduino и установлена программа на смартфон, можно начать настраивать соединения по Bluetooth .&lt;/div&gt;</summary>
		<author><name>Пользователь</name></author>
	</entry>
	<entry>
		<id>http://wiki.me-robotics.ru/index.php?title=%D0%94%D0%B0%D1%82%D1%87%D0%B8%D0%BA_%D1%83%D1%80%D0%BE%D0%B2%D0%BD%D1%8F_%D0%B2%D0%BE%D0%B4%D1%8B&amp;diff=998</id>
		<title>Датчик уровня воды</title>
		<link rel="alternate" type="text/html" href="http://wiki.me-robotics.ru/index.php?title=%D0%94%D0%B0%D1%82%D1%87%D0%B8%D0%BA_%D1%83%D1%80%D0%BE%D0%B2%D0%BD%D1%8F_%D0%B2%D0%BE%D0%B4%D1%8B&amp;diff=998"/>
		<updated>2022-05-11T22:03:35Z</updated>

		<summary type="html">&lt;p&gt;Пользователь: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Файл:Датчик уровня воды.png|мини|Датчик уровня воды]]&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Датчик уровня воды&amp;#039;&amp;#039;&amp;#039; предназначен для определения уровня воды в различных емкостях, где недоступен визуальный контроль, с целью предупреждения перенаполнения емкости водой через критическую отметку.&lt;br /&gt;
&lt;br /&gt;
Конструкции датчиков уровня воды могут быть различными – поплавковые, погруженные, врезные. Данный датчик воды – погруженный. Чем больше погружение датчика в воду, тем меньше сопротивление между двумя соседними проводами. Датчик имеет три контакта для подключения к контроллеру.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;+&amp;#039;&amp;#039;&amp;#039; – питание датчика;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;-&amp;#039;&amp;#039;&amp;#039; – земля;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;S&amp;#039;&amp;#039;&amp;#039; - аналоговое значение.&lt;br /&gt;
&lt;br /&gt;
На вывод S подается аналоговое значение, которое можно передавать в контроллер для дальнейшей обработки, анализа и принятия решений. Датчик имеет красный светодиод, сигнализирующих о наличие поступающего на датчик питания.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Технические характеристики&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
* Напряжение питания: &amp;#039;&amp;#039;&amp;#039;3.3-5 В&amp;#039;&amp;#039;&amp;#039;;&lt;br /&gt;
* Ток потребления &amp;#039;&amp;#039;&amp;#039;20 мА&amp;#039;&amp;#039;&amp;#039;;&lt;br /&gt;
* Выход: &amp;#039;&amp;#039;&amp;#039;аналоговый&amp;#039;&amp;#039;&amp;#039;;&lt;br /&gt;
* Зона обнаружения: &amp;#039;&amp;#039;&amp;#039;16×30 мм&amp;#039;&amp;#039;&amp;#039;;&lt;br /&gt;
* Размеры: &amp;#039;&amp;#039;&amp;#039;62×20×8 мм&amp;#039;&amp;#039;&amp;#039;;&lt;br /&gt;
* Рабочая температура: &amp;#039;&amp;#039;&amp;#039;10 – 30 °С&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Пример кода&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
[[Файл:Схема с датчиком уровня воды.png|мини|Схема с датчиком уровня воды]]&lt;br /&gt;
Рассмотрим подключение датчика уровня воды к Arduino. Создадим проект звуковой сигнализации затопления помещения. При погружении датчика в воду, сигнализация издает три вида звуковых сигналов (небольшое затопление, средний уровень, критический уровень), соответствующий трем уровням воды. Для воспроизведения звуковых можно к цифровому выводу подключить пьезоизлучатель -  электроакустическое устройства воспроизведения звука. Но при этом звук получается очень тихий. Чтобы получить громкость более приличного уровня, к цифровому выводу Arduino динамик, но не напрямую, а через транзистор.&lt;br /&gt;
&lt;br /&gt;
Для проекта нам понадобятся следующие детали:&lt;br /&gt;
&lt;br /&gt;
* Плата Arduino Uno&lt;br /&gt;
* Датчик уровня воды&lt;br /&gt;
* Динамик 8 Ом&lt;br /&gt;
* Резистор 500 Ом&lt;br /&gt;
* Транзистор КТ503е&lt;br /&gt;
* Соединительные провода&lt;br /&gt;
&lt;br /&gt;
Соберем схему.&lt;br /&gt;
 // контакт подключения аналогового выхода датчика&lt;br /&gt;
 &amp;lt;code&amp;gt;int aPin=A0;&lt;br /&gt;
 // контакт  подключения вывода реле&lt;br /&gt;
 int soundPin=11;&lt;br /&gt;
 // частота звукового сигнала&lt;br /&gt;
 int freq[3]={587,466,293};&lt;br /&gt;
 // переменная для сохранения значения датчика&lt;br /&gt;
 int avalue=0;&lt;br /&gt;
 // значение уровней&lt;br /&gt;
 int levels[3]={600,500,400};&lt;br /&gt;
 // текущий уровень&lt;br /&gt;
 int level=0;&amp;lt;/code&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;code&amp;gt;void setup()&amp;lt;/code&amp;gt;  &lt;br /&gt;
 &amp;lt;code&amp;gt;{&lt;br /&gt;
   // инициализация последовательного порта&lt;br /&gt;
   Serial.begin(9600);&lt;br /&gt;
   // настройка выводов индикации светодиодов&lt;br /&gt;
   // в режим OUTPUT&lt;br /&gt;
   pinMode(soundPin,OUTPUT);&lt;br /&gt;
   }&lt;br /&gt;
 &lt;br /&gt;
 void loop()&lt;br /&gt;
   {&lt;br /&gt;
   // получение значения с аналогового вывода датчика&lt;br /&gt;
   avalue=analogRead(aPin);&lt;br /&gt;
   // вывод значения в монитор последовательного порта Arduino&lt;br /&gt;
   Serial.print(&amp;quot;avalue=&amp;quot;);Serial.println(avalue);&lt;br /&gt;
   // вывод звука различной частоты для разных уровней погружения&lt;br /&gt;
   if(avalue&amp;gt;levels[0])&lt;br /&gt;
     tone(soundPin,freq[0],2000);&lt;br /&gt;
   else if(avalue&amp;gt;levels[1])&lt;br /&gt;
     tone(soundPin,freq[1],2000);&lt;br /&gt;
   else if(avalue&amp;gt;levels[2])&lt;br /&gt;
     tone(soundPin,freq[2],2000);&lt;br /&gt;
   else&lt;br /&gt;
     noTone(soundPin);&lt;br /&gt;
   // пауза перед следующим получением значения 1000 мс&lt;br /&gt;
   delay(1000);&lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;br /&gt;
Аналоговый вывод датчика подключен к аналоговому входу Arduino,  который представляет собой  аналого-цифровой преобразователь (АЦП) с разрешением  10 бит, что позволяет на выходе получать значения от 0 до 1023. Значение аналоговых сигналов на аналоговом входе Arduino для трех уровней погружения были определены экспериментальным путем: &amp;gt; 400 – минимальное погружение; &amp;gt; 500 – средний уровень погружения; &amp;gt; 600 – большое погружение. Соответственно для каждого уровня погружения на динамике воспроизводится звуковой сигнал разной частоты: минимальное погружение – 293 Гц (нота ре 1 октавы); средний уровень погружения – 466 Гц (нота си-бимоль 1 октавы); большое погружение – 587 Гц (нота ре 2 октавы). При отсутствии погружения звуковой сигнал на динамике не воспроизводится.&lt;/div&gt;</summary>
		<author><name>Пользователь</name></author>
	</entry>
	<entry>
		<id>http://wiki.me-robotics.ru/index.php?title=%D0%94%D0%B0%D1%82%D1%87%D0%B8%D0%BA_%D1%83%D0%B3%D0%B0%D1%80%D0%BD%D0%BE%D0%B3%D0%BE_%D0%B3%D0%B0%D0%B7%D0%B0&amp;diff=997</id>
		<title>Датчик угарного газа</title>
		<link rel="alternate" type="text/html" href="http://wiki.me-robotics.ru/index.php?title=%D0%94%D0%B0%D1%82%D1%87%D0%B8%D0%BA_%D1%83%D0%B3%D0%B0%D1%80%D0%BD%D0%BE%D0%B3%D0%BE_%D0%B3%D0%B0%D0%B7%D0%B0&amp;diff=997"/>
		<updated>2022-05-11T22:01:42Z</updated>

		<summary type="html">&lt;p&gt;Пользователь: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Файл:Датчик MQ7.png|мини|Датчик MQ7]]&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Датчик MQ7&amp;#039;&amp;#039;&amp;#039;  — это датчик угарного газа CO. Основным источником выделения СО является сгорание углеродного топлива при недостаточном количестве кислорода. Углерод &amp;quot;не догорает&amp;quot; и вместо углекислого газа CO2, в атмосферу выбрасывается угарный газ CO.  Он чрезвычайно ядовит, но при этом не обладает ни цветом, ни запахом. Попав в помещение с угарным газом, вы только по косвенным симптомам поймете, что подвергаетесь воздействию яда. Пользу этого датчика переоценить трудно, и он широко применяется в схемах автоматизации.&lt;br /&gt;
&lt;br /&gt;
Основным рабочим элементом датчика является нагревательный элемент, за счет которого происходит химическая реакция, в результате которой получается информация о концентрации газа. Поэтому во время работы сенсор будет горячим. Для получения стабильных показаний новый сенсор необходимо один раз прогреть (оставить включённым) в течение 48 часов. После этого стабилизация после включения будет занимать около минуты. Выдаваемый датчиком аналоговый сигнал пропорционален концентрации угарного газа. Показания датчика подвержены влиянию температуры и влажности окружающего воздуха. Поэтому в случае использования датчика MQ7 в изменяющейся среде, при необходимости получения точных показаний, понадобится реализовать компенсацию этих параметров.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Характеристики датчика&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
*Напряжение питания: 5 В;&lt;br /&gt;
*Потребляемый ток: 160 мА;&lt;br /&gt;
*Диапазон чувствительности: 10 – 10000 ppm;&lt;br /&gt;
*Напряжение нагревателя: 1,5 – 5В;&lt;br /&gt;
*Время накала нагревателя: 60 – 90 сек;&lt;br /&gt;
*Сопротивление нагревателя: 31 Ом;&lt;br /&gt;
*Мощность нагревателя: 350 мВт;&lt;br /&gt;
*Сопротивление датчика: 2 – 20 кОм;&lt;br /&gt;
*Стандартные рабочие условия:&lt;br /&gt;
*температура: -10 ~ +50°C;&lt;br /&gt;
*влажность: ≤95\%RH;&lt;br /&gt;
*концентрация кислорода: 21\% (стандартные условия);&lt;br /&gt;
*Габариты модуля: 22 х 22 х 17 мм;&lt;br /&gt;
*Вес модуля: 5 г.&lt;br /&gt;
&lt;br /&gt;
Сокращение ppm расшифровывается как parts per million или в вольном переводе &amp;quot;частей на миллион&amp;quot;. От процента показатель не отличается, отличается только размерность (1 ppm = 0,0001%). По гигиеническим нормам ppm приблизительно 0,0017% – 170 ppm, выхлопе бензинового двигателя СО может быть до 3% – соответственно 3% = 30.000 ppm.&lt;br /&gt;
[[Файл:Обратная сторона датчика.png|слева|мини|Обратная сторона датчика|320x320пкс]]&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Подключение датчика&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Датчик имеет 4 вывода стандарта 2,54 мм:&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;VCC&amp;#039;&amp;#039; — питание 5 В;&lt;br /&gt;
*&amp;#039;&amp;#039;GND&amp;#039;&amp;#039; — земля;&lt;br /&gt;
*&amp;#039;&amp;#039;D0&amp;#039;&amp;#039; — цифровой вывод;&lt;br /&gt;
*&amp;#039;&amp;#039;A0&amp;#039;&amp;#039;— аналоговый вывод.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;A0&amp;#039;&amp;#039; – аналоговый вывод, при подключении к аналоговому входу Arduino. &amp;#039;&amp;#039;D0&amp;#039;&amp;#039; – цифровой выход, который переключается в режим HIGH при превышении некоего порога концентрации угарного газа. С помощью подстроечного резистора можно произвести калибровку датчика, хотя производитель уже провел некую калибровку датчика.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Схема с датчиком MQ7.png|мини|Схема с датчиком MQ7]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Использование датчика&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим подключение датчика MQ7 к Arduino c отображением на отдельном светодиоде превышения порога. Для проекта нам понадобятся следующие детали:&lt;br /&gt;
&lt;br /&gt;
*плата Arduino&lt;br /&gt;
*плата прототипирования&lt;br /&gt;
*датчик MQ7&lt;br /&gt;
*светодиод&lt;br /&gt;
*резистор 220 Ом&lt;br /&gt;
*соединительные провода&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Пример кода&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 int analogMQ7 = A0;&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;code&amp;gt;// контакт подключения светодиода&lt;br /&gt;
 &lt;br /&gt;
 int ledPin = 8;&lt;br /&gt;
 &lt;br /&gt;
 // значение выше 1000 ppm&lt;br /&gt;
 &lt;br /&gt;
 int highLevel = 150;&lt;br /&gt;
 &lt;br /&gt;
 // переменная для хранения значения датчика&lt;br /&gt;
 &lt;br /&gt;
 int val = 0;&lt;br /&gt;
 void setup() {&lt;br /&gt;
 &lt;br /&gt;
 Serial.begin(9600);&lt;br /&gt;
 &lt;br /&gt;
 pinMode(ledPin, OUTPUT);&lt;br /&gt;
 &lt;br /&gt;
 // время прогрева&lt;br /&gt;
 &lt;br /&gt;
 Serial.println(&amp;quot;warming-up&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
 delay(60000);&lt;br /&gt;
 &lt;br /&gt;
 Serial.println(&amp;quot;measurement&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
 }&lt;br /&gt;
 void loop() {&lt;br /&gt;
 &lt;br /&gt;
 val = analogRead(analogMQ7);&lt;br /&gt;
 &lt;br /&gt;
 if (val &amp;gt;= highLevel) // превышение уровня&lt;br /&gt;
 &lt;br /&gt;
 digitalWrite(ledPin, HIGH); // зажечь светодиод превышения&lt;br /&gt;
 &lt;br /&gt;
 else&lt;br /&gt;
 digitalWrite(ledPin, LOW); // потушить светодиод превышения&lt;br /&gt;
 &lt;br /&gt;
 // вывести значение в последовательный порт&lt;br /&gt;
 &lt;br /&gt;
 Serial.print(&amp;quot;value = &amp;quot; );&lt;br /&gt;
 &lt;br /&gt;
 Serial.println(val);&lt;br /&gt;
 &lt;br /&gt;
 // пауза перед следующим измерением&lt;br /&gt;
 &lt;br /&gt;
 delay(5000);&lt;br /&gt;
 }&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Пользователь</name></author>
	</entry>
	<entry>
		<id>http://wiki.me-robotics.ru/index.php?title=%D0%98%D0%BD%D1%84%D1%80%D0%B0%D0%BA%D1%80%D0%B0%D1%81%D0%BD%D1%8B%D0%B9_%D0%94%D0%B0%D1%82%D1%87%D0%B8%D0%BA&amp;diff=996</id>
		<title>Инфракрасный Датчик</title>
		<link rel="alternate" type="text/html" href="http://wiki.me-robotics.ru/index.php?title=%D0%98%D0%BD%D1%84%D1%80%D0%B0%D0%BA%D1%80%D0%B0%D1%81%D0%BD%D1%8B%D0%B9_%D0%94%D0%B0%D1%82%D1%87%D0%B8%D0%BA&amp;diff=996"/>
		<updated>2022-05-11T21:55:29Z</updated>

		<summary type="html">&lt;p&gt;Пользователь: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Файл:ИК-датчик.png|центр|мини]]&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Инфракрасный Датчик&amp;#039;&amp;#039;&amp;#039;-один из самых распространенных и известных. Принцип его работы заключается в приеме и передаче, инфракрасных волн, не видимых для человеческого глаза. Сейчас мы постараемся разобраться в принципах его работы.&lt;br /&gt;
[[Файл:ИК-Датчик.png|мини]]&lt;br /&gt;
По своей сути он состоит из Излучателя И Детектора-поглотителя. Детектор принимает отраженный от объекта свет излучателя и по длине волны датчик может распознать препятствие, его тип или цвет. &lt;br /&gt;
&lt;br /&gt;
Режимы работы ИК-Датчика можно разделить на следующие виды:&lt;br /&gt;
&lt;br /&gt;
* Активный&lt;br /&gt;
* Пассивный&lt;br /&gt;
&lt;br /&gt;
Активный-в этом режиме ИК-Датчик посылает сигналы самостоятельно, и в случае получения обратного сигнала, распознает препятствие. &lt;br /&gt;
&lt;br /&gt;
Пассивный-суть данного режима заключается в приеме принудительно посланного сигнала пользователем, например, с пульта дистанционного управления.&lt;br /&gt;
&lt;br /&gt;
Данный вид датчиков зачастую используется в программной среде Webots, в качестве &amp;quot;зрения робота&amp;quot;, на основе показаний ИК-Датчика, мы можем осуществлять объезд различных препятствий.&lt;br /&gt;
&lt;br /&gt;
По принципу работы ИК-датчик схож с Ультразвуковым Датчиком, однако в отличие от него, ИК может распознавать так же тип поверхности и цвет, благодаря тому что он осуществляет обнаружение препятствий за счет световых волн. Однако к его недостаткам можно отнести: неточность в определении расстояния до объекта. Этот недостаток обусловлен тем, что на длину волны, значительным образом оказывает влияние цвет поверхности объекта, попадающего в его поле зрения.&lt;br /&gt;
&lt;br /&gt;
Пример подключения ИК-Датчика к e-puck можно посмотреть в разделе &amp;quot;[[Движение робота по черной ленте]]&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Подключение ИК-датчика==&lt;br /&gt;
[[Файл:IK-arduino.png|слева|мини|635x635пкс]]&lt;/div&gt;</summary>
		<author><name>Пользователь</name></author>
	</entry>
	<entry>
		<id>http://wiki.me-robotics.ru/index.php?title=%D0%94%D0%B0%D1%82%D1%87%D0%B8%D0%BA%D0%B8_%D0%B2%D0%BB%D0%B0%D0%B6%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%BF%D0%BE%D1%87%D0%B2%D1%8B&amp;diff=995</id>
		<title>Датчики влажности почвы</title>
		<link rel="alternate" type="text/html" href="http://wiki.me-robotics.ru/index.php?title=%D0%94%D0%B0%D1%82%D1%87%D0%B8%D0%BA%D0%B8_%D0%B2%D0%BB%D0%B0%D0%B6%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%BF%D0%BE%D1%87%D0%B2%D1%8B&amp;diff=995"/>
		<updated>2022-05-11T21:53:27Z</updated>

		<summary type="html">&lt;p&gt;Пользователь: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Файл:Датчик влажности почвы.jpg|мини|Внешний вид датчика влажности почвы]]&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Датчик влажности почвы&amp;#039;&amp;#039;&amp;#039; предназначен для определения влажности земли, в которую он погружен. Он позволяет узнать о недостаточном или избыточном поливе почвы. Подключение данного модуля к контроллеру позволяет автоматизировать процесс полива ваших растений, огорода или плантации.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Модуль состоит из двух частей&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
1) Контактного щупа YL-69 и датчика YL-38, в комплекте идут провода для подключения. Между двумя электродами щупа YL-69 создаётся небольшое напряжение. Если почва сухая, сопротивление велико и ток будет меньше. Если земля влажная — сопротивление меньше, ток — чуть больше. По итоговому аналоговому сигналу можно судить о степени влажности. Щуп YL-69 соединен с датчиком YL-38 по двум проводам.&lt;br /&gt;
&lt;br /&gt;
2) Кроме контактов соединения с щупом, датчик YL-38 имеет четыре контакта для подключения к контроллеру.&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Vcc&amp;#039;&amp;#039;&amp;#039; – питание датчика;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;GND&amp;#039;&amp;#039;&amp;#039; – земля;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;A0&amp;#039;&amp;#039;&amp;#039; - аналоговое значение;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;D0&amp;#039;&amp;#039;&amp;#039; – цифровое значение уровня влажности.&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Принцип работы&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Ёмкостный датчик выполнен в виде штыря, которым погружается в грунт на расстояние до 80 мм. На штыре в виде дорожек расположены два электрода.&lt;br /&gt;
&lt;br /&gt;
Датчик YL-38 построен на основе компаратора LM393, который выдает напряжение на выход D0 по принципу: &amp;lt;u&amp;gt;&amp;#039;&amp;#039;влажная почва – низкий логический уровень&amp;#039;&amp;#039;, &amp;#039;&amp;#039;сухая почва – высокий логический уровень&amp;#039;&amp;#039;&amp;lt;/u&amp;gt;. Уровень определяется пороговым значением, которое можно регулировать с помощью потенциометра. На вывод A0 подается аналоговое значение, которое можно передавать в контроллер для дальнейшей обработки, анализа и принятия решений. Датчик YL-38 имеет два светодиода, сигнализирующих о наличие поступающего на датчик питания и уровня цифрового сигналы на выходе D0. Наличие цифрового вывода D0 и светодиода уровня D0 позволяет использовать модуль автономно, без подключения к контроллеру.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Технические характеристики модуля&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
*Напряжение питания: 3.3-5 В;&lt;br /&gt;
*Ток потребления 35 мА;&lt;br /&gt;
*Выход: цифровой и аналоговый;&lt;br /&gt;
*Размер модуля: 16×30 мм;&lt;br /&gt;
*Размер щупа: 20×60 мм;&lt;br /&gt;
*Общий вес: 7.5 г.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Элементы платы (емкостного датчика влажности почвы)&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
[[Файл:2.jpg.png|альт=Элементы платы емкостного датчика|центр|мини|600x600пкс|Элементы платы емкостного датчика]]&amp;lt;u&amp;gt;Измерительные электроды&amp;lt;/u&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для контакта с почвой на датчике расположены два электрода, которые для проведения измерений необходимо воткнуть в измеряемую среду. Но в отличии от резистивного датчика, электроды скрыты под токоизолирующей маской и защищены от коррозии.&lt;br /&gt;
&lt;br /&gt;
Сами электроды представляют из себя обкладки конденсатора, который при изменении влажности почвы меняет свою ёмкость, что приводит к повышению или понижению выходного сигнала датчика.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Генератор импульсов&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Микросхема LCM555 используется для генерации импульсов высокой частоты для работы измерительной схемы сенсора.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Операционный усилитель MCP6002&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
По умолчанию выходной сигнал схемы ёмкостного датчика, обратно пропорционален уровню влажности почвы. Для удобства и совместимости с резистивной моделью сенсора, на плате расположен операционный усилитель, который инвертирует аналоговый сигнал. В итоге на выходе датчика сигнал прямо пропорциональный влажности почвы.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Регулятор напряжения 3V3&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Линейный понижающий регулятор напряжения TPS73033DBVR обеспечивает питание микросхемы 555 и других компонентов сенсора. Диапазон входного напряжения от 3,3 до 5 вольт. Выходное напряжение 3,3 В с максимальным выходным током 200 мА.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Troyka-контакты&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Датчик подключается к управляющей электронике через три провода.&lt;br /&gt;
&lt;br /&gt;
*Сигнальный (S) — выходной сигнал сенсора. Напряжение на выходе датчика прямо пропорционально уровню измеренной электропроводности: чем выше влажность почвы, тем выше уровень сигнала на выходе датчика и соответственно наоборот. Максимальное выходное значения 3,3 вольта. Подключите к аналоговому пину микроконтроллера.&lt;br /&gt;
*Питание (V) — соедините с рабочим напряжением микроконтроллера.&lt;br /&gt;
*Земля (G) — соедините с землёй микроконтроллера.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Принципиальная и монтажная схемы&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
[[Файл:Схема емкостного датчика.jpg|центр|мини|700x700пкс|Схема емкостного датчика]]&amp;#039;&amp;#039;&amp;#039;Пример использования&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим подключение датчика влажности почвы к Arduino. Создадим проект индикатора уровня влажности почвы для комнатного растения (ваш любимый цветок, который вы иногда забываете поливать). Для индикации уровня влажности почвы будем использовать 8 светодиодов. Для проекта нам понадобятся следующие детали:&lt;br /&gt;
&lt;br /&gt;
*Плата Arduino Uno&lt;br /&gt;
*Датчик влажности почвы&lt;br /&gt;
*8 светодиодов&lt;br /&gt;
*Макетная плата&lt;br /&gt;
*Соединительные провода.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
 // контакт подключения аналогового выхода датчика&lt;br /&gt;
 int aPin=A0;&lt;br /&gt;
 // контакты подключения светодиодов индикации&lt;br /&gt;
 int ledPins[8]={4,5,6,7,8,9,10,11};&lt;br /&gt;
 // переменная для сохранения значения датчика&lt;br /&gt;
 int avalue=0;&lt;br /&gt;
 // переменная количества светящихся светодиодов&lt;br /&gt;
 int countled=8;&lt;br /&gt;
 // значение полного полива&lt;br /&gt;
 int minvalue=220;&lt;br /&gt;
 // значение критической сухости&lt;br /&gt;
 int maxvalue=600;  &lt;br /&gt;
 &lt;br /&gt;
 void setup() {&lt;br /&gt;
  // инициализация последовательного порта&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
  // настройка выводов индикации светодиодов&lt;br /&gt;
  // в режим OUTPUT&lt;br /&gt;
  for(int i=0;i&amp;lt;8;i++)&lt;br /&gt;
    {&lt;br /&gt;
    pinMode(ledPins[i],OUTPUT);&lt;br /&gt;
    }&lt;br /&gt;
  } &lt;br /&gt;
 &lt;br /&gt;
 void loop() {&lt;br /&gt;
  // получение значения с аналогового вывода датчика&lt;br /&gt;
  avalue=analogRead(aPin);&lt;br /&gt;
  // вывод значения в монитор последовательного порта Arduino&lt;br /&gt;
  Serial.print(&amp;quot;avalue=&amp;quot;);Serial.println(avalue);&lt;br /&gt;
  // масштабируем значение на 8 светодиодов&lt;br /&gt;
  countled=map(avalue,maxvalue,minvalue,0,7);&lt;br /&gt;
  // индикация уровня влажности&lt;br /&gt;
  for(int i=0;i&amp;lt;8;i++)&lt;br /&gt;
    {&lt;br /&gt;
    if(i&amp;lt;=countled)&lt;br /&gt;
       digitalWrite(ledPins[i],HIGH); //зажигаем светодиод&lt;br /&gt;
    else&lt;br /&gt;
       digitalWrite(ledPins[i],LOW);  // гасим светодиод&lt;br /&gt;
    }&lt;br /&gt;
  // пауза перед следующим получением значения 1000 мс&lt;br /&gt;
  delay(1000);&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Аналоговый вывод датчика подключен к аналоговому входу Arduino, который представляет собой аналого-цифровой преобразователь (АЦП) с разрешением 10 бит, что позволяет на выходе получать значения от 0 до 1023. Значение переменных для полного полива (minvalue) и сильной сухости почвы (maxvalue) получим экспериментально. Большей сухости почвы соответствует большее значение аналогового сигнала. С помощью функции map масштабируем аналоговое значение датчика в значение нашего светодиодного индикатора. Чем больше влажность почвы, тем больше значение светодиодного индикатора (количество зажженных светодиодов). Подключив данный индикатор к цветку, мы издали можем видеть на индикаторе степень влажности и определять необходимость полива.&lt;/div&gt;</summary>
		<author><name>Пользователь</name></author>
	</entry>
	<entry>
		<id>http://wiki.me-robotics.ru/index.php?title=%D0%AD%D0%BD%D0%BA%D0%BE%D0%B4%D0%B5%D1%80_FLASH-I2C&amp;diff=994</id>
		<title>Энкодер FLASH-I2C</title>
		<link rel="alternate" type="text/html" href="http://wiki.me-robotics.ru/index.php?title=%D0%AD%D0%BD%D0%BA%D0%BE%D0%B4%D0%B5%D1%80_FLASH-I2C&amp;diff=994"/>
		<updated>2022-05-11T21:49:31Z</updated>

		<summary type="html">&lt;p&gt;Пользователь: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Файл:1190 1000.png|мини|Внешний вид FLASH-I2C]]&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Энкодер FLASH-I2C&amp;#039;&amp;#039;&amp;#039; -является устройством ввода данных с подключением по шине I2С. У модуля есть программируемый выход, значительно расширяющий его возможности.&lt;br /&gt;
&lt;br /&gt;
Модуль способен работать как энкодер (отправляя количество тактов поворота вала в одну и другую сторону), как потенциометр (отправляя точное положение вала относительно точки сброса), как тактовая кнопка (отправляя события и состояния кнопки, в т.ч. и время её удержания), а так же модуль способен работать автономно (управляя сигналом на выходе без подключения к шине I2C).&lt;br /&gt;
&lt;br /&gt;
Модуль относится к серии «Flash», а значит к одной шине I2C можно подключить более 100 модулей, так как их адрес на шине I2C (по умолчанию 0x09), хранящийся в энергонезависимой памяти, можно менять программно.&lt;br /&gt;
&lt;br /&gt;
Модуль можно использовать в любых проектах где требуется тактовая кнопка, потенциометр или энкодер, а так же в тех проектах где требуется диммирование устройств без участия других микроконтроллеров.&lt;br /&gt;
&lt;br /&gt;
== Характеристики ==&lt;br /&gt;
&lt;br /&gt;
* Напряжение питания: 3,3 В или 5 В (постоянного тока).&lt;br /&gt;
* Потребляемый ток: до 10 мА (без нагрузки на программируемом выходе).&lt;br /&gt;
* Интерфейс: I2C.&lt;br /&gt;
* Скорость шины I2C: 100 кбит/с.&lt;br /&gt;
* Адрес на шине I2C: устанавливается программно (по умолчанию 0x09).&lt;br /&gt;
* Уровень логической 1 на линиях шины I2C: 3,3 В (толерантны к 5 В).&lt;br /&gt;
* Уровень логической 1 на выходе Signal: 3,3 В.&lt;br /&gt;
* Аналоговый уровень на выходе Signal: от 0 до 3,3 В.&lt;br /&gt;
* Разрешение ШИМ: 8 бит.&lt;br /&gt;
* Разрешение ЦАП: 8 бит (ШИМ + RC-фильтр).&lt;br /&gt;
* Частота ШИМ: устанавливается программно от 1 до 12000 Гц (по умолчанию 1,5 кГц).&lt;br /&gt;
* Рабочая температура: от -20 до +70 °С.&lt;br /&gt;
* Габариты: 30 х 30 мм.&lt;br /&gt;
&lt;br /&gt;
== Описание датчика ==&lt;br /&gt;
Модуль построен на базе микроконтроллера STM32F030F4 и снабжен собственным стабилизатором напряжения. Модуль самостоятельно обрабатывает сигналы энкодера (и его тактовой кнопки). Отличием данного модуля является наличие вывода, который можно запрограммировать для работы в качестве выхода без дальнейшего подключения модуля к шине I2C (без подключения к внешнему микроконтроллеру). Вывод модуля может работать как выход кнопки энкодера, как выход кнопочного переключателя (триггер), как выход с ШИМ (для управления моторами), как выход с логарифмической ШИМ (для управления светодиодами), как выход управления сервоприводами и как аналоговый выход (имитация ЦАП) с напряжением от 0 до 3,3 В. Режим работы выхода сохраняется и после отключения питания. Значит вывод можно однократно запрограммировать и использовать модуль в проектах без подключения к шине I2C.&lt;br /&gt;
&lt;br /&gt;
Модуль позволяет:&lt;br /&gt;
&lt;br /&gt;
* Получать количество тактов поворота энкодера в одну и другую сторону.&lt;br /&gt;
* Получать состояние и события кнопки вала энкодера.&lt;br /&gt;
* Получать время удержания кнопки вала энкодера.&lt;br /&gt;
* Получать точное положение вала энкодера относительно точки сброса.&lt;br /&gt;
* Сбрасывать положение вала энкодера.&lt;br /&gt;
* Автономно работать управляя сигналом на выходе без подключения к шине I2C.&lt;br /&gt;
* Задавать количество оборотов вала энкодера, как для автономной работы, так и для определения его положения.&lt;br /&gt;
* Указывать частоту для сигнала ШИМ, если таковой формируется на выходе модуля.&lt;br /&gt;
&lt;br /&gt;
== Контакты датчика ==&lt;br /&gt;
[[Файл:Imageгш.png|мини|342x342пкс]]&lt;br /&gt;
У модуля имеются две колодки выводов: разъём &amp;#039;&amp;#039;&amp;#039;I2C&amp;#039;&amp;#039;&amp;#039; (GND, Vcc, SDA, SCL) и разъём &amp;#039;&amp;#039;&amp;#039;D/A&amp;#039;&amp;#039;&amp;#039; (GND, Vcc, Signal).&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;SCL&amp;#039;&amp;#039;&amp;#039; - вход/выход линии тактирования шины I2C.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;SDA&amp;#039;&amp;#039;&amp;#039; - вход/выход линии данных шины I2C.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Vcc&amp;#039;&amp;#039;&amp;#039; - вход питания 3,3 или 5 В.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;GND&amp;#039;&amp;#039;&amp;#039; - общий вывод питания.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Signal&amp;#039;&amp;#039;&amp;#039; - программируемый выход модуля.&lt;br /&gt;
&lt;br /&gt;
Модуль подключается к Arduino по &amp;#039;&amp;#039;&amp;#039;шине I2C&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Устройства которыми модуль управляет в автономном режиме, подключаются к колодке &amp;#039;&amp;#039;&amp;#039;D/A&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
== Подключение ==&lt;br /&gt;
[[Файл:Imageвнеш.png|мини|389x389пкс|Внешний вид макета]]&lt;br /&gt;
Модуль подключается к аппаратной или программной шине I2C Arduino и имеет адрес 0x68. Используя провода «Папа — Мама», подключаем напрямую к контроллеру Piranha UNO.&lt;br /&gt;
&lt;br /&gt;
Модуль может работать в автономном режиме, при этом необязательно подключать ведущее устройство к колодке I2C, достаточно подать питание на Vcc и GND, но, перед этим, модулю необходимо установить опцию работы вывода &amp;#039;&amp;#039;&amp;#039;S&amp;#039;&amp;#039;&amp;#039; при помощи ведущего устройства функцией PinMode( РЕЖИМ ). Опция будет сохранена в энергонезависимой памяти модуля.&lt;br /&gt;
&lt;br /&gt;
===Программа===&lt;br /&gt;
Программа демонстрирует пример вывода состояния кнопки (нажата/отпущена) в монитор последовательного порта.&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;Wire.h&amp;gt;                                // Подключаем библиотеку Wire для работы с шиной I2C.&lt;br /&gt;
const int ADDRESS     = 0x09;                    // Определяем адрес модуля.&lt;br /&gt;
const int REG_DATA    = 0x10;                    // Определяем адрес регистра REG_DATA.&lt;br /&gt;
const int FLG_PRESSED = 5;                       // Определяем номер бита FLG_PRESSED в регистре REG_DATA.&lt;br /&gt;
byte      DATA;                                  // Объявляем переменную для хранения байта данных считанных с регистра.&lt;br /&gt;
                                                 //&lt;br /&gt;
void setup(){                                    //&lt;br /&gt;
    Serial.begin(9600);                          // Инициируем связь с монитором последовательного порта на скорости 9600 бит/сек.&lt;br /&gt;
    while(!Serial){;}                            // Ждём готовность к работе аппаратной шины UART.&lt;br /&gt;
    Wire.setClock(100000L);                      // Устанавливаем скорость передачи данных по шине I2C.&lt;br /&gt;
    Wire.begin();                                // Инициируем работу c шиной I2C в качестве мастера.&lt;br /&gt;
}                                                //&lt;br /&gt;
                                                 //&lt;br /&gt;
void loop(){                                     //&lt;br /&gt;
    Wire.beginTransmission(ADDRESS);             // Инициируем передачу данных по шине I2C к устройству с адресом ADDRESS и битом RW=0 (запись). При этом сама передача не начнётся.&lt;br /&gt;
    Wire.write(REG_DATA);                        // Функция write() помещает значение своего аргумента в буфер для передачи.&lt;br /&gt;
    Wire.endTransmission(false);                 // Выполняем инициированную ранее передачу данных (параметр false указывает что состояние STOP устанавливать не требуется).&lt;br /&gt;
    Wire.requestFrom(ADDRESS, 1);                // Читаем из модуля с адресом ADDRESS, 1 байт данных в буфер библиотеки Wire. Так как предыдущая функция не установила состояние STOP, то состояние START установленное данной функцией будет расценено как RESTART.&lt;br /&gt;
    if   ( Wire.available() ){DATA=Wire.read();} // Если в буфере библиотеки Wire есть данные, то читаем 1 байт в переменную DATA.&lt;br /&gt;
    while( Wire.available() ){     Wire.read();} // Если в буфере библиотеки Wire есть еще данные, то читаем их в никуда (чистим буфер).&lt;br /&gt;
    if   ( DATA &amp;amp; bit(FLG_PRESSED) ){            // Если в полученном байте DATA установлен бит FLG_PRESSED, значит кнопка нажата.&lt;br /&gt;
           Serial.println(&amp;quot;Кнопка нажата&amp;quot;);      //&lt;br /&gt;
    }else{ Serial.println(&amp;quot;Кнопка отпущена&amp;quot;); }  //&lt;br /&gt;
    delay(1000);                                 //&lt;br /&gt;
}                                                //&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Пользователь</name></author>
	</entry>
	<entry>
		<id>http://wiki.me-robotics.ru/index.php?title=%D0%94%D1%80%D0%B0%D0%B9%D0%B2%D0%B5%D1%80_%D0%B4%D0%B2%D0%B8%D0%B3%D0%B0%D1%82%D0%B5%D0%BB%D1%8F_ULN2003&amp;diff=993</id>
		<title>Драйвер двигателя ULN2003</title>
		<link rel="alternate" type="text/html" href="http://wiki.me-robotics.ru/index.php?title=%D0%94%D1%80%D0%B0%D0%B9%D0%B2%D0%B5%D1%80_%D0%B4%D0%B2%D0%B8%D0%B3%D0%B0%D1%82%D0%B5%D0%BB%D1%8F_ULN2003&amp;diff=993"/>
		<updated>2022-05-11T21:45:41Z</updated>

		<summary type="html">&lt;p&gt;Пользователь: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Файл:ULN2003 внешний вид.jpg|мини|417x417пкс|ULN2003 внешний вид.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;ULN2003&amp;#039;&amp;#039;&amp;#039; — это универсальная интегральная микросхема, состоящая из 7 идентичных и независимых драйверов, которые позволяют управлять с помощью микроконтроллера реле, небольшим двигателем постоянного тока, шаговым двигателем, низковольтными лампами или светодиодной лентой.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Характеристики драйвера ULN2003. ==&lt;br /&gt;
&lt;br /&gt;
* размеры платы – 32х35 мм;&lt;br /&gt;
* межосевые размеры платы – 30х27 мм;&lt;br /&gt;
* напряжение питания – 5-12В;&lt;br /&gt;
* управляющее напряжение – 5В;&lt;br /&gt;
* вес – 8 г;&lt;br /&gt;
* номинальный ток коллектора каждого ключа – 0,5А;&lt;br /&gt;
* наличие светодиодной индикации фаз;&lt;br /&gt;
* вход адаптирован к различным видам логики.&lt;br /&gt;
&lt;br /&gt;
== Контакты драйвера ==&lt;br /&gt;
[[Файл:Схема ULN2003.jpg|мини|354x354px|схема выводов ULN2003]]&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;1B,2B,3B,4B,5B,6B,7B&amp;#039;&amp;#039;&amp;#039; – Входы от 1 до 7, подключенные к цепи базы составного транзистора;&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;1C,2C,3C,4C,5C,6C,7C&amp;#039;&amp;#039;&amp;#039; – Выходы от 1 до 7, подключенные к коллектору составного транзистора&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;COM&amp;#039;&amp;#039;&amp;#039; – Общий катодный узел для диодов в цепи обратной связи (обязателен для индуктивных нагрузок);&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;E&amp;#039;&amp;#039;&amp;#039; – Общий для всех ключей эмиттер (обычно подключается к земле).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Об устройстве драйвера==&lt;br /&gt;
[[Файл:Изображение 2021-06-27 140841.png|мини|Структурная схема ULN2003]]&lt;br /&gt;
Краткое описание ULN2003a. Микросхема ULN2003a — это транзисторная сборка Дарлингтона с выходными ключами повышенной мощности, имеющая на выходах защитные диоды, которые предназначены для защиты управляющих электрических цепей от обратного выброса напряжения от индуктивной нагрузки.&lt;br /&gt;
&lt;br /&gt;
Каждый канал (пара Дарлингтона) в ULN2003 рассчитан на нагрузку 500 мА и выдерживает максимальный ток до 600 мА. Входы и выходы расположены в корпусе микросхемы друг напротив друга, что значительно облегчает разводку печатной платы.&lt;br /&gt;
[[Файл:Изображение 2021-06-27 141115.png|центр|мини|522x522px|Принципиальная схема ULN2003]]&lt;br /&gt;
&lt;br /&gt;
==Подключение драйвера ULN2003 к Arduino uno==&lt;br /&gt;
В данном примере используeтся драйвер ULN2003, Arduino UNO R3 и двигатель 28BYJ-48-5V.[[Файл:Подключение драйвера ULN2003 к Arduino uno.jpg|мини|Подключение драйвера ULN2003 к Arduino uno|334x334px|альт=|без]]&lt;br /&gt;
==Программа для драйвера мотора ULN2003==&lt;br /&gt;
Код для управления шаговым мотором через драйвер ULN2003&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// подключение библиотеки&lt;br /&gt;
#include &amp;lt;AccelStepper.h&amp;gt;&lt;br /&gt;
// создаем экземпляр AccelStepper&lt;br /&gt;
#define IN1 8&lt;br /&gt;
#define IN2 9&lt;br /&gt;
#define IN3 10&lt;br /&gt;
#define IN4 11&lt;br /&gt;
AccelStepper s28BYJ-48(8, IN1, IN3, IN2, IN4);&lt;br /&gt;
&lt;br /&gt;
void setup(){&lt;br /&gt;
  s28BYJ-48.setMaxSpeed(900.0);&lt;br /&gt;
  s28BYJ-48.setAcceleration(100.0);&lt;br /&gt;
  s28BYJ-48.setSpeed(200);&lt;br /&gt;
  s28BYJ-48.moveTo(2000);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop(){&lt;br /&gt;
  // Изменяем направление, если пройдено заданное число шагов&lt;br /&gt;
  if(s28BYJ-48.distanceToGo()==0)&lt;br /&gt;
    s28BYJ-48.moveTo(-stepper1.currentPosition());&lt;br /&gt;
  s28BYJ-48.run();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Пользователь</name></author>
	</entry>
	<entry>
		<id>http://wiki.me-robotics.ru/index.php?title=%D0%90%D0%BA%D1%81%D0%B5%D0%BB%D0%B5%D1%80%D0%BE%D0%BC%D0%B5%D1%82%D1%80&amp;diff=992</id>
		<title>Акселерометр</title>
		<link rel="alternate" type="text/html" href="http://wiki.me-robotics.ru/index.php?title=%D0%90%D0%BA%D1%81%D0%B5%D0%BB%D0%B5%D1%80%D0%BE%D0%BC%D0%B5%D1%82%D1%80&amp;diff=992"/>
		<updated>2022-05-11T21:38:55Z</updated>

		<summary type="html">&lt;p&gt;Пользователь: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Акселерометр, простым языком – это прибор для измерения ускорения. (В телефоне акселерометр - это датчик, который определяет угол наклона электронного устройства по отношению к поверхности земли). В простейшем исполнении он представляет собой грузик, закрепленный на упругом подвесе. В свою очередь, отклонение массы от первоначального её положения при наличии ускорения несёт информацию о величине этого ускорения.&lt;br /&gt;
&lt;br /&gt;
Как видно на рисунке, есть некоторый грузик, который закреплён на пружине, а также демпфер, который служит для подавления колебаний груза. Чем больше кажущееся ускорение, тем сильнее деформируется пружина, изменяя показания прибора.&lt;br /&gt;
[[Файл:Простейший акселерометр .png|справа|279x279пкс|Простейший акселерометр ( однокомпонентный )]]&lt;br /&gt;
По закону Гука из школьной программы физики можно с легкостью найти ускорение системы:&lt;br /&gt;
[[Файл:Закон Гука.png|слева|74x74пкс|Закон Гука]]&lt;br /&gt;
где k -коэффициент упругости пружины, x – ее растяжение и m – масса груза.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Типичный акселерометр состоит из трех взаимно перпендикулярных измерительных осей, регистрирующих на гравитационное и линейные ускорения. Акселерометр использует для каждой оси отдельную пробную массу, которая смещается при возникновении ускорения вдоль данной оси (фиксируются емкостными датчиками).&lt;br /&gt;
&lt;br /&gt;
====&amp;#039;&amp;#039;&amp;#039;Акселерометр бывает:&amp;#039;&amp;#039;&amp;#039;====&lt;br /&gt;
&lt;br /&gt;
*Механическим.&lt;br /&gt;
*Электронным.&lt;br /&gt;
*Пьезоэлектрическим.&lt;br /&gt;
*Термальным.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Механический&amp;#039;&amp;#039;&amp;#039; акселерометр является самой простой и полностью соответствует классической конструкции, которая была придумана изначально. У нее подвешенный груз закрепляется на эластичном подвесе. При изменении положения корпуса прибора под воздействием инерции подвешенное тело компенсирует перекос, тем самым воздействия на пружину, на которой оно крепится. В результате специальный механизм определяет подобные колебания и переводит их в показатель линейного ускорения.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Электронные&amp;#039;&amp;#039;&amp;#039; предусматривают совмещение механических частей прибора с датчиками. Они позволяют осуществить более точное и быстрое измерение параметров перемещения положения закрепленной массы. Подобные устройства в разы более компактные, и внешне могут представлять собой миниатюрный чип для микросхемы.&lt;br /&gt;
[[Файл:2-х осевой электро-механический акселерометр.png|справа|319x319пкс]]&lt;br /&gt;
[[Файл:Электронный акселерометр.png|255x255пкс]]&lt;br /&gt;
[[Файл:Формула емкости .png|мини|Формула емкости ]]&lt;br /&gt;
При изменении ускорения, масса изменяет расстояние между обкладками конденсатора. Из простейшей формулы емкости конденсатора следует, что при изменении d расстояния между обкладками емкость конденсатора будет также изменяться. Широкое применение данный метод получил, благодаря развитию МЭМС (MEMS)– микроэлектромеханических систем.&lt;br /&gt;
&lt;br /&gt;
МЭМС технологии позволяют создавать конденсаторы с подвижными обкладками на кремниевой подложке, что существенно уменьшает размер устройства, и что не маловажно – его стоимость.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Пьезоэлектрические&amp;#039;&amp;#039;&amp;#039; имеют внутри твердый стержень, который постоянно находится под давлением и воздействует на пьезокристалл. В результате вибрации осуществляется выработка электрического тока. Измеряя параметры напряжения, проводится определение фактических показателей ускорения.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Термальные&amp;#039;&amp;#039;&amp;#039; имеют в своей конструкции миниатюрный пузырек воздуха. При ускорении он отклоняется от своего положения, что фиксируется чувствительными датчиками.&lt;br /&gt;
&lt;br /&gt;
====&amp;#039;&amp;#039;&amp;#039;Область применения:&amp;#039;&amp;#039;&amp;#039;====&lt;br /&gt;
&lt;br /&gt;
*В телефонах и планшетах&lt;br /&gt;
*В фитнес-браслетах&lt;br /&gt;
*В сфере автомобилестроения&lt;br /&gt;
*Применение в сфере строительства&lt;br /&gt;
*Установка для сохранения данных на жестком диске&lt;br /&gt;
&lt;br /&gt;
Винчестеры ноутбуков, нетбуков, а также съемные жесткие диски зачастую имеют в своей конструкции акселерометр. Задача такого датчика заключается, в случае падения компьютера, подать предупредительный сигнал на жесткий диск.  Тот является командой для остановки головок винчестера. Это позволяет предотвратить серьезные повреждения диска и сохранить записанные на нем данные&lt;br /&gt;
&lt;br /&gt;
*Использование в летательных аппаратах&lt;br /&gt;
&lt;br /&gt;
Также акселерометр можно встретить в конструкции беспилотных устройств. Благодаря работе датчика осуществляется контроль плоскости движения аппарата. Это существенно облегчает дистанционное управление, особенно если прибор находится вне предела зоны видимости. Наличие акселерометра позволяет избежать неправильного направления движения аппарата, а также дает ему возможность автоматически вернуться к точке запуска, если управление было потеряно или была нажата соответствующая кнопка.&lt;br /&gt;
&lt;br /&gt;
*И тд.&lt;/div&gt;</summary>
		<author><name>Пользователь</name></author>
	</entry>
	<entry>
		<id>http://wiki.me-robotics.ru/index.php?title=%D0%A8%D0%B0%D0%B3%D0%BE%D0%B2%D1%8B%D0%B9_%D0%B4%D0%B2%D0%B8%D0%B3%D0%B0%D1%82%D0%B5%D0%BB%D1%8C_28BYJ-48&amp;diff=991</id>
		<title>Шаговый двигатель 28BYJ-48</title>
		<link rel="alternate" type="text/html" href="http://wiki.me-robotics.ru/index.php?title=%D0%A8%D0%B0%D0%B3%D0%BE%D0%B2%D1%8B%D0%B9_%D0%B4%D0%B2%D0%B8%D0%B3%D0%B0%D1%82%D0%B5%D0%BB%D1%8C_28BYJ-48&amp;diff=991"/>
		<updated>2022-05-11T21:32:48Z</updated>

		<summary type="html">&lt;p&gt;Пользователь: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Файл:Stepper motor 28BYJ-48.jpg|мини|356x356пкс|Внешний вид  шагового двигателя 28BYJ-48.]]&lt;br /&gt;
Шаговые двигатели применяют в механических системах точного позиционирования – ЧПУ станках, 3d-принтерах, принтерах, роботах-манипуляторах. Шаговые двигатели преобразуют электрические импульсы в перемещение вала на определенный угол. Минимально возможный угол перемещения шагового двигателя, называется шагом. &lt;br /&gt;
&lt;br /&gt;
В любительской робототехнике очень часто используют бюджетный шаговый двигатель 28BYJ-48, в комплекте с которым продается драйвер двигателя на микросхеме ULN2003, необходимый для подключения шагового двигателя к плате Arduino.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Спецификация шагового двигателя 28BYJ-48 ==&lt;br /&gt;
&lt;br /&gt;
* Тип: униполярный шаговый двигатель;&lt;br /&gt;
* Напряжение питания – 5В или 12В;&lt;br /&gt;
* Подключение: 5-выводов;&lt;br /&gt;
* Число фаз – 4;&lt;br /&gt;
* Диаметр вала: 5 мм;&lt;br /&gt;
* Коэффициент редукции – 1/63.68395;&lt;br /&gt;
* Количество шагов ротора – 64;&lt;br /&gt;
* Угол шага: 5.625° × 1: 64;&lt;br /&gt;
* Номинальная скорость вращения – 15 оборот/мин;&lt;br /&gt;
* Крутящий момент – 450 г*см;&lt;br /&gt;
* Размеры (диаметр, высота) –25x18 мм;&lt;br /&gt;
*Вес – 40 грамм.&lt;br /&gt;
&lt;br /&gt;
==Распиновка шагового двигателя 28BYJ-48==&lt;br /&gt;
[[Файл:Stepper-motor-28BYJ-48-02.jpg|мини|301x301пкс|Принципиальная схема шагового двигателя 28BYJ-48.]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Red – Это общий пин;&lt;br /&gt;
&lt;br /&gt;
Остальные пины управляют фазами двигателя&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;A-orange&amp;#039;&amp;#039;&amp;#039; – Фаза A оранжевый проводок;&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;B-yellow&amp;#039;&amp;#039;&amp;#039; – Фаза A жёлтый проводок;&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;C-pink&amp;#039;&amp;#039;&amp;#039; – Фаза A розовый проводок;&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;D-blue&amp;#039;&amp;#039;&amp;#039; – Фаза A голубой проводок;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Режимы работы шагового двигателя 28BYJ-48==&lt;br /&gt;
Для управления шаговым двигателем 28BYJ 48 используют один из двух режимов подключения.&lt;br /&gt;
&lt;br /&gt;
1)полношаговый режим – 4 ступени импульсов на 1 шаг;&lt;br /&gt;
[[Файл:Полношаговый1.jpg|центр|мини|385x385пкс|фазы шагового двигателя в полношаговом режиме.]]&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; |Пины&lt;br /&gt;
! colspan=&amp;quot;4&amp;quot; |Такты&lt;br /&gt;
|-&lt;br /&gt;
!&amp;#039;&amp;#039;&amp;#039;1&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
!&amp;#039;&amp;#039;&amp;#039;2&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
!&amp;#039;&amp;#039;&amp;#039;3&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
!&amp;#039;&amp;#039;&amp;#039;4&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
!A-orange&lt;br /&gt;
!1&lt;br /&gt;
!0&lt;br /&gt;
!0&lt;br /&gt;
!1&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;B-yellow&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;C-pink&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;D-blue&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2)полушаговый режим – 8 ступеней импульсов на 1 шаг.&lt;br /&gt;
[[Файл:Полушаговый1.jpg|центр|мини|639x639пкс|фазы шагового двигателя полушаговом режиме.]]&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! rowspan=&amp;quot;2&amp;quot; |Пины&lt;br /&gt;
! colspan=&amp;quot;8&amp;quot; |Такты&lt;br /&gt;
|-&lt;br /&gt;
!&amp;#039;&amp;#039;&amp;#039;1&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
!&amp;#039;&amp;#039;&amp;#039;2&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
!&amp;#039;&amp;#039;&amp;#039;3&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
!&amp;#039;&amp;#039;&amp;#039;4&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
! 5&lt;br /&gt;
! 6&lt;br /&gt;
! 7&lt;br /&gt;
! 8&lt;br /&gt;
|-&lt;br /&gt;
!A-orange&lt;br /&gt;
!1&lt;br /&gt;
!1&lt;br /&gt;
!0&lt;br /&gt;
!0&lt;br /&gt;
!0&lt;br /&gt;
!0&lt;br /&gt;
!0&lt;br /&gt;
!1&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;B-yellow&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;C-pink&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;D-blue&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 0&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
| 1&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Подключение шагового двигателя 28BYJ-48 к плате Arduino uno.==&lt;br /&gt;
Драйвер двигателя состоит из 7 пар транзисторов Дарлингтона и является усилителем.   Выводы IN1 – IN7 предназначены для подключения к микроконтроллеру, GND и VCC – для питания шагового двигателя. Схема подключения драйвера к плате Arduino показана на рисунке.&lt;br /&gt;
[[Файл:Схема подключения двигателя к Arduino uno.jpg|центр|мини|463x463пкс|Схема подключения 28BYJ-48 к Arduino uno]]&lt;br /&gt;
[[Файл:Внешний вид макета шагового двигателя 28BYJ-48.jpg|центр|мини|379x379пкс|шагового двигателя 28BYJ-48]]&lt;br /&gt;
&lt;br /&gt;
==Программа для шагового двигателя 28BYJ-48.==&lt;br /&gt;
Программа, которая вращает мотор в одну сторону и, когда пройдено определённое число шагов изменяющий направление движения.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// подключение библиотеки&lt;br /&gt;
#include &amp;lt;AccelStepper.h&amp;gt;&lt;br /&gt;
// создаем экземпляр AccelStepper&lt;br /&gt;
#define IN1 8&lt;br /&gt;
#define IN2 9&lt;br /&gt;
#define IN3 10&lt;br /&gt;
#define IN4 11&lt;br /&gt;
AccelStepper s28BYJ-48(8, IN1, IN3, IN2, IN4);&lt;br /&gt;
&lt;br /&gt;
void setup(){&lt;br /&gt;
  s28BYJ-48.setMaxSpeed(900.0);&lt;br /&gt;
  s28BYJ-48.setAcceleration(100.0);&lt;br /&gt;
  s28BYJ-48.setSpeed(200);&lt;br /&gt;
  s28BYJ-48.moveTo(2000);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop(){&lt;br /&gt;
  // Изменяем направление, если пройдено заданное число шагов&lt;br /&gt;
  if(s28BYJ-48.distanceToGo()==0)&lt;br /&gt;
    s28BYJ-48.moveTo(-stepper1.currentPosition());&lt;br /&gt;
  s28BYJ-48.run();&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Пользователь</name></author>
	</entry>
	<entry>
		<id>http://wiki.me-robotics.ru/index.php?title=%D0%90%D0%A6%D0%9F_%D0%BD%D0%B0_%D0%B1%D0%B0%D0%B7%D0%B5_%D0%BC%D0%B8%D0%BA%D1%80%D0%BE%D1%81%D1%85%D0%B5%D0%BC%D1%8B_hx711&amp;diff=990</id>
		<title>АЦП на базе микросхемы hx711</title>
		<link rel="alternate" type="text/html" href="http://wiki.me-robotics.ru/index.php?title=%D0%90%D0%A6%D0%9F_%D0%BD%D0%B0_%D0%B1%D0%B0%D0%B7%D0%B5_%D0%BC%D0%B8%D0%BA%D1%80%D0%BE%D1%81%D1%85%D0%B5%D0%BC%D1%8B_hx711&amp;diff=990"/>
		<updated>2022-05-11T21:26:45Z</updated>

		<summary type="html">&lt;p&gt;Пользователь: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Файл:HX711.jpg|мини|справа|Внешний вид АЦП HX711]]&lt;br /&gt;
Arduino-модуль HX711 на основе АЦП со встроенным усилителем HX711 предназначен для получения данных с тензодатчиков (датчиков, преобразующих величину деформации в электрический сигнал). Основа модуля – специализированная микросхема HX711.&lt;br /&gt;
Микросхема HX711 позволяет с высокой точностью получать показания веса или давления, оказываемого на тензодатчик (он же - тензорезистор).&lt;br /&gt;
Микросхема имеет 2 канала считывания показания счётчика: А и В. Это позволяет подключать к микросхеме HX711 до 2 независимых тензодатчиков.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Контакты АЦП==&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;GND&amp;#039;&amp;#039;&amp;#039; - земля;&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;VCC&amp;#039;&amp;#039;&amp;#039; - питание 5В;&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;DT&amp;#039;&amp;#039;&amp;#039; - линия данных (любой цифровой вход на Arduino);&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;SCK&amp;#039;&amp;#039;&amp;#039; – линия синхронизации (любой цифровой вход на Arduino);&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;E–&amp;#039;&amp;#039;&amp;#039; , &amp;#039;&amp;#039;&amp;#039;E+&amp;#039;&amp;#039;&amp;#039;  - питание тензорного моста;&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;A–&amp;#039;&amp;#039;&amp;#039; , &amp;#039;&amp;#039;&amp;#039;A+&amp;#039;&amp;#039;&amp;#039;  - подключение канала А;&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;В–&amp;#039;&amp;#039;&amp;#039; , &amp;#039;&amp;#039;&amp;#039;В+&amp;#039;&amp;#039;&amp;#039;  - подключение канала В;&lt;br /&gt;
&lt;br /&gt;
==Спецификация модуля HX711==&lt;br /&gt;
*Напряжение питания – 6-5.5 В&lt;br /&gt;
*Рабочее напряжение – 5 В&lt;br /&gt;
*Количество каналов подключения тензодатчиков – 2&lt;br /&gt;
*Коэффициент усиления:&lt;br /&gt;
#для канала А: 64, 128&lt;br /&gt;
#для канала В: 32&lt;br /&gt;
*Дифференциальный вход с напряжением – ± 40 мВ&lt;br /&gt;
*Разрядность АЦП – 24 бит&lt;br /&gt;
*Частота измерений – 10/80 Гц&lt;br /&gt;
*Рабочий ток &amp;lt;10 мА&lt;br /&gt;
*Рабочая температура – -40 – 85 °С&lt;br /&gt;
*Размеры: 38x21x10 мм&lt;br /&gt;
&lt;br /&gt;
==Схема подключения на примере Arduino Uno==&lt;br /&gt;
[[Файл:ТР с АЦП.jpg|обрамить|центр]]&lt;br /&gt;
&lt;br /&gt;
==Пример кода==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;quot;HX711.h&amp;quot;                        // библиотека для работы с АЦП&lt;br /&gt;
&lt;br /&gt;
#define DT  A0                            // Указываем номер вывода данных DT&lt;br /&gt;
#define SCK A1                            // Указываем номер вывода синхронизации SCK&lt;br /&gt;
&lt;br /&gt;
HX711 scale;                              // создаём объект scale&lt;br /&gt;
&lt;br /&gt;
float calibration_factor = -14.15;        // калибровочный коэффициент (необходимо сначала определить)&lt;br /&gt;
float units;                              // переменная для измерений в граммах&lt;br /&gt;
float ounces;                             // в унциях&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(9600);                     // работу порта на 9600 бод&lt;br /&gt;
  scale.begin(DT, SCK);                   // инициируем работу с датчиком&lt;br /&gt;
  scale.set_scale();                      // измерение без калибровочного коэффициента&lt;br /&gt;
  scale.tare();                           // сбрасываем значения веса на датчике в 0&lt;br /&gt;
  scale.set_scale(calibration_factor);    // устанавливаем калибровочный коэффициент&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  Serial.print(&amp;quot;Reading: &amp;quot;);              // текст в монитор порта&lt;br /&gt;
  for (int i = 0; i &amp;lt; 10; i ++) {         // считаем значения датчика 10 раз&lt;br /&gt;
    units = + scale.get_units(), 10;      // суммируем показания 10 замеров&lt;br /&gt;
  }&lt;br /&gt;
  units = units / 10;                     // усредняем показания, разделив сумму значений на 10&lt;br /&gt;
  ounces = units * 0.035274;              // переводим вес из унций в граммы&lt;br /&gt;
  Serial.print(ounces);                   // выводим в монитор порта вес в граммах&lt;br /&gt;
  Serial.println(&amp;quot; grams&amp;quot;);               // выводим текст в монитор последовательного порта&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Пользователь</name></author>
	</entry>
	<entry>
		<id>http://wiki.me-robotics.ru/index.php?title=Arduino_Shield:_%D0%BD%D0%B0%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B5,_%D0%BF%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5,_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BD%D0%B0_%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D0%B5_LCD_Keypad_shield&amp;diff=989</id>
		<title>Arduino Shield: назначение, подключение, программирование на примере LCD Keypad shield</title>
		<link rel="alternate" type="text/html" href="http://wiki.me-robotics.ru/index.php?title=Arduino_Shield:_%D0%BD%D0%B0%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B5,_%D0%BF%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5,_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%BD%D0%B0_%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D1%80%D0%B5_LCD_Keypad_shield&amp;diff=989"/>
		<updated>2022-05-11T21:24:56Z</updated>

		<summary type="html">&lt;p&gt;Пользователь: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Файл:Многофункциональный Arduino Shield.png|мини|400x400пкс|Многофункциональный Arduino Shield]]&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Arduino Shields&amp;#039;&amp;#039;&amp;#039; – платы расширения для ардуино.&lt;br /&gt;
&lt;br /&gt;
Плата расширения Arduino – это законченное устройство, предназначенное для выполнения определенных функций и подключаемое к основному контроллеру с помощью стандартных разъемов. Такие платы, совершенно логично называемые &amp;quot;платами расширения&amp;quot;, служат для выполнения самых разнообразных задач и могут существенно упростить жизнь &amp;quot;ардуинщика&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Плата расширения или Arduino shield?  ==&lt;br /&gt;
Давайте сперва разберемся в терминах. Плата расширения Ардуино – это законченное устройство, предназначенное для выполнения определенных функций и подключаемое к основному контроллеру с помощью стандартных разъемов.  Другое популярное название платы расширения – англоязычное Arduino shield или просто &amp;quot;шилд&amp;quot;. На плате расширения установлены все необходимые электронные компоненты, а взаимодействие с микроконтроллером и другими элементами основной платы происходят через стандартные пины ардуино. Чаще всего питание на шилд тоже подается с основной платы arduino, хотя во многих случаях есть возможность запитки с других источников. В любом шилде остаются несколько свободных пинов, которые вы можете использовать по своему усмотрению, подключив к ним любые другие компоненты.&lt;br /&gt;
&lt;br /&gt;
Англоязычное слово Shield переводится как щит, экран, ширма. В нашем контексте его следует понимать как нечто, покрывающее плату контроллера, создающего дополнительный слой устройства, ширму, за которой скрываются различные элементы.&lt;br /&gt;
&lt;br /&gt;
==Подключение к Arduino на примере шилда LCD Keypad Shield==&lt;br /&gt;
Подключение шилда очень простое – нужно попасть ножками в соответствующие разъемы платы ардуино и аккуратно совместить их. Ничего дополнительно подсоединять или припаивать не надо. Нужно помнить и учитывать тот факт, что часть пинов зарезервированы для управления дисплеем и кнопками и не может быть использована для других нужд! Для удобства подключения дополнительного оборудования на плате выведены дополнительные разъемы 5В и GND к каждой контактной площадке аналоговых пинов. Это, безусловно, упрощает работу с датчиками. Также можно подключать цифровые устройства через свободные пины 0-3 и 11-13. Подключив шилд, мы можем работать с экраном и кнопками на нем так же, как с отдельными устройствами, учитывая только номера пинов, к которым припаяны соответствующие контакты.&lt;br /&gt;
[[Файл:Подключение LCD Keypad Shield.png|мини|575x575пкс|Распиновка LCD Shield]]&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|Контакт дисплея LCD 1602&lt;br /&gt;
|Описание&lt;br /&gt;
|Контакт на LCD Shield&lt;br /&gt;
|-&lt;br /&gt;
|Пины LCD экрана&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|GND&lt;br /&gt;
|Земля&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|VDD&lt;br /&gt;
|Питание 5В&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Contrast&lt;br /&gt;
|Управление контрастом&lt;br /&gt;
|Потенциометр&lt;br /&gt;
|-&lt;br /&gt;
|RS&lt;br /&gt;
|Команды/Данные&lt;br /&gt;
|8&lt;br /&gt;
|-&lt;br /&gt;
|R/W&lt;br /&gt;
|Чтение/Запись&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Enable&lt;br /&gt;
|Включение (активирование)&lt;br /&gt;
|9&lt;br /&gt;
|-&lt;br /&gt;
|DB0&lt;br /&gt;
|Не используется&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|DB1&lt;br /&gt;
|Не используется&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|DB2&lt;br /&gt;
|Не используется&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|DB3&lt;br /&gt;
|Не используется&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|DB4&lt;br /&gt;
|Дата 1&lt;br /&gt;
|4&lt;br /&gt;
|-&lt;br /&gt;
|DB5&lt;br /&gt;
|Дата 2&lt;br /&gt;
|5&lt;br /&gt;
|-&lt;br /&gt;
|DB6&lt;br /&gt;
|Дата 3&lt;br /&gt;
|6&lt;br /&gt;
|-&lt;br /&gt;
|DB7&lt;br /&gt;
|Дата 4&lt;br /&gt;
|7&lt;br /&gt;
|-&lt;br /&gt;
|Back LED +&lt;br /&gt;
|Включение подсветки&lt;br /&gt;
|10&lt;br /&gt;
|-&lt;br /&gt;
|Back LED –&lt;br /&gt;
|Питание подсветки&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Пины для кнопок&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Кнопка UP&lt;br /&gt;
|Управляющая кнопка&lt;br /&gt;
|A0&lt;br /&gt;
|-&lt;br /&gt;
|Кнопка DOWN&lt;br /&gt;
|Управляющая кнопка&lt;br /&gt;
|A0&lt;br /&gt;
|-&lt;br /&gt;
|Кнопка LEFT&lt;br /&gt;
|Управляющая кнопка&lt;br /&gt;
|A0&lt;br /&gt;
|-&lt;br /&gt;
|Кнопка RIGHT&lt;br /&gt;
|Управляющая кнопка&lt;br /&gt;
|A0&lt;br /&gt;
|-&lt;br /&gt;
|Кнопка SELECT&lt;br /&gt;
|Управляющая кнопка&lt;br /&gt;
|A0&lt;br /&gt;
|-&lt;br /&gt;
|Reset&lt;br /&gt;
|Перезагрузка платы&lt;br /&gt;
|Reset&lt;br /&gt;
|-&lt;br /&gt;
|ICSP&lt;br /&gt;
|ICSP для перепрошивки встроенного микроконтроллера HD44780U&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|UART&lt;br /&gt;
|Контакты для UART соединения&lt;br /&gt;
|0, 1&lt;br /&gt;
|}&lt;br /&gt;
[[Файл:LCD Shield.png|мини|LCD Keypad Shield]]&lt;br /&gt;
&lt;br /&gt;
==Cкетч для работы с экраном и кнопками меню LCD Keypad shield==&lt;br /&gt;
В данном примере мы определяем текущую нажатую кнопку и выводим ее название на экран. Обратите внимание, что для удобства мы выделили операцию определения кнопки в отдельную функцию. Также в скетче мы выделили отдельный метод для вывода текста на экран. В ней мы показываем сообщение (параметр message) и очищаем его через секунду. Нужно помнить, что в течение этой секунды нажатия кнопок не обрабатываются&lt;br /&gt;
 #include &amp;lt;LiquidCrystal.h&amp;gt;&lt;br /&gt;
 LiquidCrystal lcd(8, 9, 4, 5, 6, 7);&lt;br /&gt;
 &lt;br /&gt;
 #define BTN_UP   1&lt;br /&gt;
 #define BTN_DOWN 2&lt;br /&gt;
 #define BTN_LEFT 3&lt;br /&gt;
 #define BTN_RIGHT 4&lt;br /&gt;
 #define BTN_SELECT 5&lt;br /&gt;
 #define BTN_NONE 10&lt;br /&gt;
 &lt;br /&gt;
 int detectButton() {&lt;br /&gt;
   int keyAnalog =  analogRead(A0);&lt;br /&gt;
   if (keyAnalog &amp;lt; 100) {&lt;br /&gt;
     // Значение меньше 100 – нажата кнопка right&lt;br /&gt;
     return BTN_RIGHT;&lt;br /&gt;
   } else if (keyAnalog &amp;lt; 200) {&lt;br /&gt;
     // Значение больше 100 (иначе мы бы вошли в предыдущий блок результата сравнения, но меньше 200 – нажата кнопка UP&lt;br /&gt;
     return BTN_UP;&lt;br /&gt;
   } else if (keyAnalog &amp;lt; 400) {&lt;br /&gt;
     // Значение больше 200, но меньше 400 – нажата кнопка DOWN&lt;br /&gt;
     return BTN_DOWN;&lt;br /&gt;
   } else if (keyAnalog &amp;lt; 600) {&lt;br /&gt;
     // Значение больше 400, но меньше 600 – нажата кнопка LEFT&lt;br /&gt;
     return BTN_LEFT;&lt;br /&gt;
   } else if (keyAnalog &amp;lt; 800) {&lt;br /&gt;
     // Значение больше 600, но меньше 800 – нажата кнопка SELECT&lt;br /&gt;
     return BTN_SELECT;&lt;br /&gt;
   } else {&lt;br /&gt;
     // Все остальные значения (до 1023) будут означать, что нажатий не было&lt;br /&gt;
     return BTN_NONE;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
 void clearLine(int line){&lt;br /&gt;
   lcd.setCursor(0, 1);&lt;br /&gt;
   lcd.print(&amp;quot;                &amp;quot;);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 void printDisplay(String message){&lt;br /&gt;
   Serial.println(message);&lt;br /&gt;
   lcd.setCursor(0, 1);&lt;br /&gt;
   lcd.print(message);&lt;br /&gt;
   delay(1000);&lt;br /&gt;
   clearLine(1);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 void setup() {&lt;br /&gt;
   Serial.begin(9600);&lt;br /&gt;
   lcd.begin(16, 2);&lt;br /&gt;
   lcd.print(&amp;quot;Arduino Master&amp;quot;);&lt;br /&gt;
   delay(3000);&lt;br /&gt;
   lcd.setCursor(0, 0);&lt;br /&gt;
   lcd.print(&amp;quot;Arduino Master&amp;quot;);&lt;br /&gt;
   &lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 void loop() {&lt;br /&gt;
   int button = detectButton();&lt;br /&gt;
 &lt;br /&gt;
   switch (button) {&lt;br /&gt;
     case BTN_UP:&lt;br /&gt;
       printDisplay(&amp;quot;UP&amp;quot;);&lt;br /&gt;
       break;&lt;br /&gt;
     case BTN_DOWN:&lt;br /&gt;
       printDisplay(&amp;quot;DOWN&amp;quot;);&lt;br /&gt;
       break;&lt;br /&gt;
     case BTN_LEFT:&lt;br /&gt;
       printDisplay(&amp;quot;LEFT&amp;quot;);&lt;br /&gt;
       break;&lt;br /&gt;
     case BTN_RIGHT:&lt;br /&gt;
       printDisplay(&amp;quot;RIGHT&amp;quot;);&lt;br /&gt;
       break;&lt;br /&gt;
     case BTN_SELECT:&lt;br /&gt;
       printDisplay(&amp;quot;SELECT&amp;quot;);&lt;br /&gt;
       break;&lt;br /&gt;
     default:&lt;br /&gt;
       //printDisplay(&amp;quot;Press any key&amp;quot;);&lt;br /&gt;
       break;&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;/div&gt;</summary>
		<author><name>Пользователь</name></author>
	</entry>
	<entry>
		<id>http://wiki.me-robotics.ru/index.php?title=%D0%94%D0%B0%D1%82%D1%87%D0%B8%D0%BA_%D1%83%D1%80%D0%BE%D0%B2%D0%BD%D1%8F_%D0%B7%D0%B2%D1%83%D0%BA%D0%B0&amp;diff=988</id>
		<title>Датчик уровня звука</title>
		<link rel="alternate" type="text/html" href="http://wiki.me-robotics.ru/index.php?title=%D0%94%D0%B0%D1%82%D1%87%D0%B8%D0%BA_%D1%83%D1%80%D0%BE%D0%B2%D0%BD%D1%8F_%D0%B7%D0%B2%D1%83%D0%BA%D0%B0&amp;diff=988"/>
		<updated>2022-05-11T21:17:25Z</updated>

		<summary type="html">&lt;p&gt;Пользователь: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Файл:Датчик уровня звука.png|мини|Датчик уровня звука]]&lt;br /&gt;
Датчик представляет собой небольшую плату с установленным на ней микрофоном, микрофонным усилителем, регулятором чувствительности в виде переменного резистора. Микрофон преобразует звуковые колебания в колебания электрического тока. Сигнал с микрофона необходимо усилить с помощью компаратора L293. Датчик имеет выход с логическим уровнем. Сработал датчик – на выходе появился логический 0.  Регулятором чувствительности можно выбирать, от какого звука будет срабатывать датчик - от слабого, громкого или очень громкого звука. Датчик имеет 3 вывода. Назначение выводов следующее:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Vcc&amp;#039;&amp;#039;&amp;#039; – питание датчика;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;GND&amp;#039;&amp;#039;&amp;#039; – земля;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;OUT&amp;#039;&amp;#039;&amp;#039; - цифровой выход;&lt;br /&gt;
&lt;br /&gt;
Датчик имеет также светодиод, сигнализирующих о наличие низкого уровня на выходе OUT. Наличие цифрового вывода OUT и светодиода уровня позволяет использовать модуль автономно, без подключения к контроллеру.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Технические характеристики&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
*Напряжение питания: 4-6 В;&lt;br /&gt;
*Выход: цифровой;&lt;br /&gt;
*Максимальное расстояние обнаружения –5 м;&lt;br /&gt;
*Размер модуля: 32×17×15 мм;&lt;br /&gt;
*Общий вес: 12.5 г.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Схема с датчиком .png|слева|мини|Схема с датчиком ]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Использование датчика&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Рассмотрим использование датчика звука для управления лампой с помощью хлопков. При регистрации хлопка, датчик звука выдает на микроконтроллер сигнал низкого уровня. По получении сигнала микроконтроллер через реле переключает состояние лампы (включает/выключает). Для проекта нам понадобятся следующие детали:&lt;br /&gt;
&lt;br /&gt;
*плата Arduino Uno;&lt;br /&gt;
*датчик уровня звука;&lt;br /&gt;
*блок реле;&lt;br /&gt;
*настольная лампа;&lt;br /&gt;
*соединительные провода.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Программный код&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 &amp;lt;code&amp;gt;// контакт подключения выхода OUT датчика&lt;br /&gt;
 int soundPin=2;&lt;br /&gt;
 // контакт подключения выхода реле&lt;br /&gt;
 int relayPin=8;&lt;br /&gt;
 // состояние лампы&lt;br /&gt;
 // true - включено, false - выключено&amp;lt;/code&amp;gt;&lt;br /&gt;
 boolean statuslamp; &lt;br /&gt;
 &lt;br /&gt;
 void setup()&lt;br /&gt;
 &amp;lt;code&amp;gt;{&lt;br /&gt;
 // настройка вывода реле в режим OUTPUT&lt;br /&gt;
 pinMode(relayPin,OUTPUT);&lt;br /&gt;
 // начальное состояние - лампа выключена&lt;br /&gt;
 statuslamp=false;&amp;lt;/code&amp;gt;&lt;br /&gt;
 digitalWrite(relayPin,LOW);&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 void loop()&lt;br /&gt;
 &amp;lt;code&amp;gt;{&lt;br /&gt;
 // проверяем значение на выводе OUT датчика звука&lt;br /&gt;
 if(digitalRead(soundPin)==0) // регистрация хлопка&lt;br /&gt;
 {&lt;br /&gt;
 // поменять статус лампы&lt;br /&gt;
 statuslamp=!statuslamp;&lt;br /&gt;
 // переключить лампу&lt;br /&gt;
 digitalWrite(relayPin,statuslamp);&lt;br /&gt;
 // задержка, &amp;quot;дребезга&amp;quot; хлопков&lt;br /&gt;
 delay(10);&amp;lt;/code&amp;gt;&lt;br /&gt;
 }&lt;br /&gt;
 }&lt;/div&gt;</summary>
		<author><name>Пользователь</name></author>
	</entry>
	<entry>
		<id>http://wiki.me-robotics.ru/index.php?title=%D0%AD%D0%BD%D0%BA%D0%BE%D0%B4%D0%B5%D1%80&amp;diff=987</id>
		<title>Энкодер</title>
		<link rel="alternate" type="text/html" href="http://wiki.me-robotics.ru/index.php?title=%D0%AD%D0%BD%D0%BA%D0%BE%D0%B4%D0%B5%D1%80&amp;diff=987"/>
		<updated>2022-05-11T21:15:25Z</updated>

		<summary type="html">&lt;p&gt;Пользователь: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Файл:36-1.jpg|мини|274x274пкс|Внешний вид простого энкодера с ручкой]]&lt;br /&gt;
Из-за разных скоростей вращения колес робот может отклоняться в ту или иную сторону во время движения, это связано с тем, что моторы, используемые в наборе, могут немного отличаться. Это контролируется с помощью энкодеров, которые устанавливаются на робот.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Энкодер&amp;#039;&amp;#039;&amp;#039; - устройство, преобразующее угол поворота вращающегося объекта (вала) в цифровые или аналоговые сигналы, позволяющие определить угол его поворота. Проще говоря, это датчик угла поворота - ДУП или преобразователь угловых перемещений.&lt;br /&gt;
&lt;br /&gt;
Энкодеры применяются в разных системах точных перемещений, в промышленности (станкостроительные заводы); в роботостроении, измерительных устройствах, для которых важен точный учёт измерений вращения, поворота, наклона и угла. Также их применяют в автомобилестроении и компьютерной технике.&lt;br /&gt;
&lt;br /&gt;
Принцип работы энкодера заключается в его передаче сигнала на вращающийся объект. При этом он позволяет увидеть угол поворота, направление, скорость и позицию.&lt;br /&gt;
&lt;br /&gt;
== Устройство и виды энкодеров ==&lt;br /&gt;
[[Файл:Encoderpin.png|слева|мини|244x244пкс]]&lt;br /&gt;
[[Файл:Encoder.jpg|мини|302x302пкс]]&lt;br /&gt;
Простыми словами, энкодер – это поворотный датчик. Самый обычный датчик оснащён ручкой, которая совершает поворот, как по часовой стрелке, так и против неё. При вращении ручки модуля мы получаем два сигнала (A и B), которые противоположны по фазе. Сигналы A и B зависят друг от друга при вращении энкодера Ардуино по часовой или против часовой стрелки. Для считывания сигнала A и B с энкодера можно использовать, как цифровые, так и аналоговые порты микроконтроллера. От поворотного угла и направления зависит выдаваемый цифровой сигнал, который информирует либо о том, какое положение приняла ручка, либо о её стороне поворота. Такая ручка применяется еще в виде кнопки. &lt;br /&gt;
&lt;br /&gt;
Каждый раз, когда сигнал A переходит от положительного уровня к нулю, мы считываем значение сигнала B. Если сигнал B находится в этот момент в положительном состоянии, значит энкодер вращается по часовой стрелке, если B равен нулю, то энкодер вращается против часовой стрелки. Считывая оба выхода при помощи Ардуино, можно определить направление и угол поворота.&lt;br /&gt;
&lt;br /&gt;
Датчики поворотного угла подразделяют по следующим критериям:&lt;br /&gt;
&lt;br /&gt;
* Принцип выдачи данных: инкрементальный и абсолютный;&lt;br /&gt;
* Принцип работы: оптический, магнитный и механический;&lt;br /&gt;
[[Файл:Enkoder inkrementalny hy38-360-2s.jpg|мини|265x265пкс|Инкрементальный энкодер|альт=|слева]]&lt;br /&gt;
=== Инкрементальные энкодеры принцип работы ===&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Инкрементальные (пошаговые, накапливающие) энкодеры&amp;#039;&amp;#039;&amp;#039; - англ. increment - увеличение. Оптический инкрементальный энкодер представляет собой тонкий диск с нанесенными на него чередующимися прозрачными и черными участками. Диск закреплен на валу двигателя, а на его краю размещается фотодатчик. При вращении диска происходит последовательное перекрывание щели фотодатчика. Получая такой сигнал, контроллер может определить скорость вращения диска и величину угла, на который повернулся вал.&lt;br /&gt;
&lt;br /&gt;
Недостаток таких энкодеров состоит в том, что нет нулевой отметки, а значит становится неизвестно количество оборотов, соответственно, нужны дополнительные приспособления, например концевой выключатель)[[Файл:75f445f395178c66bcd66bb84bf5c03f.jpg|мини|248x248пкс|Абсолютный энкодер|альт=]]&lt;br /&gt;
===Абсолютные энкодеры устройство===&lt;br /&gt;
Для устранения главного недостатка инкрементальных энкодеров - потеря позиции при выключении питания, был разработан &amp;#039;&amp;#039;&amp;#039;абсолютный энкодер&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Абсолютные (позиционные) энкодеры выдают значения о точном расположении вала в независимости было перемещение или нет. Диск с метками в этом энкодере устроен несколько сложнее. Начиная от края диска, на нем размещаются несколько слоев меток. Каждый слой отвечает за одну позицию в бинарном выходном коде. Для снятия сигнала с каждого слоя, напротив него размещается свой отдельный фото датчик. При этом, в каждом фиксированном положении диска, на выходе имеется строго уникальный бинарный код.&lt;br /&gt;
&lt;br /&gt;
==Параметры энкодеров==&lt;br /&gt;
Первоначальный параметр любого ДУПа представлен числом импульсов, получаемых за совершение одного оборота (разрешение/разрядность). Зачастую этот параметр равен 1024 за один оборот.&lt;br /&gt;
&lt;br /&gt;
Из других критериев можно выделить:&lt;br /&gt;
&lt;br /&gt;
*Напряжение – от пяти до 24В;&lt;br /&gt;
*Вид вала – пустой, сплошной;&lt;br /&gt;
*Размер вала/отверстия;&lt;br /&gt;
*Вид выхода – транзисторный и другие;&lt;br /&gt;
*Размер корпуса;&lt;br /&gt;
*Вид крепления.&lt;br /&gt;
&lt;br /&gt;
==Работа с энкодерами==&lt;br /&gt;
[[Файл:Encoder kit-1-600x600.jpg|мини|245x245px|Оптический инкрементальный энкодер]]&lt;br /&gt;
В нашем случае энкодер представляет собой простое устройство со светодиодом и фотоприемником. Фотоприемник срабатывает при засветке светодиодом, это происходит, когда в дополнительном колесе появляется отверстие, соответственно, мы можем посчитать скорость вращения колеса, зная количество отверстий в дополнительном колесе.&lt;br /&gt;
&lt;br /&gt;
Работа с энкодерами осуществляется через внешние прерывания. На плате ArduinoUno внешние прерывания присутствуют только на двух выводах, это D2 и D3.&lt;br /&gt;
&lt;br /&gt;
attachInterrupt(interrupt, function, mode)&lt;br /&gt;
&lt;br /&gt;
interrupt: номер прерывания (int)&lt;br /&gt;
&lt;br /&gt;
function: функция, которую необходимо вызвать при возникновении прерывания; эта функция должна быть без параметров и не возвращать никаких значений. Такую функцию иногда называют обработчиком прерывания.&lt;br /&gt;
&lt;br /&gt;
mode: определяет условие, при котором должно срабатывать прерывание. Может принимать одно из четырех предопределенных значений:&lt;br /&gt;
&lt;br /&gt;
LOW - прерывание будет срабатывать всякий раз, когда на выводе присутствует низкий уровень сигнала&lt;br /&gt;
&lt;br /&gt;
CHANGE - прерывание будет срабатывать всякий раз, когда меняется состояние вывода&lt;br /&gt;
&lt;br /&gt;
RISING - прерывание сработает, когда состояние вывода изменится с низкого уровня на высокий&lt;br /&gt;
&lt;br /&gt;
FALLING - прерывание сработает, когда состояние вывода изменится с высокого уровня на низкий&lt;br /&gt;
&lt;br /&gt;
HIGH - прерывание будет срабатывать всякий раз, когда на выводе присутствует высокий уровень сигнала.&lt;br /&gt;
&lt;br /&gt;
== Подключение ==&lt;br /&gt;
[[Файл:Rotary Encoder Arduino.png|мини|423x423px|Схема подключения энкодера к ArduinoUNO|альт=]]&lt;br /&gt;
В самом лёгком варианте, если имеется возможность, выход преобразователя подключается к входу счётчика и программируется на параметр скорости.&lt;br /&gt;
&lt;br /&gt;
Однако обычно преобразователь используют вместе с контроллером. К нему присоединяют интересующие выходы. Далее программа определяет положение/скорость/ускорение объекта. К примеру, устройство установлено на электродвигательном валу, перемещающем один элемент в сторону другого. После вычислений на устройстве вывода виден зазор между элементами, при достижении которого движение элементов останавливается, для обеспечения их сохранности.&lt;/div&gt;</summary>
		<author><name>Пользователь</name></author>
	</entry>
	<entry>
		<id>http://wiki.me-robotics.ru/index.php?title=%D0%96%D0%B8%D0%B4%D0%BA%D0%BE%D0%BA%D1%80%D0%B8%D1%81%D1%82%D0%B0%D0%BB%D0%BB%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%B4%D0%B8%D1%81%D0%BF%D0%BB%D0%B5%D0%B9&amp;diff=986</id>
		<title>Жидкокристаллический дисплей</title>
		<link rel="alternate" type="text/html" href="http://wiki.me-robotics.ru/index.php?title=%D0%96%D0%B8%D0%B4%D0%BA%D0%BE%D0%BA%D1%80%D0%B8%D1%81%D1%82%D0%B0%D0%BB%D0%BB%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%B4%D0%B8%D1%81%D0%BF%D0%BB%D0%B5%D0%B9&amp;diff=986"/>
		<updated>2022-05-11T21:06:52Z</updated>

		<summary type="html">&lt;p&gt;Пользователь: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Принцип действия жидкокристаллического дисплея===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Жидкокристаллический дисплей&amp;#039;&amp;#039;&amp;#039; - плоский дисплей на основе жидких кристаллов. Жидкие кристаллы — это смесь определенных веществ, находящихся одновременно в жидком и кристаллическом состояниях. Как жидкость, она обладает свойством текучести, то есть заполняет собой все пространство, в которое она помещена, а как кристалл, она состоит из молекул, располагающихся в определенном, четко структурированном порядке. Жидкие кристаллы, использующиеся в дисплеях, состоят из стержнеобразных молекул, которые располагаются параллельно друг другу. Одновременно с этим молекулы являются жидкостными, а значит, могут «течь», то есть менять свою ориентацию в пространстве в зависимости от того, поступает ли на них электрическое напряжение.&lt;br /&gt;
&lt;br /&gt;
Основной структурный элемент ЖК-дисплея — это пиксель. Каждый пиксель состоит из трех ячеек (субпикселей). Каждая ячейка-субпиксель, в свою очередь, содержит в себе жидкие кристаллы, расположенные слоями таким образом, что из молекул внутри них складывается спираль. Спиралевидная структура кристаллов зажата между двумя электродами и двумя цветными пластинками, покрытыми поляризационной пленкой. В первой ячейке пластинки красные, во второй — зеленые, а в третьей — синие.&lt;br /&gt;
&lt;br /&gt;
Поляризационная пленка пропускает через себя световые колебания только определенной ориентации. Через первую пластинку проходят только вертикальные, через противоположную выходят только горизонтальные. С одной стороны субпиксель подсвечивается. Свет проходит через первую пластинку (вертикальную) и приобретает вертикальную ориентацию. &lt;br /&gt;
&lt;br /&gt;
Если на электродах нет напряжения, то жидкие кристаллы находятся в покое, образуя спираль. Свет проходит через нее и в итоге меняет ориентацию, становится «горизонтальным» и спокойно выходит наружу через вторую пластинку. В результате мы получаем яркий красный, зеленый или синий свет. Если же подать на электроды определенное напряжение, то под его воздействием жидкие кристаллы поворачиваются в одно и то же положение перпендикулярно вертикальной пластинке. Свет проходит через них, остается «вертикальным» и упирается в горизонтальную пластинку, которая его не пропускает. Получается более тусклый свет или полное отсутствие света, то есть, черный цвет. &lt;br /&gt;
&lt;br /&gt;
Для того, чтобы понять принцип &amp;quot;помещения&amp;quot; цвета в пиксель, можно представить три субпикселя. В определенный момент времени в одном из них напряжение сильнее, в другом слабее, а в третьем отсутствует. Получается, что красного света мы видим меньше, зеленого — больше, а синего — еще больше.&lt;br /&gt;
&lt;br /&gt;
В большом ЖК-дисплее (например, в телевизоре) миллионы пикселей, а субпикселей, соответственно —  втрое больше. Цветные световые потоки от каждого из субпикселей смешиваются в определенных пропорциях и в определенной геометрии. Таким образом на выходе мы получаем цветное изображение.&lt;br /&gt;
&lt;br /&gt;
===Подключение дисплея Nokia 5110 к Arduino===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Nokia 5110&amp;#039;&amp;#039;&amp;#039; - это довольно популярный дисплей, выделяющийся низкой стоимостью и возможностью выводить в удобном виде не только текстовые, но и графические данные (графики, изображения и т.д.). Разрешение экрана Nokia 5110 – 48×84 точки.&lt;br /&gt;
[[Файл:ЖК дисплей Nokia 5110.jpg|мини|ЖК дисплей Nokia 5110]]&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Технические характеристики ЖК дисплея Nokia 5110&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*Разрешение экрана 84x48&lt;br /&gt;
*Питание&lt;br /&gt;
**напряжение 2,7–3,3 В&lt;br /&gt;
**ток&lt;br /&gt;
***с отключенной подсветкой 5 мА&lt;br /&gt;
***с включенной подсветкой 20 мА&lt;br /&gt;
*Температура воздуха во время работы 0–50°C&lt;br /&gt;
*Температура хранения -10–70°C&lt;br /&gt;
*Размеры 45мм x 45мм&lt;br /&gt;
&lt;br /&gt;
Модуль состоит из печатной платы, на которой размещен графический жидкокристаллический индикатор Nokia 5110 на базе контроллера PCD8544 фирмы Philips. Интерфейс управления: SPI. Дисплей представляет собой матрицу ЖК-элементов и микросхему PCD8544 для их управления, размещенные в корпусе, установленном на плате. На ней так же размещены четыре светодиода подсветки экрана. Информация о состоянии точек дисплея хранится в оперативной памяти контроллера PCD8544, каждой точке соответствует один бит памяти. Также встроен счетчик адреса, который автоматически увеличивается при записи очередного байта информации в память.&lt;br /&gt;
[[Файл:Подключение ЖК дисплея Nokia 5110 к Arduino.png|мини|Подключение ЖК дисплея Nokia 5110 к Arduino]]&lt;br /&gt;
Рассмотрим подключение данного дисплея к Arduino и разберемся с интерфейсом передачи данных. На плате дисплея имеются 8 выводов:&lt;br /&gt;
&lt;br /&gt;
*RST — Reset (сброс);&lt;br /&gt;
*CE — Chip Select (выбор устройства);&lt;br /&gt;
*DC — Data/Command select (выбор режима);&lt;br /&gt;
*DIn — Data In (данные);&lt;br /&gt;
*Clk — Clock (тактирующий сигнал);&lt;br /&gt;
*Vcc — питание 3.3В;&lt;br /&gt;
*BL — Backlight (подсветка) 3.3В;&lt;br /&gt;
*GND — земля.&lt;br /&gt;
Питание дисплея (Vcc) должно осуществляться напряжением не выше 3.3В, то же напряжение является максимальным и для подсветки дисплея (BL). Тем не менее, логические выводы толерантны к 5В логике, используемой Arduino. Но все же рекомендуется подключать логические выводы через резисторы 10 кОм. Пин RST (активный LOW) отвечает за перезагрузку дисплея, а с помощью пина CE (активный LOW) контроллеру дисплея сообщается что обмен данными происходит именно с ним. Вход DC отвечает за режим ввода – ввод данных, либо ввод команд (LOW – данные, HIGH – команды). Вход Clk позволяет контроллеру дисплея определять скорость передачи данных, а через пин DIn происходит передача данных в контроллер дисплея.&lt;br /&gt;
&lt;br /&gt;
Для работы с данным дисплеем можно использовать простую и функциональную библиотеку &amp;lt;LCD5110_Basic.h&amp;gt;. Данная библиотека позволяет работать с дисплеем с помощью 14 простых функций:&lt;br /&gt;
&lt;br /&gt;
*LCD5110(SCK, MOSI, DC, RST, CS) - Объявление дисплея с указанием пинов подключения.&lt;br /&gt;
*InitLCD([contrast]) - Инициализация дисплея с опциональным указанием контрастности (0-127), по умолчанию используется значение 70.&lt;br /&gt;
*setContrast(contrast) - Изменение контрастности (0-127).&lt;br /&gt;
*enableSleep() - Переводит экран в спящий режим.&lt;br /&gt;
*disableSleep() - Выводит экран из спящего режима.&lt;br /&gt;
*clrScr() - Очищает экран.&lt;br /&gt;
*clrRow(row, [start], [end]) - Очищает выбранную строку (номер row), от позиции start до end (опционально).&lt;br /&gt;
*invert(true), invert(false) - Включает и выключает инверсию содержимого LCD экрана.&lt;br /&gt;
*print(string, x, y) - Выводит строку символов (string) с заданными координатами (x, y); вместо x-координаты можно использовать LEFT, CENTER и RIGHT; высота стандартного шрифта 8 точек, поэтому строки должны идти с интервалами через 8.&lt;br /&gt;
*printNumI(num, x, y, [length], [filler]) - Выводит целое число (num) на экран на заданной позиции (x, y); опционально: length – количество символов, резервируемых для числа; filler – символ для заполнения «пустот», если число меньше желаемой длины length (по умолчанию это пробел ” “).&lt;br /&gt;
*printNumF(num, dec, x, y, [divider], [length], [filler]) - Выводит число (num) с плавающей запятой; dec – число знаков после запятой; опционально: divider – знак десятичного разделителя, по умолчанию точка “.”, length и filler – по аналогии с предыдущей функцией.&lt;br /&gt;
*setFont(name) - Выбирает шрифт; встроенные шрифты – SmallFont,  MediumNumbers и BigNumbers.&lt;br /&gt;
*invertText(true), invertText(false) - Инвертирует текст, выведенный с помощью функций print, printNumI и printNumF (вкл./выкл.).&lt;br /&gt;
*drawBitmap(x, y, data, sx, sy) - Выводит картинку на экран по необходимым координатам (x, y); data – массив, содержащий картинку; sx и sy – ширина и высота рисунка.&lt;br /&gt;
&lt;br /&gt;
Рассмотрим работу с дисплеем с помощью данной библиотеки :&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;LCD5110_Basic.h&amp;gt;&lt;br /&gt;
LCD5110 LCD(7, 6, 5, 4, 3); //объявляем дисплей с указанием пинов подключения&lt;br /&gt;
extern uint8_t SmallFont[]; //указываем наличие массива со шрифтом SmallFont в библиотеке&lt;br /&gt;
extern uint8_t MediumNumbers []; //указываем наличие массива со шрифтом MediumNumbers в библиотеке&lt;br /&gt;
void setup() {&lt;br /&gt;
     LCD.InitLCD(); //инициализируем дисплей&lt;br /&gt;
}&lt;br /&gt;
void loop() {&lt;br /&gt;
LCD.disableSleep(); //выводим дисплей из режима сна&lt;br /&gt;
LCD.clrScr(); //очищаем дисплей&lt;br /&gt;
LCD.setFont(SmallFont); //устанавливаем шрифт SmallFont&lt;br /&gt;
LCD.print(“Hello World!”, CENTER, 2); //выводим “Hello World!” на второй строчке с равнением по центру&lt;br /&gt;
LCD.setFont(MediumNumbers); // устанавливаем шрифт MediumNumbers&lt;br /&gt;
for (int i=0; i&amp;lt;=5; i++) {&lt;br /&gt;
     LCD.clrScr(); //очищаем экран&lt;br /&gt;
     LCD.print(i, CENTER, 20); //выводим значение i по центру 20 строчки&lt;br /&gt;
     delay(1000);&lt;br /&gt;
}&lt;br /&gt;
LCD.enableSleep(); //вводим дисплей в режим сна на время длительной паузы&lt;br /&gt;
delay(5000);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Пользователь</name></author>
	</entry>
	<entry>
		<id>http://wiki.me-robotics.ru/index.php?title=%D0%94%D0%B0%D1%82%D1%87%D0%B8%D0%BA_%D0%B8%D0%BD%D1%82%D0%B5%D0%BD%D1%81%D0%B8%D0%B2%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D1%81%D0%B2%D0%B5%D1%82%D0%B0_GY-302_(BH1750)&amp;diff=985</id>
		<title>Датчик интенсивности света GY-302 (BH1750)</title>
		<link rel="alternate" type="text/html" href="http://wiki.me-robotics.ru/index.php?title=%D0%94%D0%B0%D1%82%D1%87%D0%B8%D0%BA_%D0%B8%D0%BD%D1%82%D0%B5%D0%BD%D1%81%D0%B8%D0%B2%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D1%81%D0%B2%D0%B5%D1%82%D0%B0_GY-302_(BH1750)&amp;diff=985"/>
		<updated>2022-05-11T20:55:50Z</updated>

		<summary type="html">&lt;p&gt;Пользователь: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Файл:Цифровой датчик освещённости GY-302.png|мини|341x341пкс|Цифровой датчик освещённости GY-302]]&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Датчик освещенности  GY-302&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; — используется для определения освещенности и имеет большой интервал измерений от 1 до 65535 люксов. Модуль выполнен на базе BH1750.&lt;br /&gt;
&lt;br /&gt;
Цифровой датчик освещенности GY-302 на чипе BH1750 предназначен для измерения фонового освещения. BH1750 16-битный датчик освещённости (люксметр) с интерфейсом I2C. Эта микросхема хорошо подходит для получения данных об окружающем освещении. Фотодиод на BH1750 определяет интенсивность света, которая преобразуется в выходное напряжение с помощью операционного усилителя. Встроенный АЦП выдает 16-битные цифровые данные. Внутренняя логика BH1750 избавляет от необходимости каких-либо сложных вычислений, поскольку он напрямую выводит значимые цифровые данные в люксах (лк).&lt;br /&gt;
&lt;br /&gt;
Согласно документации, датчик BH1750 чувствителен к видимому свету и практически не подвержен влиянию инфракрасного излучения, т.е. реагирует примерно на тот же спектральный диапазон, что и человеческий глаз.&lt;br /&gt;
&lt;br /&gt;
== Технические характеристики BH1750 ==&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Спектральная характеристика&amp;#039;&amp;#039;&amp;#039;: близка к визуальной чувствительности;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Малое влияние инфракрасного излучения&amp;#039;&amp;#039;&amp;#039;;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Функция спящего режима&amp;#039;&amp;#039;&amp;#039;: есть;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Фильтрация световых шумов&amp;#039;&amp;#039;&amp;#039;: 50/60 Гц;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Рабочее напряжение питания&amp;#039;&amp;#039;&amp;#039;: 3.3-5 В;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Ток потребления&amp;#039;&amp;#039;&amp;#039;: 120 мкА;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Ток потребления в спящем режиме&amp;#039;&amp;#039;&amp;#039;: 0.01 мкА;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Чувствительность&amp;#039;&amp;#039;&amp;#039;: 65536 градаций;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Точность в режиме высокого разрешения&amp;#039;&amp;#039;&amp;#039;: 1 Лк;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Точность в режиме низкого разрешения&amp;#039;&amp;#039;&amp;#039;: 4 Лк;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Период измерения в режиме высокого разрешения&amp;#039;&amp;#039;&amp;#039;: 120 мс;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Период измерения в режиме низкого разрешения&amp;#039;&amp;#039;&amp;#039;: 16 мс;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Встроенный АЦП&amp;#039;&amp;#039;&amp;#039;;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Шина данных&amp;#039;&amp;#039;&amp;#039;: I2C;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Калибровка&amp;#039;&amp;#039;&amp;#039;: не требуется;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Размеры&amp;#039;&amp;#039;&amp;#039;: 18.5 х 13.9 х 2 мм;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Вес&amp;#039;&amp;#039;&amp;#039;: 5 г.&lt;br /&gt;
&lt;br /&gt;
== Схема включения ==&lt;br /&gt;
[[Файл:Схема включения BH1750.png|центр|мини|700x700пкс|Схема включения BH1750]]Входное напряжение 5В понижается линейным стабилизатором с маркировкой 662К (datasheet) до 3.3В для питания датчика. Линии данных SDA и SCL подтянуты резисторами 4.7К к 3.3В. Преобразователь уровня отсутствует.&lt;br /&gt;
&lt;br /&gt;
== Подключение к Arduino ==&lt;br /&gt;
Модуль имеет 5 выводов (рис. 2):&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;VCC&amp;#039;&amp;#039;&amp;#039; — питание 5 В;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;GND&amp;#039;&amp;#039;&amp;#039; — земля;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;SDA&amp;#039;&amp;#039;&amp;#039; — данные I2C;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;SCL&amp;#039;&amp;#039;&amp;#039;— синхронизация I2C;&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;ADDR&amp;#039;&amp;#039;&amp;#039; — выбор адреса для протокола I2C.&lt;br /&gt;
&lt;br /&gt;
Разберемся с возможными адресами датчика BH1750. Есть два варианта подключения датчика BH1750 к шине I2C (рис. 3).&lt;br /&gt;
&lt;br /&gt;
[[Файл:Подключение датчика BH1750 к Arduino.png|мини|561x561пкс|Подключение датчика BH1750 к Arduino]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Скетч==&lt;br /&gt;
[[Файл:Код-листинг BH1750.png|центр|мини|808x808пкс]]&lt;br /&gt;
[[Файл:Код-листинг -2.png|центр|мини|650x650пкс|Код-листинг BH1750]]&lt;/div&gt;</summary>
		<author><name>Пользователь</name></author>
	</entry>
	<entry>
		<id>http://wiki.me-robotics.ru/index.php?title=%D0%94%D0%B0%D1%82%D1%87%D0%B8%D0%BA_%D0%B6%D0%B5%D1%81%D1%82%D0%BE%D0%B2&amp;diff=984</id>
		<title>Датчик жестов</title>
		<link rel="alternate" type="text/html" href="http://wiki.me-robotics.ru/index.php?title=%D0%94%D0%B0%D1%82%D1%87%D0%B8%D0%BA_%D0%B6%D0%B5%D1%81%D1%82%D0%BE%D0%B2&amp;diff=984"/>
		<updated>2022-05-11T20:53:45Z</updated>

		<summary type="html">&lt;p&gt;Пользователь: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;Trema-модуль - Датчик жестов, приближения, освещенности, цвета&amp;#039;&amp;#039; — способен определять уровень освещённости в Lux (как общий, так и по трём каналам спектра - красный, зелёный, синий), приближение объектов (препятствий) и жесты (движение объектов влево, вправо, вверх, вниз, к датчику и от него). У более ранней модели APDS9930 имеются только функции определения приближения и уровня общей освещённости.&lt;br /&gt;
&lt;br /&gt;
== Спецификация: ==&lt;br /&gt;
&lt;br /&gt;
* Входное напряжение питания (VCC): 5В постоянного тока;&lt;br /&gt;
* Ток, потребляемый ИК-светодиодом через драйвер: 100 / 50 / 25 / 12.5 мА (устанавливается программно);&lt;br /&gt;
* Ток потребляемый модулем без учёта ИК-светодиода:&lt;br /&gt;
** В режиме измерений уровня освещённости: до 250 мкА;&lt;br /&gt;
** В режиме определения приближений: до 790 мкА;&lt;br /&gt;
** В режиме обнаружения жестов: до 790 мкА;&lt;br /&gt;
** В режиме ожидания: до 38 мкА;&lt;br /&gt;
** В спящем режима: до 10 мкА;&lt;br /&gt;
* Частота тактирования шины I2C: до 400 кГц;&lt;br /&gt;
* Рабочая температура: -30 ... +85 °С;&lt;br /&gt;
* Температура хранения: -40 ... +85 °С;&lt;br /&gt;
* Габариты: 30x30 мм.&lt;br /&gt;
&lt;br /&gt;
Все модули линейки &amp;quot;Trema&amp;quot; выполнены в одном формате&lt;br /&gt;
&lt;br /&gt;
[[Файл:Спецификация.png|альт=|437x437пкс]]&lt;br /&gt;
&lt;br /&gt;
== Подключение: ==&lt;br /&gt;
Для удобства подключения к Arduino воспользуйтесь Trema Shield, Trema Power Shield, Motor Shield или Trema Set Shield.&lt;br /&gt;
&lt;br /&gt;
Модуль подключается к аппаратной шине I2C Arduino. Для удобства подключения, предлагаем воспользоваться TremaShield. &lt;br /&gt;
&lt;br /&gt;
Модуль удобно подключать 4 способами, в зависимости от ситуации:&lt;br /&gt;
&lt;br /&gt;
=== Способ - 1 :  Используя проводной шлейф и Piranha UNO ===&lt;br /&gt;
Используя провода «Папа — Мама», подключаем напрямую к контроллеру Piranha UNO.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Используя_проводной_шлейф_и_Piranha_UNO.png|альт=|безрамки|567x567px]]&lt;br /&gt;
&lt;br /&gt;
===Способ - 2 :  Используя Trema Set Shield===&lt;br /&gt;
Модуль можно подключить к любому из I2C входов Trema Set Shield.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Используя_Trema_Set_Shield.png|альт=|безрамки|534x534px]]&lt;br /&gt;
&lt;br /&gt;
===Способ - 3 :  Используя проводной шлейф и Shield===&lt;br /&gt;
Используя 4-х проводной шлейф, к Trema Shield, Trema-Power Shield, Motor Shield, Trema Shield NANO и тд.&lt;br /&gt;
[[Файл:Используя_проводной_шлейф_и_Shield.png|альт=|безрамки|555x555px]]&lt;br /&gt;
&lt;br /&gt;
==Питание:==&lt;br /&gt;
Напряжение питания модуля 5В постоянного тока, подаётся на выводы «VCC» и «GND» модуля.&lt;br /&gt;
&lt;br /&gt;
==Подробнее о модуле:==&lt;br /&gt;
Модуль построен на базе датчика APDS9960, в состав которого входят:&lt;br /&gt;
&lt;br /&gt;
*ИК-светодиод с программируемым драйвером;&lt;br /&gt;
*4 фотодиода для обнаружения жестов;&lt;br /&gt;
*3 фотодиода, реагирующих на разные спектры для определения цвета;&lt;br /&gt;
*1 фотодиод общей освещённости;&lt;br /&gt;
*Уф- и ИК-фильтры;&lt;br /&gt;
*Усилители с программируемым коэффициентом усиления;&lt;br /&gt;
*МК;&lt;br /&gt;
*АЛУ;&lt;br /&gt;
*АЦП;&lt;br /&gt;
*ОЗУ;&lt;br /&gt;
*и множество дополнительных блоков.&lt;br /&gt;
&lt;br /&gt;
Результаты освещённости в Lux выводятся с использованием эмпирической формулы для аппроксимации реакции человеческого глаза.&lt;br /&gt;
&lt;br /&gt;
==Примеры:==&lt;br /&gt;
&lt;br /&gt;
===1. Определение жестов===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
//библиотеки&lt;br /&gt;
#include &amp;lt;Wire.h&amp;gt;                                     //Для работы с шиной I2C&lt;br /&gt;
#include &amp;lt;SparkFun_APDS9960.h&amp;gt;                        //Для работы с датчиком APDS-9960&lt;br /&gt;
SparkFun_APDS9960 apds = SparkFun_APDS9960();  //Определяем объект apds, экземпляр класса SparkFun_APDS9960&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(9600);//Инициируем передачу данных в монитор последовательного порта на скорости 9600 бит/сек&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  //Инициируем работу датчика&lt;br /&gt;
  if (apds.init()){                                   //Если инициализация прошла успешно, то&lt;br /&gt;
    Serial.println(&amp;quot;Initialization OK!&amp;quot;);             //выводим сообщение об успешной инициализации датчика&lt;br /&gt;
    }&lt;br /&gt;
  else Serial.println(&amp;quot;Initialization ERROR!&amp;quot;);       //Иначе, выводим ошибку инициализации&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  //Устанавливаем коэффициент усиления приёмника      //Доступные значения: 1x, 2x, 4x, 8x (GGAIN_1X, и т.д.)&lt;br /&gt;
  //Чем выше коэффициент, тем выше чувствительность&lt;br /&gt;
  if (apds.setGestureGain(GGAIN_2X)){                 //Если коэффициент в режиме обнаружения жестов&lt;br /&gt;
    Serial.println(&amp;quot;Set gain OK!&amp;quot;);                   //выводим сообщение об успешной установке коэффициента &lt;br /&gt;
    }&lt;br /&gt;
  else Serial.println(&amp;quot;Set gain ERROR!&amp;quot;);             //Иначе сообщение об ошибке при установке коэффициента&lt;br /&gt;
  //В переменную i сохранится значение GGAIN_1X, GGAIN_2X, GGAIN_4X или GGAIN_8X.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  //Устанавливаем силу тока драйвера ИК-светодиода    //Доступны значения: 100, 50, 25, 12.5 мА &lt;br /&gt;
                                                      //(LED_DRIVE_12_5MA, LED_DRIVE_100MA и т.д.)&lt;br /&gt;
  //Чем выше сила тока, тем выше чувствительность&lt;br /&gt;
  if (apds.setGestureLEDDrive(LED_DRIVE_100MA)){      //Если установлена сила тока драйвера&lt;br /&gt;
    Serial.println(&amp;quot;Set LED drive OK!&amp;quot;);              //выводим сообщение об успешной установке силы тока &lt;br /&gt;
    }&lt;br /&gt;
  else Serial.println(&amp;quot;Set LED drive ERROR!&amp;quot;);        //Иначе сообщение об ошибке при установке силы тока&lt;br /&gt;
  //Прочитать установленную силу тока можно так: uint8_t i = apds.getGestureLEDDrive();&lt;br /&gt;
  //В переменную i сохранится значение: LED_DRIVE_100MA, или LED_DRIVE_12_5MA и т.д.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  //Разрешаем режим обнаружения жестов&lt;br /&gt;
  if (apds.enableGestureSensor(false)){               //Если механизм обнаружения жестов (false - без&lt;br /&gt;
                                                      // прерываний на выходе INT) запущен, то&lt;br /&gt;
    Serial.println(&amp;quot;Start gesture sensor OK!&amp;quot;);       //сообщение об успешном запуске механизма жестов&lt;br /&gt;
    }&lt;br /&gt;
  else Serial.println(&amp;quot;Start gesture sensor ERROR!&amp;quot;); //Иначе сообщение об ошибке запуска механизма жестов&lt;br /&gt;
  //Запретить работу механизма обнаружения жестов можно так: bool j = apds.disableGestureSensor();&lt;br /&gt;
  //в переменную j сохранится результат выполнения функции (true/false)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  //ждём завершения инициализации и калибровки&lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  if (apds.isGestureAvailable()){                     //Если зафиксировано движение, то&lt;br /&gt;
    switch(apds.readGesture()){                       //сверяем ззначение соответствующее жесту...&lt;br /&gt;
      case DIR_UP:    Serial.println(&amp;quot;UP&amp;quot;);    break; //Зафиксировано движение вперёд или вверх&lt;br /&gt;
      case DIR_DOWN:  Serial.println(&amp;quot;DOWN&amp;quot;);  break; //Зафиксировано движение назад или вниз&lt;br /&gt;
      //Движение вперёд или вверх, назад или вниз зависит от положения датчика&lt;br /&gt;
      case DIR_LEFT:  Serial.println(&amp;quot;LEFT&amp;quot;);  break; //Зафиксировано движение влево&lt;br /&gt;
      case DIR_RIGHT: Serial.println(&amp;quot;RIGHT&amp;quot;); break; //Зафиксировано движение вправо&lt;br /&gt;
      case DIR_NEAR:  Serial.println(&amp;quot;NEAR&amp;quot;);  break; //Зафиксировано движение к датчику&lt;br /&gt;
      case DIR_FAR:   Serial.println(&amp;quot;FAR&amp;quot;);   break; //Зафиксировано движение от датчика&lt;br /&gt;
      default:        Serial.println(&amp;quot;NONE&amp;quot;);  break; //Зафиксировано движение, но жест не опознан&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
  delay(1000);                                        //Чтобы не перегружать шину I2C постоянными запросами&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===2. Определение освещённости и цвета===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
//библиотеки&lt;br /&gt;
#include &amp;lt;Wire.h&amp;gt;                                     //Для работы с шиной I2C&lt;br /&gt;
#include &amp;lt;SparkFun_APDS9960.h&amp;gt;                        //Для работы с датчиком APDS-9960&lt;br /&gt;
SparkFun_APDS9960 apds = SparkFun_APDS9960();   //Определяем объект apds, экземпляр класса SparkFun_APDS9960&lt;br /&gt;
&lt;br /&gt;
//Объявляем переменные&lt;br /&gt;
uint16_t lightAmbient = 0;&lt;br /&gt;
uint16_t lightRed = 0;&lt;br /&gt;
uint16_t lightGreen = 0;&lt;br /&gt;
uint16_t lightBlue = 0;&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(9600);//Инициируем передачу данных в монитор последовательного порта на скорости 9600 бит/сек&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  //Инициируем работу датчика&lt;br /&gt;
  if (apds.init()){                                   //Если инициализация прошла успешно, то&lt;br /&gt;
    Serial.println(&amp;quot;Initialization OK!&amp;quot;);             //выводим сообщение об успешной инициализации датчика&lt;br /&gt;
    }&lt;br /&gt;
  else Serial.println(&amp;quot;Initialization ERROR!&amp;quot;);       //Иначе, выводим ошибку инициализации&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  //Разрешаем режим определения освещённости&lt;br /&gt;
  if (apds.enableLightSensor(false)){               //Режим определения освещённости запущен (false - без&lt;br /&gt;
                                                    //прерываний на выходе INT), то&lt;br /&gt;
    Serial.println(&amp;quot;Start light sensor OK!&amp;quot;);       //сообщение об успешном запуске определения освещённости&lt;br /&gt;
    }&lt;br /&gt;
  else Serial.println(&amp;quot;Start light sensor ERROR!&amp;quot;); //Иначе сообщение об ошибке определения освещённости&lt;br /&gt;
  //Запретить режим определения освещённости можно так: bool j = apds.disableLightSesnor();&lt;br /&gt;
  //в переменную j сохранится результат выполнения функции (true/false)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  //ждём завершения инициализации и калибровки&lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  if (apds.readAmbientLight (lightAmbient)            //Если прочитано значение общей освещенности&lt;br /&gt;
  &amp;amp;&amp;amp; apds.readRedLight      (lightRed)                // и прочитано значение освещённости красного спектра,&lt;br /&gt;
  &amp;amp;&amp;amp; apds.readGreenLight    (lightGreen)              // и прочитано значение освещённости зелёного спектра,&lt;br /&gt;
  &amp;amp;&amp;amp; apds.readBlueLight     (lightBlue) ){            // и прочитано значение освещённости синего спектра&lt;br /&gt;
    Serial.println((String) &amp;quot;Ambient = &amp;quot; + lightAmbient +  // то выводим&lt;br /&gt;
    &amp;quot;, Red = &amp;quot; + lightRed + &amp;quot;, Green = &amp;quot; + lightGreen +    // все прочитанные&lt;br /&gt;
    &amp;quot;, Blue = &amp;quot; + lightBlue + &amp;quot; 1x&amp;quot;);                      // значения&lt;br /&gt;
    }&lt;br /&gt;
  else Serial.println(&amp;quot;Read light ERROR!&amp;quot;);                //Иначе сообщение об ошибке чтения освещённости&lt;br /&gt;
  &lt;br /&gt;
  delay(1000);                                        //Чтобы не перегружать шину I2C постоянными запросами&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===3. Определение приближения===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
//библиотеки&lt;br /&gt;
#include &amp;lt;Wire.h&amp;gt;                                     //Для работы с шиной I2C&lt;br /&gt;
#include &amp;lt;SparkFun_APDS9960.h&amp;gt;                        //Для работы с датчиком APDS-9960&lt;br /&gt;
SparkFun_APDS9960 apds = SparkFun_APDS9960();   //Определяем объект apds, экземпляр класса SparkFun_APDS9960&lt;br /&gt;
&lt;br /&gt;
//Объявляем переменные&lt;br /&gt;
uint16_t lightAmbient = 0;&lt;br /&gt;
uint16_t lightRed = 0;&lt;br /&gt;
uint16_t lightGreen = 0;&lt;br /&gt;
uint16_t lightBlue = 0;&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(9600);//Инициируем передачу данных в монитор последовательного порта на скорости 9600 бит/сек&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  //Инициируем работу датчика&lt;br /&gt;
  if (apds.init()){                                   //Если инициализация прошла успешно, то&lt;br /&gt;
    Serial.println(&amp;quot;Initialization OK!&amp;quot;);             //выводим сообщение об успешной инициализации датчика&lt;br /&gt;
    }&lt;br /&gt;
  else Serial.println(&amp;quot;Initialization ERROR!&amp;quot;);       //Иначе, выводим ошибку инициализации&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  //Устанавливаем коэффициент усиления приёмника      //Доступные значения: 1x, 2x, 4x, 8x (GGAIN_1X, и т.д.)&lt;br /&gt;
  //Чем выше коэффициент, тем выше чувствительность&lt;br /&gt;
  if (apds.setGestureGain(GGAIN_2X)){                 //Если коэффициент в режиме обнаружения жестов&lt;br /&gt;
    Serial.println(&amp;quot;Set gain OK!&amp;quot;);                   //выводим сообщение об успешной установке коэффициента &lt;br /&gt;
    }&lt;br /&gt;
  else Serial.println(&amp;quot;Set gain ERROR!&amp;quot;);             //Иначе сообщение об ошибке при установке коэффициента&lt;br /&gt;
  //В переменную i сохранится значение GGAIN_1X, GGAIN_2X, GGAIN_4X или GGAIN_8X.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  //Разрешаем режим определения приближения&lt;br /&gt;
  if (apds.enableProximitySensor(false)){               //Режим определения приближения запущен (false - без&lt;br /&gt;
                                                        //прерываний на выходе INT), то&lt;br /&gt;
    Serial.println(&amp;quot;Start proximity sensor OK!&amp;quot;);     //сообщение об успешном запуске определения приближения&lt;br /&gt;
    }&lt;br /&gt;
  else Serial.println(&amp;quot;Start proximity sensor ERROR!&amp;quot;); //Иначе сообщение об ошибке определения приближения&lt;br /&gt;
  //Запретить режим определения приближения можно так: bool j = apds.disableProximitySesnor();&lt;br /&gt;
  //в переменную j сохранится результат выполнения функции (true/false)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
  //ждём завершения инициализации и калибровки&lt;br /&gt;
  delay(500);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  //Читаем определённое датчиком значение приближения&lt;br /&gt;
  if (apds.readProximity(ProximityData)){     //Если значение корректно прочитано в переменную proximityData&lt;br /&gt;
    Serial.println((String) &amp;quot;Proximity = &amp;quot; + proximityData); //то выводим значение приближения&lt;br /&gt;
    }&lt;br /&gt;
  else Serial.println(&amp;quot;Reading proximity value ERROR!&amp;quot;);     //Иначе сообщение об ошибке чтения приближения&lt;br /&gt;
  &lt;br /&gt;
  delay(1000);                                         //Чтобы не перегружать шину I2C постоянными запросами&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Жесты:==&lt;br /&gt;
Trema-модуль Датчик жестов, приближения, освещенности, цвета способен реагировать на следующие жесты:&lt;br /&gt;
&lt;br /&gt;
*UP - Движение руки перед датчиком ВПЕРЁД или ВВЕРХ (зависит от положения датчика в пространстве).&lt;br /&gt;
&lt;br /&gt;
*DOWN - Движение руки перед датчиком НАЗАД или ВНИЗ (зависит от положения датчика в пространстве).&lt;br /&gt;
&lt;br /&gt;
*LEFT - Движение руки перед датчиком ВЛЕВО.&lt;br /&gt;
&lt;br /&gt;
*RIGHT - Движение руки перед датчиком ВПРАВО.&lt;br /&gt;
&lt;br /&gt;
*NEAR - Приближение руки К датчику.&lt;br /&gt;
&lt;br /&gt;
Плавно приблизьте руку к датчику сверху на расстояние ≈ 1-5 см., задержите её не менее чем на 1 секунду и быстро уберите в любую сторону.&lt;br /&gt;
&lt;br /&gt;
*FAR Удаление руки ОТ датчика.&lt;br /&gt;
&lt;br /&gt;
Быстро приблизьте руку к датчику с любой стороны, на расстояние ≈ 1-5 см., задержите её не менее чем на 1 секунду и плавно уберите от датчика вверх.&lt;br /&gt;
&lt;br /&gt;
*NONE Датчик зафиксировал движение, но не смог его распознать.&lt;/div&gt;</summary>
		<author><name>Пользователь</name></author>
	</entry>
	<entry>
		<id>http://wiki.me-robotics.ru/index.php?title=%D0%94%D0%BE%D0%BF%D0%BB%D0%B5%D1%80%D0%BE%D0%B2%D1%81%D0%BA%D0%B8%D0%B9_%D0%B4%D0%B0%D1%82%D1%87%D0%B8%D0%BA&amp;diff=983</id>
		<title>Доплеровский датчик</title>
		<link rel="alternate" type="text/html" href="http://wiki.me-robotics.ru/index.php?title=%D0%94%D0%BE%D0%BF%D0%BB%D0%B5%D1%80%D0%BE%D0%B2%D1%81%D0%BA%D0%B8%D0%B9_%D0%B4%D0%B0%D1%82%D1%87%D0%B8%D0%BA&amp;diff=983"/>
		<updated>2022-05-11T20:48:00Z</updated>

		<summary type="html">&lt;p&gt;Пользователь: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Файл:Dopler-datchik.png|центр|безрамки]]&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Доплеровский датчик&amp;#039;&amp;#039;&amp;#039;-датчик движения, в основе работе которого заложен эффекта Доплера.&lt;br /&gt;
&lt;br /&gt;
Эффекта Доплера - изменение частоты и длины отраженной волны, вследствие движения излучателя, приемника или отражателя.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Принцип работы:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Аналогично, как [[Инфракрасный Датчик|ИК-Датчик]], его модуль датчик имеет передатчик и приемник сигнала, однако он отправляет и получает информацию в виде радио-волн, а не световых.&lt;br /&gt;
&lt;br /&gt;
Передатчик излучает радиоволну на определенной частоте, датчик срабатывает, если приемник получает сигнал, частота которого отличается от отправленной. &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Рассмотрим ситуацию подробней:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Поскольку датчик используется в охранной системе, наиболее просто его принцип работы, можно описать на примере Двери. &lt;br /&gt;
&lt;br /&gt;
1 Ультразвуковой элемент, размещенный на раме двери-излучает волну, 2 элемент принимает отраженный ультразвук. Направление излучения выбирается таким образом, чтобы любой посторонний предмет, попавший в зону отражения, изменял поток, принимаемого ультразвука. Электронная схема со стороны приемника сигнала фиксирует любое быстрое изменение потока, принимаемого ультразвука.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Особенности:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Определяет движение объектов, которые полностью или частично отражают радиоволны,  даже если те находятся за преградой.&lt;br /&gt;
&lt;br /&gt;
Позволяет измерять скорость тел, находящихся в различных агрегатных состояниях: твердых, жидких, газообразных.&lt;br /&gt;
&lt;br /&gt;
Датчик работает в диапазоне ультразвуковых частот от 15 кГц до 100 кГц&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Область применения:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
* Данный вид датчиков, получил широкое распространение в охранной системе, где зачастую и использовался ранее.&lt;br /&gt;
* Робототехника&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Недостатки:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Главным недостатком датчика, с точки зрения применения их в охранной системе является их адаптивность, т. е. возможность избежать срабатывания, при плавном внедрении в рабочую область датчика.&lt;br /&gt;
&lt;br /&gt;
=&amp;#039;&amp;#039;&amp;#039;ПОДКЛЮЧЕНИЕ ДАТЧИКА ДОПЛЕРА&amp;#039;&amp;#039;&amp;#039; =&lt;br /&gt;
[[Файл:Dopler-Arduino.png|слева|безрамки|966x966пкс]]&lt;/div&gt;</summary>
		<author><name>Пользователь</name></author>
	</entry>
</feed>