<?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=Artecoll</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=Artecoll"/>
	<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/Artecoll"/>
	<updated>2026-07-10T20:00:54Z</updated>
	<subtitle>Вклад участника</subtitle>
	<generator>MediaWiki 1.35.2</generator>
	<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=616</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=616"/>
		<updated>2021-06-16T17:52:55Z</updated>

		<summary type="html">&lt;p&gt;Artecoll: Картинка Джека Воробья&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>Artecoll</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=615</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=615"/>
		<updated>2021-06-16T17:48:26Z</updated>

		<summary type="html">&lt;p&gt;Artecoll: /* 1. Определение жестов */&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;
[[Файл:Определение приближения.png]]&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>Artecoll</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=614</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=614"/>
		<updated>2021-06-16T17:47:59Z</updated>

		<summary type="html">&lt;p&gt;Artecoll: /* 2. Определение освещённости и цвета */&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(100);                                         //Чтобы не перегружать шину 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;
[[Файл:Определение приближения.png]]&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>Artecoll</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=613</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=613"/>
		<updated>2021-06-16T17:35:26Z</updated>

		<summary type="html">&lt;p&gt;Artecoll: Картинка Джека Воробья&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(100);                                         //Чтобы не перегружать шину 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(100);                                         //Чтобы не перегружать шину I2C постоянными запросами&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 3. Определение приближения ===&lt;br /&gt;
[[Файл:Определение приближения.png]]&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>Artecoll</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=612</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=612"/>
		<updated>2021-06-16T17:33:17Z</updated>

		<summary type="html">&lt;p&gt;Artecoll: /* 1. Определение жестов */&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(100);                                         //Чтобы не перегружать шину I2C постоянными запросами&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2. Определение освещённости и цвета ===&lt;br /&gt;
[[Файл:Определение_освещённости_и_цвета.png|альт=]]&lt;br /&gt;
&lt;br /&gt;
=== 3. Определение приближения ===&lt;br /&gt;
[[Файл:Определение приближения.png]]&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>Artecoll</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=608</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=608"/>
		<updated>2021-06-16T17:13:47Z</updated>

		<summary type="html">&lt;p&gt;Artecoll: /* 1. Определение жестов */&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(100);                                         //Чтобы не перегружать шину I2C постоянными запросами&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2. Определение освещённости и цвета ===&lt;br /&gt;
[[Файл:Определение_освещённости_и_цвета.png|альт=]]&lt;br /&gt;
&lt;br /&gt;
=== 3. Определение приближения ===&lt;br /&gt;
[[Файл:Определение приближения.png]]&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>Artecoll</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=601</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=601"/>
		<updated>2021-06-16T15:52:02Z</updated>

		<summary type="html">&lt;p&gt;Artecoll: Картинка Джека Воробья&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(100);                                         //Чтобы не перегружать шину I2C постоянными запросами&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2. Определение освещённости и цвета ===&lt;br /&gt;
[[Файл:Определение_освещённости_и_цвета.png|альт=]]&lt;br /&gt;
&lt;br /&gt;
=== 3. Определение приближения ===&lt;br /&gt;
[[Файл:Определение приближения.png]]&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>Artecoll</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=600</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=600"/>
		<updated>2021-06-16T14:06:02Z</updated>

		<summary type="html">&lt;p&gt;Artecoll: Оформление&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;
[[Файл: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;
Емкостные преобразователи, диэлектрическая проницаемость &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;/div&gt;</summary>
		<author><name>Artecoll</name></author>
	</entry>
	<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=599</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=599"/>
		<updated>2021-06-16T14:02:32Z</updated>

		<summary type="html">&lt;p&gt;Artecoll: &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>Artecoll</name></author>
	</entry>
	<entry>
		<id>http://wiki.me-robotics.ru/index.php?title=Ethernet_Shield_%D0%BD%D0%B0_%D0%B1%D0%B0%D0%B7%D0%B5_WIZnet_w5100&amp;diff=559</id>
		<title>Ethernet Shield на базе WIZnet w5100</title>
		<link rel="alternate" type="text/html" href="http://wiki.me-robotics.ru/index.php?title=Ethernet_Shield_%D0%BD%D0%B0_%D0%B1%D0%B0%D0%B7%D0%B5_WIZnet_w5100&amp;diff=559"/>
		<updated>2021-06-14T22:45:51Z</updated>

		<summary type="html">&lt;p&gt;Artecoll: /* Примеры использования */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Файл:Ethernet shield.jpg|никакой|250px|слева]]&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ethernet Shield&amp;#039;&amp;#039;&amp;#039; - плата расширения, позволяющая Arduino работать в локальных вычислительных сетях для приёма и передачи данных в сети Интернет. Плата основана на чипе Wiznet w5100.&lt;br /&gt;
&lt;br /&gt;
==Подключение к Arduino==&lt;br /&gt;
Ethernet shield выпускается в формате шилда, т.е. устанавливается поверх платы Arduino (см. рисунок ниже). На плате присутствует разъем для подключения microSD карт. Плата Arduino взаимодействует как с w5100, так и с SD-картой, по протоколу SPI. Вывод 10 используется для выбора w5100 и вывод 4 для выбора SD-карты, одновременно может быть активно только одно устройство.&lt;br /&gt;
[[Файл:Подключение.jpg|обрамить|505px|центр|Подключение Ethernet Shield к Arduino. В разъём RJ-45 вставляется патч-корд.]]&lt;br /&gt;
&lt;br /&gt;
==Технические характеристики==&lt;br /&gt;
*Напряжение питания — 5 В;&lt;br /&gt;
*Контроллер — W5100;&lt;br /&gt;
*Поддержка до 4-х соединений;&lt;br /&gt;
*Скорость подключения — 10 и 100 Мбит/с;&lt;br /&gt;
*Разъем для карт памяти — micro-SD;&lt;br /&gt;
*Протокол обмена данными — SPI;&lt;br /&gt;
*Габариты — 74х54х27 мм.&lt;br /&gt;
&lt;br /&gt;
==Примеры использования==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Скетч для получения IP-адреса по DHCP&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
[[Файл:Результат.jpg|мини|500px|справа|Результат вывода IP]]&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;Ethernet.h&amp;gt; //Библиотеки&lt;br /&gt;
#include &amp;lt;SPI.h&amp;gt;      //Arduino&lt;br /&gt;
#define ETH Ethernet&lt;br /&gt;
&lt;br /&gt;
byte mac[]={0x33, 0x33, 0x33, 0x33, 0x33, 0x33};&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
  if (ETH.begin(mac) == 0) {&lt;br /&gt;
  Serial.println(&amp;quot;Failed!&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  else{&lt;br /&gt;
    Serial.print(&amp;quot;ip=&amp;quot;);&lt;br /&gt;
    for (int k = 0; k &amp;lt; 4; k++) {&lt;br /&gt;
      Serial.print(ETH.localIP()[k], DEC);&lt;br /&gt;
      Serial.print(&amp;quot;.&amp;quot;);&lt;br /&gt;
      }&lt;br /&gt;
    Serial.println();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Проект использования платы Arduino с Ethernet shield в качестве сервера.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Модуль формирует при обращении к нему страницу с показаниями, подключенных к нему датчиков. После загрузки проекта, в браузер вбиваем наш IP-адрес сервера и видим страницу с показаниями температуры и влажности.&lt;br /&gt;
[[Файл:Схема с BMP280.jpg|обрамить|центр|Схема подключения BMP280 к Ethernet Shield]]&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
// подключение библиотек&lt;br /&gt;
#include &amp;lt;SPI.h&amp;gt;&lt;br /&gt;
#include &amp;lt;Ethernet.h&amp;gt;&lt;br /&gt;
#include &amp;lt;Wire.h&amp;gt;&lt;br /&gt;
#include &amp;lt;Adafruit_Sensor.h&amp;gt;&lt;br /&gt;
#include &amp;lt;Adafruit_BMP280.h&amp;gt;&lt;br /&gt;
#define ETH Ethernet&lt;br /&gt;
&lt;br /&gt;
byte mac[]={0x33, 0x33, 0x33, 0x33, 0x33, 0x33};&lt;br /&gt;
&lt;br /&gt;
byte ip[]={***,***,***,***};&lt;br /&gt;
byte dns[]={***,***,***,***};&lt;br /&gt;
byte gtway[]={***,***,***,***};&lt;br /&gt;
byte subnet[]={***,***,***,***};&lt;br /&gt;
&lt;br /&gt;
// сервер&lt;br /&gt;
EthernetServer srv (80);&lt;br /&gt;
// создание экземпляра датчика&lt;br /&gt;
Adafruit_BMP280 sensor; // I2C&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
  ETH.begin(mac, ip, dns, gtway, subnet);&lt;br /&gt;
  delay(1000);&lt;br /&gt;
  srv.begin();&lt;br /&gt;
  Serial.println(ETH.localIP());&lt;br /&gt;
  bmp.begin();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  //&lt;br /&gt;
  EthernetClient W5100 = server.available();&lt;br /&gt;
  if (W5100) {&lt;br /&gt;
    int blank = 1;&lt;br /&gt;
    while (W5100.connected()) {&lt;br /&gt;
      if (W5100.available()) {&lt;br /&gt;
        char s = W5100.read();&lt;br /&gt;
        Serial.write(s);&lt;br /&gt;
        if (s == &amp;#039;\n&amp;#039; &amp;amp;&amp;amp; blank==1) {&lt;br /&gt;
          //&lt;br /&gt;
          W5100.println(&amp;quot;HTTP/1.1 200 OK&amp;quot;);&lt;br /&gt;
          W5100.println(&amp;quot;Content-Type: text/html&amp;quot;);&lt;br /&gt;
          W5100.println(&amp;quot;Connection: close&amp;quot;);&lt;br /&gt;
          W5100.println(&amp;quot;Refresh: 10&amp;quot;);  // обновление каждые 10 сек&lt;br /&gt;
          W5100.println();&lt;br /&gt;
          //&lt;br /&gt;
          W5100.println(&amp;quot;&amp;quot;);&lt;br /&gt;
          W5100.println(&amp;quot;&amp;quot;);&lt;br /&gt;
          W5100.print(&amp;quot;Sensor BMP280&amp;quot;);&lt;br /&gt;
          W5100.print(&amp;quot;T = &amp;quot;);&lt;br /&gt;
          W5100.print(bmp.readTemperature());&lt;br /&gt;
          W5100.print(&amp;quot; *C&amp;quot;);&lt;br /&gt;
          W5100.print(&amp;quot;P = &amp;quot;);&lt;br /&gt;
          W5100.print(bmp.readPressure()/133.3224);&lt;br /&gt;
          W5100.print(&amp;quot; mm hg st&amp;quot;);&lt;br /&gt;
          W5100.println(&amp;quot;&amp;quot;);&lt;br /&gt;
          break;&lt;br /&gt;
        }&lt;br /&gt;
        if (s == &amp;#039;\n&amp;#039;) {&lt;br /&gt;
          blank = 1;&lt;br /&gt;
        } else if (s != &amp;#039;\r&amp;#039;) {&lt;br /&gt;
          blank = 0;&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
    delay(1);&lt;br /&gt;
    W5100.stop();&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Artecoll</name></author>
	</entry>
	<entry>
		<id>http://wiki.me-robotics.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:%D0%A1%D1%85%D0%B5%D0%BC%D0%B0_%D1%81_BMP280.jpg&amp;diff=558</id>
		<title>Файл:Схема с BMP280.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.me-robotics.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:%D0%A1%D1%85%D0%B5%D0%BC%D0%B0_%D1%81_BMP280.jpg&amp;diff=558"/>
		<updated>2021-06-14T22:42:00Z</updated>

		<summary type="html">&lt;p&gt;Artecoll: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;плата&lt;/div&gt;</summary>
		<author><name>Artecoll</name></author>
	</entry>
	<entry>
		<id>http://wiki.me-robotics.ru/index.php?title=Ethernet_Shield_%D0%BD%D0%B0_%D0%B1%D0%B0%D0%B7%D0%B5_WIZnet_w5100&amp;diff=557</id>
		<title>Ethernet Shield на базе WIZnet w5100</title>
		<link rel="alternate" type="text/html" href="http://wiki.me-robotics.ru/index.php?title=Ethernet_Shield_%D0%BD%D0%B0_%D0%B1%D0%B0%D0%B7%D0%B5_WIZnet_w5100&amp;diff=557"/>
		<updated>2021-06-14T22:35:56Z</updated>

		<summary type="html">&lt;p&gt;Artecoll: /* Примеры использования */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Файл:Ethernet shield.jpg|никакой|250px|слева]]&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ethernet Shield&amp;#039;&amp;#039;&amp;#039; - плата расширения, позволяющая Arduino работать в локальных вычислительных сетях для приёма и передачи данных в сети Интернет. Плата основана на чипе Wiznet w5100.&lt;br /&gt;
&lt;br /&gt;
==Подключение к Arduino==&lt;br /&gt;
Ethernet shield выпускается в формате шилда, т.е. устанавливается поверх платы Arduino (см. рисунок ниже). На плате присутствует разъем для подключения microSD карт. Плата Arduino взаимодействует как с w5100, так и с SD-картой, по протоколу SPI. Вывод 10 используется для выбора w5100 и вывод 4 для выбора SD-карты, одновременно может быть активно только одно устройство.&lt;br /&gt;
[[Файл:Подключение.jpg|обрамить|505px|центр|Подключение Ethernet Shield к Arduino. В разъём RJ-45 вставляется патч-корд.]]&lt;br /&gt;
&lt;br /&gt;
==Технические характеристики==&lt;br /&gt;
*Напряжение питания — 5 В;&lt;br /&gt;
*Контроллер — W5100;&lt;br /&gt;
*Поддержка до 4-х соединений;&lt;br /&gt;
*Скорость подключения — 10 и 100 Мбит/с;&lt;br /&gt;
*Разъем для карт памяти — micro-SD;&lt;br /&gt;
*Протокол обмена данными — SPI;&lt;br /&gt;
*Габариты — 74х54х27 мм.&lt;br /&gt;
&lt;br /&gt;
==Примеры использования==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Скетч для получения IP-адреса по DHCP&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
[[Файл:Результат.jpg|мини|500px|справа|Результат вывода IP]]&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;Ethernet.h&amp;gt; //Библиотеки&lt;br /&gt;
#include &amp;lt;SPI.h&amp;gt;      //Arduino&lt;br /&gt;
#define ETH Ethernet&lt;br /&gt;
&lt;br /&gt;
byte mac[]={0x33, 0x33, 0x33, 0x33, 0x33, 0x33};&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
  if (ETH.begin(mac) == 0) {&lt;br /&gt;
  Serial.println(&amp;quot;Failed!&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  else{&lt;br /&gt;
    Serial.print(&amp;quot;ip=&amp;quot;);&lt;br /&gt;
    for (int k = 0; k &amp;lt; 4; k++) {&lt;br /&gt;
      Serial.print(ETH.localIP()[k], DEC);&lt;br /&gt;
      Serial.print(&amp;quot;.&amp;quot;);&lt;br /&gt;
      }&lt;br /&gt;
    Serial.println();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&amp;#039;&amp;#039;&amp;#039;Проект использования платы Arduino с Ethernet shield в качестве сервера, который формирует при обращении к нему страницу с показаниями, подключенных к нему датчиков.&amp;#039;&amp;#039;&amp;#039;&lt;/div&gt;</summary>
		<author><name>Artecoll</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=556</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=556"/>
		<updated>2021-06-14T22:34:02Z</updated>

		<summary type="html">&lt;p&gt;Artecoll: &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>Artecoll</name></author>
	</entry>
	<entry>
		<id>http://wiki.me-robotics.ru/index.php?title=Ethernet_Shield_%D0%BD%D0%B0_%D0%B1%D0%B0%D0%B7%D0%B5_WIZnet_w5100&amp;diff=555</id>
		<title>Ethernet Shield на базе WIZnet w5100</title>
		<link rel="alternate" type="text/html" href="http://wiki.me-robotics.ru/index.php?title=Ethernet_Shield_%D0%BD%D0%B0_%D0%B1%D0%B0%D0%B7%D0%B5_WIZnet_w5100&amp;diff=555"/>
		<updated>2021-06-14T22:31:30Z</updated>

		<summary type="html">&lt;p&gt;Artecoll: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Файл:Ethernet shield.jpg|никакой|250px|слева]]&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Ethernet Shield&amp;#039;&amp;#039;&amp;#039; - плата расширения, позволяющая Arduino работать в локальных вычислительных сетях для приёма и передачи данных в сети Интернет. Плата основана на чипе Wiznet w5100.&lt;br /&gt;
&lt;br /&gt;
==Подключение к Arduino==&lt;br /&gt;
Ethernet shield выпускается в формате шилда, т.е. устанавливается поверх платы Arduino (см. рисунок ниже). На плате присутствует разъем для подключения microSD карт. Плата Arduino взаимодействует как с w5100, так и с SD-картой, по протоколу SPI. Вывод 10 используется для выбора w5100 и вывод 4 для выбора SD-карты, одновременно может быть активно только одно устройство.&lt;br /&gt;
[[Файл:Подключение.jpg|обрамить|505px|центр|Подключение Ethernet Shield к Arduino. В разъём RJ-45 вставляется патч-корд.]]&lt;br /&gt;
&lt;br /&gt;
==Технические характеристики==&lt;br /&gt;
*Напряжение питания — 5 В;&lt;br /&gt;
*Контроллер — W5100;&lt;br /&gt;
*Поддержка до 4-х соединений;&lt;br /&gt;
*Скорость подключения — 10 и 100 Мбит/с;&lt;br /&gt;
*Разъем для карт памяти — micro-SD;&lt;br /&gt;
*Протокол обмена данными — SPI;&lt;br /&gt;
*Габариты — 74х54х27 мм.&lt;br /&gt;
&lt;br /&gt;
==Примеры использования==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Скетч для получения IP-адреса по DHCP&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
[[Файл:Результат.jpg|мини|500px|справа|Результат вывода IP]]&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;Ethernet.h&amp;gt; //Библиотеки&lt;br /&gt;
#include &amp;lt;SPI.h&amp;gt;      //Arduino&lt;br /&gt;
#define ETH Ethernet&lt;br /&gt;
&lt;br /&gt;
byte mac[]={0x33, 0x33, 0x33, 0x33, 0x33, 0x33};&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
  if (ETH.begin(mac) == 0) {&lt;br /&gt;
  Serial.println(&amp;quot;Failed!&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  else{&lt;br /&gt;
    Serial.print(&amp;quot;ip=&amp;quot;);&lt;br /&gt;
    for (int k = 0; k &amp;lt; 4; k++) {&lt;br /&gt;
      Serial.print(ETH.localIP()[k], DEC);&lt;br /&gt;
      Serial.print(&amp;quot;.&amp;quot;);&lt;br /&gt;
      }&lt;br /&gt;
    Serial.println();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Artecoll</name></author>
	</entry>
	<entry>
		<id>http://wiki.me-robotics.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:%D0%A0%D0%B5%D0%B7%D1%83%D0%BB%D1%8C%D1%82%D0%B0%D1%82.jpg&amp;diff=554</id>
		<title>Файл:Результат.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.me-robotics.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:%D0%A0%D0%B5%D0%B7%D1%83%D0%BB%D1%8C%D1%82%D0%B0%D1%82.jpg&amp;diff=554"/>
		<updated>2021-06-14T22:23:36Z</updated>

		<summary type="html">&lt;p&gt;Artecoll: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;вывода&lt;/div&gt;</summary>
		<author><name>Artecoll</name></author>
	</entry>
	<entry>
		<id>http://wiki.me-robotics.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:%D0%9F%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5.jpg&amp;diff=553</id>
		<title>Файл:Подключение.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.me-robotics.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:%D0%9F%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5.jpg&amp;diff=553"/>
		<updated>2021-06-14T21:29:58Z</updated>

		<summary type="html">&lt;p&gt;Artecoll: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;платы&lt;/div&gt;</summary>
		<author><name>Artecoll</name></author>
	</entry>
	<entry>
		<id>http://wiki.me-robotics.ru/index.php?title=Ethernet_Shield_%D0%BD%D0%B0_%D0%B1%D0%B0%D0%B7%D0%B5_WIZnet_w5100&amp;diff=552</id>
		<title>Ethernet Shield на базе WIZnet w5100</title>
		<link rel="alternate" type="text/html" href="http://wiki.me-robotics.ru/index.php?title=Ethernet_Shield_%D0%BD%D0%B0_%D0%B1%D0%B0%D0%B7%D0%B5_WIZnet_w5100&amp;diff=552"/>
		<updated>2021-06-14T21:28:54Z</updated>

		<summary type="html">&lt;p&gt;Artecoll: Новая страница: «&amp;#039;&amp;#039;&amp;#039;Ethernet Shield&amp;#039;&amp;#039;&amp;#039; - плата расширения, позволяющая Arduino работать в локальных вычислительных сет...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Ethernet Shield&amp;#039;&amp;#039;&amp;#039; - плата расширения, позволяющая Arduino работать в локальных вычислительных сетях для приёма и передачи данных в сети Интернет. Плата основана на чипе Wiznet w5100.&lt;br /&gt;
[[Файл:Ethernet shield.jpg|мини|справа]]&lt;/div&gt;</summary>
		<author><name>Artecoll</name></author>
	</entry>
	<entry>
		<id>http://wiki.me-robotics.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Ethernet_shield.jpg&amp;diff=551</id>
		<title>Файл:Ethernet shield.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.me-robotics.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Ethernet_shield.jpg&amp;diff=551"/>
		<updated>2021-06-14T21:26:45Z</updated>

		<summary type="html">&lt;p&gt;Artecoll: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;плата&lt;/div&gt;</summary>
		<author><name>Artecoll</name></author>
	</entry>
	<entry>
		<id>http://wiki.me-robotics.ru/index.php?title=%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&amp;diff=550</id>
		<title>Заглавная страница</title>
		<link rel="alternate" type="text/html" href="http://wiki.me-robotics.ru/index.php?title=%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&amp;diff=550"/>
		<updated>2021-06-14T21:21:54Z</updated>

		<summary type="html">&lt;p&gt;Artecoll: /* Описание модулей */&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;
[[Файл:LogIn screenshot.png|200x200пкс|альт=|мини|Расположение кнопки входа]]Для добавления и редактирования статей: &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;&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;
*[[Ультразвуковой дальномер HC-SR04]]&lt;br /&gt;
*[[Драйвер двигателя L298N]]&lt;br /&gt;
*[[Датчик линии на базе TCRT5000]]&lt;br /&gt;
*[[Драйвер моторов двухканальный tb6680|Драйвер двухканальный на базе микросхемы tb6612fng]]&lt;br /&gt;
*[[Лазерные дальномеры|Лазерные дальномеры - Laser Sensor]]&lt;br /&gt;
*[[Шаговый электродвигатель]]&lt;br /&gt;
*[[Оптические энкодеры|Оптические энкодеры - FC-03 на базе ITR9608]]&lt;br /&gt;
*[[Подключение гироскопа GY-521 MPU-6050 к Arduio]]&lt;br /&gt;
*[[АЦП на базе микросхемы hx711|АЦП на базе микросхемы HX711]]&lt;br /&gt;
*[[Сервопривод]]&lt;br /&gt;
*[[Arduino Shield]]&lt;br /&gt;
*[[Драйвер двигателя L293D]]&lt;br /&gt;
*[[Зуммер]]&lt;br /&gt;
*[[Сторожевой таймер|Сторожевой таймер | WatchDog Timer]]&lt;br /&gt;
*[[Мотор-редуктор]]&lt;br /&gt;
*[[Четырехразрядный семисегментный индикатор]]&lt;br /&gt;
*[[Ethernet Shield на базе WIZnet w5100]]&lt;br /&gt;
&lt;br /&gt;
== Процессы и подходы ==&lt;br /&gt;
&lt;br /&gt;
* [[ШИМ]]&lt;br /&gt;
* [[Калибровка]]&lt;br /&gt;
* [[SPI]]&lt;br /&gt;
&lt;br /&gt;
== Алгоритмы ==&lt;br /&gt;
&lt;br /&gt;
* [[Движение робота по черной ленте]]&lt;br /&gt;
* [[Алгоритм A*]]&lt;br /&gt;
* [[Алгоритм D*]]&lt;br /&gt;
* [[Объезд препятствий]]&lt;br /&gt;
* [[SLAM]]&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;
* [[Датчик препятствия|Инфракрасный датчик препятствий YL-63]]&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;
* [[Полезные советы по Webots]]&lt;br /&gt;
* [[Устанавливаем драйвер Ардуино - Подключаем порт]]&lt;br /&gt;
* [[Как выбрать Arduino]]&lt;br /&gt;
&lt;br /&gt;
== Программирование MIK32 в среде eclipse ==&lt;br /&gt;
&lt;br /&gt;
* [[Быстрый старт с MIK32]]&lt;br /&gt;
&lt;br /&gt;
== Некоторые полезные ресурсы ==&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Список возможных настроек];&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Manual:FAQ/ru Часто задаваемые вопросы и ответы по MediaWiki];&lt;br /&gt;
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Рассылка уведомлений о выходе новых версий MediaWiki].&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Перевод MediaWiki на свой язык]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Узнайте, как бороться со спамом в вашей вики]&lt;/div&gt;</summary>
		<author><name>Artecoll</name></author>
	</entry>
	<entry>
		<id>http://wiki.me-robotics.ru/index.php?title=%D0%9A%D0%BD%D0%BE%D0%BF%D0%BA%D0%B0&amp;diff=549</id>
		<title>Кнопка</title>
		<link rel="alternate" type="text/html" href="http://wiki.me-robotics.ru/index.php?title=%D0%9A%D0%BD%D0%BE%D0%BF%D0%BA%D0%B0&amp;diff=549"/>
		<updated>2021-06-14T21:16:19Z</updated>

		<summary type="html">&lt;p&gt;Artecoll: /* Подключение кнопки Ардуино */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Файл:Knopka arduino-1.jpg|мини|180x180пкс|Внешний вид кнопки]]&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Кнопка (или кнопочный переключатель)&amp;#039;&amp;#039;&amp;#039; - самый простой и доступный из всех видов датчиков. Кнопки используются для управления устройствами, подачи команд, осуществления настроек, ввода данных и т.д. Нажимая на кнопку, мы подаем контроллеру сигнал, который затем приводит к каким-то действиям: включаются светодиоды, издаются звуки, запускаются моторы. В своей жизни мы часто встречаемся с разными выключателями и хорошо знакомы с этим устройством.&lt;br /&gt;
&lt;br /&gt;
Чаще всего работают с очень простыми тактовыми кнопками с 4 ножками, которые идут практически в любом наборе ардуино. Кнопка представляет собой переключатель с двумя парами контактов. Контакты в одной паре соединены между собой, поэтому больше одного выключателя в схеме реализовать не удастся, но можно одновременно управлять двумя параллельными сегментами.&lt;br /&gt;
&lt;br /&gt;
== Подключение кнопки Ардуино ==&lt;br /&gt;
[[Файл:Stunning-Wluff-Jaban-e1509615131819.png|справа|320x320пкс]]&lt;br /&gt;
&lt;br /&gt;
====== Включение и выключение светодиода с помощью кнопки ======&lt;br /&gt;
Начнем с самого простого способа подключения тактовой кнопки. Рассмотрим схему с Arduino в качестве источника питания,  светодиода, ограничительного резистора номиналом 220 Ом и кнопки, которая будет замыкать и размыкать цепь.&lt;br /&gt;
&lt;br /&gt;
====== Подключение кнопки с подтягивающим резистором ======&lt;br /&gt;
[[Файл:DigitalRead1-e1509615386435.png|слева|300x300пкс]]&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;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
const int PIN_BUTTON = 2;&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
  pinMode(PIN_BUTTON, OUTPUT);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  //Получаем состояние кнопки и выводим в мониторе порта&lt;br /&gt;
  int buttonState = digitalRead(PIN_BUTTON);&lt;br /&gt;
  Serial.println(buttonState);&lt;br /&gt;
  delay(50);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Artecoll</name></author>
	</entry>
	<entry>
		<id>http://wiki.me-robotics.ru/index.php?title=%D0%9A%D0%BD%D0%BE%D0%BF%D0%BA%D0%B0&amp;diff=548</id>
		<title>Кнопка</title>
		<link rel="alternate" type="text/html" href="http://wiki.me-robotics.ru/index.php?title=%D0%9A%D0%BD%D0%BE%D0%BF%D0%BA%D0%B0&amp;diff=548"/>
		<updated>2021-06-14T21:14:49Z</updated>

		<summary type="html">&lt;p&gt;Artecoll: Картинка Джека Воробья&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Файл:Knopka arduino-1.jpg|мини|180x180пкс|Внешний вид кнопки]]&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Кнопка (или кнопочный переключатель)&amp;#039;&amp;#039;&amp;#039; - самый простой и доступный из всех видов датчиков. Кнопки используются для управления устройствами, подачи команд, осуществления настроек, ввода данных и т.д. Нажимая на кнопку, мы подаем контроллеру сигнал, который затем приводит к каким-то действиям: включаются светодиоды, издаются звуки, запускаются моторы. В своей жизни мы часто встречаемся с разными выключателями и хорошо знакомы с этим устройством.&lt;br /&gt;
&lt;br /&gt;
Чаще всего работают с очень простыми тактовыми кнопками с 4 ножками, которые идут практически в любом наборе ардуино. Кнопка представляет собой переключатель с двумя парами контактов. Контакты в одной паре соединены между собой, поэтому больше одного выключателя в схеме реализовать не удастся, но можно одновременно управлять двумя параллельными сегментами.&lt;br /&gt;
&lt;br /&gt;
== Подключение кнопки Ардуино ==&lt;br /&gt;
[[Файл:Stunning-Wluff-Jaban-e1509615131819.png|справа|320x320пкс]]&lt;br /&gt;
&lt;br /&gt;
====== Включение и выключение светодиода с помощью кнопки ======&lt;br /&gt;
Начнем с самого простого способа подключения тактовой кнопки. Рассмотрим схему с Arduino в качестве источника питания,  светодиода, ограничительного резистора номиналом 220 Ом и кнопки, которая будет замыкать и размыкать цепь.&lt;br /&gt;
&lt;br /&gt;
====== Подключение кнопки с подтягивающим резистором ======&lt;br /&gt;
[[Файл:DigitalRead1-e1509615386435.png|слева|309x309пкс]]&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;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
const int PIN_BUTTON = 2;&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
  pinMode(PIN_BUTTON, OUTPUT);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  //Получаем состояние кнопки и выводим в мониторе порта&lt;br /&gt;
  int buttonState = digitalRead(PIN_BUTTON);&lt;br /&gt;
  Serial.println(buttonState);&lt;br /&gt;
  delay(50);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Artecoll</name></author>
	</entry>
	<entry>
		<id>http://wiki.me-robotics.ru/index.php?title=%D0%A7%D0%B5%D1%82%D1%8B%D1%80%D0%B5%D1%85%D1%80%D0%B0%D0%B7%D1%80%D1%8F%D0%B4%D0%BD%D1%8B%D0%B9_%D1%81%D0%B5%D0%BC%D0%B8%D1%81%D0%B5%D0%B3%D0%BC%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D0%B8%D0%BD%D0%B4%D0%B8%D0%BA%D0%B0%D1%82%D0%BE%D1%80&amp;diff=547</id>
		<title>Четырехразрядный семисегментный индикатор</title>
		<link rel="alternate" type="text/html" href="http://wiki.me-robotics.ru/index.php?title=%D0%A7%D0%B5%D1%82%D1%8B%D1%80%D0%B5%D1%85%D1%80%D0%B0%D0%B7%D1%80%D1%8F%D0%B4%D0%BD%D1%8B%D0%B9_%D1%81%D0%B5%D0%BC%D0%B8%D1%81%D0%B5%D0%B3%D0%BC%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D0%B8%D0%BD%D0%B4%D0%B8%D0%BA%D0%B0%D1%82%D0%BE%D1%80&amp;diff=547"/>
		<updated>2021-06-14T21:05:23Z</updated>

		<summary type="html">&lt;p&gt;Artecoll: Картинка Джека Воробья&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Файл:Tm1637-4-kh-razryadnyy-displey-1-17201571.png|мини|243x243пкс|Четырехразрядный семисегментный индикатор Ардуино]]&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Четырёхразрядный индикатор&amp;#039;&amp;#039;&amp;#039; - это четыре семисегментных индикатора и управляющая логика, смонтированные на одной плате. Светодиодный четырехразрядный семисегментный индикатор Ардуино используется для создания счетчиков или таймеров на Arduino, вывода числовых значений с датчиков в готовых проектах.&lt;br /&gt;
&lt;br /&gt;
Четырёхразрядный индикатор пригодится, если, например, нужно вывести текущее время или показания с одного из сенсоров. Он прост в использовании: подключается к управляющей плате, такой как Arduino, с помощью двух трёхпроводных шлейфов.&lt;br /&gt;
&lt;br /&gt;
== Распиновка индикатора ==&lt;br /&gt;
[[Файл:Raspinovka-7segments.jpg|мини|350x350пкс|Распиновка четырехразрядного семисегментного светодиодного индикатора]]&lt;br /&gt;
Распиновка сегментов индикатора, состоящего из четырех символов ничем не отличается от одно символьного семисегментного индикатора Ардуино. Отличие модуля в количестве разрядов (символов) — каждый разряд включается отключением питания от соответствующего катода. Таким образом все светодиоды одного сегмента в разрядах (например, A-A-A-A) подключены параллельно к общему катоду.&lt;br /&gt;
&lt;br /&gt;
С включением сегмента довольно просто разобраться. Разберем небольшой пример. Изначально на все 4 разряда (D1, D2, D3, D4) подано напряжение. Чтобы включить сегмент A на втором символе, необходимо на ножку A (анод) подать напряжение. Но сегмент не загорится, пока мы не отключим напряжение у ножки D2. Таким образом можно включать любой светодиод на модуле 7 сегментного индикатора.&lt;br /&gt;
[[Файл:NiX9McPAxBU.jpg|слева|мини|Схема подключения четырехсегментного индикатора к Ардуино]]&lt;br /&gt;
Проблема подключения индикатора к Arduino состоит в том, что используется сразу много пинов на плате. Кроме того, выводить на индикаторе одновременно можно только одну цифру. Поэтому необходимо за очень короткое время по очереди выводить нужную цифру на каждом из разрядов. Человеческое зрение не успевает уловить переключение и вам будет казаться, что все разряды горят одновременно.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Пример программы ==&lt;br /&gt;
Продемонстрируем простую программу, чтобы можно было наглядно понять, как работает 4-разрядный 7-сегментный индикатор к Ардуино.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define g 11  //контакты&lt;br /&gt;
#define d1 A1&lt;br /&gt;
#define d2 A2&lt;br /&gt;
#define d3 A3&lt;br /&gt;
#define d4 A4&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  pinMode(g, OUTPUT);   //режимы работы контактов&lt;br /&gt;
  pinMode(d1, OUTPUT);&lt;br /&gt;
  pinMode(d2, OUTPUT);&lt;br /&gt;
  pinMode(d3, OUTPUT);&lt;br /&gt;
  pinMode(d4, OUTPUT);&lt;br /&gt;
&lt;br /&gt;
  digitalWrite(d1, HIGH); //запись логической 1 на контакты&lt;br /&gt;
  digitalWrite(d2, HIGH);&lt;br /&gt;
  digitalWrite(d3, HIGH);&lt;br /&gt;
  digitalWrite(d4, HIGH);&lt;br /&gt;
  digitalWrite(g, HIGH);&lt;br /&gt;
  delay(100);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  digitalWrite(d1, LOW);  //включаем первый разряд&lt;br /&gt;
  digitalWrite(d4, HIGH);&lt;br /&gt;
  delay(200);&lt;br /&gt;
  digitalWrite(d2, LOW);  //включаем второй разряд&lt;br /&gt;
  digitalWrite(d1, HIGH);&lt;br /&gt;
  delay(200);&lt;br /&gt;
  digitalWrite(d3, LOW);  //включаем третий разряд&lt;br /&gt;
  digitalWrite(d2, HIGH);&lt;br /&gt;
  delay(200);&lt;br /&gt;
  digitalWrite(d4, LOW);  //включаем четвёртый разряд&lt;br /&gt;
  digitalWrite(d3, HIGH);&lt;br /&gt;
  delay(200);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В процедуре void setup() мы подали напряжение на четыре разряда светодиодного индикатора, чтобы они не горели изначально при начале программы;&lt;br /&gt;
&lt;br /&gt;
В основном цикле void loop() мы поочередно включаем разряды (включение происходит при режиме &amp;lt;code&amp;gt;LOW&amp;lt;/code&amp;gt;), при этом сегмент G остается всегда включен.&lt;/div&gt;</summary>
		<author><name>Artecoll</name></author>
	</entry>
	<entry>
		<id>http://wiki.me-robotics.ru/index.php?title=%D0%A2%D0%B5%D0%BD%D0%B7%D0%BE%D0%B4%D0%B0%D1%82%D1%87%D0%B8%D0%BA&amp;diff=546</id>
		<title>Тензодатчик</title>
		<link rel="alternate" type="text/html" href="http://wiki.me-robotics.ru/index.php?title=%D0%A2%D0%B5%D0%BD%D0%B7%D0%BE%D0%B4%D0%B0%D1%82%D1%87%D0%B8%D0%BA&amp;diff=546"/>
		<updated>2021-06-11T14:56:46Z</updated>

		<summary type="html">&lt;p&gt;Artecoll: &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;
[[Файл:Балочный.jpg|200px|мини|слева|Балочный тензодатчик]]&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;quot;шайба&amp;quot;)&amp;#039;&amp;#039;&amp;#039; - массово применяется при производстве вагонных, бункерных, автомобильных весовых системах. Также мембранные датчики используются в тех весодозирующих системах, где обыкновенные датчики не могут быть внедрены в конструкцию из-за своих габаритных размеров.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;S - образный&amp;#039;&amp;#039;&amp;#039; - в процессе взвешивания дозаторов, бункеров и прочих конвейерных весовых систем нашли свое применение S-образные тензометрические датчики. Следует отметить, что такие датчики превосходно подойдут для разрывных машин и испытательных стендов.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;колонный (типа &amp;quot;бочка&amp;quot;)&amp;#039;&amp;#039;&amp;#039; - применяется для производства и модернизации бункерных, автомобильных, вагонных весов с большой грузоподъёмностью, а также в контрольно-измерительном оборудовании, испытательных стендах.&lt;br /&gt;
[[Файл:S-образный.jpg|мини|справа|200px|S-образный тензодатчик]]&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;
[[Файл:Мембранный.jpg|мини|слева|200px|Мембранный тензодатчик]]&lt;br /&gt;
[[Файл:Тензорезистор.gif|мини|справа|Наглядная деформация тензорезистора]]&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; - используется как наклеиваемый тензорезистор. Это очень удобная система, которая представляет собой фольговую ленту, толщиной до 12 мкм. Часть пленки имеет плотную форму, а часть – решетчатую. Данная модель отличается от остальных тем, что можно припаивать дополнительные контакты, к тому же они нормально переносят низкие температуры.&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;
&lt;br /&gt;
В качестве подложки обычно используют ткань, бумагу, полимерную плёнку, слюду и др.&lt;br /&gt;
&lt;br /&gt;
==Схема подключения==&lt;br /&gt;
[[Файл:Мост Уинстона.jpg|мини|слева|200px|Схема подключения тензорезистора в мосте Уинстона]]&lt;br /&gt;
Обычно тензорезистор подключают в одно или два плеча моста Уинстона.&lt;br /&gt;
При отсутствии физического взаимодействия U&amp;lt;sub&amp;gt;BC&amp;lt;/sub&amp;gt; = 0 (R&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; / R&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = R&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt; / R&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;). При деформации тензорезистора изменяется сопротивление R&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;, что вызывает снижение потенциала точки соединения резисторов R&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt; и R&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; и изменение полезного сигнала - U&amp;lt;sub&amp;gt;BC&amp;lt;/sub&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Для тензодатчика обязательно подключение АЦП.&lt;br /&gt;
[[Файл:ТР с АЦП.jpg|обрамить|центр|Схема подключения тензодатчика на примере Arduino UNO и АЦП с микросхемой HX711]]&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>Artecoll</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=545</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=545"/>
		<updated>2021-06-11T14:52:34Z</updated>

		<summary type="html">&lt;p&gt;Artecoll: /* ПОДКЛЮЧЕНИЕ ИК-ДАТЧИКА */&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>Artecoll</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%B4%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=544</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%B4%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=544"/>
		<updated>2021-06-11T14:51:53Z</updated>

		<summary type="html">&lt;p&gt;Artecoll: Оформление&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Файл:4(9).jpg|мини|Пример внешнего вида датчика давления]]&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;
&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;
&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;
Давление, которое подается внутрь трубки вызывает упругую деформацию эллиптического или овального сечения трубки в сторону круга, которая вызывает появление напряжений в продольном направлении, заставляющих трубку разгибаться, а свободный конец трубки перемещаться. Система рычагов и передач превращает это движение и возвращает стрелку, показывающую давление относительно круглой шкалы. Диапазон измерения такого манометра составляет - от 10 Па до 1000 МПа. Трубные материалы могут быть изменены соответствующим образом в соответствии с требуемым условием процесса. Также, трубки Бурдона - портативные и требуют минимального технического обслуживания, однако, они могут быть использованы только для статических измерений и имеют низкую точность.&lt;br /&gt;
&lt;br /&gt;
Материалом для трубчатых пружин может служить сталь, бронза, латунь. В зависимости от конструктивного исполнения трубчатые пружины могут быть одно- и многовитковые (винтовые и спиральные), S-образные и т.п. Распространены одновитковые трубчатые пружины, используемые в манометрах, которые предназначены для измерения давления жидкостей и газов, а также в таких типах манометров как глубиномер. Датчики С-типа могут быть использованы в диапазонах давлений приближающихся к 700 МПа; они имеют минимальный рекомендованный диапазон давления - 30 кПа (т.е. они не достаточно чувствительны для измерения разности давлений меньше чем 30 кПа).&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;lt;200 Па с чувствительностью 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;
Мембраны изготовлены из круглых металлических дисков или гибких элементов, таких как резина, пластик или кожа. Материал, из которого изготовлена ​​мембрана зависит от того используется ли свойства упругости этого материала или ему должен противостоять другой элемент (например - пружина). Мембраны изготовленные из металлических дисков используют упругие характеристики, а тем, которым противостоят другие упругие элементы, изготовлены из гибких элементов. Мембраны очень чувствительны к резким изменениям давления. Мембраной изготовленной из металла можно измерить максимальное давление равное примерно 7 МПа, а мембраной использующей упругий тип материала можно измерять чрезвычайно низкие давления (0,1 кПа - 2,2 МПа) при подключении к емкостным преобразователям или к датчикам перепада давления. Диафрагмы бывают плоские, гофрированные и капсульного типа. Как отмечалось ранее, мембраны очень чувствительны (0,01 МПа). Они могут измерять дробные разности давления на очень маленьком диапазоне (скажем, давления нескольких дюймов воды) (эластичный тип) или большие перепады давления (приближаясь к максимальному диапазону в 207 кПа) (металлический тип).&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;
&lt;br /&gt;
Емкостной датчик состоит из параллельных пластин - конденсаторов, соединенных с диафрагмой, которая обычно металлическая и подвергается давлению сил участвующих в процессе с одной стороны и опорным давлением на другой стороне. Электроды прикреплены к мембране и получают питание от генератора высокой частоты. Электроды ощущают любое перемещение диафрагмы и это влияет на изменение емкости пластин-конденсаторов. Изменение емкости обнаруживается подсоединенной электрической цепью, которая выводит напряжение в соответствии с изменением давления. Данный тип датчика может работать в диапазоне от 2,5 Па - 70 МПа с чувствительностью 0,07 МПа.&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;
&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;
&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;
&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;
== Датчик BMP180 ==&lt;br /&gt;
[[Файл:Датчик BMP180.jpg|альт=вид|мини|внешний вид датчика]]&lt;br /&gt;
Датчик поставляется в виде модуля (на печатной плате) с 4 или 5 выводами:&lt;br /&gt;
&lt;br /&gt;
*если у модуля 4 вывода (VСС GND SCL SDA), то на вывод VCC подаётся питание +3,3в.&lt;br /&gt;
*если у модуля 5 выводов (VСС 3V3 GND SCL SDA), то на вывод VCC подаётся +5в.&lt;br /&gt;
&lt;br /&gt;
(так же можно запитать модуль с 5 выводами от 3,3в, подав их на вывод 3V3 оставив вывод VIN свободным)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Выводы датчика&lt;br /&gt;
!VIN(VCC, VDD)&lt;br /&gt;
!GND&lt;br /&gt;
!SDA (DA)&lt;br /&gt;
!SCL (CL)&lt;br /&gt;
|-&lt;br /&gt;
|плюс питания&lt;br /&gt;
|общий минус&lt;br /&gt;
|линия данных, интерфейс I2C&lt;br /&gt;
|линия тактирования, интерфейс I2C&lt;br /&gt;
|}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Состав датчика BMP180:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
*пьезо-резистивный датчик (для определения атмосферного давления);&lt;br /&gt;
*термодатчик (для определения температуры);&lt;br /&gt;
*АЦП (аналого-цифровой преобразователь);&lt;br /&gt;
*EEPROM (энергонезависимая электрически стираемая перепрограммируемая память);&lt;br /&gt;
*RAM (энергозависимая память, другими словами ОЗУ);&lt;br /&gt;
*микроконтроллер;&lt;br /&gt;
*передача данных организована по шинам I2C или SPI.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Принцип действия датчика&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
В датчике имеется герметичная камера, одна из стенок которой является гибкой мембраной с установленными на ней тензодатчиками. Мембрана прогибается пропорционально разности давлений внутри камеры и снаружи, что влияет на изменение сопротивления тензодатчиков электрическому току. Так же имеется термодатчик, сопротивление которого меняется пропорционально температуре. АЦП (аналого-цифровой преобразователь) переводит результаты изменений датчиков в цифровые данные «некомпенсированные результаты», которые доступны для чтения из регистров датчика: «Out MSB», «Out LSB» и «Out xLSB». Для компенсации указанных результатов (компенсации смещения, температурной зависимости, погрешностей при изготовлении, неоднородностей материалов и т.д.) каждый датчик калибруется на заводе, и в EEPROM записываются индивидуальные для каждого датчика 11 калибровочных коэффициентов (176 бит), которые доступны для чтения из регистров датчика: «AC1», «AC2», «AC3», «AC4», «AC5», «AC6», «B1», «B2», «MB», «MC», «MD».&lt;br /&gt;
&lt;br /&gt;
== Характеристики BMP180 ==&lt;br /&gt;
&lt;br /&gt;
- диапазон измеряемых значений: от 300 гПа до 1100 гПа  (от -500м от +9000м над уровнем моря);&lt;br /&gt;
&lt;br /&gt;
- напряжение питания: от 3.3 до 5 Вольт;&lt;br /&gt;
&lt;br /&gt;
- сила тока: 5 мкА при скорости опроса — 1 Герц;&lt;br /&gt;
&lt;br /&gt;
- уровень шума: 0.06 гПа (0.5м) в грубом режиме (ultra low power mode) и 0.02 гПа (0.17м) а режиме максимального разрешения (advanced resolution mode).&lt;br /&gt;
&lt;br /&gt;
== Программа для датчика BMP180 ==&lt;br /&gt;
[[Файл:Внешний вид схемы подключения.png|альт=схема|мини|Внешний вид схемы подключения]]&lt;br /&gt;
Таблица подключения контактов&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|BMP 180&lt;br /&gt;
|GND&lt;br /&gt;
|VCC&lt;br /&gt;
|SDA&lt;br /&gt;
|SCL&lt;br /&gt;
|-&lt;br /&gt;
|ARDUINO UNO&lt;br /&gt;
|GND&lt;br /&gt;
|  +3V3&lt;br /&gt;
|A4&lt;br /&gt;
|A5&lt;br /&gt;
|}&lt;br /&gt;
Для начала добавим библиотеку &amp;#039;&amp;#039;&amp;#039;BMP180_Breakout_Arduino_Library&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;
*Финальный этап это возврат значения давления из функции. Датчик возвращает значение величины давления в гектопаскалях, что равно 100 Паскалей.&lt;br /&gt;
&lt;br /&gt;
Время зависит от точности измерения, которая задается в функции startPressure. Значение которой варьируется от нуля (самая быстрая оценка, которая занимает минимальное количество времени) до трех (самая точная оценка, занимающая наибольшее количество времени)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;SFE_BMP180.h&amp;gt; //библиотека для датчика (НАДО УСТАНАВЛИВАТЬ)&lt;br /&gt;
#include &amp;lt;Wire.h&amp;gt;       //библиотека для связи через I2C (УЖЕ ЕСТЬ В ARDUINO)&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
  pressure.begin();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
   double Davl;&lt;br /&gt;
   Davl = getPressure();&lt;br /&gt;
   Serial.println(Davl, 4);&lt;br /&gt;
   delay(100);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
double getPressure(){&lt;br /&gt;
   char status;&lt;br /&gt;
   double T,Davl,p0,a;&lt;br /&gt;
   status = pressure.startTemperature();&lt;br /&gt;
   if (status != 0){&lt;br /&gt;
    // ожидание замера температуры&lt;br /&gt;
    delay(status);&lt;br /&gt;
    status = pressure.getTemperature(T);&lt;br /&gt;
    if (status != 0){&lt;br /&gt;
      status = pressure.startPressure(3);&lt;br /&gt;
      if (status != 0){&lt;br /&gt;
        // ожидание замера давления&lt;br /&gt;
        delay(status);&lt;br /&gt;
        status = pressure.getPressure(Davl,T);&lt;br /&gt;
        if (status != 0){&lt;br /&gt;
          return(Davl);&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Artecoll</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%B4%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=543</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%B4%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F&amp;diff=543"/>
		<updated>2021-06-11T14:47:21Z</updated>

		<summary type="html">&lt;p&gt;Artecoll: Джек Воробей&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Файл:4(9).jpg|мини|Пример внешнего вида датчика давления]]&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;
&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;
== &amp;#039;&amp;#039;&amp;#039;Классификация и принцип работы датчика&amp;#039;&amp;#039;&amp;#039; ==&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;
&lt;br /&gt;
Давление, которое подается внутрь трубки вызывает упругую деформацию эллиптического или овального сечения трубки в сторону круга, которая вызывает появление напряжений в продольном направлении, заставляющих трубку разгибаться, а свободный конец трубки перемещаться. Система рычагов и передач превращает это движение и возвращает стрелку, показывающую давление относительно круглой шкалы. Диапазон измерения такого манометра составляет - от 10 Па до 1000 МПа. Трубные материалы могут быть изменены соответствующим образом в соответствии с требуемым условием процесса. Также, трубки Бурдона - портативные и требуют минимального технического обслуживания, однако, они могут быть использованы только для статических измерений и имеют низкую точность.&lt;br /&gt;
&lt;br /&gt;
Материалом для трубчатых пружин может служить сталь, бронза, латунь. В зависимости от конструктивного исполнения трубчатые пружины могут быть одно- и многовитковые (винтовые и спиральные), S-образные и т.п. Распространены одновитковые трубчатые пружины, используемые в манометрах, которые предназначены для измерения давления жидкостей и газов, а также в таких типах манометров как глубиномер. Датчики С-типа могут быть использованы в диапазонах давлений приближающихся к 700 МПа; они имеют минимальный рекомендованный диапазон давления - 30 кПа (т.е. они не достаточно чувствительны для измерения разности давлений меньше чем 30 кПа).&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;lt;200 Па с чувствительностью 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;
Мембраны изготовлены из круглых металлических дисков или гибких элементов, таких как резина, пластик или кожа. Материал, из которого изготовлена ​​мембрана зависит от того используется ли свойства упругости этого материала или ему должен противостоять другой элемент (например - пружина). Мембраны изготовленные из металлических дисков используют упругие характеристики, а тем, которым противостоят другие упругие элементы, изготовлены из гибких элементов. Мембраны очень чувствительны к резким изменениям давления. Мембраной изготовленной из металла можно измерить максимальное давление равное примерно 7 МПа, а мембраной использующей упругий тип материала можно измерять чрезвычайно низкие давления (0,1 кПа - 2,2 МПа) при подключении к емкостным преобразователям или к датчикам перепада давления. Диафрагмы бывают плоские, гофрированные и капсульного типа. Как отмечалось ранее, мембраны очень чувствительны (0,01 МПа). Они могут измерять дробные разности давления на очень маленьком диапазоне (скажем, давления нескольких дюймов воды) (эластичный тип) или большие перепады давления (приближаясь к максимальному диапазону в 207 кПа) (металлический тип).&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;
&lt;br /&gt;
Емкостной датчик состоит из параллельных пластин - конденсаторов, соединенных с диафрагмой, которая обычно металлическая и подвергается давлению сил участвующих в процессе с одной стороны и опорным давлением на другой стороне. Электроды прикреплены к мембране и получают питание от генератора высокой частоты. Электроды ощущают любое перемещение диафрагмы и это влияет на изменение емкости пластин-конденсаторов. Изменение емкости обнаруживается подсоединенной электрической цепью, которая выводит напряжение в соответствии с изменением давления. Данный тип датчика может работать в диапазоне от 2,5 Па - 70 МПа с чувствительностью 0,07 МПа.&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;
&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;
&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;
&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;
== Датчик BMP180 ==&lt;br /&gt;
[[Файл:Датчик BMP180.jpg|альт=вид|мини|внешний вид датчика]]&lt;br /&gt;
Датчик поставляется в виде модуля (на печатной плате) с 4 или 5 выводами:&lt;br /&gt;
&lt;br /&gt;
- если у модуля 4 вывода (VСС GND SCL SDA), то на вывод VCC подаётся питание +3,3в.&lt;br /&gt;
&lt;br /&gt;
- если у модуля 5 выводов (VСС 3V3 GND SCL SDA), то на вывод VCC подаётся +5в.&lt;br /&gt;
&lt;br /&gt;
(так же можно запитать модуль с 5 выводами от 3,3в, подав их на вывод 3V3 оставив вывод VIN свободным)&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+Выводы датчика&lt;br /&gt;
!VIN(VCC, VDD)&lt;br /&gt;
!GND&lt;br /&gt;
!SDA (DA)&lt;br /&gt;
!SCL (CL)&lt;br /&gt;
|-&lt;br /&gt;
|плюс питания&lt;br /&gt;
|общий минус&lt;br /&gt;
|линия данных, интерфейс I2C&lt;br /&gt;
|линия тактирования, интерфейс I2C&lt;br /&gt;
|}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Состав датчика BMP180:&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;
- EEPROM (энергонезависимая электрически стираемая перепрограммируемая память);&lt;br /&gt;
&lt;br /&gt;
- RAM (энергозависимая память, другими словами ОЗУ);&lt;br /&gt;
&lt;br /&gt;
- микроконтроллер;&lt;br /&gt;
&lt;br /&gt;
- передача данных организована по шинам I2C или SPI.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Принцип действия датчика&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
В датчике имеется герметичная камера, одна из стенок которой является гибкой мембраной с установленными на ней тензодатчиками. Мембрана прогибается пропорционально разности давлений внутри камеры и снаружи, что влияет на изменение сопротивления тензодатчиков электрическому току. Так же имеется термодатчик, сопротивление которого меняется пропорционально температуре. АЦП (аналого-цифровой преобразователь) переводит результаты изменений датчиков в цифровые данные «некомпенсированные результаты», которые доступны для чтения из регистров датчика: «Out MSB», «Out LSB» и «Out xLSB». Для компенсации указанных результатов (компенсации смещения, температурной зависимости, погрешностей при изготовлении, неоднородностей материалов и т.д.) каждый датчик калибруется на заводе, и в EEPROM записываются индивидуальные для каждого датчика 11 калибровочных коэффициентов (176 бит), которые доступны для чтения из регистров датчика: «AC1», «AC2», «AC3», «AC4», «AC5», «AC6», «B1», «B2», «MB», «MC», «MD».&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Немного важных характеристик BMP180:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
- диапазон измеряемых значений: от 300 гПа до 1100 гПа  (от -500м от +9000м над уровнем моря);&lt;br /&gt;
&lt;br /&gt;
- напряжение питания: от 3.3 до 5 Вольт;&lt;br /&gt;
&lt;br /&gt;
- сила тока: 5 мкА при скорости опроса — 1 Герц;&lt;br /&gt;
&lt;br /&gt;
- уровень шума: 0.06 гПа (0.5м) в грубом режиме (ultra low power mode) и 0.02 гПа (0.17м) а режиме максимального разрешения (advanced resolution mode).&lt;br /&gt;
&lt;br /&gt;
== Программа для датчика BMP180 ==&lt;br /&gt;
[[Файл:Внешний вид схемы подключения.png|альт=схема|мини|Внешний вид схемы подключения]]&lt;br /&gt;
Таблица подключения контактов&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|BMP 180&lt;br /&gt;
|GND&lt;br /&gt;
|VCC&lt;br /&gt;
|SDA&lt;br /&gt;
|SCL&lt;br /&gt;
|-&lt;br /&gt;
|ARDUINO UNO&lt;br /&gt;
|GND&lt;br /&gt;
|  +3V3&lt;br /&gt;
|A4&lt;br /&gt;
|A5&lt;br /&gt;
|}&lt;br /&gt;
Для начала добавим библиотеку &amp;#039;&amp;#039;&amp;#039;BMP180_Breakout_Arduino_Library&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;
*Финальный этап это возврат значения давления из функции. Датчик возвращает значение величины давления в гектопаскалях, что равно 100 Паскалей.&lt;br /&gt;
&lt;br /&gt;
Время зависит от точности измерения, которая задается в функции startPressure. Значение которой варьируется от нуля (самая быстрая оценка, которая занимает минимальное количество времени) до трех (самая точная оценка, занимающая наибольшее количество времени)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;SFE_BMP180.h&amp;gt; //библиотека для датчика (НАДО УСТАНАВЛИВАТЬ)&lt;br /&gt;
#include &amp;lt;Wire.h&amp;gt;       //библиотека для связи через I2C (УЖЕ ЕСТЬ В ARDUINO)&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
  pressure.begin();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
   double Davl;&lt;br /&gt;
   Davl = getPressure();&lt;br /&gt;
   Serial.println(Davl, 4);&lt;br /&gt;
   delay(100);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
double getPressure(){&lt;br /&gt;
   char status;&lt;br /&gt;
   double T,Davl,p0,a;&lt;br /&gt;
   status = pressure.startTemperature();&lt;br /&gt;
   if (status != 0){&lt;br /&gt;
    // ожидание замера температуры&lt;br /&gt;
    delay(status);&lt;br /&gt;
    status = pressure.getTemperature(T);&lt;br /&gt;
    if (status != 0){&lt;br /&gt;
      status = pressure.startPressure(3);&lt;br /&gt;
      if (status != 0){&lt;br /&gt;
        // ожидание замера давления&lt;br /&gt;
        delay(status);&lt;br /&gt;
        status = pressure.getPressure(Davl,T);&lt;br /&gt;
        if (status != 0){&lt;br /&gt;
          return(Davl);&lt;br /&gt;
          }&lt;br /&gt;
        }&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Artecoll</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%BC%D0%BE%D1%82%D0%BE%D1%80%D0%BE%D0%B2_%D0%B4%D0%B2%D1%83%D1%85%D0%BA%D0%B0%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_tb6680&amp;diff=542</id>
		<title>Драйвер моторов двухканальный tb6680</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%BC%D0%BE%D1%82%D0%BE%D1%80%D0%BE%D0%B2_%D0%B4%D0%B2%D1%83%D1%85%D0%BA%D0%B0%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_tb6680&amp;diff=542"/>
		<updated>2021-06-11T14:29:17Z</updated>

		<summary type="html">&lt;p&gt;Artecoll: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Эта крошечная плата облегчит использование двухканального драйвера моторов Toshiba TB6612FNG, который может независимо управлять двумя электромоторами постоянного тока или одним биполярным шаговым мотором. Диапазон напряжений 4,5 - 13,5 В и непрерывный ток нагрузки 1 А (пиковый 3 А) на каждый канал обеспечивает этот великолепный драйвер для маломощных моторов.&lt;br /&gt;
[[Файл:Изображение 2021-05-26 222213.png|мини]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dеликолепный двухканальный драйвер моторов, который идеально подходит для сопряжения микроконтроллера с двумя маленькими электродвигателями постоянного тока, такими как Gekko MR-12, или использовать для управления одним биполярным шаговым мотором. Основанные на MOSFET H-мостах намного более эффективны, чем основанные на BJT H-мостах которые используются в более старых драйверах, таких как L298N и LB1836M Sanyo, которые предоставляют больше тока моторам и меньше на питание логики (LB1836M иногда более предпочтительнее для действительно низковольтных приложений чем TB6612FNG). Эта небольшая плата дает Вам прямой доступ ко всем функциям TB6612FNG и еще дополнительно конденсаторы источника питания и защиту от переполюсовки питания на моторах (примечание: нет защиты от переполюсовки питания модуля).&lt;br /&gt;
&lt;br /&gt;
В этом модуле контакты питания сделаны на одной стороне платы, а контакты управления сделаны на другой. Все вводы управления и имеют внутреннюю подтяжку к земле. У каждого из двух моторных каналов есть два контакта управления направлением и контакт регулировки скорости, на который поступает сигнал ШИМ с частотой до 100 кГц. Для того чтобы вернуть драйвер из дежурного режима на контакт STBY должен поступить сигнал высокого уровня.&lt;br /&gt;
&lt;br /&gt;
У моторного драйвера TB6612FNG используемого на данной плате есть оценка пикового тока нагрузки 3 А на канал. Пиковые оценки для быстрых переходов (например при запуске мотора) и оценка непрерывного тока нагрузки 1 А зависит от различных условий, такие как окружающая температура. Фактический ток, который Вы можете обеспечить, будет зависеть от того, как хорошо Вы можете сохранить драйвер моторов холодным. Печатная плата разработана так, чтобы отводить тепло из микросхемы драйвера моторов, но производительность может быть улучшена, если добавить теплоотвод.&lt;br /&gt;
&lt;br /&gt;
== Назначение выходов ==&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;PWMA \ PWMB&amp;#039;&amp;#039;&amp;#039; — Вход для управления скоростью вращения мотора, для канала A и B соответственно, подключается на выход arduino с поддержкой ШИМ (PWM).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;AIN1 \ AIN2&amp;#039;&amp;#039;&amp;#039; — Входы полумостов канала A, подключаются на любые свободные выходы arduino.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;BIN1 \ BIN2&amp;#039;&amp;#039;&amp;#039; — Входы полумостов канала B.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;A01 \ A02&amp;#039;&amp;#039;&amp;#039; — Выходы полумостов канала A, подключается коллекторный двигатель.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;B01 \ B02&amp;#039;&amp;#039;&amp;#039; — Выходы полумостов канала B.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;STBY&amp;#039;&amp;#039;&amp;#039; — Включение микросхемы, подключаются на любой свободный выход arduino.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;VM&amp;#039;&amp;#039;&amp;#039; — Вход питания силовой части микросхемы, питание двигателей.&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;
&lt;br /&gt;
[[Файл:TB6612FNG dh.jpg|мини|Таблица истинности, функции и внутреннее устройство микросхемы ]]&lt;br /&gt;
Все входы управления (PWMA(B), A(B)IN1(2), STBY) притянуты к массе резистором на 200к.&lt;/div&gt;</summary>
		<author><name>Artecoll</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=541</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=541"/>
		<updated>2021-06-11T14:23:33Z</updated>

		<summary type="html">&lt;p&gt;Artecoll: &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>Artecoll</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%BB%D0%B8%D0%BD%D0%B8%D0%B8_%D0%BD%D0%B0_%D0%B1%D0%B0%D0%B7%D0%B5_TCRT5000&amp;diff=540</id>
		<title>Датчик линии на базе TCRT5000</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%BB%D0%B8%D0%BD%D0%B8%D0%B8_%D0%BD%D0%B0_%D0%B1%D0%B0%D0%B7%D0%B5_TCRT5000&amp;diff=540"/>
		<updated>2021-06-11T14:21:46Z</updated>

		<summary type="html">&lt;p&gt;Artecoll: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Файл:Датчик отражения TCRT5000.png|мини|Датчик отражения TCRT5000]]&lt;br /&gt;
Цифровой датчик линии – это излучатель и приёмник, разделённые перегородкой, находящиеся в одном корпусе. Светодиод излучает инфракрасный сигнал. В зависимости от цвета поверхности, отраженный сигнал имеет разную силу, которая улавливается приемником-фоторанзистором. &lt;br /&gt;
&lt;br /&gt;
Результатом работы данного модуля является цифровой сигнал, в зависимости от цвета. При отсутствии поверхности, или в случае, если поверхность светлая, датчик выдает логический 0, при появлении черной поверхности выдает логическую единицу.  Логический ноль сопровождается загоранием светодиода, расположенного на плате.    Это позволяет контролировать работу датчика.                                                                                                Датчик может использоваться для ориентации роботов (для перемещения по темной линии).&lt;br /&gt;
[[Файл:Датчик линии на базе TCRT5000.png|мини|Датчик линии на базе TCRT5000]]&lt;br /&gt;
&lt;br /&gt;
== Особенности и характеристики ==&lt;br /&gt;
&lt;br /&gt;
* Обнаружение расстояния отражения: 1 мм ~ 25 мм&lt;br /&gt;
&lt;br /&gt;
* Напряжение питания: 3.3-5В&lt;br /&gt;
* Потребляемый ток: 10мА&lt;br /&gt;
&lt;br /&gt;
* Форма вывода: цифровые сигналы (0 и 1)&lt;br /&gt;
* Рабочая температура: 0°C ~ + 50°C&lt;br /&gt;
* Размер печатной платы небольшой платы: 3,5 см x 1 см&lt;br /&gt;
* одиночный вес: 4,5 г&lt;br /&gt;
* С фиксированным отверстием для болта.&lt;br /&gt;
&lt;br /&gt;
== Подключение ==&lt;br /&gt;
&lt;br /&gt;
* VCC: плюс питания 5.0 В&lt;br /&gt;
* GND: общ. &lt;br /&gt;
* OUT: цифровой выход (0 или 1)&lt;br /&gt;
&lt;br /&gt;
== Пример кода с двумя датчиками для движения по черной линии ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define A 7 //left motor&lt;br /&gt;
#define B 8 //left motor&lt;br /&gt;
#define C 10 //left motor PWM&lt;br /&gt;
#define D 2 //right motor&lt;br /&gt;
#define E 4 //right motor&lt;br /&gt;
#define G 11 //right motor PWM&lt;br /&gt;
#define H 9 //left line sensor&lt;br /&gt;
#define I 13 //central line sensor&lt;br /&gt;
#define J 12 // right line sensor&lt;br /&gt;
void setup() {&lt;br /&gt;
  pinMode(A,OUTPUT);    // Устанавливаем режим для портов. &lt;br /&gt;
  pinMode(B, OUTPUT);   // Функция состоит из двух параметров. &lt;br /&gt;
  pinMode(C, OUTPUT);   // В первом параметре указывается порт, &lt;br /&gt;
  pinMode(D, OUTPUT);   // с которым мы собираемся работать.  &lt;br /&gt;
  pinMode(E, OUTPUT);   // Во втором параметре мы сообщаем,    &lt;br /&gt;
  pinMode(G, OUTPUT);   // как должен работать указанный&lt;br /&gt;
  pinMode(H, INPUT);    // порт: работать на&lt;br /&gt;
  pinMode(I, INPUT);    // выход (OUTPUT)&lt;br /&gt;
  pinMode(J, INPUT);    // или вход (INPUT)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void go(){&lt;br /&gt;
  digitalWrite(A, LOW);  // digitalWrite() - функция включает светодиод.&lt;br /&gt;
  digitalWrite(B, HIGH); // В первом параметре мы указываем номер&lt;br /&gt;
  analogWrite(C, 50);    // порта, с котоорым собираемся работать,&lt;br /&gt;
  digitalWrite(D, LOW);  // а во второй указываем константу HIGH т.е.&lt;br /&gt;
  digitalWrite(E, HIGH); // логическая 1, значение константы LOW равно&lt;br /&gt;
  analogWrite(G, 50);    // логическому 0 (отключаем светодиод)&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  if (digitalRead(H) == 0){&lt;br /&gt;
    digitalWrite(A, LOW);   // digitalRead() - считывает&lt;br /&gt;
    digitalWrite(B, HIGH);  // значение заданного входа -&lt;br /&gt;
    analogWrite(C, 0);      // 1 или 0. (Смотрим, равно ли &lt;br /&gt;
    digitalWrite(D, LOW);   // значение датчика 0. В зависи-&lt;br /&gt;
    digitalWrite(E, HIGH);  // мости от значения датчика&lt;br /&gt;
    analogWrite(G, 50);     // поворачиваем колёса.)&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
  else if (digitalRead(J) == 0){&lt;br /&gt;
    digitalWrite(A, LOW);&lt;br /&gt;
    digitalWrite(B, HIGH);  &lt;br /&gt;
    analogWrite(C, 50);       &lt;br /&gt;
    digitalWrite(D, LOW);  &lt;br /&gt;
    digitalWrite(E, HIGH); &lt;br /&gt;
    analogWrite(G, 0);&lt;br /&gt;
    }&lt;br /&gt;
  &lt;br /&gt;
  else{&lt;br /&gt;
    go();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Artecoll</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_L298N&amp;diff=539</id>
		<title>Драйвер двигателя L298N</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_L298N&amp;diff=539"/>
		<updated>2021-06-11T14:18:50Z</updated>

		<summary type="html">&lt;p&gt;Artecoll: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Файл:L298N.jpg|мини|Внешний вид драйвера L298N]]&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;L298N -&amp;#039;&amp;#039;&amp;#039;  драйвер коллекторных двигателей на 2 канала, который может также применяться для управления одним шаговым мотором. Представляет собой полный H-мост, главная функция которого — менять полярность на нагрузке. Если в качестве нагрузки будет мотор постоянного тока, то смена полярности приведет к смене направления его вращения. &lt;br /&gt;
&lt;br /&gt;
Драйвер позволяет просто и понятно управлять скоростью вращения моторов в обоих направлениях с помощью ШИМ (раздельно для каждого мотора).&lt;br /&gt;
&lt;br /&gt;
== Спецификация модуля L298N: ==&lt;br /&gt;
&lt;br /&gt;
* напряжение питания двигателей: до 35 В;&lt;br /&gt;
* рабочий ток (на каждый канал): 2 А;&lt;br /&gt;
* периодический ток (80% — вкл, 20% — выкл): 2,5 А;&lt;br /&gt;
* кратковременный ток: 3 А;&lt;br /&gt;
* вес: 33 г.&lt;br /&gt;
&lt;br /&gt;
== Контакты драйвера ==&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;OUT1 и OUT2&amp;#039;&amp;#039;&amp;#039; – разъёмы для подключения первого щёточного двигателя или  первой обмотки шагового двигателя;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;OUT3 и OUT4&amp;#039;&amp;#039;&amp;#039; – разъёмы для подключения второго щёточного двигателя или  второй обмотки шагового двигателя;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;VSS&amp;#039;&amp;#039;&amp;#039; – вход для питания двигателей (максимальный уровень +35V);&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;GND&amp;#039;&amp;#039;&amp;#039; – общий провод (не забываем соединить с аналогичным входом Arduino!!!);&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Vs&amp;#039;&amp;#039;&amp;#039; – вход для питания логики +5V. Через него непосредственно запитывается сама микросхема L298N. Есть ещё второй способ питания, при котором 5V для L298N берётся от встроенного в модуль стабилизатора напряжения. В таком случае на разъём подаётся только питание для двигателей (Vss), контакт Vs остаётся не подключенным, а на плате устанавливается перемычка питания от стабилизатора, который ограничит питающее моторы напряжение до приемлемых 5V.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;IN1, IN2&amp;#039;&amp;#039;&amp;#039; – контакты управления первым щёточным двигателем или первой обмоткой шагового двигателя.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;IN3, IN4&amp;#039;&amp;#039;&amp;#039; – контакты управления вторым щёточным двигателем или второй обмоткой шагового двигателя.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;ENA, ENB&amp;#039;&amp;#039;&amp;#039; –  контакты для активации/деактивации первого и второго двигателей или соответствующих обмоток ШД. Подача логической единицы на эти контакты разрешает вращение двигателей, а логический ноль – запрещает. Для изменения скорости вращения щёточных моторов на эти контакты подаётся ШИМ-сигнал. Для работы с шаговым двигателям, как правило, на эти контакты ставят перемычки, обеспечивающие постоянную подтяжку к +5V.&lt;br /&gt;
&lt;br /&gt;
Логика микросхемы L298N питается напряжением 5 Вольт. Для этого на модуле предусмотрен стабилизатор напряжения 78M05. На вход этого стабилизатора можно подавать напряжение до 35 В, а на выходе всегда получается 5 В. Рабочий ток у 78M05 небольшой — до 500 мА. &lt;br /&gt;
[[Файл:Назначение элементов и контактов драйвера L298N.png|мини|Назначение элементов и контактов драйвера L298N]]&lt;br /&gt;
Тройная клемма снизу отвечает за питание модуля. Самый левый контакт — питание моторов. Сюда можно подавать до 35 В. Средний контакт — земля, которая должна быть общей для модуля и контроллера. Правый контакт имеет двоякую функцию. &amp;#039;&amp;#039;&amp;#039;Если на модуле стоит перемычка питания стабилизатора, то на этом контакте будет +5В и к нему можно ничего не подключать, либо питать от него контроллер.&amp;#039;&amp;#039;&amp;#039; Но если перемычку убрать, то к этому контакту нужно будет непременно подключить +5В от контроллера, чтобы питать драйвер.&lt;br /&gt;
&lt;br /&gt;
Две другие винтовые клеммы (OUT1/2 и OUT 3/4) служат для подключения моторов. Надо отметить, что моторы постоянного тока неполярные, но от того на какой контакт мотора подается плюс, а на какой минус, зависит направление их вращения.&lt;br /&gt;
&lt;br /&gt;
== Контакты управления ==&lt;br /&gt;
&lt;br /&gt;
Контактов по три штуки на каждый мотор. Контакты ENA и ENB позволяют управлять моторами с помощью ШИМ сигнала. Если ENA и ENB подключить строго к +5 В, то моторы будут всегда вращаться с максимальной возможной скоростью. Именно для этого режима на модуле предусмотрены две перемычки рядом с ENA и ENB.&lt;br /&gt;
&lt;br /&gt;
С помощью контактов IN1,IN2,IN3,IN4 задаётся режим работы моторов. Таблица режимов для двигателя A имеет вид:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+&lt;br /&gt;
!Режим работы &lt;br /&gt;
!IN1&lt;br /&gt;
!IN2&lt;br /&gt;
|-&lt;br /&gt;
|Вращение в одну сторону&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|Вращение в обратную сторону&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|Блокировка мотора&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|-&lt;br /&gt;
|Отключение мотора&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|}&lt;br /&gt;
Если нам необходимо резко остановить мотор, то выбираем режим блокировки. Для плавной остановки — выбираем «отключение мотора»&lt;br /&gt;
&lt;br /&gt;
== Подключение драйвера L298N к Arduino uno ==&lt;br /&gt;
[[Файл:Схема подключения драйвера к Arduino uno.png|мини|Схема подключения драйвера к Arduino uno]]&lt;br /&gt;
Для управления скоростью вращения, уберем перемычку с контакта ENA.&lt;br /&gt;
&lt;br /&gt;
Перемычка питания стабилизатора установлена на драйвере. Поэтому arduino можно запитать от вывода +5В.&lt;br /&gt;
&lt;br /&gt;
== Программа для драйвера мотора L298N ==&lt;br /&gt;
&lt;br /&gt;
Программа, которая вращает мотор в одну сторону 3 секунды с максимальной скоростью, и затем 3 секунды в обратную сторону с более медленной скоростью.&lt;br /&gt;
[[Файл:Внешний вид макета.png|мини|Внешний вид макета]]&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
byte ena = 3;&lt;br /&gt;
byte in1 = 4;&lt;br /&gt;
byte in2 = 5;&lt;br /&gt;
void setup() {&lt;br /&gt;
    pinMode(ena, OUTPUT);&lt;br /&gt;
    pinMode(in1, OUTPUT);&lt;br /&gt;
    pinMode(in2, OUTPUT);&lt;br /&gt;
}&lt;br /&gt;
void loop() {&lt;br /&gt;
    // выставляем 100% мощность на моторе А - 255 из 255&lt;br /&gt;
    analogWrite(ena, 255);&lt;br /&gt;
    // выставляем режим мотора - вращение по часовой&lt;br /&gt;
    digitalWrite(in1, HIGH);&lt;br /&gt;
    digitalWrite(in2, LOW);&lt;br /&gt;
    delay(3000); // пауза 3сек&lt;br /&gt;
&lt;br /&gt;
    // выставляем мощность на мотора А - 150 из 255&lt;br /&gt;
    analogWrite(ena, 150);&lt;br /&gt;
    // режим мотора - вращение против часовой&lt;br /&gt;
    digitalWrite(in1, LOW);&lt;br /&gt;
    digitalWrite(in2, HIGH);&lt;br /&gt;
    delay(3000); // пауза 3сек&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Файл:Внешний вид макета с двумя двигателями.jpg|мини|Внешний вид макета с двумя двигателями]]&lt;br /&gt;
== Программа для управления двумя двигателями ==&lt;br /&gt;
&lt;br /&gt;
Перемычки на контактах ENA и ENB убраны - можно менять скорость вращения.&lt;br /&gt;
&lt;br /&gt;
Перемычка питания стабилизатора на драйвере убрана. Драйвер не питает Arduino.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
byte ena = 9;&lt;br /&gt;
byte in1 = 7;&lt;br /&gt;
byte in2 = 6;&lt;br /&gt;
byte enb = 3;&lt;br /&gt;
byte in3 = 5;&lt;br /&gt;
byte in4 = 4;&lt;br /&gt;
void setup() {&lt;br /&gt;
    pinMode(ena, OUTPUT);&lt;br /&gt;
    pinMode(in1, OUTPUT);&lt;br /&gt;
    pinMode(in2, OUTPUT);&lt;br /&gt;
    pinMode(enb, OUTPUT);&lt;br /&gt;
    pinMode(in3, OUTPUT);&lt;br /&gt;
    pinMode(in4, OUTPUT);&lt;br /&gt;
}&lt;br /&gt;
void loop() {&lt;br /&gt;
    // выставляем 100% мощность на моторе А - 255 из 255&lt;br /&gt;
    analogWrite(ena, 255);&lt;br /&gt;
    // выставляем 100% мощность на моторе B - 255 из 255&lt;br /&gt;
    analogWrite(enb, 255);&lt;br /&gt;
    // выставляем режим моторов - вращение по часовой&lt;br /&gt;
    digitalWrite(in1, HIGH);&lt;br /&gt;
    digitalWrite(in2, LOW);&lt;br /&gt;
    digitalWrite(in3, HIGH);&lt;br /&gt;
    digitalWrite(in4, LOW);&lt;br /&gt;
    delay(3000); // пауза 3сек&lt;br /&gt;
&lt;br /&gt;
    // выставляем мощность на мотора А - 150 из 255&lt;br /&gt;
    analogWrite(ena, 150);&lt;br /&gt;
    // выставляем мощность на мотора B - 150 из 255&lt;br /&gt;
    analogWrite(enb, 150);&lt;br /&gt;
    // режим моторов - вращение против часовой&lt;br /&gt;
    digitalWrite(in1, LOW);&lt;br /&gt;
    digitalWrite(in2, HIGH);&lt;br /&gt;
    digitalWrite(in3, LOW);&lt;br /&gt;
    digitalWrite(in4, HIGH);&lt;br /&gt;
    delay(3000); // пауза 3сек&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Artecoll</name></author>
	</entry>
	<entry>
		<id>http://wiki.me-robotics.ru/index.php?title=%D0%9C%D0%BE%D1%82%D0%BE%D1%80-%D1%80%D0%B5%D0%B4%D1%83%D0%BA%D1%82%D0%BE%D1%80&amp;diff=538</id>
		<title>Мотор-редуктор</title>
		<link rel="alternate" type="text/html" href="http://wiki.me-robotics.ru/index.php?title=%D0%9C%D0%BE%D1%82%D0%BE%D1%80-%D1%80%D0%B5%D0%B4%D1%83%D0%BA%D1%82%D0%BE%D1%80&amp;diff=538"/>
		<updated>2021-06-11T14:15:01Z</updated>

		<summary type="html">&lt;p&gt;Artecoll: У Джека Воробья не было картинки кода&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Файл:Motor postoyannogo toka reduktorom 1 48.jpg|мини|307x307пкс|&amp;#039;&amp;#039;Мотор постоянного тока с редуктором 1:48&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;
Редуктор данного мотора содержит шестерни из прочного пластика. Однако для управления массивными конструкциями использовать его не рекомендуется. Силиконовый хомут не даёт двигателю выпасть из редукторного корпуса, но он может быть отстёгнут вручную. Такой подход позволяет легко заменить двигатель на аналогичный при выходе последнего из строя.&lt;br /&gt;
&lt;br /&gt;
Данный класс моторов с редуктором выпускается 4-х типов:&lt;br /&gt;
&lt;br /&gt;
* Прямой одноосевой мотор-редуктор;&lt;br /&gt;
* Прямой двухосевой мотор-редуктор;&lt;br /&gt;
* Угловой одноосевой мотор-редуктор;&lt;br /&gt;
* Угловой двухосевой мотор-редуктор.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Raznovidnosti motorov reduktorom.jpg|337x337пкс]]  &lt;br /&gt;
&lt;br /&gt;
Вне зависимости от внешнего вида, все моторы имеют одинаковые характеристики. &lt;br /&gt;
&lt;br /&gt;
== Технические характеристики ==&lt;br /&gt;
Применительно к данным моторам-редукторам, можно выделить следующие технические характеристики:&lt;br /&gt;
&lt;br /&gt;
* Диапазон напряжений питания: 3В – 8В;&lt;br /&gt;
* Номинальный ток потребления при напряжении 3,6В: 240 мА;&lt;br /&gt;
* Передаточное число редуктора: 1/48;&lt;br /&gt;
* Скорость вращения при напряжении 3,6В без нагрузки: 170 об/мин.&lt;br /&gt;
* Крутящий момент при напряжении 6В: 800 г/см;&lt;br /&gt;
* Диаметр вала: 5.4 мм;&lt;br /&gt;
* Габариты (для прямой модификации): 64мм х 20мм х 20мм;&lt;br /&gt;
* Масса: 26 грамм.&lt;br /&gt;
&lt;br /&gt;
== Подключение к плате Arduino ==&lt;br /&gt;
На рисунке представлена схема включения двух двигателей при использовании модуля L298N и Arduino Nano.&lt;br /&gt;
[[Файл:Obzor-drayvera-motora-na-l298n-6.jpg|395x395пкс]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ниже приведён перечень выводов модуля L298N с кратким описанием каждого из них:&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;IN1, IN2&amp;#039;&amp;#039;&amp;#039; – эти контакты предназначены для управления Мотором №1 (А). В зависимости от логических уровней, установленных на этих контактах, двигатель будет вращаться в ту или иную сторону. Для получения вращения, логические уровни на этих контактах должны быть противоположны друг другу. Например: IN1=1, IN2=0 → двигатель вращается по часовой стрелке; IN1=0, IN2=1 → двигатель вращается против часовой стрелки.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;IN2, IN3&amp;#039;&amp;#039;&amp;#039; – функционал контактов аналогичен IN1 и IN2, но только для Мотора №2 (В).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;ENA&amp;#039;&amp;#039;&amp;#039; – логическая «1» на этом выводе разрешает вращение Мотора №1 (А). Также на этот контакт можно подавать ШИМ-сигнал, что позволит управлять скоростью вращения двигателя.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;ENB&amp;#039;&amp;#039;&amp;#039; – функционал контакта аналогичен ENA, но только для Мотора №2 (В).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;OUT1, OUT2&amp;#039;&amp;#039;&amp;#039; – колодка для подключения Мотора №1 (А).&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;OUT3, OUT4&amp;#039;&amp;#039;&amp;#039; – колодка для подключения Мотора №2 (В).&lt;br /&gt;
&lt;br /&gt;
Драйвер L298N и Arduino Nano питаются от напряжения 7В. Этого достаточно, для того чтобы крутить два мотор-редуктора. Для возможности регулировки скорости выводы ENA и ENB модуля L298N подключены к пинам Arduino, которые способны генерировать ШИМ-сигнал.&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;
//выводы управления первым мотором&lt;br /&gt;
#define PIN_IN1 8&lt;br /&gt;
#define PIN_IN2 7&lt;br /&gt;
#define PIN_ENA 9&lt;br /&gt;
&lt;br /&gt;
//выводы управления вторым мотором&lt;br /&gt;
#define PIN_IN3 6&lt;br /&gt;
#define PIN_IN4 5&lt;br /&gt;
#define PIN_ENB 3&lt;br /&gt;
&lt;br /&gt;
//переменная длу регулировки скорости вращения моторов&lt;br /&gt;
uint8_t SPEED = 0;&lt;br /&gt;
&lt;br /&gt;
//переменная общего состояния системы&lt;br /&gt;
uint8_t state = 0;&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  //все пины на выход&lt;br /&gt;
  pinMode(PIN_IN1, OUTPUT);&lt;br /&gt;
  pinMode(PIN_IN2, OUTPUT);&lt;br /&gt;
  pinMode(PIN_ENA, OUTPUT);&lt;br /&gt;
  pinMode(PIN_IN3, OUTPUT);&lt;br /&gt;
  pinMode(PIN_IN4, OUTPUT);&lt;br /&gt;
  pinMode(PIN_ENB, OUTPUT);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  analogWrite(PIN_ENA, SPEED);&lt;br /&gt;
  analogWrite(PIN_ENB, SPEED);&lt;br /&gt;
  &lt;br /&gt;
  //вращение моторов в одну сторону с постепенным наращиванием скорости&lt;br /&gt;
  if (state == 0){&lt;br /&gt;
    SPEED += 17;&lt;br /&gt;
    if (SPEED == 255) state = 1;&lt;br /&gt;
    digitalWrite(PIN_IN1, HIGH);&lt;br /&gt;
    digitalWrite(PIN_IN2, LOW);&lt;br /&gt;
    digitalWrite(PIN_IN3, HIGH);&lt;br /&gt;
    digitalWrite(PIN_IN4, LOW);&lt;br /&gt;
    delay(500);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
  //вращение моторов на максимальной скорости 5 секунд&lt;br /&gt;
  else if (state == 1){&lt;br /&gt;
    delay(5000);&lt;br /&gt;
    state = 2;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
  //вращение моторов в противоположную сторону с постепенным уменьшением скорости&lt;br /&gt;
  else if (state == 2){&lt;br /&gt;
    SPEED -= 17;&lt;br /&gt;
    if (SPEED == 0) state = 3;&lt;br /&gt;
    digitalWrite(PIN_IN1, LOW);&lt;br /&gt;
    digitalWrite(PIN_IN2, HIGH);&lt;br /&gt;
    digitalWrite(PIN_IN3, LOW);&lt;br /&gt;
    digitalWrite(PIN_IN4, HIGH);&lt;br /&gt;
    delay(500);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
  //остановка моторов на 5 секунд&lt;br /&gt;
  else if (state == 3){&lt;br /&gt;
    delay(5000);&lt;br /&gt;
    state = 0;&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Artecoll</name></author>
	</entry>
	<entry>
		<id>http://wiki.me-robotics.ru/index.php?title=%D0%A1%D1%82%D0%BE%D1%80%D0%BE%D0%B6%D0%B5%D0%B2%D0%BE%D0%B9_%D1%82%D0%B0%D0%B9%D0%BC%D0%B5%D1%80&amp;diff=537</id>
		<title>Сторожевой таймер</title>
		<link rel="alternate" type="text/html" href="http://wiki.me-robotics.ru/index.php?title=%D0%A1%D1%82%D0%BE%D1%80%D0%BE%D0%B6%D0%B5%D0%B2%D0%BE%D0%B9_%D1%82%D0%B0%D0%B9%D0%BC%D0%B5%D1%80&amp;diff=537"/>
		<updated>2021-06-11T13:45:41Z</updated>

		<summary type="html">&lt;p&gt;Artecoll: /* Код для «зависания» Arduino: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;Trema-модуль Сторожевой таймер&amp;#039;&amp;#039; - это модуль позволяющий контролировать «зависание» Arduino. Если Arduino «зависнет» то Trema-модуль её перезагрузит как при нажатии кнопки «reset».&lt;br /&gt;
&lt;br /&gt;
Сторожевые таймеры также называют WDT (WatchDog Timer - сторожевой пёс).&lt;br /&gt;
&lt;br /&gt;
[[Файл:1.png|безрамки]]&lt;br /&gt;
&lt;br /&gt;
== Спецификация: ==&lt;br /&gt;
&lt;br /&gt;
* Входное напряжение: 5 В (постоянного тока)&lt;br /&gt;
* Потребляемый ток:&lt;br /&gt;
* Длительность импульса на входе S (Signal):&lt;br /&gt;
* Тайм-аут сторожевого таймера: 40 с. ±5 с.&lt;br /&gt;
* Длительность импульса на выходе RES (reset):&lt;br /&gt;
* Рабочая температура:&lt;br /&gt;
* Габариты: 30x30 мм.&lt;br /&gt;
&lt;br /&gt;
Все модули линейки &amp;quot;Trema&amp;quot; выполнены в одном формате&lt;br /&gt;
&lt;br /&gt;
[[Файл:222.png]]&lt;br /&gt;
&lt;br /&gt;
== Подключение: ==&lt;br /&gt;
&lt;br /&gt;
* Вход модуля S (Signal) подключается к любому выводу Arduino (нужен для сброса таймера). Если к Arduino в Вашем устройстве подключён модуль получающий данные от Arduino, не реже тайм-аута сторожевого таймера, то его вход S (Signal) можно подключить к Arduino вместе со входом этого модуля. Например, если Вы выводите данные в LCD дисплей по шине I2C, то вход S (Signal) сторожевого таймера можно подключить к выводу SDA или SCL этой шины. При таком подключении отпадает необходимость в написании кода для сброса таймера и не используется отдельный вывод для его работы.&lt;br /&gt;
* Выход модуля RES (Reset) подключается к выводу RESET Arduino (нужен для перезагрузки Arduino).&lt;br /&gt;
&lt;br /&gt;
== Используя проводной шлейф и Piranha UNO ==&lt;br /&gt;
Используя провода «Папа — Мама», подключаем  напрямую к контроллеру Piranha UNO.&lt;br /&gt;
&lt;br /&gt;
[[Файл:376f3730ebb33331e64d0048e5492430.png]]&lt;br /&gt;
&lt;br /&gt;
== Питание: ==&lt;br /&gt;
&lt;br /&gt;
* Напряжение питания 5 В постоянного тока подаётся на выводы V (Vcc) и G (GND) модуля.&lt;br /&gt;
&lt;br /&gt;
== Подробнее о модуле: ==&lt;br /&gt;
В программе Arduino нужно прописать код который будет сбрасывать Trema-модуль сторожевой таймер, подавая импульсы на его вход S (Signal). Пока таймер постоянно сбрасывается, программа (устройство, Arduino) работает нормально. Если сторожевой таймер перестал получать импульсы сброса (пауза между импульсами превысила Тайм-аут таймера), то он «решает» что Arduino «зависла» и формирует импульс логического «0» на своём выходе RES (Reset) который должен быть подключён к выводу RESET Arduino.&lt;br /&gt;
&lt;br /&gt;
На вход S (Signal) сторожевого таймера можно подавать любые импульсы (положительные или отрицательные). Импульс перезагрузки на выходе RES (Reset) сторожевого таймера формируется при паузе между импульсами на входе S (Signal) больше чем Тайм-аут, не зависимо от логического уровня на входе S (Signal).&lt;br /&gt;
&lt;br /&gt;
Trema-модуль сторожевой таймер аппаратно сбрасывается (вне зависимости от состояний на его входе) при нажатии на кнопку Arduino RESET и при старте загрузки скетчей. Следовательно, Trema сторожевой таймер не требуется отключать от Arduino во время загрузки скетчей, они успеют загрузиться и выполнить сброс таймера до формирования импульса перезагрузки на его выходе.&lt;br /&gt;
&lt;br /&gt;
== Примеры: ==&lt;br /&gt;
&lt;br /&gt;
=== Код для «зависания» Arduino: ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
const uint8_t pinVD = LED_BUILTIN; //определяем константу с указанием № вывода Arduino,&lt;br /&gt;
                                   //к которому подключен светодиод (на плате)&lt;br /&gt;
const uint8_t pinWDT = 5;          //определяем константу с указанием № вывода Arduino,&lt;br /&gt;
                                   //к которому подключен вход S сторожевого таймера (любой вывод)&lt;br /&gt;
void setup(void) {&lt;br /&gt;
  pinMode(pinVD, OUTPUT);          //конфигурируем вывод подключенный к светодиоду как выход&lt;br /&gt;
  pinMode(pinWDT, OUTPUT);         //конфигурируем вывод подключенный к стородевому таймеру как выход&lt;br /&gt;
  digitalWrite(pinVD, LOW);        //устанавливаем 0 на входе светодиода (выключаем светодиод)&lt;br /&gt;
  digitalWrite(pinWDT, LOW);       //0 на входе (далее будем подавать положит. импульсы для сброса)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop(void) {&lt;br /&gt;
  if (millis() % 1000 &amp;lt; 10){       //если каждые первые 10 мс новой секунды&lt;br /&gt;
    digitalWrite(pinWDT, HIGH);    //формируем импульс на входе таймера&lt;br /&gt;
    digitalWrite(pinWDT, LOW);     //завершаем импульс на входе таймера&lt;br /&gt;
    digitalWrite(pinVD, digitalRead(pinVD)^1);  //меняем состояние светодиода (вкл. на выкл. и наоборот)&lt;br /&gt;
    delay(11);                     //ждём 11 мс, чтобы не выполнять if более одного раза в секунду&lt;br /&gt;
    memset(malloc(100), 5, 10);    //пытаемся зависнуть&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* В начале кода (до функции setup) определяются выводы к которым подключён светодиод и вход Trema сторожевого таймера.&lt;br /&gt;
* В коде setup() определённые ранее выводы переводятся в режим выхода и на них устанавливается уровень логического «0» (LOW).&lt;br /&gt;
* В коде loop() все функции находятся в теле оператора if и выполняются только если его условие верно.&lt;br /&gt;
** Условие (millis()%1000&amp;lt;10) будет верно в течении 10 мс в начале каждой секунды (1000 мс) с начала старта скетча, то есть в промежутки времени: 0...10 мс, 1000...1010 мс, 2000...2010 мс, 3000...3010 мс и т.д.&lt;br /&gt;
** Первые две функции digitalWrite() формируют положительный импульс на входе Trema сторожевого таймера (устанавливая высокий логический уровень и сразу сбрасывая его в низкий логический уровень)&lt;br /&gt;
** Следующая строка digitalWrite(pinVD, digitalRead(pinVD)^1) считывает установленный ранее логический уровень вывода светодиода и меняет его на противоположный&lt;br /&gt;
** Далее следует задержка delay(11) чтоб все функции в теле оператора if выполнялись только 1 раз в секунду. Если вход в тело оператора if произошел спустя 1001 мс после старта скетча, то после задержки в 11 мс будет 1012 мс, что не попадает под условие оператора if до начала следующей секунды.&lt;br /&gt;
** И последняя строка memset(malloc(100), 5, 10) пытается «зависнуть», делается это так:&lt;br /&gt;
*** Функция malloc(100) выделяет область памяти ОЗУ размером в 100 байт, но так как мы не освобождаем эту область функцией free(), то память в «куче» ОЗУ скоро заполнится.&lt;br /&gt;
*** Функция memset(адрес, 5, 10) записывает значение 5 в 10 байт начиная с адреса возвращённого функцией malloc(100).&lt;br /&gt;
*** Как только память «кучи» ОЗУ заполнится, функция malloc(100) откажется выделять новую область памяти размером 100 байт и вернёт 0.&lt;br /&gt;
*** Но функция memset(адрес, 5, 10) воспримет этот 0 как адрес начиная с которого запишет десять пятёрок, что и приведёт к «зависанию» (вместо значения 5 можно записывать другие значения).&lt;br /&gt;
*** В качестве параметра функции malloc() вместо 100 можно указать любое другое число, чем оно будет больше, тем быстрее закончится память «кучи» ОЗУ и быстрее произойдёт «зависание».&lt;br /&gt;
&lt;br /&gt;
В результате светодиод будет мигать несколько секунд пока не «зависнет» Arduino. Так как Arduino «висит», она не отправляет команды ни светодиоду, ни сторожевому таймеру, следовательно, сторожевой таймер не сбрасывается. По истечении тайм-аута сторожевой таймер сформирует отрицательный импульс на выходе RES который подключён к выводу RESET Arduino, что приведёт к её перезагрузке. После перезагрузки светодиод опять начнёт мигать пока Arduino снова не «зависнет». Если исключить сторожевой таймер из схемы, то Arduino после «зависания» не перезагрузится, пока мы не нажмём на кнопку RESET или не отключим питание.&lt;br /&gt;
&lt;br /&gt;
=== Примечание: ===&lt;br /&gt;
Так как в рассматриваемой схеме Arduino меняет состояние светодиода каждую секунду (пока она не «зависнет»), что ниже времени тайм-аута сторожевого таймера, то вход S (Signal) сторожевого таймера можно подключить вместе со светодиодом к выводу pinVD, исключив из скетча все строки в которых встречается константа pinWDT. Таким образом мы избавляемся от необходимости выделения отдельного вывода под сторожевой таймер, и от необходимости написания для него дополнительно кода.&lt;br /&gt;
&lt;br /&gt;
== Применение: ==&lt;br /&gt;
&lt;br /&gt;
* В качестве альтернативы WDT интегрированного в Arduino, в отличии от которого, для работы Trema WDT не требуется прошивать новый bootloader (загрузчик). Или в случаях когда тайм-аут WDT должен превышать предельное время в 8 сек. для интегрированного в Arduino.&lt;br /&gt;
* Для контроля «зависаний» микроконтроллеров без WDT.&lt;br /&gt;
* Для контроля «зависаний» иных модулей подключаемых к Arduino, которым для возобновления работы достаточно вновь получить данные инициализации от Arduino.&lt;/div&gt;</summary>
		<author><name>Artecoll</name></author>
	</entry>
	<entry>
		<id>http://wiki.me-robotics.ru/index.php?title=%D0%A1%D1%82%D0%BE%D1%80%D0%BE%D0%B6%D0%B5%D0%B2%D0%BE%D0%B9_%D1%82%D0%B0%D0%B9%D0%BC%D0%B5%D1%80&amp;diff=536</id>
		<title>Сторожевой таймер</title>
		<link rel="alternate" type="text/html" href="http://wiki.me-robotics.ru/index.php?title=%D0%A1%D1%82%D0%BE%D1%80%D0%BE%D0%B6%D0%B5%D0%B2%D0%BE%D0%B9_%D1%82%D0%B0%D0%B9%D0%BC%D0%B5%D1%80&amp;diff=536"/>
		<updated>2021-06-11T13:45:25Z</updated>

		<summary type="html">&lt;p&gt;Artecoll: У Джека Воробья не было картинки кода&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;Trema-модуль Сторожевой таймер&amp;#039;&amp;#039; - это модуль позволяющий контролировать «зависание» Arduino. Если Arduino «зависнет» то Trema-модуль её перезагрузит как при нажатии кнопки «reset».&lt;br /&gt;
&lt;br /&gt;
Сторожевые таймеры также называют WDT (WatchDog Timer - сторожевой пёс).&lt;br /&gt;
&lt;br /&gt;
[[Файл:1.png|безрамки]]&lt;br /&gt;
&lt;br /&gt;
== Спецификация: ==&lt;br /&gt;
&lt;br /&gt;
* Входное напряжение: 5 В (постоянного тока)&lt;br /&gt;
* Потребляемый ток:&lt;br /&gt;
* Длительность импульса на входе S (Signal):&lt;br /&gt;
* Тайм-аут сторожевого таймера: 40 с. ±5 с.&lt;br /&gt;
* Длительность импульса на выходе RES (reset):&lt;br /&gt;
* Рабочая температура:&lt;br /&gt;
* Габариты: 30x30 мм.&lt;br /&gt;
&lt;br /&gt;
Все модули линейки &amp;quot;Trema&amp;quot; выполнены в одном формате&lt;br /&gt;
&lt;br /&gt;
[[Файл:222.png]]&lt;br /&gt;
&lt;br /&gt;
== Подключение: ==&lt;br /&gt;
&lt;br /&gt;
* Вход модуля S (Signal) подключается к любому выводу Arduino (нужен для сброса таймера). Если к Arduino в Вашем устройстве подключён модуль получающий данные от Arduino, не реже тайм-аута сторожевого таймера, то его вход S (Signal) можно подключить к Arduino вместе со входом этого модуля. Например, если Вы выводите данные в LCD дисплей по шине I2C, то вход S (Signal) сторожевого таймера можно подключить к выводу SDA или SCL этой шины. При таком подключении отпадает необходимость в написании кода для сброса таймера и не используется отдельный вывод для его работы.&lt;br /&gt;
* Выход модуля RES (Reset) подключается к выводу RESET Arduino (нужен для перезагрузки Arduino).&lt;br /&gt;
&lt;br /&gt;
== Используя проводной шлейф и Piranha UNO ==&lt;br /&gt;
Используя провода «Папа — Мама», подключаем  напрямую к контроллеру Piranha UNO.&lt;br /&gt;
&lt;br /&gt;
[[Файл:376f3730ebb33331e64d0048e5492430.png]]&lt;br /&gt;
&lt;br /&gt;
== Питание: ==&lt;br /&gt;
&lt;br /&gt;
* Напряжение питания 5 В постоянного тока подаётся на выводы V (Vcc) и G (GND) модуля.&lt;br /&gt;
&lt;br /&gt;
== Подробнее о модуле: ==&lt;br /&gt;
В программе Arduino нужно прописать код который будет сбрасывать Trema-модуль сторожевой таймер, подавая импульсы на его вход S (Signal). Пока таймер постоянно сбрасывается, программа (устройство, Arduino) работает нормально. Если сторожевой таймер перестал получать импульсы сброса (пауза между импульсами превысила Тайм-аут таймера), то он «решает» что Arduino «зависла» и формирует импульс логического «0» на своём выходе RES (Reset) который должен быть подключён к выводу RESET Arduino.&lt;br /&gt;
&lt;br /&gt;
На вход S (Signal) сторожевого таймера можно подавать любые импульсы (положительные или отрицательные). Импульс перезагрузки на выходе RES (Reset) сторожевого таймера формируется при паузе между импульсами на входе S (Signal) больше чем Тайм-аут, не зависимо от логического уровня на входе S (Signal).&lt;br /&gt;
&lt;br /&gt;
Trema-модуль сторожевой таймер аппаратно сбрасывается (вне зависимости от состояний на его входе) при нажатии на кнопку Arduino RESET и при старте загрузки скетчей. Следовательно, Trema сторожевой таймер не требуется отключать от Arduino во время загрузки скетчей, они успеют загрузиться и выполнить сброс таймера до формирования импульса перезагрузки на его выходе.&lt;br /&gt;
&lt;br /&gt;
== Примеры: ==&lt;br /&gt;
&lt;br /&gt;
=== Код для «зависания» Arduino: ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
const uint8_t pinVD = LED_BUILTIN; //определяем константу с указанием № вывода Arduino,&lt;br /&gt;
                                   //к которому подключен светодиод (на плате)&lt;br /&gt;
const uint8_t pinWDT = 5;          //определяем константу с указанием № вывода Arduino,&lt;br /&gt;
                                   //к которому подключен вход S сторожевого таймера (любой вывод)&lt;br /&gt;
void setup(void) {&lt;br /&gt;
  pinMode(pinVD, OUTPUT);          //конфигурируем вывод подключенный к светодиоду как выход&lt;br /&gt;
  pinMode(pinWDT, OUTPUT);         //конфигурируем вывод подключенный к стородевому таймеру как выход&lt;br /&gt;
  digitalWrite(pinVD, LOW);        //устанавливаем 0 на входе светодиода (выключаем светодиод)&lt;br /&gt;
  digitalWrite(pinWDT, LOW);       //0 на входе (далее будем подавать положит. импульсы для сброса)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop(void) {&lt;br /&gt;
  if (millis() % 1000 &amp;lt; 10){       //если каждые первые 10 мс новой секунды&lt;br /&gt;
    digitalWrite(pinWDT, HIGH);    //формируем импульс на входе таймера&lt;br /&gt;
    digitalWrite(pinWDT, LOW);     //завершаем импульс на входе таймера&lt;br /&gt;
    digitalWrite(pinVD, digitalRead(pinVD)^1);  //меняем состояние светодиода (вкл. на выкл. и наоборот)&lt;br /&gt;
    delay(11);                     //ждём 11 мс, чтобы не выполнять if более одного раза в секунду&lt;br /&gt;
    memset(malloc(100), 5, 10);    //пытаемся зависнуть&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
[[Файл:333.png|1160x1160пкс]]&lt;br /&gt;
&lt;br /&gt;
* В начале кода (до функции setup) определяются выводы к которым подключён светодиод и вход Trema сторожевого таймера.&lt;br /&gt;
* В коде setup() определённые ранее выводы переводятся в режим выхода и на них устанавливается уровень логического «0» (LOW).&lt;br /&gt;
* В коде loop() все функции находятся в теле оператора if и выполняются только если его условие верно.&lt;br /&gt;
** Условие (millis()%1000&amp;lt;10) будет верно в течении 10 мс в начале каждой секунды (1000 мс) с начала старта скетча, то есть в промежутки времени: 0...10 мс, 1000...1010 мс, 2000...2010 мс, 3000...3010 мс и т.д.&lt;br /&gt;
** Первые две функции digitalWrite() формируют положительный импульс на входе Trema сторожевого таймера (устанавливая высокий логический уровень и сразу сбрасывая его в низкий логический уровень)&lt;br /&gt;
** Следующая строка digitalWrite(pinVD, digitalRead(pinVD)^1) считывает установленный ранее логический уровень вывода светодиода и меняет его на противоположный&lt;br /&gt;
** Далее следует задержка delay(11) чтоб все функции в теле оператора if выполнялись только 1 раз в секунду. Если вход в тело оператора if произошел спустя 1001 мс после старта скетча, то после задержки в 11 мс будет 1012 мс, что не попадает под условие оператора if до начала следующей секунды.&lt;br /&gt;
** И последняя строка memset(malloc(100), 5, 10) пытается «зависнуть», делается это так:&lt;br /&gt;
*** Функция malloc(100) выделяет область памяти ОЗУ размером в 100 байт, но так как мы не освобождаем эту область функцией free(), то память в «куче» ОЗУ скоро заполнится.&lt;br /&gt;
*** Функция memset(адрес, 5, 10) записывает значение 5 в 10 байт начиная с адреса возвращённого функцией malloc(100).&lt;br /&gt;
*** Как только память «кучи» ОЗУ заполнится, функция malloc(100) откажется выделять новую область памяти размером 100 байт и вернёт 0.&lt;br /&gt;
*** Но функция memset(адрес, 5, 10) воспримет этот 0 как адрес начиная с которого запишет десять пятёрок, что и приведёт к «зависанию» (вместо значения 5 можно записывать другие значения).&lt;br /&gt;
*** В качестве параметра функции malloc() вместо 100 можно указать любое другое число, чем оно будет больше, тем быстрее закончится память «кучи» ОЗУ и быстрее произойдёт «зависание».&lt;br /&gt;
&lt;br /&gt;
В результате светодиод будет мигать несколько секунд пока не «зависнет» Arduino. Так как Arduino «висит», она не отправляет команды ни светодиоду, ни сторожевому таймеру, следовательно, сторожевой таймер не сбрасывается. По истечении тайм-аута сторожевой таймер сформирует отрицательный импульс на выходе RES который подключён к выводу RESET Arduino, что приведёт к её перезагрузке. После перезагрузки светодиод опять начнёт мигать пока Arduino снова не «зависнет». Если исключить сторожевой таймер из схемы, то Arduino после «зависания» не перезагрузится, пока мы не нажмём на кнопку RESET или не отключим питание.&lt;br /&gt;
&lt;br /&gt;
=== Примечание: ===&lt;br /&gt;
Так как в рассматриваемой схеме Arduino меняет состояние светодиода каждую секунду (пока она не «зависнет»), что ниже времени тайм-аута сторожевого таймера, то вход S (Signal) сторожевого таймера можно подключить вместе со светодиодом к выводу pinVD, исключив из скетча все строки в которых встречается константа pinWDT. Таким образом мы избавляемся от необходимости выделения отдельного вывода под сторожевой таймер, и от необходимости написания для него дополнительно кода.&lt;br /&gt;
&lt;br /&gt;
== Применение: ==&lt;br /&gt;
&lt;br /&gt;
* В качестве альтернативы WDT интегрированного в Arduino, в отличии от которого, для работы Trema WDT не требуется прошивать новый bootloader (загрузчик). Или в случаях когда тайм-аут WDT должен превышать предельное время в 8 сек. для интегрированного в Arduino.&lt;br /&gt;
* Для контроля «зависаний» микроконтроллеров без WDT.&lt;br /&gt;
* Для контроля «зависаний» иных модулей подключаемых к Arduino, которым для возобновления работы достаточно вновь получить данные инициализации от Arduino.&lt;/div&gt;</summary>
		<author><name>Artecoll</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=535</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=535"/>
		<updated>2021-06-08T20:22:24Z</updated>

		<summary type="html">&lt;p&gt;Artecoll: /* Вывод короткого звукового сигнала. */&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>Artecoll</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=534</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=534"/>
		<updated>2021-06-08T20:21:39Z</updated>

		<summary type="html">&lt;p&gt;Artecoll: У Джека Воробья нет картинки кода&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>Artecoll</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=533</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=533"/>
		<updated>2021-06-08T20:16:24Z</updated>

		<summary type="html">&lt;p&gt;Artecoll: У Джека Воробья нет картинки кода&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;
[[Файл:8.png|без|мини|933x933пкс]]&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>Artecoll</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=532</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=532"/>
		<updated>2021-06-08T16:11:48Z</updated>

		<summary type="html">&lt;p&gt;Artecoll: У джека Воробья нет картинки кода&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;
[[Файл:7.png|888x888пкс]]&lt;br /&gt;
&lt;br /&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;
[[Файл:8.png|без|мини|933x933пкс]]&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>Artecoll</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&amp;diff=531</id>
		<title>Сервопривод</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&amp;diff=531"/>
		<updated>2021-06-08T16:01:30Z</updated>

		<summary type="html">&lt;p&gt;Artecoll: У Джека Воробья не было картинки кода&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Файл:Сервопривод.png|справа|210x210px|Сервопривод MG995|альт=]]&amp;#039;&amp;#039;&amp;#039;Сервопривод&amp;#039;&amp;#039;&amp;#039; — это мотор, положением вала которого мы можем управлять. От обычного мотора он отличается тем, что ему можно точно в градусах задать положение, в которое встанет вал. Сервоприводы используются для моделирования различных механических движений роботов, в том числе сервоприводом может управляться &amp;quot;клешня-захват&amp;quot;, с помощью которой робот будет захватывать кубики-грузы и перевозить их по указанным маршрутам.&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;
Шестерни для сервоприводов бывают из разных материалов:&lt;br /&gt;
&lt;br /&gt;
# &amp;#039;&amp;#039;Пластиковые шестерни&amp;#039;&amp;#039; очень лёгкие, не подвержены износу, более всего распространены в сервоприводах, но их недостаток - это то, что они не выдерживают больших нагрузок.&lt;br /&gt;
# &amp;#039;&amp;#039;Карбоновые шестерни&amp;#039;&amp;#039; более долговечны, практически не изнашиваются, в несколько раз прочнее пластиковых. Основной недостаток - дороговизна.&lt;br /&gt;
# &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; обладает плотным железным ротором с проволочной обмоткой и магнитами вокруг него. Ротор имеет несколько секций, поэтому, когда мотор вращается, ротор вызывает небольшие колебания мотора при прохождении секций мимо магнитов, а в результате получается сервопривод, который вибрирует и является менее точным, чем сервопривод с мотором без сердечника.&lt;br /&gt;
# &amp;#039;&amp;#039;Мотор с полым ротором(без сердечника)&amp;#039;&amp;#039; обладает единым магнитным сердечником с обмоткой в форме цилиндра или колокола вокруг магнита. Конструкция без сердечника легче по весу и не имеет секций, что приводит к более быстрому отклику и ровной работе без вибраций. Такие моторы дороже, но они обеспечивают более высокий уровень контроля, вращающего момента и скорости по сравнения со стандартными.&lt;br /&gt;
# &amp;#039;&amp;#039;У бесколлекторных моторов&amp;#039;&amp;#039; нет щёток, а значит они не создают сопротивление вращению и не изнашиваются, скорость и момент выше при токопотреблении равном коллекторным моторам. Сервоприводы с бесколлекторным мотором — самые дорогие сервоприводы, однако при этом они обладают лучшими характеристиками по сравнению с сервоприводами с другими типами моторов.&lt;br /&gt;
&lt;br /&gt;
== Библиотека Servo ==&lt;br /&gt;
Можно генерировать управляющие импульсы самостоятельно, для этого существует стандартная библиотека &amp;#039;&amp;#039;&amp;#039;Servo&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Библиотека Servo позволяет осуществлять программное управление сервоприводами. Управление осуществляется следующими функциями:&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;attach()&amp;#039;&amp;#039;&amp;#039; - присоединяет объект к конкретному выводу платы. Возможны два варианта синтаксиса для этой функции: servo.attach(pin) и servo.attach(pin, min, max). При этом pin - номер пина, к которому присоединяют сервопривод, min и max - длины импульсов в микросекундах, отвечающих за углы поворота 0° и 180°. По     умолчанию выставляются равными 544 мкс и 2400 мкс соответственно. Возвращаемого значения нет.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;write()&amp;#039;&amp;#039;&amp;#039; - отдаёт команду сервоприводу принять некоторое значение параметра. Синтаксис: servo.write(angle), где angle - угол, на который должен повернуться сервопривод.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;writeMicroseconds()&amp;#039;&amp;#039;&amp;#039; - отдаёт команду послать на сервопривод импульс определённой длины, является низкоуровневым аналогом предыдущей команды. Синтаксис следующий: servo.writeMicroseconds(uS), где uS - длина импульса в микросекундах. Возвращаемого значения нет.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;read()&amp;#039;&amp;#039;&amp;#039; - читает текущее значение угла, в котором находится сервопривод. Синтаксис: servo.read(), возвращается целое значение от 0° до 180°.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;attached()&amp;#039;&amp;#039;&amp;#039; - проверка, была ли присоединён объект к конкретному пину. Синтаксис следующий: servo.attached(), возвращается логическая истина, если объект была присоединён к какому-либо пину, или ложь в обратном случае.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;detach()&amp;#039;&amp;#039;&amp;#039; - производит действие, обратное действию attach(), то есть отсоединяет объект от пина, к которому был приписан. Синтаксис: servo.detach()&lt;br /&gt;
&lt;br /&gt;
В библиотеке Servo для Arduino по умолчанию выставлены следующие значения длин импульса: 544 мкс - для 0° и 2400 мкс - для 180°.&lt;br /&gt;
== Подключение к Arduino ==&lt;br /&gt;
Для сборки модели с сервоприводом нам потребуется:&lt;br /&gt;
&lt;br /&gt;
* плата Arduino&lt;br /&gt;
* 3 провода “папа-папа”&lt;br /&gt;
* сервопривод&lt;br /&gt;
&lt;br /&gt;
Многие сервоприводы могут быть подключены к Arduino непосредственно. Для этого от них идёт шлейф из трёх проводов:&lt;br /&gt;
&lt;br /&gt;
* красный - питание; подключается к контакту 3.3/5V или напрямую к источнику питания&lt;br /&gt;
* коричневый или чёрный - земля (GND)&lt;br /&gt;
* жёлтый или белый - сигнал; подключается к цифровому выходу Arduino&lt;br /&gt;
&lt;br /&gt;
[[Файл:Подключение сервопривода к Arduino.jpg]]&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;Servo.h&amp;gt; //библиотека для сервопривода (есть в Ардуино)&lt;br /&gt;
Servo servo; // Объявляем переменную servo типа Servo&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  servo.attach(10); //привязываем привод к порту 10&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  servo.write(0); // ставим вал под 0 градусов&lt;br /&gt;
  delay(2000);&lt;br /&gt;
  servo.write(180); // вал под 180 градусов&lt;br /&gt;
  delay(2000);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
Последние четыре команды программы задают угол поворота вала сервопривода и время ожидания (в миллисекундах) до следующего поворота (эти цифры можно поменять).&lt;/div&gt;</summary>
		<author><name>Artecoll</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_%D1%8D%D0%BB%D0%B5%D0%BA%D1%82%D1%80%D0%BE%D0%B4%D0%B2%D0%B8%D0%B3%D0%B0%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=530</id>
		<title>Шаговый электродвигатель</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_%D1%8D%D0%BB%D0%B5%D0%BA%D1%82%D1%80%D0%BE%D0%B4%D0%B2%D0%B8%D0%B3%D0%B0%D1%82%D0%B5%D0%BB%D1%8C&amp;diff=530"/>
		<updated>2021-06-08T15:56:12Z</updated>

		<summary type="html">&lt;p&gt;Artecoll: У Джека Воробья не было картинки кода&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Прежде всего, шаговый двигатель — это двигатель. Это означает, что он преобразует электрическую энергию в механическую. Основное отличие между ним и всеми остальными типами двигателей состоит в способе, благодаря которому происходит вращение. &lt;br /&gt;
[[Файл:Шаговый электродвигатель .png|справа|Шаговый электродвигатель ]]&lt;br /&gt;
В отличие от других моторов, шаговые двигатели вращаются &amp;lt;u&amp;gt;НЕ&amp;lt;/u&amp;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;
Ниже можно увидеть 4 обмотки, расположенные под углом 90° по отношению друг к другу, размещенные на статоре. Различия в способах подключения обмоток в конечном счете определяют тип подключения шагового двигателя. На рисунке выше, обмотки не соединяются вместе. Мотор по такой схеме имеет шаг поворота равный 90°. Обмотки задействуются по кругу — одна за другой. Направление вращения вала определяется порядком, в котором задействуются обмотки. Вал двигателя поворачивается на 90° каждый раз, когда через катушку протекает ток.&lt;br /&gt;
[[Файл:Основы работы шагового двигателя.png|мини|Основы работы шагового двигателя]]&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;
&lt;br /&gt;
====== &amp;#039;&amp;#039;&amp;#039;Полношаговый режим управления:&amp;#039;&amp;#039;&amp;#039; ======&lt;br /&gt;
Для реализации этого способа, напряжение на обмотки подается попарно. В зависимости от способа подключения обмоток (последовательно или параллельно), мотору потребуется двойное напряжение или двойной ток для работы по отношению к необходимым при возбуждении одной обмотки. В этом случае мотор будет выдавать 100% номинального вращающего момента.&lt;br /&gt;
[[Файл:Однообмоточный режим.gif|мини|Однообмоточный режим]]&lt;br /&gt;
&lt;br /&gt;
====== &amp;#039;&amp;#039;&amp;#039;Полушаговый режим:&amp;#039;&amp;#039;&amp;#039; ======&lt;br /&gt;
Это очень интересный способ получить удвоенную точность системы позиционирования, не меняя при этом ничего в «железе»! Для реализации этого метода, все пары обмоток могут запитываться одновременно, в результате чего, ротор повернется на половину своего нормального шага. Этот метод может быть также реализован с использованием одной или двух обмоток. Используя этот метод, тот же самый мотор сможет дать удвоенное число шагов на оборот, что означает двойную точность для системы позиционирования. Например, этот мотор даст 8 шагов на оборот!&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;
==== &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;
[[Файл:Работа гибридного шагового двигателя.gif|мини|176x176пкс|Работа гибридного шагового двигателя|ссылка=Special:FilePath/Работа_гибридного_шагового_двигателя.gif]]&lt;br /&gt;
Данный тип шаговых моторов получил название «гибридный» из-за того, что сочетает в себе характеристики шаговых двигателей и с постоянными магнитами и с переменным магнитным сопротивлением. Они обладают отличными удерживающим и динамическим крутящим моментами, а также очень маленькую величину шага, лежащую в пределах 0.9-5°, обеспечивая великолепную точность. Их механические части могут вращаться с большими скоростями, чем другие типы шаговых моторов. Этот тип двигателей используется в станках ЧПУ high-end класса и в роботах. Главный их недостаток — высокая стоимость.&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,5—2 раза ниже сервоприводов. Шаговый привод, как недорогая альтернатива сервоприводу, наилучшим образом подходит для автоматизации отдельных узлов и систем, где не требуется высокая динамика. Можно отметить также длительный срок службы, порой сравнимый со временем морального устаревания или выработки ресурса всего станка; точность работы ШД за это время падает незначительно. Нетребовательны к техобслуживанию.&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;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#include &amp;lt;Stepper.h&amp;gt; //библиотека для двигателя (Есть в Ардуино)&lt;br /&gt;
const int stepsPerRevolution = 200;&lt;br /&gt;
Stepper myStepper (stepsPerRevolution, 8, 9, 10, 11); //подключение к пинам&lt;br /&gt;
&lt;br /&gt;
void setup() {&lt;br /&gt;
  myStepper.setSpeed(60); // установка скорости вращения&lt;br /&gt;
  Serial.begin(9600);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  Serial.println(&amp;quot;Move right&amp;quot;); //по часовой стрелке&lt;br /&gt;
  myStepper.step(stepsPerRevolution);&lt;br /&gt;
  delay(1000);&lt;br /&gt;
  Serial.println(&amp;quot;Move left&amp;quot;); // против часовой&lt;br /&gt;
  myStepper.step(-stepsPerRevolution);&lt;br /&gt;
  delay(1000);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Artecoll</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=303</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=303"/>
		<updated>2021-05-29T18:30:01Z</updated>

		<summary type="html">&lt;p&gt;Artecoll: Джек Воробей переворачивается в гробу&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;
==== &amp;#039;&amp;#039;&amp;#039;Принцип работы&amp;#039;&amp;#039;&amp;#039; ====&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;
* эффективная длина измерения 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;
==== &amp;#039;&amp;#039;&amp;#039;Подключение:&amp;#039;&amp;#039;&amp;#039; ====&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;
==== &amp;#039;&amp;#039;&amp;#039;Пример кода для проверки датчика:&amp;#039;&amp;#039;&amp;#039; ====&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>Artecoll</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%BB%D0%B8%D0%BD%D0%B8%D0%B8_%D0%BD%D0%B0_%D0%B1%D0%B0%D0%B7%D0%B5_TCRT5000&amp;diff=302</id>
		<title>Датчик линии на базе TCRT5000</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%BB%D0%B8%D0%BD%D0%B8%D0%B8_%D0%BD%D0%B0_%D0%B1%D0%B0%D0%B7%D0%B5_TCRT5000&amp;diff=302"/>
		<updated>2021-05-29T17:48:27Z</updated>

		<summary type="html">&lt;p&gt;Artecoll: /* Пример кода с использованием двух боковых датчиков линии для движения робота по черной линии: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Файл:Датчик отражения TCRT5000.png|мини|Датчик отражения TCRT5000]]&lt;br /&gt;
Цифровой датчик линии – это излучатель и приёмник, разделённые перегородкой, находящиеся в одном корпусе. Светодиод излучает инфракрасный сигнал. В зависимости от цвета поверхности, отраженный сигнал имеет разную силу, которая улавливается приемником-фоторанзистором. &lt;br /&gt;
&lt;br /&gt;
Результатом работы данного модуля является цифровой сигнал, в зависимости от цвета. При отсутствии поверхности, или в случае, если поверхность светлая, датчик выдает логический 0, при появлении черной поверхности выдает логическую единицу.  Логический ноль сопровождается загоранием светодиода, расположенного на плате.    Это позволяет контролировать работу датчика.                                                                                                Датчик может использоваться для ориентации роботов (для перемещения по темной линии).&lt;br /&gt;
[[Файл:Датчик линии на базе TCRT5000.png|мини|Датчик линии на базе TCRT5000]]&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 мм ~ 25 мм&lt;br /&gt;
&lt;br /&gt;
* Напряжение питания: 3.3-5В&lt;br /&gt;
* Потребляемый ток: 10мА&lt;br /&gt;
&lt;br /&gt;
* Форма вывода: цифровые сигналы (0 и 1)&lt;br /&gt;
* Рабочая температура: 0°C ~ + 50°C&lt;br /&gt;
* Размер печатной платы небольшой платы: 3,5 см x 1 см&lt;br /&gt;
* одиночный вес: 4,5 г&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;
* VCC: плюс питания 5.0 В&lt;br /&gt;
* GND: общ. &lt;br /&gt;
* OUT: цифровой выход (0 или 1)&lt;br /&gt;
&lt;br /&gt;
==== Пример кода с использованием двух боковых датчиков линии                                                                            для движения робота по черной линии: ====&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;c&amp;quot;&amp;gt;&lt;br /&gt;
#define A 7 //left motor&lt;br /&gt;
#define B 8 //left motor&lt;br /&gt;
#define C 10 //left motor PWM&lt;br /&gt;
#define D 2 //right motor&lt;br /&gt;
#define E 4 //right motor&lt;br /&gt;
#define G 11 //right motor PWM&lt;br /&gt;
#define H 9 //left line sensor&lt;br /&gt;
#define I 13 //central line sensor&lt;br /&gt;
#define J 12 // right line sensor&lt;br /&gt;
void setup() {&lt;br /&gt;
  pinMode(A,OUTPUT);    // Устанавливаем режим для портов. &lt;br /&gt;
  pinMode(B, OUTPUT);   // Функция состоит из двух параметров. &lt;br /&gt;
  pinMode(C, OUTPUT);   // В первом параметре указывается порт, &lt;br /&gt;
  pinMode(D, OUTPUT);   // с которым мы собираемся работать.  &lt;br /&gt;
  pinMode(E, OUTPUT);   // Во втором параметре мы сообщаем,    &lt;br /&gt;
  pinMode(G, OUTPUT);   // как должен работать указанный&lt;br /&gt;
  pinMode(H, INPUT);    // порт: работать на&lt;br /&gt;
  pinMode(I, INPUT);    // выход (OUTPUT)&lt;br /&gt;
  pinMode(J, INPUT);    // или вход (INPUT)&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void go(){&lt;br /&gt;
  digitalWrite(A, LOW);  // digitalWrite() - функция включает светодиод.&lt;br /&gt;
  digitalWrite(B, HIGH); // В первом параметре мы указываем номер&lt;br /&gt;
  analogWrite(C, 50);    // порта, с котоорым собираемся работать,&lt;br /&gt;
  digitalWrite(D, LOW);  // а во второй указываем константу HIGH т.е.&lt;br /&gt;
  digitalWrite(E, HIGH); // логическая 1, значение константы LOW равно&lt;br /&gt;
  analogWrite(G, 50);    // логическому 0 (отключаем светодиод)&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
void loop() {&lt;br /&gt;
  if (digitalRead(H) == 0){&lt;br /&gt;
    digitalWrite(A, LOW);   // digitalRead() - считывает&lt;br /&gt;
    digitalWrite(B, HIGH);  // значение заданного входа -&lt;br /&gt;
    analogWrite(C, 0);      // 1 или 0. (Смотрим, равно ли &lt;br /&gt;
    digitalWrite(D, LOW);   // значение датчика 0. В зависи-&lt;br /&gt;
    digitalWrite(E, HIGH);  // мости от значения датчика&lt;br /&gt;
    analogWrite(G, 50);     // поворачиваем колёса.)&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
  else if (digitalRead(J) == 0){&lt;br /&gt;
    digitalWrite(A, LOW);&lt;br /&gt;
    digitalWrite(B, HIGH);  &lt;br /&gt;
    analogWrite(C, 50);       &lt;br /&gt;
    digitalWrite(D, LOW);  &lt;br /&gt;
    digitalWrite(E, HIGH); &lt;br /&gt;
    analogWrite(G, 0);&lt;br /&gt;
    }&lt;br /&gt;
  &lt;br /&gt;
  else{&lt;br /&gt;
    go();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Artecoll</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_L293D&amp;diff=301</id>
		<title>Драйвер двигателя L293D</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_L293D&amp;diff=301"/>
		<updated>2021-05-29T17:41:19Z</updated>

		<summary type="html">&lt;p&gt;Artecoll: Новая страница: «&amp;#039;&amp;#039;&amp;#039;L293D&amp;#039;&amp;#039;&amp;#039; – самая простая микросхема для работы с двигателями. L293D обладает двумя H-мостами,...»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;L293D&amp;#039;&amp;#039;&amp;#039; – самая простая микросхема для работы с двигателями. L293D обладает двумя H-мостами, которые позволяют управлять двумя двигателями.&lt;/div&gt;</summary>
		<author><name>Artecoll</name></author>
	</entry>
	<entry>
		<id>http://wiki.me-robotics.ru/index.php?title=%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&amp;diff=300</id>
		<title>Заглавная страница</title>
		<link rel="alternate" type="text/html" href="http://wiki.me-robotics.ru/index.php?title=%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&amp;diff=300"/>
		<updated>2021-05-29T17:39:08Z</updated>

		<summary type="html">&lt;p&gt;Artecoll: /* Описание модулей */&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;
[[Файл:LogIn screenshot.png|200x200пкс|альт=|мини|Расположение кнопки входа]]Для добавления и редактирования статей: &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;&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;
*[[Ультразвуковой дальномер HC-SR04]]&lt;br /&gt;
*[[Драйвер двигателя L298N]]&lt;br /&gt;
*[[Датчик линии на базе TCRT5000]]&lt;br /&gt;
*[[Драйвер моторов двухканальный tb6680|Драйвер двухканальный на базе микросхемы tb6612fng]]&lt;br /&gt;
*[[Лазерные дальномеры|Лазерные дальномеры - Laser Sensor]]&lt;br /&gt;
*[[Шаговый электродвигатель]]&lt;br /&gt;
*[[Оптические энкодеры|Оптические энкодеры - FC-03 на базе ITR9608]]&lt;br /&gt;
*[[Подключение гироскопа GY-521 MPU-6050 к Arduio]]&lt;br /&gt;
*[[АЦП на базе микросхемы hx711|АЦП на базе микросхемы HX711]]&lt;br /&gt;
*[[Сервопривод]]&lt;br /&gt;
*[[Arduino Shield]]&lt;br /&gt;
*[[Драйвер двигателя L293D]]&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;
* [[Алгоритм A*]]&lt;br /&gt;
* [[Алгоритм D*]]&lt;br /&gt;
* [[Объезд препятствий]]&lt;br /&gt;
* [[SLAM]]&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;
* [[Полезные советы по Webots]]&lt;br /&gt;
* [[Устанавливаем драйвер Ардуино - Подключаем порт]]&lt;br /&gt;
&lt;br /&gt;
== Программирование MIK32 в среде eclipse ==&lt;br /&gt;
&lt;br /&gt;
* [[Быстрый старт с MIK32]]&lt;br /&gt;
&lt;br /&gt;
== Некоторые полезные ресурсы ==&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Список возможных настроек];&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Manual:FAQ/ru Часто задаваемые вопросы и ответы по MediaWiki];&lt;br /&gt;
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Рассылка уведомлений о выходе новых версий MediaWiki].&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Перевод MediaWiki на свой язык]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Узнайте, как бороться со спамом в вашей вики]&lt;/div&gt;</summary>
		<author><name>Artecoll</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=299</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=299"/>
		<updated>2021-05-29T17:01:11Z</updated>

		<summary type="html">&lt;p&gt;Artecoll: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ЗАНЯТО АРТЁМОМ БАКУЛИНЫМ&lt;/div&gt;</summary>
		<author><name>Artecoll</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=298</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=298"/>
		<updated>2021-05-29T17:00:26Z</updated>

		<summary type="html">&lt;p&gt;Artecoll: Новая страница: «ЗАНЯТО»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ЗАНЯТО&lt;/div&gt;</summary>
		<author><name>Artecoll</name></author>
	</entry>
	<entry>
		<id>http://wiki.me-robotics.ru/index.php?title=%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&amp;diff=297</id>
		<title>Заглавная страница</title>
		<link rel="alternate" type="text/html" href="http://wiki.me-robotics.ru/index.php?title=%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&amp;diff=297"/>
		<updated>2021-05-29T16:58:54Z</updated>

		<summary type="html">&lt;p&gt;Artecoll: /* Описание модулей */&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;
[[Файл:LogIn screenshot.png|200x200пкс|альт=|мини|Расположение кнопки входа]]Для добавления и редактирования статей: &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;&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;
*[[Ультразвуковой дальномер HC-SR04]]&lt;br /&gt;
*[[Драйвер двигателя L298N]]&lt;br /&gt;
*[[Датчик линии на базе TCRT5000]]&lt;br /&gt;
*[[Драйвер моторов двухканальный tb6680|Драйвер двухканальный на базе микросхемы tb6612fng]]&lt;br /&gt;
*[[Лазерные дальномеры|Лазерные дальномеры - Laser Sensor]]&lt;br /&gt;
*[[Шаговый электродвигатель]]&lt;br /&gt;
*[[Оптические энкодеры|Оптические энкодеры - FC-03 на базе ITR9608]]&lt;br /&gt;
*[[Подключение гироскопа GY-521 MPU-6050 к Arduio]]&lt;br /&gt;
*[[АЦП на базе микросхемы hx711|АЦП на базе микросхемы HX711]]&lt;br /&gt;
*[[Сервопривод]]&lt;br /&gt;
*[[Arduino Shield]]&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;
* [[Алгоритм A*]]&lt;br /&gt;
* [[Алгоритм D*]]&lt;br /&gt;
* [[Объезд препятствий]]&lt;br /&gt;
* [[SLAM]]&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;
* [[Полезные советы по Webots]]&lt;br /&gt;
* [[Устанавливаем драйвер Ардуино - Подключаем порт]]&lt;br /&gt;
&lt;br /&gt;
== Программирование MIK32 в среде eclipse ==&lt;br /&gt;
&lt;br /&gt;
* [[Быстрый старт с MIK32]]&lt;br /&gt;
&lt;br /&gt;
== Некоторые полезные ресурсы ==&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Список возможных настроек];&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Manual:FAQ/ru Часто задаваемые вопросы и ответы по MediaWiki];&lt;br /&gt;
* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Рассылка уведомлений о выходе новых версий MediaWiki].&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation#Translation_resources Перевод MediaWiki на свой язык]&lt;br /&gt;
* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Combating_spam Узнайте, как бороться со спамом в вашей вики]&lt;/div&gt;</summary>
		<author><name>Artecoll</name></author>
	</entry>
	<entry>
		<id>http://wiki.me-robotics.ru/index.php?title=%D0%A2%D0%B5%D0%BD%D0%B7%D0%BE%D0%B4%D0%B0%D1%82%D1%87%D0%B8%D0%BA&amp;diff=296</id>
		<title>Тензодатчик</title>
		<link rel="alternate" type="text/html" href="http://wiki.me-robotics.ru/index.php?title=%D0%A2%D0%B5%D0%BD%D0%B7%D0%BE%D0%B4%D0%B0%D1%82%D1%87%D0%B8%D0%BA&amp;diff=296"/>
		<updated>2021-05-29T16:50:26Z</updated>

		<summary type="html">&lt;p&gt;Artecoll: /* Схема подключения */&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;
[[Файл:Балочный.jpg|200px|мини|слева|Балочный тензодатчик]]&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;quot;шайба&amp;quot;)&amp;#039;&amp;#039;&amp;#039; - массово применяется при производстве вагонных, бункерных, автомобильных весовых системах. Также мембранные датчики используются в тех весодозирующих системах, где обыкновенные датчики не могут быть внедрены в конструкцию из-за своих габаритных размеров.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;S - образный&amp;#039;&amp;#039;&amp;#039; - в процессе взвешивания дозаторов, бункеров и прочих конвейерных весовых систем нашли свое применение S-образные тензометрические датчики. Следует отметить, что такие датчики превосходно подойдут для разрывных машин и испытательных стендов.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;колонный (типа &amp;quot;бочка&amp;quot;)&amp;#039;&amp;#039;&amp;#039; - применяется для производства и модернизации бункерных, автомобильных, вагонных весов с большой грузоподъёмностью, а также в контрольно-измерительном оборудовании, испытательных стендах.&lt;br /&gt;
[[Файл:S-образный.jpg|мини|справа|200px|S-образный тензодатчик]]&lt;br /&gt;
[[Файл:Мембранный.jpg|мини|слева|200px|Мембранный тензодатчик]]&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;
[[Файл:Тензорезистор.gif|мини|справа|Наглядная деформация тензорезистора]]&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; - используется как наклеиваемый тензорезистор. Это очень удобная система, которая представляет собой фольговую ленту, толщиной до 12 мкм. Часть пленки имеет плотную форму, а часть – решетчатую. Данная модель отличается от остальных тем, что можно припаивать дополнительные контакты, к тому же они нормально переносят низкие температуры.&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;
&lt;br /&gt;
В качестве подложки обычно используют ткань, бумагу, полимерную плёнку, слюду и др.&lt;br /&gt;
&lt;br /&gt;
==Схема подключения==&lt;br /&gt;
[[Файл:Мост Уинстона.jpg|мини|слева|200px|Схема подключения тензорезистора в мосте Уинстона]]&lt;br /&gt;
Обычно тензорезистор подключают в одно или два плеча моста Уинстона.&lt;br /&gt;
При отсутствии физического взаимодействия U&amp;lt;sub&amp;gt;BC&amp;lt;/sub&amp;gt; = 0 (R&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; / R&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = R&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt; / R&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;). При деформации тензорезистора изменяется сопротивление R&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;, что вызывает снижение потенциала точки соединения резисторов R&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt; и R&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; и изменение полезного сигнала - U&amp;lt;sub&amp;gt;BC&amp;lt;/sub&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Для тензодатчика обязательно подключение АЦП.&lt;br /&gt;
[[Файл:ТР с АЦП.jpg|обрамить|центр|Схема подключения тензодатчика на примере Arduino UNO и АЦП с микросхемой HX711]]&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>Artecoll</name></author>
	</entry>
	<entry>
		<id>http://wiki.me-robotics.ru/index.php?title=%D0%A2%D0%B5%D0%BD%D0%B7%D0%BE%D0%B4%D0%B0%D1%82%D1%87%D0%B8%D0%BA&amp;diff=295</id>
		<title>Тензодатчик</title>
		<link rel="alternate" type="text/html" href="http://wiki.me-robotics.ru/index.php?title=%D0%A2%D0%B5%D0%BD%D0%B7%D0%BE%D0%B4%D0%B0%D1%82%D1%87%D0%B8%D0%BA&amp;diff=295"/>
		<updated>2021-05-29T16:46:54Z</updated>

		<summary type="html">&lt;p&gt;Artecoll: &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;
[[Файл:Балочный.jpg|200px|мини|слева|Балочный тензодатчик]]&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;quot;шайба&amp;quot;)&amp;#039;&amp;#039;&amp;#039; - массово применяется при производстве вагонных, бункерных, автомобильных весовых системах. Также мембранные датчики используются в тех весодозирующих системах, где обыкновенные датчики не могут быть внедрены в конструкцию из-за своих габаритных размеров.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;S - образный&amp;#039;&amp;#039;&amp;#039; - в процессе взвешивания дозаторов, бункеров и прочих конвейерных весовых систем нашли свое применение S-образные тензометрические датчики. Следует отметить, что такие датчики превосходно подойдут для разрывных машин и испытательных стендов.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;колонный (типа &amp;quot;бочка&amp;quot;)&amp;#039;&amp;#039;&amp;#039; - применяется для производства и модернизации бункерных, автомобильных, вагонных весов с большой грузоподъёмностью, а также в контрольно-измерительном оборудовании, испытательных стендах.&lt;br /&gt;
[[Файл:S-образный.jpg|мини|справа|200px|S-образный тензодатчик]]&lt;br /&gt;
[[Файл:Мембранный.jpg|мини|слева|200px|Мембранный тензодатчик]]&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;
[[Файл:Тензорезистор.gif|мини|справа|Наглядная деформация тензорезистора]]&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; - используется как наклеиваемый тензорезистор. Это очень удобная система, которая представляет собой фольговую ленту, толщиной до 12 мкм. Часть пленки имеет плотную форму, а часть – решетчатую. Данная модель отличается от остальных тем, что можно припаивать дополнительные контакты, к тому же они нормально переносят низкие температуры.&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;
&lt;br /&gt;
В качестве подложки обычно используют ткань, бумагу, полимерную плёнку, слюду и др.&lt;br /&gt;
&lt;br /&gt;
==Схема подключения==&lt;br /&gt;
[[Файл:Мост Уинстона.jpg|мини|слева|200px|Схема подключения тензорезистора в мосте Уинстона]]&lt;br /&gt;
Обычно тензорезистор подключают в одно или два плеча моста Уинстона.&lt;br /&gt;
При отсутствии физического взаимодействия U&amp;lt;sub&amp;gt;BC&amp;lt;/sub&amp;gt; = 0 (R&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; / R&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = R&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt; / R&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;). При деформации тензорезистора изменяется сопротивление R&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;, что вызывает снижение потенциала точки соединения резисторов R&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt; и R&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; и изменение полезного сигнала - U&amp;lt;sub&amp;gt;BC&amp;lt;/sub&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Для тензодатчика обязательно подключение АЦП.&lt;br /&gt;
[[Файл:ТР с АЦП.jpg|обрамить|центр|Схема подключения тензодатчика на примере АЦП с микросхемой HX711]]&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>Artecoll</name></author>
	</entry>
	<entry>
		<id>http://wiki.me-robotics.ru/index.php?title=%D0%A2%D0%B5%D0%BD%D0%B7%D0%BE%D0%B4%D0%B0%D1%82%D1%87%D0%B8%D0%BA&amp;diff=294</id>
		<title>Тензодатчик</title>
		<link rel="alternate" type="text/html" href="http://wiki.me-robotics.ru/index.php?title=%D0%A2%D0%B5%D0%BD%D0%B7%D0%BE%D0%B4%D0%B0%D1%82%D1%87%D0%B8%D0%BA&amp;diff=294"/>
		<updated>2021-05-29T16:43:59Z</updated>

		<summary type="html">&lt;p&gt;Artecoll: &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;
*&amp;#039;&amp;#039;&amp;#039;консольный (балочный)&amp;#039;&amp;#039;&amp;#039; - используется в системах дозирования, платформенных весах средней грузоподъемности, бункерах, напольных системах взвешивания, включая электронные весы для взвешивания животных.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;мембранный (типа &amp;quot;шайба&amp;quot;)&amp;#039;&amp;#039;&amp;#039; - массово применяется при производстве вагонных, бункерных, автомобильных весовых системах. Также мембранные датчики используются в тех весодозирующих системах, где обыкновенные датчики не могут быть внедрены в конструкцию из-за своих габаритных размеров.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;S - образный&amp;#039;&amp;#039;&amp;#039; - в процессе взвешивания дозаторов, бункеров и прочих конвейерных весовых систем нашли свое применение S-образные тензометрические датчики. Следует отметить, что такие датчики превосходно подойдут для разрывных машин и испытательных стендов.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;колонный (типа &amp;quot;бочка&amp;quot;)&amp;#039;&amp;#039;&amp;#039; - применяется для производства и модернизации бункерных, автомобильных, вагонных весов с большой грузоподъёмностью, а также в контрольно-измерительном оборудовании, испытательных стендах.&lt;br /&gt;
[[Файл:Балочный.jpg|200px|мини|слева|Балочный тензодатчик]]&lt;br /&gt;
[[Файл:S-образный.jpg|мини|центр|200px|S-образный тензодатчик]]&lt;br /&gt;
[[Файл:Мембранный.jpg|мини|справа|200px|Мембранный тензодатчик]]&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;
[[Файл:Тензорезистор.gif|мини|справа|Наглядная деформация тензорезистора]]&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; - используется как наклеиваемый тензорезистор. Это очень удобная система, которая представляет собой фольговую ленту, толщиной до 12 мкм. Часть пленки имеет плотную форму, а часть – решетчатую. Данная модель отличается от остальных тем, что можно припаивать дополнительные контакты, к тому же они нормально переносят низкие температуры.&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;
&lt;br /&gt;
В качестве подложки обычно используют ткань, бумагу, полимерную плёнку, слюду и др.&lt;br /&gt;
&lt;br /&gt;
==Схема подключения==&lt;br /&gt;
[[Файл:Мост Уинстона.jpg|мини|слева|200px|Схема подключения тензорезистора в мосте Уинстона]]&lt;br /&gt;
Обычно тензорезистор подключают в одно или два плеча моста Уинстона.&lt;br /&gt;
При отсутствии физического взаимодействия U&amp;lt;sub&amp;gt;BC&amp;lt;/sub&amp;gt; = 0 (R&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; / R&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; = R&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt; / R&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;). При деформации тензорезистора изменяется сопротивление R&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt;, что вызывает снижение потенциала точки соединения резисторов R&amp;lt;sub&amp;gt;x&amp;lt;/sub&amp;gt; и R&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; и изменение полезного сигнала - U&amp;lt;sub&amp;gt;BC&amp;lt;/sub&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Для тензодатчика обязательно подключение АЦП.&lt;br /&gt;
[[Файл:ТР с АЦП.jpg|обрамить|центр|Схема подключения тензодатчика на примере АЦП с микросхемой HX711]]&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>Artecoll</name></author>
	</entry>
	<entry>
		<id>http://wiki.me-robotics.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:%D0%9C%D0%B5%D0%BC%D0%B1%D1%80%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9.jpg&amp;diff=293</id>
		<title>Файл:Мембранный.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.me-robotics.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:%D0%9C%D0%B5%D0%BC%D0%B1%D1%80%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9.jpg&amp;diff=293"/>
		<updated>2021-05-29T16:42:20Z</updated>

		<summary type="html">&lt;p&gt;Artecoll: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;а&lt;/div&gt;</summary>
		<author><name>Artecoll</name></author>
	</entry>
</feed>