Управление прожектором без RC-switch

Понадобилось подрубить фары к коптеру на NAZE32 под iNAV/CleanFlight. Фары надо включать отдельным диапазоном канального импульса, например > 1700 ms. Приемник подключен по CPPM, так что выходы каналов проброшены на выходы моторов посредством вкладки Servo.

Для питания светодиодов использован драйвер: JRLED MR16-9W Power Driver for Light Lamp Bulb (DC 12~14V / 5PCS)
Линзы 2шт: 22mm 30 Degree Condensing Lens for LED Light - White (5 PCS)
Светодиоды 2шт (последовательно): Eipstar JR 3W 180lm 5500K Neutral Light LED Module

Драйвер собран на микросхеме MC34063A, которая имеет вывод 5 (COMP) для управления напряжением светодиода. По умолчанию на нем 0 через подключение к GND, что дает максимальное напряжение. Я отогнул его и подключил через резистор 8.2k к земле. Если на вывод подать 5V, светодиод выключится. Но проблема в том, что iNAV/CleanFlight не может выдать лог.1 на моторные выводы при попадании канального импулься в заданный диапазон. Хорошо бы иметь для этого что-то типа конфигурации на вкладке Flight Modes…
Поэтому управлять этим драйвером через GPIO без допиливания iNAV не получится… Но есть другое решение.
Можно использовать RC-switch, но это дополнительный вес на маленьком коптере и вообще ломает идеалы 😁

Решение - снимать сигнал с вывода контроллера MinimOSD и допилить его прошивку. Я использовал вывод 3 в среде Arduino (вывод PD3 контроллера, прямо над отметкой на корпусе). Пробросил от него провод на видеоконнектор +12V, который предварительно откусил от платы.

В прошивке scarab-osd сделал включение этого вывода по канальному импульсу и также режим мигания 2Hz для отдельного диапазона импульса. Вывод 3 контроллера MinimOSD подключен к проброшенному моторному пину контроллера NAZE32.

Изменения в файлах:

Config.h (добавить в конец):

// AP; START;
/************ Adding Custom GPIO output pin controlled by channel value; Used for LED driver control *********/
// Comment out CUSTOM_OUT_PIN if this logic is not needed at all;
#define CUSTOM_OUT_PIN 3 // This pin will output logical level;
#define CUSTOM_OUT_STICK 7 // Ch.7 is AUX3 in iNAV;
// These conditions may be commented out if not needed;
#define CUSTOM_OUT_HIGH_CONDITION (MwRcData[CUSTOM_OUT_STICK] > 1675) // This condition is checked first;
#define CUSTOM_OUT_FLASH_CONDITION (MwRcData[CUSTOM_OUT_STICK] > 1500) // Flashing at 2Hz; This is checked if condition for HIGH evaluated false;
// These setting define what means LOW and HIGH from logical level point; they allow to invert signal;
#define CUSTOM_OUT_HIGH LOW // My LED driver requires inverted signals;
#define CUSTOM_OUT_LOW HIGH
// AP; STOP;

MW_OSD.ino (добавить в конец функции setup():

// AP; START; Custom output support;
#if defined CUSTOM_OUT_PIN
  pinMode(CUSTOM_OUT_PIN, OUTPUT);
  digitalWrite(CUSTOM_OUT_PIN, CUSTOM_OUT_LOW);
#endif
// AP; STOP; Custom output support;

MW_OSD.ino (добавить в конец функции loop():

// AP; START; Custom output support;
#if defined CUSTOM_OUT_PIN
  byte customLedState = CUSTOM_OUT_LOW;
#if defined CUSTOM_OUT_HIGH_CONDITION
  if (CUSTOM_OUT_HIGH_CONDITION) {
    customLedState = CUSTOM_OUT_HIGH;
  }
#endif
#if defined CUSTOM_OUT_FLASH_CONDITION
  if (timer.Blink2hz && (CUSTOM_OUT_FLASH_CONDITION)) {
    customLedState = CUSTOM_OUT_HIGH;
  }
#endif
  digitalWrite(CUSTOM_OUT_PIN, customLedState);
#endif
// AP; STOP; Custom output support;

Все протестил и замазал liquid electrical tape.

Фотки:

  • 994
Comments
SergejK

Актуальная тема. У меня на полетнике встроен свич на два канала видео. В идеале щелкать с аппы, но судя по всему такой функциональности в этих проектах пока не предусмотрено.

Prikupets

Тут еще момент, что в своей прошивке в MinimOSD я сделал режим мигания по определенному значению сервоимпулься, а в iNAV настроил вывод этого значения при FailSafe. Теперь при пропадании сигнала фары начинают бешенно мигать.