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

RandomJ

Марат ,

Да, в поле без компа никак, это плата за простоту изделия. Калибровка при каждом подключении АКБ, как оказалось, не нужна, если только у вас нет постояноой смены пары регулятор - контроллер.

Мой вариант кода, копируем код, вставляем в скетч arduino ide, радуемся…
не много изменён способ записи значений в переменные согласно описанию библиотеки.
[code]
#include <Servo.h>

Servo speedController;
// ---------- ПОЛЬЗОВАТЕЛЬСКИЕ НАСТРОЙКИ ---------- //////////////////////
int flyTime = 60; // Время полёта, сек //
int delayCutOff = 10; // Задержка перед отключением, сек //
int idle = 1000; // Нулевое значение газа //
int fullPower = 2000; // Максимальная мощность //
//////////////////////////////////////////////////////////////////////////
int throttle;

void setup() {
pinMode(A0, INPUT_PULLUP); // Вход кнопки
speedController.attach(3,1000,2000); // Сигнал на регулятор с цифрового выхода 2, минимальное значение, максимальное значение//

if (!digitalRead(A0)) { // Если при включении зажата кнопка
calibration(); // Переходим в режим калибровки
}
}

void loop() {
throttle = idle;
speedController.writeMicroseconds(idle);
delay(1000);

if (!digitalRead(A0)) {
btnHold();
}
}

// ---------- Проверка удержания кнопки ----------
void btnHold() {
int time2go = 3; // Сколько нужно держать кнопку, сек.
float timePast = 0.0; // Счётчик времени

while (!digitalRead(A0)) {
delay(100); // 0,1 сек интервал
timePast += 0.1;
if (timePast >= time2go) {
motorStart();
}
}

}

void motorStart() {
while (throttle < fullPower) {
speedController.writeMicroseconds(throttle++);
delay(10);
}

flyingTimer();
}

// ---------- Режим полёта ----------
void flyingTimer() {
int timePast = 0;

while(timePast < flyTime) {
delay(1000);
timePast++;
}

alarm(); // Предупреждение
delay(delayCutOff * 1000); // Задержка перед отключением
speedController.writeMicroseconds(idle);
}

// ---------- Предупреждение о скором отключении ----------
void alarm() {
speedController.writeMicroseconds(fullPower * 0.75); //1500 мксек//
delay(500);
speedController.writeMicroseconds(fullPower * 0.85); //1700 мксек//
delay(500);
speedController.writeMicroseconds(fullPower * 0.75); //1500 мксек//
delay(500);
speedController.writeMicroseconds(fullPower * 0.85); //1700 мксек//
delay(500);
speedController.writeMicroseconds(fullPower); //2000 мксек//
}

// ---------- Калибровка рабочего диапазона регулятора ----------
void calibration() {
digitalWrite(13, HIGH);
speedController.writeMicroseconds(fullPower);
delay(3000);
speedController.writeMicroseconds(idle);
digitalWrite(13, LOW);

while (!digitalRead(A0)) { // Если зажата кнопка
digitalWrite(13, HIGH); // не даём выйти
delay(100); // и мигаем светодиодом
digitalWrite(13, LOW);
delay(100);
}

}
[end of code]

Марат
RandomJ:

int fullPower = 2000; // Максимальная мощность //

А в реальности если вписать 1500 - это будет 50 процентов мощности?
Предыдущий скеч залил - всё работает как и обещано.
А разница в вашем с ним по функционалу есть?

RandomJ

Разницы в функционале никакой. Да 1500 мксек это как на радио середина газа. А по мощности (оборотам) будет зависеть от конкретного двигателя и регулятора. Изменение прошивки было сделано только по тому, что у меня регуляторы не понимают расширенного диапазона сигнала управления.
библиотека Servo позволяет задавать диапазон управляющего сигнала от 544 мксек (0°) до 2400 мксек (180°), а номинальный диапазон для сервомашинок (ещё на заре пропорционального управления с максимум 8 каналами) от 1000 мксек до 2000 мксек это примерно от 45° до 135°.

Марат

Только что в личке переписывался с Николаем (Paladin) и он любезно предоставил свой скетч для всеобщего использования. За что ему большое спасибо!
Вот его текст: "Добрый день.
www.dropbox.com/s/9bjrjqdimhixlfe/MyTimer_v1.ino?d…
Тут скетч для прошивки в ардуинку.
Я брал обычную Nano с нераспаянными ногами(120-200р у китайцев).
Далее. Земля и питание с разъёма регуля - на соответствующие пины ардуинки. 9 порт - сигнал на регуль.
Кнопку - на 3-ий.
Всё можно поменять как удобно.
Базовые настройки - с компа при заливке(например время ожидания запуска мотора после нажатия на кнопку).
А вот полётное время - сколько раз нажали на кнопку - столько минут мотор и будет работать.

\главное отличие от множества аналогичных прошивок - калибровка регулятора при старте.
Будете пробовать - обязательно проверьте сначала на сервомашинке, потом на силовой установке без винта… и если раз 10 всё прошл как надо - тогда уже в полёт…
Надеюсь, что материал будет кому-то полезен."

Марат
RandomJ:

speedController.attach(3,1000,2000); // Сигнал на регулятор с цифрового выхода 2, минимальное значение, максимальное значение//

А здесь всё верно? выход объявлен 3, а в коментах стоит 2 ??

Paladin

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

4 months later
Yan72

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

VitalikV
Yan72:

а оказывается то пин не соответствует то в проге косяк.

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

RandomJ
Yan72:

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

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

RandomJ

12 // порт к которому подключена кнопка старт/стоп или перемычка
2 // порт к которому подключен ESC
6 // порт к которому подключена серва ретракта левого шасси
7 // порт к которому подключена серва ретракта правого шасси

То, что увидел в этом скетче. А вот куда цеплять гироскоп не увидел. Надо автора спросить.

Yan72
RandomJ:

12 // порт к которому подключена кнопка старт/стоп или перемычка

А второй конец?

RandomJ:

2 // порт к которому подключен ESC

Это D2 или А2

Yan72
RandomJ:

void setup() {
pinMode(A0, INPUT_PULLUP); // Вход кнопки
speedController.attach(3,1000,2000); // Сигнал на регулятор с цифрового выхода 2, минимальное значение, максимальное значение//

Почему разнятся показатели,у него нет в строке INPUT_PULLUP а просто INPUT,
У меня при зажатой кнопки срабатывает режим калибровки,а когда просто вкл. отрабатывают шасси-я нажимаю кнопку и ничего не происходит.

Yan72

RandomJ;
Твой скетч тоже ругается при компиляции на строку (void calibration() {) что не так ?😵

RandomJ
Yan72:

RandomJ;
Твой скетч тоже ругается при компиляции на строку (void calibration() {) что не так ?😵

проверь свою arduino ide, только что проверил на своей, компилятор ошибок не нашёл. У меня версия 1.8.13
PULLUP - параметр указывающий на внутреннюю подтяжку вывода микропроцессора к шине питания, для использования кнопки вторым концом сидящей на земле.

Yan72

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

RandomJ

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

Yan72

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

RandomJ

Могу посоветовать “курить форум и мануалы”…
alexgyver.ru/arduino-mpu6050/ это краткое описание связки ардуино и 3-х осевого гироскопа-акселерометра
rcopen.com/forum/f95/topic389079 здесь про настройки, регуляторы скетчи и прочее…

здесь обзор одного из устройств из предыдущей темы.

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

VitalikV
RandomJ:

То, что увидел в этом скетче. А вот куда цеплять гироскоп не увидел. Надо автора спросить.

Цеплял по I2C, надо читать описание библиотеки гироскопа кальман.
Собирал на Ардуино мини 5В которая, работала, найти саму платку не могу пока что. Куда то засунул, сорриии…

Yan72

RandomJ RandomJ ,не могу найти скетч рабочий под MPU6050,все без гиро,дай ссылку на скачивание.