Контроллер для кордовых электричек

VitalikV

Просто при настройке каждый раз надо в голове пересчитывать секунды в минуты, переключать множитель, не удобно и можно запутаться. В таймер пусть заливаются секунды, а программатор отображает минуты:секунды. Т. Е. В программаторе просто заменить отображение, а на кнопки назначить шаг в 60 и 1 секунду. Т. Е. Вверх/вниз -шаг 60, влево/вправо -шаг 1

А когда закончим настройки, жмем меню записать и данные заливаются в таймер.

Кстати онлайн запись в таймер не нужна, записывать, я думаю лучше, после настройки всех параметров

Маркс
VitalikV:

Кстати онлайн запись в таймер не нужна, записывать, я думаю лучше, после настройки всех параметров

Это само собой, крайний пункт меню, до которого я не до листал, как раз WRITE.

про секунды и минуты, все понял, это сделать не трудно, я могу сделать например
при изменении временных параметров множитель будет переключать секунды, десятки секунд, минуты.
т.е. х1 - секунды, х10 - десятки секунд до 60, х100 - минуты,

VitalikV:

Вверх/вниз -шаг 60, влево/вправо -шаг 1

совсем не просто менять логику работы кнопок,
сейчас - вправо/влево - листаем пункты, вверх/вниз - меняем значения,
что бы поменять назначение кнопок, придется делать второй уровень вложенности программы.
а смысла в этом большого нет ), на мое скромное ИМХО.

завтра попробую поправить минуты и секунды

в общем, предлагаю пока ограничится - AS IS (как есть), а потом всегда можно доработать ))
завтра сделаю минуты/секунды и займусь обменом с таймером.

Маркс

есть еще вариант, SELECT выбирает разряд, который надо поменять, он начинает мигать, UP/DOWN его меняют.
как заставить мигать я знаю, надо подумать про алгоритм )

VitalikV

Да, можно как в часах селект минуты, селект секунды и кнопка ввод (сохранить) . Это не принципиально. Если разделить на минуты и секунды, и избавиться от миллисекунд, то это то что надо.

Как бы основное назначение программатора, это облегчить настройку таймера, то как отказ от ноута, и упрощенная визуализация параметров.

Маркс

Желательно получить обратную связь по программируемым параметра,
достаточно тех что есть или я что то важное упустил ?
Потом добавить будет сложнее, чем прямо сейчас “напихать лишних и ненужных”,
я могу, на всякий случай, впиндюрить в код штуки по три временных и числовых параметров,
ну и парочку булевых (включен/выключен), обозвать их Plug(заглушка)1-Plug(заглушка)8 например.
Наверное так и сделаю, пусть будут про запас

RandomJ

Моё видение: подключились к таймеру, прочитали настройки, изменили настройки, записали в таймер.

RandomJ
Маркс:
int Stack [] {            // программирумые параметры
  Motor_ESC_Normall_THR,  // нормальные обороты мотора
  Motor_ESC_Landing_THR,  // обороты мотора при посадке
  InFly,                  // общее время полета с момента уборки шасси
  Takeoff,                // время на "убежать к ручке"
  GearUp,                 // момент уборки шасси с момента старта
  Landing                 // время на посадку.
  };

нет параметра “выпуск шасси”

Маркс
RandomJ:

нет параметра “выпуск шасси”

в программе таймера выпуск шасси происходит после уменьшения оборотов двигателя до Motor_ESC_Landing_THR.

VitalikV

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

Маркс
VitalikV:

Параметр выпуска уборки шасси , можно сделать отключаемым, в спорте не используют.

функционал есть в программе таймера, был изначально заложен “по просьбе”
все что касается шасси очень просто убирается,

#define Landing_Gear // если ретрактов нет, ставим коммент на эту стоку строку

но вот временные параметры в настройках убрать нельзя,
их достаточно игнорировать, они ни на что влиять не будут )

VitalikV:

Обороты мотора при посадке, так же надо добавить вкл выкл, так как посадка происходит с выключенным мотором.

это лишнее, достаточно изменить параметр

Motor_ESC_Landing_THR

и сделать его равным

#define Motor_ESC_Min_THR 800       // двигатель стоп

но на самом деле, изначально “посадочные обороты” были сделаны для того,
что бы показать пилоту, что время полета истекает, пора подумать о посадке )
так что вполне можно сделать пониженными, но при этом уменьшить параметр

#define Landing 20                  // время в секундах отводимое на посадку, в течении этого времени будут выпущены шасси и снижены обороты мотора до посадочных 

кста, в скетче увеличение оборотов при старте и уменьшение при посадке происходит плавно,
постоянная времени тоже настраиваемая.
за изменение оборотов двигателя отвечает

boolean Engine_Proc(int j1, int i1)
RandomJ

ИМХО: по окончании полётного времени делаем три коротких сброса оборотов (0,75 от номинала на 1 сек с промежутками 1 сек.)


пример того как это сделано у меня на учебной
speedController.writeMicroseconds(fullPower * 0.75); //1500 мксек//
delay(500);
speedController.writeMicroseconds(fullPower * 0.95); //1900 мксек//
delay(500);
speedController.writeMicroseconds(fullPower * 0.75); //1500 мксек//
delay(500);
speedController.writeMicroseconds(fullPower * 0.95); //1900 мксек//
delay(500);
speedController.writeMicroseconds(fullPower); //2000 мксек//


и через 10 секунд глушим двигатель (примерно 2 круга, больше не надо). Тормоз настраивается в ESC (обязательно! Если винт при касании земли будет вращаться, то посадка в зачёт не пойдёт).

Маркс
RandomJ:

delay(500);

я его никогда не использую ), разве что при тестировании чего нибудь.
это правило плохого тона в программировании тормозить программу.

но идея понятна и реализуема, когда дойдет до правки программатора, добавлю.

RandomJ
Маркс:

это правило плохого тона в программировании тормозить программу.

Верю, но я в программировании не силён.

VitalikV
Маркс:

но на самом деле, изначально “посадочные обороты” были сделаны для того,
что бы показать пилоту, что время полета истекает, пора подумать о посадке )
так что вполне можно сделать пониженными, но при этом уменьшить параметр

Как Роман написал выше, не нужны обороты на посадке, делается именно кратковременный сброс оборотов. Если вдруг не рассчитал время и обороты упадут до посадочных на фигуре, то это дрова.

И изначально речь шла об этом же, за пять-десять секунд, до конца, кратковременный сброс оборотов. Видимо на том этапе как раз упустили этот момент.

Маркс

на работе “дело было вечером, делать было нечего”(с)

прикинул в первом приближении как может выглядеть таймер в одноплатном варианте
слева ATMEGA328P, справа MPU6050, нижний левый разъем на регулятор, правый для программатора.
это так со скуки нарисовал, выдалось пол часика свободного времени, а ардуинки под рукой не было ).
но на этом макете отсутствует стабилизатор напряжения на 3,3В,
что бы не загонятся вопросом согласования уровней
и кварца, но без него думаю вполне можно обойтись.
опять же, кнопки режимов и индикатора (с/диод) показывающего, что все включено ))

но в этом решении есть подводные СКАЛЫ, ATMEGA328p и MPU6050 отдельными камнями,
стоят на Али дороже чем готовые платы Ардуино Мини и GY521

VitalikV
Маркс:

ATMEGA328p и MPU6050 отдельными камнями,
стоят на Али дороже чем готовые платы Ардуино Мини и GY521

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

RandomJ
Маркс:

ATMEGA328p и MPU6050 отдельными камнями,
стоят на Али дороже чем готовые платы Ардуино Мини и GY521

Верно, поэтому использование ардуино подобных платок с периферией считаю экономически обоснованными и наиболее простым в реализации руками пионерофф.

Маркс
VitalikV:

а плюс еще обвес и платы где то заказать, одну две штуки делать никто не будет.

JLCPCB изготовит и отправит от пяти штук в двухстороннем исполнении.
обвес стоит совсем копейки, рублей на 15 в том виде как на картинке.

Да все понятно, это так, от нечего делать )

Маркс

Решил изменить немного логику переменных параметров.
Те параметры которые определяют обороты двигателя сделаю в процентах от максимальных.
Временные параметры сделаю минуты и десятки секунд.
Тогда не придется устраивать “лишние трудности” в виде разбиения на тысячи, стони, десятки и изменение каждого числа.
Если такой вариант не устроит, напишите.
Сегодня, позднее, продемонстрирую первую версию, осталось немного “причесать”.