Предыдущая статья, предыстория этой: FPV. От начавшего начинающим. Часть 3. Наземное оборудование, "умный" чемодан под управлением Arduino и все-все-все.
Приветствую коллеги.
По многочисленным просьбам... =) и учитывая, что прошлую статью добавили в избранное аж 78 человек о_0...
Как и обещал в таком случае выкладываю статью с подробным описанием Блока мониторинга и управления из предыдущей статьи про FPV чемодан. Того самого устройства, которое выводит на дисплей вот эту информацию:

Альфа-версия софта прилагается.
В качестве предисловия.
Перед тем как пытаться реализовать данное устройство, сильно рекомендую к прочтению как минимум этот ресурс.
Очень не хотелось бы отвечать на вопросы, на которые там уже есть ответы.

Перечисление и описание некоторых нюансов применения необходимых компонентов.
Где купить каждый решает сам. Я по возможности буду давать ссылки на ParkFlyer, т.к. они банально проще оформляются =) Ссылки на устройства, которых нет на парке, буду давать на Ebay. Но надо учитывать, что там ссылки долго не живут, посему нужно будет искать по ключевым словам.
Так же не буду заострять внимания на разводке питания для датчиков и других компнентов. Все питание +5В берется с платы Ардуино. Исключение составляют релейный модуль и сервопривод, для них используется отдельный DC-DC +5В конвертер (см. схему ниже).

1. Arduino Uno/Nano.
В моем "чумодане" используется Arduino Uno, но возможно использовать и Nano, он компактней, если для кого-то это критично.
UNO R3 ATmega328P Development Board For Arduino
Товар http://www.parkflyer.ru/product/1566472/

У платы рекомендую распаять дополнительные разъемы, которые видно в правой части платы. Оттуда можно взять дополнительное питание, там же удобный вывод на шину I2C. А так же если устройства под номером два в наличии нет, то и распаять гребенки из штырьковых контактов, т.к. с ними качество контактов с разъемами датчиков будет сильно лучше.
Но, учитывая мой опыт сильно рекомендую прикупить вот такую штуку:

2. NANO I / O Expansion sensor Shield Module for Arduino UNO R3 Nano V3.0
Данная плата позволяет достаточно удобно распределить питание большого числа датчиков и других устройств.

3. Дисплей. IIC / I2C 1602 Blue Backlight LCD Display Module For Arduino
Товар http://www.parkflyer.ru/product/1567398/
Ultrasonic Module HC-SR04 Distance Measuring Ranging Transducer Sensor
Товар http://www.parkflyer.ru/product/1567123/


Библиотеку брать тут. Там же достаточно подробное описание возможностей устройства.
В моем случае этот сенсор закреплен на сервоприводе, автоматически выдвигается из чемодана при включении питания и задвигается обратно при выключении. Все это видно на видео в предыдущей статье. На именно такой реализации не настаиваю, но просто закрепить датчик снаружи чемодана не лучшая идея ИМХО, т.к. есть подозрение, что он достаточно быстро замусорится и начнет работать не адекватно.
Алгоритм работы описан в предыдущей статье.
Настройка задержки включения питания рекордера в этой строке:
if (rec_status == 0 && rec_on_delay > 5000) - единица измерения миллисекунды.
Настройка задержки выключения питания рекордера в этой строке:
if (rec_off_delay >= 5000) - единица измерения миллисекунды.
Значения выставлять на свой вкус.

7. датчик напряжения.
По факту - обычный потенциометр 50кОм. Например такой:
10pcs 3296W-503 3296 W 50K ohm Trim Pot Trimmer Potentiometer
Куда подключать - см. схему ниже. Настраиваем исходя из тех соображений, чтобы при максимальном напряжении батареи напряжение на выводе потенциометра не превышало, но было как можно ближе, к +5В. Коэффициент для перевода из попугаев в вольты используемый вот в этой строке кода:
lcd.print(voltage*0.0133, 2);
Вычисляется исходя из:
- 5В \ 1024 попугая = 0,004883В на одного попугая;
- при +14,7В (для моего случая) на выходе потенциометра имеем +5В;
- значит на каждый Вольт на выходе потенциометра имеем 2.94В батареи;
- 0,004883В * 2.94 = 0,01435602 В на попугая;
В самом скетче все основные операции производятся с напряжением именно в попугаях, чтобы не ворочать лишний раз числа с плавающей точкой. В привычный вид напряжение переводится только для вывода на дисплей.
Само собой показания тоже нужно будет калибровать под свой конкретный случай, вооружившись более-менее точным вольтметром. Сначала стоит откалибровать напряжение +5В на потенциометре для максимального значения напряжения батареи, затем посчитать свой коэффициент по выкладкам выше. После чего проверить значение напряжения на дисплее и подкорректировать коэффициент для реальных условий. У меня он как видно тоже отличается от вычисленного. Связано это все с тем же опорным напряжением Ардуино, которое может быть не ровно +5В.

7.1 Датчик тока на чипе ACS712 5А.

Все что надо знать о нем, так это то, что он двунаправленный, при нулевом токе напряжение на сигнальном выходе составляет 2,5В, изменяется линейно при возрастании тока в прямом направлении и уменьшается линейно при возрастании тока в обратном направлении. Напряжение питания 5В. У пятиамперного чипа коэффициент: 185мВ на 1А тока.
Т.е. при прямом токе 1А на сигнальном выходе будет 2,685В, например.

8. Релейный модуль.
Effective Stable 1 Channel 5V Indicator Light LED Relay Module For Arduino EC
Используется для переключения между основной и резервной батареей.
Запитать его все же лучше от отдельного источника питания, у меня запитан от отдельного DC-DC +5В. Куда подключать - см. схему ниже.

9. Датчик температуры.
1PCS LM35DZ LM35 TO-92 NSC TEMPERATURE SENSOR IC NEW
По-большому счету совсем не обязательный датчик, я подключил просто потому, что завалялся такой в закромах, надо было куда-нибудь применить. Датчик разместил на радиаторе охлаждения большого DC-DC конвертера +12В от которого запитано все оборудование чемодана. По показаниям датчика осуществляется управление вентилятором, который встроен в боковую стенку напротив DC-DC.
Подробное описание и как подключать можно почитать тут.

10. Сенсорная клавиатура на чипе MPR121.

Библиотеку брать тут.

Для управления питанием рекордера, световой сигнализации и вентилятора использовал MOSFET ключи n-канальные на 500мА - такие. Если кому-то нужно коммутировать больший ток - выбирайте ключи мощнее.
Для световой сигнализации использовал лазеры - такие.
Для звуковой сигнализации использовал активную пищалку, была в закромах. Пассивную использовать нельзя, работать без правки кода не будет. Наверное, вот такая подойдет. Искать по ключевым словам "Active Buzzer".
Для питания релейного модуля и сервопривода использован DC-DC 5В - такой.
В схеме релейной задержки использовано 12-вольтовое реле, типа такого.
Между аналоговыми входами Ардуино, куда включены датчики и "землей" рекомендую включить конденсаторы минимум 10мкФ для фильтрации помех.
Остальную рассыпуху описывать не вижу смысла, номиналы указаны на схеме.
Паял все на макетной плате, травить не люблю, ленюсь =)

Собственно схема:


Скетч: (Chumodan_v1.02.ino)

Код комментировать полностью сильно не хочется, слишком долго и муторно. Многие нюансы уже не помню точно. Код разбит на функции, опишу их назначение, будет более-менее понятна структура.

BatteryDraw(); - отрисовка пиктограммы батарейки в левой части дисплея.
VoltagePrint(); - печать текущего значения напряжения.
ConsumedPrint(); - печать текущего значения потребленного тока.
Keypad(); - опрос клавиатуры и обработка нажития клавиш.
UtraSonicSensor(); - обработка показаний датчика расстояния и управление питанием рекордера.
BatteryMonitor() - обработка показаний датчиков тока и напряжения, подсчет потребленного тока, вызывается по прерыванию раз в секунду.
TimePrint() - функция печати таймера.
StatusBarPrint() - функция печати строки состояния.
Save() - функция сохраниения параметров при выключении питания.
Restore() - функция восстановления записанных параметров при включении питания.

З.Ы. Случайно залил старую версию скетча, где нет кусочка кода, касающегося работы с релейным модулем, который переключает питание между батареями... Подумал и решил так и оставить =) Устроим конкурс, кто напишет этот кусочек кода самостоятельно и грамотно и выложит в комментах - тому пожизненная и абсолютно беплатная поддержка девайса в виде личных консультаций посредством скайпа, если оный индивидуум его спаяет сам, конечно =)

З.Ы.Ы. Вообще иметь ввиду, что после первой заливки скетча необходимо будет калибровать датчики под свою схему. Те значения, что есть в скетче, скорее всего не подойдут к вашей реализации схемы!!! Про то, какие значения крутить, выше подробно описано.
В дальнейшем для этих целей планирую написать интерактивное меню, по срокам - не знаю, когда-нибудь =) Может кто-то раньше меня успеет и выложит - будет совместный проект =)

З.Ы.Ы.Ы. Обновление прошивки. Встроил меню для настройки и калибровки с к. Если вдруг кому-то понадобится, в чем я лично сильно сомневаюсь - пишите в комменты, выдам инструкцию.

Спасибо за внимание. Конструктивная критика приветствуется, рацпредложения тоже.

Предыдущая статья, предыстория этой: FPV. От начавшего начинающим. Часть 3. Наземное оборудование, "умный" чемодан под управлением Arduino и все-все-все.