Sensor shield v5.0

Описание

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

Физические размеры

  • Шилд (Д х Ш х В): 57 х 57 х 19 мм

Плюсы использования

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

Пример подключения и использования

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

Для этого нам понадобится:

Схема подключения:

Скетч для загрузки:

//подключение библиотеки для работы с сервоприводом
#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 секунды 
}

Статья разработана при поддержке проекта HelpDuino