В ходе создания робота-официанта, робота телеприсутствия, селфибота появились некоторые разработки, которыми грех не поделиться с сообществом, то есть сделать open-source. Одной из рабочих версий стала электронная плата под кодовым названием SB version 4.0, использующая недорогую и сравнительно малофункциональную Arduino, а именно, Nano 3.0. Плата SB 4.0 достаточно проста и понятна, чтобы в процессе её сборки закрепить свои знания электроники и навыки пайки, достаточно функциональна, чтобы сделать собственные практичные проекты (например, включить лампочку по сигналам с датчика движения и датчика освещенности или по вашей команде по Bluetooth), а себестоимость комплектующих с доставкой при заказе у наших китайских друзей с таобао составила около $55 (включая сами датчики).
Основное назначение платы SB 4.0 — аппаратный интерфейс. Собрав, вы можете использовать её для получения и обработки данных от нескольких предустановленных датчиков и дальнейшего принятия решения и исполнения алгоритмов. Для удобства отладки создан интерфейс в OS Windows, в котором наглядно отображаются телеметрические показания с датчиков и источника питания, состояние кнопок и сервоприводов, можно отправлять команды на микроконтроллер.
В этой публикации я опишу характеристики платы и один из примеров её применения. Повторюсь, всё это open-source, под лицензией CC Attribution Non-Commercial Share Alike.
Да, уже есть подобные платы управления и KITы с датчиками (более дорогие платы Ардуино с шилдами, у Raspberry Pi, у амперки йодо), но SB 4.0 отличается от них наличием платы питания и удобной программы контроля, написанной с помощью среды разработки LabView. То есть SB 4.0 состоит из двух плат: управления + питания. Это будет видно на фотографиях и видео.
Фотография обеих плат, датчика движения, АКБ:
Программирование
Для программирования микроконтроллера как всегда используем C/C++. Разработку ведём в среде Arduino IDE.
На скриншоте представлен интерфейс программы Selfiebot Control Panel, где наглядно отображаются телеметрические показания с датчиков и источника питания, состояние кнопок и сервоприводов, можно отправлять команды на микроконтроллер.
Скриншот части интерфейса:
Производительность
SB 4.0 использует одну из самых недорогих платформ Arduino Nano 3.0 с 8-битным микроконтроллером ATmega328. Этого достаточно для обработки кода и решения задач: управление роботами, системой умного дома и др.
Совместимость
Логическое напряжение — 5 В, что обеспечивает электрическую совместимость с Arduino-периферией.
Порты ввода-вывода
Доступны управляющие пины микроконтроллера. В скобках указал предустановленные элементы, с которыми плата уже умеет работать.
- 2 пина, которые могут конфигурироваться как цифровой вход/выход и выход ШИМ (для двух цифровых сервоприводов);
- 1 пин, цифровой вход/выход (для датчика движения);
- 3 пина, цифровой вход/выход (для RGB-светодиода);
- 1 пин, цифровой вход/выход (для концевого датчика, кнопки);
- 1 пин, цифровой выход +5В/0В (для управления внешней нагрузкой).
Шина I2C и порт UART задействованы соответственно для платы расширителя портов и модуля Bluetooth.
Предусмотрена универсальность платы SB 4.0. Согласуйте уровни питания, сигнальные уровни, тип входа/выхода! Замените предустановленные датчики на свои датчики:
- температуры
- уровня шума
- влажности
- давления и др.
Входной пин работает по принципу замкнут / разомкнут. Т.е. на пине, идущему к МК или +5В, или 0. Эти значения входят в телеметрические данные, которые отправляются на ПО Selfiebot Control Panel.
Выходной пин либо выдаёт 5В с нагрузочной способностью 1А, либо отключен — 0В. Подавать напряжение или нет на этот разъём – возможно только по внешней команде или по команде алгоритма прошивки.
Не имеет смысла подключать аналоговые датчики к цифровым пинам.
Питание
Питание подается через гнездо питания 2,1 мм, либо с Li-Ion аккумуляторов с контроллером заряда. Источник определяется автоматически.
В случае питания через гнездо, рекомендуемое входное напряжение — 12-12.6 В. Преобразователи напряжения DC-DC выдают на сервоприводы – 7 В, на USB1, USB2 и остальные нагрузки – 5 В. В качестве источника питания можно использовать сетевой адаптер или аккумуляторы.
Для питания периферии используйте пины 5В. При использовании внешнего источника питания, с пина 5В можно суммарно получить до 1А.
Набор для силового электропитания включает в себя:
- Батарейный блок 3х18650, 1 шт.
- Аккумулятор 18650, 3.7 В, от 2200 мАч, 3 шт.
- Контроллер заряда, 1 шт.
- Разъем питания, 1 шт.
- DC-DC преобразователи, 4 шт.
- Датчик Холла, 1 шт.
- Транзисторы, 3 шт.
- Оптопары и резисторы.
Коммуникация
Микроконтроллер Arduino Nano программируется по USB стандартным бесплатным программным обеспечением с сайта производителя МК. Для передачи данных между SB 4.0 и компьютером я как всегда выбрал недорогой распространенный модуль Bluetooth HC-06, скорость передачи данных 9600 Кб/с. По этому беспроводному каналу идут телеметрические данные и команды управления.
Габариты
У меня получились размеры электронной платы силового питания — 100×70×40 мм. Размеры электронной платы управления — 90×70×45 мм. Но уверен, можно ещё пошаманить и уменьшить габариты.
Расстояние между контактами составляет 0,1″ (2,54 мм).
Характеристики микроконтроллера
- Микроконтроллер: 8-битный ATmega328.
- Тактовая частота: 16 МГц.
- Флеш-память: 32 кБ (2Кб используются для загрузчика, 30Кб — для хранения кода Вашей программы).
- ОЗУ 2 КБ.
- EEPROM 1 Кб.
- Номинальное рабочее напряжение: 5 В
Характеристики электронной платы SB 4.0
- Номинальное рабочее напряжение: 12,6 В
- Рекомендуемое входное напряжение: 12–12.6 В.
- Максимальный ток с шины 5 В: 1000 мА
- Портов ввода-вывода общего назначения: 2
- Портов с поддержкой ШИМ: 2
Плата управления включает в себя следующие элементы:
- Bluetooth модуль HC-06, 1 шт.
- Электронная плата расширителя портов микроконтроллера, 1 шт.
- Микроконтроллер Arduino Nano 3.0, 1шт.
- Электронная плата уровня освещенности, 1 шт.
- Сервоприводы TowerPro MG966R, 2 шт.
- Фоторезистор, 1 шт.
- Датчик движения, 1 шт.
- Светодиод RGB, 1 шт.
- Кнопка, 1 шт.
- Предохранитель, 1 шт.
- Джампер, 1 шт.
- Транзистор, 1 шт.
- Конденсатор, 1 шт.
Практическое использование
Варианты практического использования:
1. Открывать / закрывать окна при изменении температуры.
2. Включение / выключение вентилятора при изменении влажности в помещении.
3. Включение / выключение света при наличии движения в темное время суток.
4. Включение / выключение водоснабжения при изменении влажности почвы.
5. Включение ИК подсветки, в темное время суток.
6. Передача любых телеметрических данных на сервер через интернет соединение.
Пример применения платы SB 4.0
Цель: при условии нажатой кнопки, включать свет при обнаружении движения.
Для этого нам дополнительно понадобятся модуль реле, лампочка (220 ADC или до 12 VDC).
1. Чаще всего мы встречаем реле 12VDC и 05VDC. Число означает, какое значение постоянного напряжения необходимо подать на вход реле.
2. Рассмотрим работу распространенного для Ардуино реле SRD-05VDC от компании Songle.
3. При подаче питания на пин Vcc и замыкании с «землей» пина Gnd, загорается зеленый светодиод.
4. Т.к. у нас одноканальный модуль, то на плате вы увидите всего один сигнальный пин In1. Если на In1 установить уровень напряжения LOW, то красный светодиод на модуле реле загорается и реле срабатывает с характерным щелчком. На Ардуино за установку уровня напряжения на пине отвечает команда digitalWrite(pin, LOW); Чтобы вернуть реле в предыдущее состояние, используйте команду digitalWrite(pin, HIGH);
5. Подключим модуль реле к плате SB 4.0, у которой предустановлен датчик движения и пользовательская кнопка.
5.1. Сигнальный пин In1 модуля реле подключим к пину 13.
5.2. В программном коде Arduino Nano находим:
***********************************
// работа с датчиком движения - если движение было, то запоминаем этот факт в течение timeout_SnSM
if (var_Tlm_SnSM == 1) { time_Move_detect = millis(); }
if (millis() - time_Move_detect < timeout_Move_detect) { Move_detect = 1; } else { Move_detect = 0; }
***********************************
Ниже этих строк добавляем:
***********************************
// если пользовательская кнопка нажата (== 0), то при фиксации движения (== 1) подаем сигнал на пин 13 (== LOW), на время timeout_SnSM
if (var_Tlm_BUT == 0) {
if (Move_detect == 1) { digitalWrite(PIN_D13, LOW); } else { digitalWrite(PIN_D13, HIGH); }
} else {
digitalWrite(PIN_D13, HIGH);
}
***********************************
5.3. Загружаем новую прошивку и включаем питание платы.
Если датчик движения обнаружил движение, то благодаря нашему алгоритму на пине питания внешней нагрузки появляется уровень LOW, реле срабатывает, замыкая цепь, и лампочка загорается.
Таким образом, если человек проходит мимо датчика движения, то лампочка включается.
Автор: SME