Sensor shield v5.0
Описание
Sensor shield предназначен для удобного подключения к контроллеру плат, модулей и другой различной электроники. Шилд позволяет обойтись без пайки и/или использования макетной платы. Шилд удобен тем, что подключается к контроллеру напрямую, образуя «бутерброд». Будет полезен для проектов создания роботов, умного дома, и прочих проектов, где требуется подключать несколько устройств одновременно.
Физические размеры
- Шилд (Д х Ш х В): 57 х 57 х 19 мм
Плюсы использования
- Удобное подключение устройств
- Имеет отдельные вывода для подключения по интерфейсам I²C и COM
- Разъём для внешнего питания
Пример подключения и использования
Пример: В примере демонстрируется работа с шилдом. Для начала шилд необходимо подключить к контроллеру: шилд помещается сверху на выводы контроллера. Далее к шилду подключается сервопривод и ультразвуковой дальномер. Дальномер определяет расстояние до объекта, и в зависимости от этого контроллер принимает решение о повороте сервопривода. Такой пример можно использовать в проектах охранной сигнализации, например, для поворота камеры наблюдения.
Для этого нам понадобится:
Что нужно: | Кол-во, шт |
---|---|
Контроллер Smart UNO | 1 |
Sensor Shield v5.0 | 1 |
Сервопривод TowerPro SG90 | 1 |
Ультразвуковой дальномер HC-SR04 | 1 |
Набор проводов 20 шт, 20см, "мама - мама" | 4 |
Схема подключения:
Скетч для загрузки:
//подключение библиотеки для работы с сервоприводом
#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 секунды
}