ArduCopter Mega: порт на обычную Arduino (тестим)
Добрый день!
Наиболее подходящая прошивка Мегапирата, ИМХО, Б8. Пока нет ЖПС и сонара, пробую с ней. Хотя остальные тоже летают, кроме 33. Там какие то баги с коннектом на Планер. С ПИДами пока не играюсь, хватает стоковых. На улицу еще не выносил, но в тесной комнате на высоте меньше метра на висение хватает моих, очень незначительных, пилотских навыков. И это производит впечатление. Спасибо команде пиратов и персонально Олегу. Вопрос к Олегу. Принцип программирования Вашего секвенсера. Цифра перед запятой, это время в миллисекундах? Я использую 9 ЛЕДов (3 RGB ленточки на лучах через самодельные контроллеры из распотрошеных регулей). Прописал порты для всех и добавил 9й лед с индексом 256. Это правильно? Работает с Вашими программами, хоть и не совсем так, как хотелось бы. Там только 4 ЛЕДа, в программах и, соответственно, адекватно работает только 4я. Хотелось бы уяснить принцип программирования, жалко времени разбираться методом научного тыка. Заранее спасибо. Сейчас пытаюсь разобраться с контролем батарей, это уже идея фикс у меня, переключить регули в режим Никель-Кадмиевых батарей, чтобы несколько увеличить время полета. А без надежного контроля за напряжением борта, боюсь угробить аккумы. Спасибо заранее.
Сейчас пытаюсь разобраться с контролем батарей…
… А без надежного контроля за напряжением борта, боюсь угробить аккумы.
Во-во! Я тогда, когда описывал зависание коптера и невозможность его остановки (после чего благодаря совету Алекса я-таки поставил выключатель, отрубающий питание мозгов коптера!!!) - вот я тогда рассказал, что пару раз пришлось ждать ПОЛНОГО разряда аккумулятора, чтобы подойти к “бешенному коптеру”. Ну и после то ли второго то ли третьего такого случая я обнаружил, что один акум благополучно скончался. Коптер высосал из него все что смог и напряжение на банках упал где-то до чуть более 2 (двух!) вольт.
Может как-то реанимировать его и возможно, но учитывая его емкость всего в 1600mAh - я даже не пытался. Просто увидел, что он не заряжается, померял напряжение и отложил его в сторону. Но сам факт свидетельствует - надо иметь четкий контроль, иначе прощая аккумулятор!!!
Липоли не терпят полного разряда. А полный для них, это меньше 3 вольт на ячейку. Так, что попробуйте отбалансировать Вашу батарею специальным зарядником. Возможно, что и оживет. А вообще то нужно покупать однотипные батареи. Тогда можно из нескольких дохлых собрать одну рабочую.
Хотя остальные тоже летают, кроме 33
я на 33 летаю, если речь про ту что с рцгрупс
боюсь угробить аккумы
кстаии про акумы, чето мой побитый стал быстро заряд терять и чуток припухает при юзании на коптере + если нажать, звук как будто чето жидкое булькает/шипит (с другим акумом нету такого)… дальше использовать или разрядить до 0 и выкинуть?
дальше использовать или разрядить до 0 и выкинуть?
ну х.з. смотря на сколько ты фортовый и где он хранится у тебя, держа в уме безопасность твоей семьи… я бы конечно попытался разобрать его гденибудь на природе аккуратно, и выкинул поврежденную банку.
хранится на столе рядом с легко воспламеняющимися предметами (бумага, дерево, пластик, еще один аккум), 2 банки пробиты (за фольгой чето зеленовато виднеется), одна помята - последний краш был очень жестким, они в общем то давно помяты, но просто щас напрягло что набухает немного =)
выкинуть не жалко (2.2Ah), но надо же разрядить хорошенько, вариант с ведром и соленой водой меня настораживает… в заряднике есть функция DISCHARGE - только хз до скольки оно отdischargeрит аккум =)
вариант с ведром и соленой водой меня настораживает…
взорвется вместе с ведром и соленой водой 😃 под нагрузку какую нибудь поставь, типа светодиодной ленты, и пусть горят до смерти
Вопрос к Олегу. Принцип программирования Вашего секвенсера. Цифра перед запятой, это время в миллисекундах?
Лед 256 уберите от греха!
Щяс изображу по-русски. Для Вики.
MegaPirate B8 LED sequencer
(контроллер БАНО)
Инструкция по программированию.
Открываем LED.pde
После тарабарщины на англицком видим такое
#define LED_1 1
#define LED_2 2
#define LED_3 4
#define LED_4 8
#define LED_5 16
#define LED_6 32
#define LED_7 64
#define LED_8 128
#define LED_OFF 0
Это, собственно, символические имена каналов секвенсора (не путать с выводами ардуины!)
Их мы и будем указывать при задании программ.
Для начала нам нужно указать, к какому выходу ардуины какой канал секвенсора подключен:
#define SQ_LED1 55 // A1
#define SQ_LED2 56 // A2
#define SQ_LED3 57 // A3
#define SQ_LED4 58 // A4
//#define SQ_LED1 51
//#define SQ_LED1 51
//#define SQ_LED1 51
//#define SQ_LED1 51
Приведенный код означает, что разрешены к использованию с 1 по 4 каналы секвенсора, и подключены на выходы с d55 по d58 (что эквивалентно А1…А4). Также можно добавить каналов, вводя соответствующие строки, например:
#define SQ_LED5 60 // A6
- это означает, мы разрешили использовать 5-й канал секвенсора и завели его на d60-ю ногу ардуины.
Каналы можно прописывать и назначать в любой последовательности. Имейте ввиду, что нога А5 (d59) используется для включения режима CLI, поэтому заводить на нее секвенсор нельзя!
Теперь определимся с каналом приемника, с которого будем брать управление:
#define SQ_LED_CH 7 // numbers from 6 to 8
По умолчанию стоит 7-й канал. Имейте ввиду, что канал должен быть дискретным. Здесь и далее будем звать его тумблер
Написание программы.
В секвенсоре предусмотрено 4 программы до 64 *уя позиций в каждой (см. сноску). Для запуска текущей программы включаем тумблер, для гашения всех огней - выключаем. Программы циклические: дойдя до конца, начинает сначала. Для переключения на следующую программу (после №4 будет №1 и т.д.) - из положения тумблера ON выключаем и включаем снова за время менее 1 секунды. При выключении тумблера номер программы сохранится. После отключения питания будет выбрана программа №1.
Рассмотрим простую программу на примере стандартной №1:
const byte led_seq1[]= // 2 short 1, 2 short 2, led 4 constantly on
{ 2, LED_1|LED_4,
2, LED_4,
2, LED_1|LED_4,
20, LED_4,
2, LED_2|LED_4,
2, LED_4,
2, LED_2|LED_4,
20, LED_4,
0, LED_OFF,
};
Программа представляет собой неопределенный массив из записей, разделенных запятой и имеет имя led_seq(номер_программы)
Каждая запись представляет собой строку вида:
%время%, %состояние%,
где “время” - число в 1/20 долях секунды (цифра 20 означает 1 сек). Максимальное значение 255, т.е. 12.5 секунд. Если этого мало (сомневаюсь), скопируйте шаг еще раз.
“состояние” - собственно, состояние выходов секвенсора. Здесь нужно указывать символическое имя канала (см. в начале статьи) секвенсора, который будет включен в течение этого шага программы. Если включенных выходов несколько, нужно разделять их знаком |
Например,
40,LED_1|LED_4, // - в течение 2 секунд будут включены 1-й и 4-й каналы, остальные выключены
Если нужно просто “побыть в темноте”, необходимо указать время (ненулевое):
20, LED_OFF, // выключить все каналы на 1 секунду
Программа всегда должна заканчиваться строкой:
0, LED_OFF,
Секвенсор при обнаружении этой команды, сразу же перескакивает на начало программы
Все.
====
Поправка:
Теперь общий размер программ ограничен только свободной оперативной памятью Ардуины
(в последней сборке было около 1 кБ, т.е. 500 шагов)
Тезка,
поставьП 0.8
И 0.1
Д 0.08
МАХ 200и проверь
Поставил. И чисто субъективно коптер стал более управляемым по “яв”. Может это психологический такой эффект - выполнить рекомендации “от гуру” и получить результат??? 😁
Ну, как бы там ни было - в комнате стал гораздо послушнее и я даже решился опять выйти на улицу, не смотря на довольно сильный и порывистый ветер.
Результат я описывал в соседней ветке - вот тут 😦
Что же… На то оно и учеба…
так он перестал крутиться тупо или нет?
Спасибо, Олег!
С программированием все ясно. Очень удобный принцип.
Теперь вопрос. Что означают эти степени двойки в именах каналов, и почему для 9 канала нельзя использовать 256? Как, в таком случае задействовать программно 9 канал? У меня 3 ленты светодиодов с возможностью программно задавать цвет каждой ленты типа 111 - белый, 000 - выключен, 100 - красный, 001 -зеленый и т.д. Очень удобно для БАНО можно включать стандартные аэронавигационные опознаватели, правый красный, левый зеленый, задний белый мигающий.
P.S.
С включением режимов в планнере разобрался. Детская ошибка, не нажимал рефреш. Теперь датчик тока/напряжения задействован, но работает некорректно. На оригинальной плате он включен через резистор 10 ком, у меня напрямую. В прошивке код не соответствует рекомендованному производителем датчика. В коде производителя показания датчика просто делятся на коэффициент 12.99 для напряжения, 7.4 для тока, в скетче совсем по другому. В результате я получаю напряжение батареи 0.33 вольта, вместо 11, а где должен высвечиваться ток, вообще непонятно.
Двойки в степени означают бит. Переменная состояния портов восьмиразрядная, поэтому больше 8 каналов быть не могет. Добавлять еще один канал - много заморочек и упадет быстродействие управления коптером, т.к. повылезают переменные INT.
А что мешает для получения белого мигающего объединить 3 входа одной ленты и подать на них с одного выхода? Или соединить 2 входа, чтоб, к примеру, цвет был “синий-оранжевый-белый” у одной ленты?
Или вот прямо 3 независимых ленты должны переливаться?
На отдельный контроллер - хоть 100500 каналов сделать можно, но тут еще ведь квадр стабилизировать надо…
Теперь понятно. Ничего не мешает объединить, но тогда весь смысл использования ленты теряется. Нельзя использовать INT_32? Или собъется цикл LOOP в основной программе?
Переливаться, это лишнее, конечно, но я хочу программно задавать свечение светодиодов на лучах и для аварийных режимов тоже. Например разряд батарей до лпределенного уровня вызывает мигание всез лучей красным и частота мигания растет по мере продолжения разряда. Ну и моды можно так обозначать. Текущий, в котором работает коптер.
Хы… прикольно.
Значит так. У вас коптер залетал? Вот и будете crash dummy 😃 Расширю до 16 каналов. Заодно посмотрите, не упадет ли стабильность.
С вас видео этой красоты. Люблю light show!
А что такое crash dummy?
Ну, залетал, это пока рано говорить. Пилот из меня, как из бутылки молоток. Вот сегодня, например, начал заваливаться на хвост и на левый луч. А вчера все было нормально. Скорее всего это то, о чем вы предупредили насчет 9 канала. Других объяснений нет. Левел устанавливал.
так он перестал крутиться тупо или нет?
Угу, перестал. Иногда взлетает не шелохнувшись в сторону, иногда немного “доворачивает” против часовой стрелки. Но это не сравнимо с тем, что было…
Теперь бы еще и от триммирования на аппе уйти в штиль (с ветром-то, понято, подтримировать придется)…
уйти в штиль
Ну, это проще простого.
Триммера в 0, засекаешь, куда он клонится, затем на земле постепенно подкладываешь спички под ноги (ногу) с той стороны и каждый раз:
- CLI-setup-level
- взлет-проверка
В итоге должно отстроиться идеально.
Тут факторов много, аксель с наклоном припан, плата криво стоит, коптер неотцентрован, ноги разной длины… Так что это нормальная процедура.
А я сегодня свою раму развалил. Оказывается китайские железтые линейки хре … плохо аммортизируют 😃
А что такое crash dummy?
Манекен для краш-тестов 😁
Вот, выложил отдельно 16-канальный секвенсор на 8 программ.
Время каждого такта теперь тоже может достигать 50 минут.
Теперь интересно, что будет с таймингом.
ftp://syberian.dyndns.org/led.pde
Если все будет ок, включу в сборку.
Теперь интересно, что будет с таймингом.
А как в B8 посмотреть тайминги? Читал ветку с самого начала и вроде как уже не работают команды, которые были раньше.
Вообще-то 16 каналов можно и на 8 проводах сделать. Надо собрать обычную матрицу 4*4. Конечно некоторые ограничения в связи с этим возникнут, но для моргалок это несущественно. Естественно придется управление каналами в коде подрихтовать 😃 Хотя, пожалуй, можно и не рихтовать, только с двоичными числами при программировании повозиться.