====== Sensor shield v5.0 ======
===== Описание =====

Sensor shield предназначен для удобного подключения к контроллеру плат, модулей и другой различной электроники. Шилд позволяет обойтись без пайки и/или использования макетной платы. Шилд удобен тем, что подключается к контроллеру напрямую, образуя "бутерброд". Будет полезен для проектов создания роботов, умного дома, и прочих проектов, где требуется подключать несколько устройств одновременно.

==== Физические размеры ====
  * Шилд (Д х Ш х В): 57 х 57 х 19 мм

==== Плюсы использования ====
  * Удобное подключение устройств
  * Имеет отдельные вывода для подключения по интерфейсам I²C и COM
  * Разъём для внешнего питания

===== Пример подключения и использования =====
**Пример:** В примере демонстрируется работа с шилдом. Для начала шилд необходимо подключить к контроллеру: шилд помещается сверху на выводы контроллера. Далее к шилду подключается сервопривод и ультразвуковой дальномер. Дальномер определяет расстояние до объекта, и в зависимости от этого контроллер принимает решение о повороте сервопривода. Такой пример можно использовать в проектах охранной сигнализации, например, для поворота камеры наблюдения.

Для этого нам понадобится:
^ Что нужно:                                                                                                                                       ^ Кол-во, шт  ^
| [[http://smartelements.ru/collection/kontrollery/product/kontroller-smart-uno|Контроллер Smart UNO]]                                                     | 1           |
| [[http://smartelements.ru/collection/shildy/product/sensor-shield-v50|Sensor Shield v5.0]]  | 1           |
| [[http://smartelements.ru/collection/motory-dravery-shassi/product/servoprivod-towerpro-sg90|Сервопривод TowerPro SG90]]                                                      | 1           |
| [[http://smartelements.ru/collection/datchiki-i-sensory/product/ultrazvukovoy-dalnomer-hc-sr04|Ультразвуковой дальномер HC-SR04]]                           | 1           |
| [[http://smartelements.ru/collection/provoda-i-kabeli/product/nabor-provodov-20-sht-20sm-mama-mama|Набор проводов 20 шт, 20см, "мама - мама"]]       | 4           |

**Схема подключения:**
{{ :главная:шилды:sensor_shield.fzz_-_fritzing_-_макетная_плата_.jpg?nolink |}}

**Скетч для загрузки:**
<file Arduino>
//подключение библиотеки для работы с сервоприводом
#include <Servo.h> 

//определение переменных
#define coef 5 //коэффициент
#define min_zone 6 // минимальная длина
#define max_zone 44 // максимальная длина
#define Trig 5 // пин подключения контакта Trig дальномера
#define Echo 6 // пин подключения контакта Echo дальномера
#define servoPin 11 // пин подключения сервопривода

Servo myservo; // создание объекта сервопривода

void setup() { 

  pinMode (Trig, OUTPUT); //инициализация порта как выход 
  pinMode (Echo, INPUT);  //инициализация порта как вход 
  myservo.attach (servoPin); //инициализация сервопривода
  myservo.write (0); //поворот сервопривода на исходное положение
}
 
unsigned int impulseTime=0; //переменная для хранения длины импульса
unsigned int distance_cm=0; //переменная для хранения длины дистанции в см

void loop() { 
  
  digitalWrite (Trig, HIGH); // подача импульса на вход trig дальномера 
  delayMicroseconds (10); // равная 10 микросекундам 
  digitalWrite (Trig, LOW); // отключение подачи импульса 
  impulseTime = pulseIn(Echo, HIGH); // замер длины импульса 
  distance_cm = impulseTime/58; // пересчет в сантиметры 
  
  //если произошло зависание, попытаться сбросить пин подключения Echo
  if(distance_cm == 0)
  {
    pinMode(Echo, OUTPUT);
    digitalWrite(Echo, LOW);
    pinMode(Echo, INPUT);
    return;
  }
  
  if (distance_cm >= min_zone && distance_cm <= max_zone) //если замеряемая длинна больше 6 см и меньше 22 см 
  { 
    myservo.write (coef * (distance_cm - min_zone));  // поворот сервопривода на значение: 5*(замеряемая длина - 6см ) 
  } 
  else if (distance_cm < min_zone)  //иначе, если дистанция менее 6 см, сервопривод в положении ноль градусов 
  { 
    myservo.write(0); 
  } 
  else //иначе 
  { 
    myservo.write(180); //сервопривод в положении 180 градусов 
  } 
  
  delay (100); // задержка на 0.1 секунды 
}
</file>