Контроллер для кордовых электричек
Марат ,
Да, в поле без компа никак, это плата за простоту изделия. Калибровка при каждом подключении АКБ, как оказалось, не нужна, если только у вас нет постояноой смены пары регулятор - контроллер.
Мой вариант кода, копируем код, вставляем в скетч 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]
int fullPower = 2000; // Максимальная мощность //
А в реальности если вписать 1500 - это будет 50 процентов мощности?
Предыдущий скеч залил - всё работает как и обещано.
А разница в вашем с ним по функционалу есть?
Разницы в функционале никакой. Да 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 всё прошл как надо - тогда уже в полёт…
Надеюсь, что материал будет кому-то полезен."
speedController.attach(3,1000,2000); // Сигнал на регулятор с цифрового выхода 2, минимальное значение, максимальное значение//
А здесь всё верно? выход объявлен 3, а в коментах стоит 2 ??
В моём варианте скетча ещё используется библиотечка для предотвращения дребезга кнопки, обратите внимание… может кто у себя в проектах тоже применит - полезная штука.
У кого есть рабочий скетч желательно под гиро MPU6050 со схемой распиновки а то я тут пошарил по форуму ни один не пошел,мотор не стартует,как люди выкладывают дампы.
а оказывается то пин не соответствует то в проге косяк.
а оказывается то пин не соответствует то в проге косяк.
Ардуина, это для разработчиков, поэтому надо либо мало мальски разбираться в коде (ничего трудного нет пару вечеров убить, почитать), или покупать такую же плату , под которую написан код.
У кого есть рабочий скетч желательно под гиро MPU6050 со схемой распиновки а то я тут пошарил по форуму ни один не пошел,мотор не стартует,как люди выкладывают дампы.
а оказывается то пин не соответствует то в проге косяк.
Странно, у меня работают, собирал все варианты представленные здесь.
Собранные платки отдал пионерам, у самого собранная одна осталась.
Кто подскажет распиновку на этот скетч rcopen.com/blogs/114200/22016
12 // порт к которому подключена кнопка старт/стоп или перемычка
2 // порт к которому подключен ESC
6 // порт к которому подключена серва ретракта левого шасси
7 // порт к которому подключена серва ретракта правого шасси
То, что увидел в этом скетче. А вот куда цеплять гироскоп не увидел. Надо автора спросить.
12 // порт к которому подключена кнопка старт/стоп или перемычка
А второй конец?
2 // порт к которому подключен ESC
Это D2 или А2
void setup() {
pinMode(A0, INPUT_PULLUP); // Вход кнопки
speedController.attach(3,1000,2000); // Сигнал на регулятор с цифрового выхода 2, минимальное значение, максимальное значение//
Почему разнятся показатели,у него нет в строке INPUT_PULLUP а просто INPUT,
У меня при зажатой кнопки срабатывает режим калибровки,а когда просто вкл. отрабатывают шасси-я нажимаю кнопку и ничего не происходит.
RandomJ;
Твой скетч тоже ругается при компиляции на строку (void calibration() {) что не так ?😵
RandomJ;
Твой скетч тоже ругается при компиляции на строку (void calibration() {) что не так ?😵
проверь свою arduino ide, только что проверил на своей, компилятор ошибок не нашёл. У меня версия 1.8.13
PULLUP - параметр указывающий на внутреннюю подтяжку вывода микропроцессора к шине питания, для использования кнопки вторым концом сидящей на земле.
Твой скетч загрузился,но нет старта нет калибровки ,при зажатой кнопке блымает светодиод.
А причем тут Ардуина,другой скетч отрабатывают шасси,калибровка.
попробуй скетч из первого поста, он точно работает, но не со всеми регуляторами. Я писал в теме почему.
Рома,мне нужен с гироскопом,поэтому нужно его победить,я смотрю разбирающихся в программах тут нет, поэтому ждать помощи не от кого.
Могу посоветовать “курить форум и мануалы”…
alexgyver.ru/arduino-mpu6050/ это краткое описание связки ардуино и 3-х осевого гироскопа-акселерометра
rcopen.com/forum/f95/topic389079 здесь про настройки, регуляторы скетчи и прочее…
здесь обзор одного из устройств из предыдущей темы.
ИМХО гироскоп в контроллере для пилотажек лишнее устройство, гораздо интересней применение вертолётных регуляторов с гувернёром. Но это только теория. Практики в кордовых пилотажках у меня очень мало, только начинаю вливаться в эту тему.
То, что увидел в этом скетче. А вот куда цеплять гироскоп не увидел. Надо автора спросить.
Цеплял по I2C, надо читать описание библиотеки гироскопа кальман.
Собирал на Ардуино мини 5В которая, работала, найти саму платку не могу пока что. Куда то засунул, сорриии…
RandomJ RandomJ ,не могу найти скетч рабочий под MPU6050,все без гиро,дай ссылку на скачивание.