Sensor shield (SmartElements)

Описание

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

Плата позволяет подключить 6 аналоговых устройств и 13 цифровых посредством трехпроводных шлейфов. Кроме того, на плате предусмотрены следующие дополнительные разъемы: UART, SPI, I2C.

Центральная часть Sensor Shield выполнена в виде макетной платы - это позволяет расширить функционал шилда, распаяв на нем дополнительную обвязку для ваших проектов.

Светодиод на плате отображает состояние питания Sensor Shield: если светодиод горит - шилд получает питание, если не горит - питание на шилд не поступает.

Для использования внешнего питания предусмотрена перемычка. Перемычка включает в цепь шилда внешнее питание. Если перемычка установлена на плате - питание осуществляется от внешнего источника (подключается посредством винтовой клеммной колодки). При этом питание также будет подаваться на контроллер через пин Vin (для питания контроллера отдельный источник питания не потребуется). При снятой перемычке Sensor Shield будет работать только от питания контроллера.

Обратите внимание, что при большом количестве используемой периферии, необходимо учитывать суммарный потребляемый периферией ток и максимальный ток, который способен выдать тот или иной контроллер (для Smart Uno - это не более 900 мА при 5 В). При потреблении больших токов периферией используйте внешний источник питания. Рекомендуемое внешнее входное напряжение на Sensor Shield - 7-12 В. В качестве внешнего питания можно использовать Power Shield, установив его между контроллером и Sensor Shield.

Схема платы

На схеме обозначены:

  1. Цифровые выводы (D0 - D13)
  2. Аналоговые выводы (A0 - A5)
  3. Область макетирования (макетная плата)
  4. Выводы для подключения по интерфейсу SPI
  5. Выводы для подключения по интерфейсу UART
  6. Выводы для подключения по интерфейсу I2C
  7. Клеммная колодка для подключения внешнего питания
  8. Перемычка общего питания (позволяющая питать контроллер от питания шилда)

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

  • Шилд (Д х Ш х В): 60 х 53 х 20 мм

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

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

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

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

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

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

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

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