До сцепления не дошли. Там будет много мусора по передаточным числам и это тоже надо учитывать, для обновления индикации кпп нужно 2-3 одинаковых замера передаточных чисел. Я на макете из шестерёнок с разными кодами не получил стабильного результата, а когда подцепил анализатор логики всё стало ясно. При способе подсчёта теряються или плюсуються обороты( датчики не синхронно начинают отсчет. Если по импульу одног,то второй может выдать оборо через 1/1000 оборота или через оборот) А при способе через период там тоже синхронность и то что передаточные числа не целые числа, а датчики считают только целые.
У часов не диска спецления. (С) Жванецкий.
Вывод - подключаем математику и по ускорению оборотов коленвала считаем поправку на ускорение ведомой. Тогда при любом допустимом ускорении будем попадать в нужный диапазон применяя поправку. Всего лишь нужно или рассчитать или сделать замеры отклонений зафиксированного передаточного при разных ускорениях.
Так. Какая передача включена при выжатом сцеплении? Мой ИЖ49 мог трогаться с любой передачи. Все зависело от того - вылетит пассажир с пассажирского унитаза ( сидушки) или нет.
Диномичном это не про ИЖ, у него 15км/ч на первой. Тут скорее чтоб не создать пробку надо очень шустро переключать.
Да вы не поняли - я субарист.
10⁸ вариантов
Иметь нормальный датчик скорости, который выдает много импульсов на один оборот.
Но вы правы, пользы от этой приблуды все равно никакой, поэтому неважно, что там будет на показометре ))
Думаю что у тебя получится реализовать идею с гирляндами в педале, как сделаешь - похвались.
Она реализованна в педали тормаза. там один концевик, по этому же принцыпу два не сложно сделать. Третий уже есть на нетраль.
const int ledPins[] = {2, 3, 4, 5, 6}; // Пины для 5 диодов
const int buttonNextPin = 7; // Пин для кнопки "Следующий"
const int buttonPrevPin = 8; // Пин для кнопки "Предыдущий"
const int buttonSetPin = 9; // Пин для кнопки "Установить"
// Переменные для управления состоянием
int currentLed = 0; // Индекс текущего активного диода (начинаем с первого)
// Для хранения состояния кнопок
bool lastButtonNextState = LOW;
bool lastButtonPrevState = LOW;
bool lastButtonSetState = LOW;
void setup() {
// Инициализация пинов
for (int i = 0; i < 5; i++) {
pinMode(ledPins[i], OUTPUT); // Устанавливаем пины для диодов как выходы
}
pinMode(buttonNextPin, INPUT_PULLUP); // Кнопка "Следующий" с подтягивающим резистором
pinMode(buttonPrevPin, INPUT_PULLUP); // Кнопка "Предыдущий" с подтягивающим резистором
pinMode(buttonSetPin, INPUT_PULLUP); // Кнопка "Установить" с подтягивающим резистором
// Изначально выключаем все диоды
for (int i = 0; i < 5; i++) {
digitalWrite(ledPins[i], LOW);
}
digitalWrite(ledPins[currentLed], HIGH); // Включаем первый диод
}
void loop() {
// Чтение состояния кнопок
bool buttonNextState = digitalRead(buttonNextPin);
bool buttonPrevState = digitalRead(buttonPrevPin);
bool buttonSetState = digitalRead(buttonSetPin);
// Кнопка "Следующий" (переключаем на следующий диод)
if (buttonNextState == LOW && lastButtonNextState == HIGH) {
// Если кнопка была нажата и текущий диод не 5-й, переходим к следующему
if (currentLed < 4) { // Диод 5 игнорирует кнопку "Следующий"
digitalWrite(ledPins[currentLed], LOW); // Выключаем текущий диод
currentLed = (currentLed + 1) % 5; // Переходим к следующему диоду
digitalWrite(ledPins[currentLed], HIGH); // Включаем следующий диод
delay(200); // Задержка для предотвращения дребезга кнопки
}
}
// Кнопка "Предыдущий" (переключаем на предыдущий диод)
if (buttonPrevState == LOW && lastButtonPrevState == HIGH) {
// Если кнопка была нажата и текущий диод не 1-й, переходим к предыдущему
if (currentLed > 0) { // Диод 1 игнорирует кнопку "Предыдущий"
digitalWrite(ledPins[currentLed], LOW); // Выключаем текущий диод
currentLed = (currentLed + 4) % 5; // Переходим к предыдущему диоду
digitalWrite(ledPins[currentLed], HIGH); // Включаем предыдущий диод
delay(200); // Задержка для предотвращения дребезга кнопки
}
}
// Кнопка "Установить" (зажигаем диод 2)
if (buttonSetState == LOW && lastButtonSetState == HIGH) {
// Если кнопка была нажата, зажигаем диод под номером 2
digitalWrite(ledPins[currentLed], LOW); // Выключаем текущий диод
currentLed = 1; // Устанавливаем диод 2 (индекс 1)
digitalWrite(ledPins[currentLed], HIGH); // Включаем диод 2
delay(200); // Задержка для предотвращения дребезга кнопки
}
// Обновляем состояние кнопок
lastButtonNextState = buttonNextState;
lastButtonPrevState = buttonPrevState;
lastButtonSetState = buttonSetState;
}
Это нормальное решение, не только на ходу, а всегда будет показывать передачу. И не сложнее чем сделать датчик на много импульсов.
Можно переменный резистр заместо концевиков.
Если занудствовать, то меньше. Столько шагов по ускорению, сколько нужно чтобы коэффициент поправки обеспечивал непересекающийся диапазон передаточных чисел. А те достаточно разнесены.
Если один код на все передачи? Думаю ещё больше. Ускорение не равномерное таких даже формул нет. А замерять так и будет
Не код, таблица. Код постановки, естественно, один. Таблица на все передачи и на все допустимые ускорения с некоторым шагом.
Формулы, к счастью есть для любых ускорений. Просто кто-то не умеет, а кто-то умеет. Все рассчитывается.
Разница передаточных чисел не настолько мала, чтобы гоняться за точностями по вторым производным.
Модель несложно делается хоть математически (программно) - можно крутить виртуально любые передаточные числа с любыми ускорениями и численно получить все параметры таблицы. Можно и поиграть, сделать физическую модель - два шкива и пассик. Раскручивать моторчик ардуинкой с нужными скоростями и ускорениями, ей же и считывать датчики с этих пар колесиков. Кому как больше нравится - это ж хобби, главное в удовольствие.
Можете написать?
1.81 ; 1.26 ; 1 (0.55-0.26) при том что датчик один на ПОЛНЫЙ оборот(контакты прерывателя искры) и когда на одном датчике фронт импульса другой может быть уже на спаде импульса( тогда на 99,9% теряеться оборот) или импульс появиться через 1/100 оборота, а может в любом рандомном месте. Это уже выходит за все рамки точности.
Что спрятал то и найдёшь.
Я делал модель с близкими параметрами, крутил шуруповёртом, это ближе к реальным условиям ( ускорение,замедление,плавность и равномерность)
Считывал ардуиной разными способами и анализатором логиги. На записях анализатора можно изучить все импульсы сразу на всех каналах и при данных условиях выделить что-то что можно использовать ардуиной у меня не получилось.
ну так там продувка была смещена в сторону малых оборотов, хороший мотоцикл был
Могу. Не заинтересован. Это не мой проект.
У меня в соседнем отделе у коллег получается. Математики-физики с закрытыми глазами в маткаде жонглируют. Не прям вот эту задачу точь-в-точь, но порядки сложности сравнимые и выше.
прошу прощения что поднимаю этот вопрос спустя столько времени, просто появилась мысль и я ее пишу..
если вместо датчика сцепления отслеживать момент когда сцепление выжато таким образом - обороты коленчатого вала возрастают а обороты вторичного вала КПП резко падают (или не изменяются) очевидно что в такой ситуации механическая связь разорвана. и в этот момент фиксировать последние показания индикатора передачи.
глупость?
Конечно. На карбюраторных машинах то не всегда обороты поднимались, а на современных блок вс отслеживает.