МОДУЛИ ARDUINO KIT

  1. HC-SR501 – пиро-инфракрасный датчик движения 
  2. Сервопривод SG90  Arduino
  3. Шаговый двигатель 28BYJ48 и драйвер ULN2003
  4. Релейный модуль 1 канал 5 В
  5. Часы реального времени DS1302
  6. Модуль датчика звука (Sound Sensor)

   HC-SR501 – пиро-инфракрасный датчик движения 

PIR (PIR, passive infrared motion sensor)  http://robotclass.ru/tutorials/arduino-ir-motion-sensor/

PIR.png

На модуль установлена линза Френеля, которая фокусирует инфракрасные сигналы на пироэлектрический датчик под названием 500BP. Датчик называется PIR (Passive Infra-Red). Пассивный он потому, что для обнаружения движения не используется какая-либо дополнительная энергия, кроме той, что испускается самими объектами. 500BP состоит из двух чувствительных элементов. Управляющая микросхема модуля регистрирует изменения сигналов от обоих элементов и по характеру их изменения обнаруживает движение объектов, испускающих инфракрасные сигналы (живых организмов). PIR используется в устройствах, предназначенных для управления освещением, и для этого может использоваться  вкупе с датчиком освещённости.

Рабочее напряжение: DC5V до 20 В
Время задержки: регулируемая (0.3 секунд до 18 секунд)
Режим триггера: l не может быть повторена, h может быть повторен значение по умолчанию H
диапазон чувствительности: менее 120 градусов конический угол менее 7 м

длительность удержания сигнала: до 5 мин.; Время задержки: 5-200S (может быть скорректирована, по умолчанию 5 сек — 3%); ток в рабочем режиме: 65 мкА; ток в режиме ожидания: 50 мкА;; напряжение на логическую схему: 3.3 В;; диапазон рабочих температур: от -15 до + 70 °C;; Время отклика: 0.2 сек; Выбор режима: с повторением (H), без повторений (L); PCB Размеры: 32*24 мм, отверстие под винт расстояние 28 мм, винт Aperture 2 мм Размер датчика объектива: (диаметр): 23 мм (по умолчанию).

Пироэлектрики — это диэлектрики, которые создают электрическое поле при изменении их температуры. На основе пироэлектриков делают датчики измерения температуры, например, LHI778 или IRA-E700. Каждый такой датчик содержит два чувствительных элемента размером 1×2 мм, подключенных с противоположной полярностью. И как мы увидим далее, наличие именно двух элементов поможет нам детектировать движение.

Вот так выглядит датчик IRA-E700 компании Murata.

IRA-E700ST0

ИК датчик присутствия (PIR Sensor) может определить приближающийся к нему объект на расстоянии до 7 метров. Датчик присутствия гораздо эффективнее датчика движения. Он реагирует на любой объект, излучающий тепло и сообщает о его попадании в расположение в зоне видимости датчика. Каждый сегмент сферы представляет собой линзу, которая фокусирует тепловое излучение на разные участки ПИР-датчика. У датчика имеется два переменных резистора и перемычка для настройки режима. Один из потенциометров регулирует чувствительность прибора. Два переменных резистора регулируют дистанцию обнаружения движения (Distance Adjust) и время, в течение которого на выходе будет логическая единица (Delay Time Adjust). Дистанция регулируется в пределах 3 – 7 метров, задержка от 5 до 300 секунд. Чувствительность влияет на размер детектируемого объекта. К примеру, можно исключить из срабатывания кошку. Второй потенциометр регулирует время срабатывания T. Если датчик обнаружил движение, он генерирует на выходе положительный импульс длиной T. Наконец, третий элемент управления — перемычка, которая переключает режим датчика. В положении L датчик ведет отсчет Т от самого первого срабатывания. Допустим, мы хотим управлять светом в ванной комнате. Зайдя в комнату, человек вызовет срабатывание датчика, и свет включится ровно на время Т. По окончании периода, сигнал на выходе вернется в исходное состояние, и датчик будет ждать следующего срабатывания. В положении H датчик начинает отсчет времени T каждый раз после обнаружения движения. Другими словами, любое шевеление человека вызовет обнуление таймера отсчета Т. По-умолчанию, перемычка находится в состоянии H. Схема представлена на рисунке 1.

Модуль HC-SR501 имеет 3 вывода: Питание (VCC); Земля (GND); Выход 3v3 (OUT).

Сразу после подачи питания несколько секунд модуль будет калиброваться, в это время возможны ложные срабатывания. Примерно через минуту он перейдёт в режим ожидания. При срабатывании датчика на выходе появляется логическая единица, напряжение – 3.3 вольта. Изменения этого сигнала зависят от выбранного режима работы. Он меняется перемычкой (отмечена на фото с подписями какой режим будет выбран). Если выбран H– при нескольких срабатываниях подряд на выходе датчика остаётся высокий уровень, при L– для каждого срабатывания будет подан свой импульс.

Сервопривод SG90  Arduino 

Servo SG90.pngЭлектромеханический прибор состоящий из мотора постоянного тока, редуктора и управляющей электроники. Выходной вал поворачивается на задаваемый угол 180° – по 90° в каждом направлении. Широко используется в автомоделях для управления поворотом передних колес, в авиамоделизме для поворота руля и закрылков модели. Благодаря редуктору на выходном валу развивается усилие достаточное для применения в подвижных роботах. Низкая скорость поворота вала позволяет более точно получить требуемый угол поворота.

Характеристики: Напряжение питание 4,5 – 5,5 В; максимальный ток 1 А; Крутящий момент 1,8 килограмм/сантиметр: Температура окружающего воздуха при работе 0 – 55 °С; Длина жгута 230 мм; Материал шестерней нейлон; Коричневый или черный – общий; Красный – питание; Желтый или белый – сигнал управления.

Внутри корпуса находится небольшой модуль управления, который под действием входного сигнала подает питание соответствующей полярности на электродвигатель. Входной сигнал управления содержит данные о требуемом положении вала. Для определения текущего положения вала редуктор соединен с движком переменного резистора. Электроника Tower Pro SG90 вычисляет разницу между текущим положением редуктора и требуемым. Модуль управления ориентируясь на сопротивление переменного резистора подает питание требуемой полярности на двигатель для поворота редуктора приводящего в соответствие положение передаваемое сигналом управления и текущее. Информация о требуемом положении вала содержится в скважности импульсов управляющего сигнала. Частота управляющего сигнала должна быть постоянна и составлять 50 Гц. Скважность – отношение длительности импульса к периоду. Чаще при анализе параметров управляющего сигнала рассматривают длительность импульса.

Подключение к Ардуино.  Для поворта на заданный угол использзуется  переменный резистор, он же — потенциометр. При вращении ручку потенциометра контроллер будет командовать сервоприводу поворачиваться на соответствующий угол. У потенциометра есть всего три вывода. Крайние подключим к +5В и земле, а центральный к аналоговому входу A0. У сервопривода SG90 также имеется три контакта. Обычно они окрашиваются следующим образом: коричневый — земля; красный — питание +5В;

Нажав в конструкторе кнопку «Arduino», откроем страницу с исходным кодом программы для среды Arduino IDE:

  1. #include <Servo.h>
  2. Servo servos[13];
  3. void setup(){ }
  4. void loop(){
  5.   servos[8].attach(8);
  6.   servos[8].write((map(analogRead(A0), 0, 1024, 0, 180)));
  7.   delay(50); }

Как видно из программы, для управления сервоприводом используется библиотека Servo. В этой библиотеке есть несколько полезных функций: attach(номер_вывода) — инициализация сервопривода; write(угол) — поворот сервопривода на заданный угол; read() — получение текущего угла сервопривода. Для отображения множества чисел 0 — 1023 в множество 0-180, конструктор применил функцию map. Ту же самую операцию, можно было осуществить с помощью выражения: int angle = (value / 1023.0) * 180;

Шаговый двигатель 28BYJ48 и драйвер ULN2003

Шаговый двигатель - это мотор, который управляется несколькими электромагнитными катушками. На центральном валу - роторе - расположены магниты. В зависимости от от того, есть ток на катушках, которые находятся вокруг вала, или нет, создаются магнитные поля, которые притягивают или отталкивают магниты на роторе. В результате вал шагового двигателя вращается. Подобная конструкция позволяет реализовать очень точное управление углом поворота ротора шагового двигателя относительно катушек - статора. Можно выделить два основных типа шаговых моторов: униполярные и биполярные шаговые двигатели. Униполярные шаговые двигатели имеют пять или шесть контактов для подключения и четыре электромагнитные катушки в корпусе (если быть более точными, то две катушки, разделенные на четыре). Центральные контакты катушек соединены вместе и используются для подачи питания на двигатель. Эти шаговые моторы называются униполярными, потому-что питание всегда подается на один из этих полюсов. Как правило, шаговый двигатель 28-BYJ48 используют в паре с драйвером ULN2003. Краткие выдержки основных технических характеристик приведены ниже:

  1. Напряжение питания: 5 В (постоянный ток);
  2. Количество фаз: 4;
  3. Количество шагов: 64;
  4. Угол поврота на один шаг: 5.625 градуса
  5. Частота: 100 Герц;
  6. Частота холостого хода по часовой стрелке: > 600 Герц;
  7. Частота холостого хода против часовой стрелки: > 1000 Герц;
  8. Крутящий момент > 34.3 миллиньютон на метр;
  9. Сопротивление вращению: 600-1200 грамм на сантиметр;
  10. Класс элетробезопасности: A;

В Arduino IDE есть встроенная библиотека для управления шаговыми двигателями. После подключения шагового двигателя, ULN2003 и Arduino, вы можете загрузить скетч из категории Examples. У этого двигателя передаточное отношение 1:64, а угол поворота 5.625, то есть у него 4096 шагов. Шаг = Количество шагов на один поворот * передаточное отношение. Шаги= (360/5.625)*64"Передаточное отношение" = 64 * 64 =4096. Это значение надо учесть в скетче Arduino. А вот угол поворота для шаговых двигателей от adafruit равен 7.5 градусов, а передаточное отношение 1:16, так что количество шагов за 1 полный оборот вала равно: Шаги за один оборот = 360 / 7.5 = 48. Шаги = 48 * 16 = 768. То есть, это значение меняется в зависимости от двигателя, который вы используете. Поэтому проверяйте даташит для калибровки и корректной работы вашего шагового двигателя. Модуль драйвера шагового двигателя ULN2003 подключается к Arduino контактами IN1 - IN4 к D8 - D11 соответственно. Для подачи питания на ваш мотор, рекомендуется использовать внешний источник питания 5V с силой тока 500mA минимум. Не питайте двигатель непосредственно от контакта 5V на плате Arduino. Скетч для подключения шагового двигателя к Arduino см. по ссылке: http://arduino-diy.com/arduino-shagovii-motor-28-BYJ48-draiver-ULN2003.

Релейный модуль 1 канал 5 В  

Relay.pngМодуль позволяет прибору с питанием 5 В управлять одной нагрузкой под переменным напряжением 220 В. Здесь реализуется 1 канал управления. Входная часть схемы модуля требует питание 5 В. Такое питание позволяет применить модуль в приборах, базирующихся на микроконтроллерах и цифровых логических микросхемах. Для коммутирования нагрузок релейный модуль 1 канал 5 В содержит электромагнитное реле. С помощью устройства можно включать освещение лампами 220 В, переключать режимы работы электродвигателей, регулировать нагрев электронагревателями и подключать другие мощные приборы. Кроме того релейный модуль 1 канал 5 В прекрасно справится с управлением нагрузками, работающими под меньшими напряжениями. Характеристики: Питание 5В; Входной сигнал цифровой логический; Цепь нагрузки, предельные величины переменное напряжение 220В; постоянное напряжение 30В; ток 10А. Контакты: IN вход управляющего сигнала; VCC питание; GND общий провод.

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

Немного о работе модуля, при подключении к источнику питания 5В (VCC — 5В и GND — земля), загорается красный светодиод, реле остается в неизменном положении. Для переключения реле в другое положение, необходимо вывод IN подключить к земле, это можно осуществить с помощью контроллера Arduino или просто замкнуть IN1 с GND. В данном модуле не реализована гальваническая развязка, вывод IN подключен напрямую к управляющему транзистору, принципиальную схему 1-кональнного реле, можно посмотреть ниже. Первым делом, подключаем слаботочную часть схемы VCC (вывод реле) к +5V (Arduino), GND (вывод реле) к GND (Arduino) и IN1 (вывод реле) к 5 выводу Arduino. Далее, необходимо подключит лампу накаливания, ее подключаем в разрыв синего провода. Скопируйте и вставьте этот пример кода в окно программы IDE Arduino и загрузите в контроллер. Подключение модуля реле к плате Arduino довольно простое. Вывод VCC модуля реле соединяем с пином 5V платы Arduino, а вывод GND модуля реле соединяем с выводом GNDплаты Ардуино. Тем самым модуль реле мы обеспечили питанием. Пин управления INподсоединяем к выводу D2 платы Ардуино. Нагрузка, идущая от сети 220V в виде нашей лампы, подключается к модулю реле в разрыв своей цепи одного из проводов. Просто разрезаем один из проводов и один конец заводим в общий контакт COM, который всегда находится на среднем выводе. А второй конец соединяем с нормально разомкнутым контактом NO, который обычно находится сверху, если смотреть на модуль "правильно", как на картинке сверху (чтобы все цифры и надписи на самом реле были не верх ногами).

Часы реального времени DS1302

DS1302.pngКонтроллер Arduino не имеет своих собственных часов. Поэтому в случае необходимости нужно дополнять специальной микросхемой DS1302.  По питанию эти платы могут использовать свой элемент питания, или запитываться непосредственно с платы Arduino. Таблица распиновки: 

VCC    Питание (+5V)
GND    Земля (GND)
CLK    К цифровому пину Arduino ( в примере – пин 6, Arduino UNO)
DAT    К цифровому пину Arduino ( в примере – пин 7, Arduino MEGA UNO)
RST    К цифровому пину Arduino ( в примере – пин 8, Arduino MEGA UNO)

IC-ds1302.png Микросхема DS1302 содержит часы реального времени с календарем и 31 байт статического ОЗУ. Она общается с микропроцессором через простой последовательный интерфейс. Информация о реальном времени и календаре представляется в секундах минутах, часах, дне, дате, месяце и годе. Если текущий месяц содержит менее 31 дня, то микросхема автоматически определит количество дней в месяце с учетом высокосности текущего года. Часы работают или в 24-часовом или 12-часовом формате с индикатором AM/PM (до полудня/ после полудня). Подключение DS1302 к микропроцессу упрощено за счет синхронной последовательной связи. Для этого требуется только 3 провода: (1) RST (сброс), (2) I/O (линия данных) и (3) SCLK (синхронизация последовательной связи). Данные могут передаваться по одному байту или последовательностью байтов до 31. DS1302 разработан, чтобы потреблять малую мощность и сохранять данные и информацию часов при потреблении менее 1 мкВт. DS1302 - преемник DS1202. В дополнение к основным функциям хранения времени DS1202, DS1302 имеет два вывода питания для подключения основного и резервного источника питания, возможность подключения программируемой цепи заряда к выводу VCC1 и семь дополнительных байтов ОЗУ.

Arduino-DS1302Схема подключения c Arduino UNO представлена на рисунке: Для работы с Arduino yнеобходимо использовать библиотеку iarduino_RTC.h.

  1. - библиотека имеет внутренние функции аппаратной обработки протоколов передачи данных I2C и SPI, а следовательно не требует подключения дополнительных библиотек, но и не конфликтует с ними, если таковые всё же подключены.
  2. - библиотека имеет внутренние функции программой обработки протокола передачи данных 3-Wire
  3. - для инициализации модуля необходимо вызвать функцию begin с названием модуля.
  4. - подключение модулей осуществляется к аппаратным выводам arduino используемой шины (за исключением 3-Wire)
  5. - простота установки и чтения времени функциями settime и gettime
  6. функция settime может устанавливать дату и время, как полностью, так и частично (например только минуты, или только день, и т.д.)
  7. функция gettime работает как функция date в php, возвращая строку со временем, но если её вызвать без параметра, то функция ничего не вернёт, а время можно прочитать из переменных в виде чисел.
  8. - библиотека расширяемая, то есть для того, чтоб она работала с новым модулем, нужно указать параметры этого модуля в уже существующих массивах файла RTC.h (тип шины, частота шины в кГц, режимы работы, адреса регистров и т.д.), как всё это сделать, описано в файле extension.txt
  9. Таким образом добавив новый модуль в библиотеку, мы лишь увеличим область занимаемой динамической памяти на ~ 36 байт, при этом не затронув область памяти программ.
  10. - при вызове функции begin, библиотека читает флаги регистров модуля и при необходимости устанавливает или сбрасывает их так, чтоб модуль мог работать от аккумуляторной батареи, а на программируемом выводе меандра (если таковой у модуля есть) установилась частота 1Гц, тогда этот вывод можно использовать в качестве внешнего посекундного прерывания.
  11. - при работе с модулем DS1302 не нужны никакие резисторы на выводе GND (которые нужны для его работы с другими библиотеками этого модуля), это достигнуто тем, что для шины 3-Wire указана конкретная частота 10кГц, не зависимо от частоты CPU arduino.
  12. - в библиотеке реализована еще одна не обязательная функция period, принимающая в качестве единственного аргумента - количество минут (от 1 до 255)
  13. если в течении указанного времени была вызвана функция gettime несколько раз, то запрос к модулю по шине будет отправлено только в первый раз, а ответом на все остальные запросы будет сумма времени последнего ответа модуля и времени прошедшего с этого ответа.
  14. Функцию period достаточно вызвать один раз.

//  Подключение библиотеки:
//  #include <iarduino_RTC.h>
//  iarduino_RTC time(название модуля [, вывод SS/RST [, вывод CLK [, вывод DAT]]]);
//      если модуль работает на шине I2C или SPI, то достаточно указать 1 параметр, например: iarduino_RTC time(RTC_DS3231);
//      если модуль работает на шине SPI, а аппаратный вывод SS занят, то номер назначенного вывода SS для модуля указывается вторым параметром, например: iarduino_RTC time(RTC_DS1305,22);
//      если модуль работает на трехпроводной шине, то указываются номера всех выводов, например: iarduino_RTC time(RTC_DS1302, 1, 2, 3); // RST, CLK, DAT
//  Для работы с модулями, в библиотеке реализованы 5 функции:
//      инициировать модуль  begin();
//      указать время        settime(секунды [, минуты [, часы [, день [, месяц [, год [, день недели]]]]]]);
//      получить время       gettime("строка с параметрами");
//      мигать времем        blinktime(0-не_мигать / 1-мигают_сек / 2-мигают_мин / 3-мигают_час / 4-мигают_дни / 5-мигают_мес / 6-мигает_год / 7-мигают_дни_недели / 8-мигает_полдень)
//      разгрузить шину      period (минуты);
//  Функция begin():
//      функция инициирует модуль: проверяет регистры модуля, запускает генератор модуля и т.д.
//  Функция settime(секунды [, минуты [, часы [, день [, месяц [, год [, день недели]]]]]]):
//      записывает время в модуль
//      год указывается без учёта века, в формате 0-99
//      часы указываются в 24-часовом формате, от 0 до 23
//      день недели указывается в виде числа от 0-воскресенье до 6-суббота
//      если предыдущий параметр надо оставить без изменений, то можно указать отрицательное или заведомо большее значение
//      пример: settime(-1, 10); установит 10 минут, а секунды, часы и дату, оставит без изменений
//      пример: settime(0, 5, 13); установит 13 часов, 5 минут, 0 секунд, а дату оставит без изменений
//      пример: settime(-1, -1, -1, 1, 10, 15); установит дату 01.10.2015 , а время и день недели оставит без изменений
//  Функция gettime("строка с параметрами"):
//      функция получает и выводит строку заменяя описанные ниже символы на текущее время
//      пример: gettime("d-m-Y, H:i:s, D"); ответит строкой "01-10-2015, 14:00:05, Thu"
//      пример: gettime("s");               ответит строкой "05"
//      указанные символы идентичны символам для функции date() в PHP
//  s   секунды                       от      00    до       59  (два знака)
//  i   минуты                        от      00    до       59  (два знака)
//  h   часы в 12-часовом формате     от      01    до       12  (два знака)
//  H   часы в 24-часовом формате     от      00    до       23  (два знака)
//  d   день месяца                   от      01    до       31  (два знака)
//  w   день недели                   от       0    до        6  (один знак: 0-воскресенье, 6-суббота)
//  D   день недели наименование      от     Mon    до      Sun  (три знака: Mon Tue Wed Thu Fri Sat Sun)
//  m   месяц                         от      01    до       12  (два знака)
//  M   месяц наименование            от     Jan    до      Dec  (три знака: Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec)
//  Y   год                           от    2000    до     2099  (четыре знака)
//  y   год                           от      00    до       99  (два знака)
//  a   полдень                               am   или       pm  (два знака, в нижнем регистре)
//  A   полдень                               AM   или       PM  (два знака, в верхнем регистре)
//      строка не должна превышать 50 символов
//  если требуется получить время в виде цифр, то можно вызвать функцию gettime() без параметра, после чего получить время из переменных
//      seconds  секунды     0-59
//      minutes  минуты      0-59
//      hours    часы        1-12
//      Hours    часы        0-23

Модуль датчика звука (Sound Sensor)

Sound Ku-038.pngМодуль датчика хвука KY-038 содержит датчик на плате,  смонтированы выходы, усилитель звука, подстроечный резистор и электронный микрофон, чувствительный к звуку, приходящему во всех направлениях. Регулятором чувствительности (переменным резистором) можно выбирать от какого звука будет срабатывать датчик. Датчик звука для Ардуино имеет на плате подписанные выходы (обозначение у каждого производителя может отличаться), но проблем с подключением датчика к Ардуино возникнуть не должно. Питание датчика производится от 5V, выход (OUT, S или AO) подключается к любому аналоговому входу на Arduino Uno, а выход DO к Pin 0. Датчик уровня звука используется для слежения за уровнем шума или обнаружения громких сигналов: хлопков, стуков или свиста.  Микрофон преобразует звуковые колебания в колебания электрического тока сигнал с микрофона усиливается и сравнивается с порогом с помощью компаратора L293. Датчик имеет выход с логическим уровнем. Сработал датчик – на выходе появился логический 0.  Регулятором чувствительности можно выбирать, от какого звука будет срабатывать датчик - от слабого, громкого или очень громкого звука. 

Модуль имеет электрический конденсаторный микрофон LM393. Соединяем от датчика контакты G, +, A0, D0  с  контактами на Ардуино: GND, 5V, A0, D2.
Заливаем в Ардуруину следующий скетч и  через монитор порта будем регулировать чувствительность. Пороговое значение для датчика 512. Чем громче звук тем меньше число на выходе.
const int analogInPin = A0; // аналоговый вход А0
const int digitalInPin = 2; // цифровой вход D2
int dValue;
void setup() {
  pinMode(digitalInPin, INPUT);
  Serial.begin(4800); }
void loop() {
  Serial.println(analogRead(analogInPin));
  dValue = digitalRead(digitalInPin);
  if (dValue == HIGH)
    Serial.println("--------- HIGH SOUND ----------");   delay(2); }

 

оранжевый (или желтый) — сигнальный.