Корректор электронного (стрелочного) спидометра на ARDUINO

все по электропроводке и оборудованию
Аватара пользователя
Артур
Друг клуба
Сообщения: 1587
Зарегистрирован: 12 ноя 2009, 22:38
Бус: T3 2.8 VR6
Откуда: Ессентуки

Корректор электронного (стрелочного) спидометра на ARDUINO

Сообщение Артур »

arristo, функцию delay нельзя было использовать, т.к. параллельно корректору спидометра, работает ещё корректор тахометра, а будет ещё корректор датчика уровня бензобака.
Delay останавливает исполнение всех операций.

Чтобы сделать генератор, не учитывающий вход, надо было всего навсего заменить одну строчку:
InputSpeed=sp;
На
InputSpeed=100;

Где 100 можешь заменить любым числом каким тебе хочется.
8(928)376-99-75
arristo
Сообщения: 14
Зарегистрирован: 14 июн 2020, 09:37
Бус: LT-28

Корректор электронного (стрелочного) спидометра на ARDUINO

Сообщение arristo »

Артур писал(а): 05 авг 2021, 13:20 функцию delay нельзя было использовать, т.к. параллельно корректору спидометра, работает ещё корректор тахометра, а будет ещё корректор датчика уровня бензобака.
Delay останавливает исполнение всех операций.
Мне не нужно. У меня только корректор спидометра. Все остальное работает без проблем. Зато будет чётко отбиваться импульс. Это первое. Второе, ты не понимаешь величин временных отрезков. Я говорил, что на скорости 20 км/ч длина импульса (скважность) равно где-то 11 миллисекундам. 11304 микросекунды. За 11 МИЛЛИсекунд даже стрелка не сможет отклониться, не то что радикально поменяться ситуация. Поэтому использование delaymicrosecunds() оправдано целиком и полностью.

Еще раз. Даже если у меня будет и корректор тахометра, и спидометра, и бензобака, все три импульса дадут остановку в 30 миллисекунд. 30 тысячных секунды. Даже пуля летит медленнее. :clap: А на баке вообще смешно говорить об импульсе и мгновенном реагировании уровня топлива. Иначе начнет стрелка скакать как безумная. Это надо ставить счетчик на millis() и при изменении сигнала через 2 секунды поступательно давать сигнал на мотор указателя. Как это и сделано на нормальных приборках.
Артур писал(а): 05 авг 2021, 13:20 Чтобы сделать генератор, не учитывающий вход, надо было всего навсего заменить одну строчку:
InputSpeed=sp;
На
InputSpeed=100;
так я и заменил, только с изменением в цикле с циклическим же обнулением. МОжно каждый раз менять это число ручками, а можно сделать это программно. Я и сделал.
Аватара пользователя
Артур
Друг клуба
Сообщения: 1587
Зарегистрирован: 12 ноя 2009, 22:38
Бус: T3 2.8 VR6
Откуда: Ессентуки

Корректор электронного (стрелочного) спидометра на ARDUINO

Сообщение Артур »

Я так понял, что твоя тестовая, она всего лишь циклично от 1 до 110 увеличивает стрелку с шагом 8 км. По достижению 110 сбрасывает на 0 и опять заново. Это как хочешь, так и экспериментируй, если нравится. Прикольно.

ОДНАКО:
Многие спидометры работают не от нуля, а от 20км/ч (к примеру ГОЛЬФ-3 приборка).
delay ты ставишь на паузу всю ардуино. Отключаются и прерывания 2 и 3 пина.
Ты не можешь следить за датчиком скорости, пока генерируешь импульс функцией delay.
arristo писал(а): 07 авг 2021, 21:59 Я говорил, что на скорости 20 км/ч длина импульса (скважность) равно где-то 11 миллисекундам. 11304 микросекунды. За 11 МИЛЛИсекунд даже стрелка не сможет отклониться, не то что радикально поменяться ситуация. Поэтому использование delaymicrosecunds() оправдано целиком и полностью.
По поводу длины импульса на скорости ниже 20 км/ч, думаю ты ошибаешься про 11 миллисекунд. Ардуино при 20км/ч - 30 милисекунд. При 11 миллисекунд примерно 54км/ч

Формула расчета: ВРЕМЯ ПЕРИОДА=600000 / ВХОДЯЩАЯ СКОРОСТЬ.

На маленькой скорости период импульса самый длинный. ( на 5км/ч будет целых аж 120 милисекунд)
Длина импульса уменьшается с возрастанием скорости.
Если ты к датчику подключишь светодиодную ленту ты увидишь как медленно мигают и долго горят светодиоды на скорости меньше 20, и там явно число значительно больше 11 миллисекунд.

Т.е. если мой код и заглючит, то только на очень большой скорости (и я думаю больше 600км/ч, когда время периода опустится ниже 1000 микросекунд, возможно раньше, потому что я не знаю верхнего предела возможности ардуино по скрости включения/выключения УРОВНЯ НА ПИНЕ, не проводил таких испытаний).


Мой код работает от прерываний. Функция millis здесь ничего не опрашивает, она только 1 раз в 50 милиссекунд подаёт число генератору импульсов, СКОЛЬКО РАЗ за этот период сработало прерывание. Даже если сменить число 50 на 500, работа кода от этого не поменяется, просто спидометр начнёт ступенчато, а не плавно скорость изменять. (т.е. если ты за 1 секунду изменил свою скорость с 40 до 80, у тебя спидометр вместо того чтобы плавно поднять стрелку, резко её щелкнет с 40 через полсекунды на 60 и ещё через полсекунды на 80)

В генераторе импульса применена именно micros(), а не millis, даже если забыть, что именно в корректоре (а не просто тестовом генераторе) невозможно применения delay, точность генерации импульса через delaymicroseconds() ничем не отличается от micros(), ты этим ничего не выиграешь. Просто ты физически не можешь использовать delaymicroseconds() всесто micros(), т.к. ты останавливаешь выполнение всей программы и ардуино перестаёт считать входящие импульсы, т.к. прерывания больше не будут работать из-за delay.
8(928)376-99-75
arristo
Сообщения: 14
Зарегистрирован: 14 июн 2020, 09:37
Бус: LT-28

Корректор электронного (стрелочного) спидометра на ARDUINO

Сообщение arristo »

Артур писал(а): 08 авг 2021, 11:27 По поводу длины импульса на скорости ниже 20 км/ч, думаю ты ошибаешься про 11 миллисекунд. Ардуино при 20км/ч - 30 милисекунд. При 11 миллисекунд примерно 54км/ч

Формула расчета: ВРЕМЯ ПЕРИОДА=600000 / ВХОДЯЩАЯ СКОРОСТЬ.
Я выводил эти параметры на монитор. Именно вот 11 на 20 км/ч. А вот порядка 7 - уже на 60 км/ч. У меня неравномерно растёт поправка, как я и думал. Сегодня засекал по GPS.
Вот примерные показания. Так-то надо более точно всё замерить. Показание, фактически, поправка.
20 18 1,11
30 26 1,15
40 34 1,18
80 71 1,13
90 80 1,13
А вообще - попробую с delay, если будет работать чётко - оставлю, ибо усложнять программы - не моё.
Аватара пользователя
Артур
Друг клуба
Сообщения: 1587
Зарегистрирован: 12 ноя 2009, 22:38
Бус: T3 2.8 VR6
Откуда: Ессентуки

Корректор электронного (стрелочного) спидометра на ARDUINO

Сообщение Артур »

Оно вообще не будет работать.
Ещё раз повторяю - При delay не работают прерывания.


Мы говорим про вход или про выход? Где 11 мсек? На входе не могло быть такого. Только на выходе после поправки.
8(928)376-99-75
arristo
Сообщения: 14
Зарегистрирован: 14 июн 2020, 09:37
Бус: LT-28

Корректор электронного (стрелочного) спидометра на ARDUINO

Сообщение arristo »

Артур писал(а): 08 авг 2021, 22:57 Мы говорим про вход или про выход? Где 11 мсек? На входе не могло быть такого. Только на выходе после поправки.
ПРо выход, конечно. Входа у меня нет - померить нечем. Я начал подумывать, не вкорячить ли мне временно дисплейчик. Ибо с монитором огромные напряги - при воткнутом USB дико греется БП, а с отрезанным питанием не хочет грузится Ардуино.

Слушай, ты как-то писал, что включается-выключается 12В. High - включает 12 В, LOW выключает.
вот:
Значит 1 миллисекунду надо подавать +12 вольт ( hight) и 1 миллисекунду НОЛЬ (low).
Но там же питание 5В, откуда берется 12В? Фактически-то дается импульс 5 вольтовый, нет? Надо подтягивать 12В на выход на спидометр или брать откуда-то к транзистору? Может поэтому у меня перестал работать спидометр?
Аватара пользователя
Артур
Друг клуба
Сообщения: 1587
Зарегистрирован: 12 ноя 2009, 22:38
Бус: T3 2.8 VR6
Откуда: Ессентуки

Корректор электронного (стрелочного) спидометра на ARDUINO

Сообщение Артур »

Я именно это и имел ввиду. 12 вольт после
транзистора подтягивается через резистор 10ком.
Конечно же ардуино рулит 5 вольтами. Но на сам прибор спидометра прилетает сигнал амплетудой 12в.

Хотя я попробовал, если подтянуть не 12, а 5 вольт после транзистора, через теже 10кОм, гольф3 спидометр всё равно работает
8(928)376-99-75
arristo
Сообщения: 14
Зарегистрирован: 14 июн 2020, 09:37
Бус: LT-28

Корректор электронного (стрелочного) спидометра на ARDUINO

Сообщение arristo »

После пары недель экспериментов, есть подвижки.
Итак: 315-й транзистор противопоказан. Он через некоторое время не пропускает сигнал. Амплитуда падает до 0.8-1 Вольта. Стрелка падает.
Показан ВС547 или наш. Подтяжку нужно делать не 10 Ком, а 4.7к, иначе транзистор полностью не открывается и сигнал в ноль не падает - не хватает тока.
Пока ищу в программе ошибку, которая даёт 2 высокочастотных сигнала на максимуме перед минимумом.

и еще засада - после пары срабатываний, стрелка начинает считать "ноль" - примерно 40 км/ч. Вернее, может быть, прибавлять 40 км/ч к сигналу. Откуда - хз. То ли делимое не то, то ли механика спидометра. Ищу далее.
Аватара пользователя
Артур
Друг клуба
Сообщения: 1587
Зарегистрирован: 12 ноя 2009, 22:38
Бус: T3 2.8 VR6
Откуда: Ессентуки

Корректор электронного (стрелочного) спидометра на ARDUINO

Сообщение Артур »

Показан ВС547 или наш. Подтяжку нужно делать не 10 Ком, а 4.7к,
Хорошо, спасибо.
Я применил bc238 (потому что они у меня были).Они работают. Кт315 я на выход не применял.
еще засада - после пары срабатываний, стрелка начинает считать "ноль" - примерно 40 км/ч. Вернее, может быть, прибавлять 40 км/ч к сигналу. Откуда - хз. То ли делимое не то, то ли механика спидометра. Ищу далее.
Я не понял о чём речь. У тебя проблема с моим скетчем или ты свой код какой-то тестируешь?
8(928)376-99-75
arristo
Сообщения: 14
Зарегистрирован: 14 июн 2020, 09:37
Бус: LT-28

Корректор электронного (стрелочного) спидометра на ARDUINO

Сообщение arristo »

Со обоими скетчами. Там вылазит высокочастнотный сигнал. Виден на осциллографе. Откуда - хз, в скетче ничего такого нет. Но идет с Ардуины. И 40 км/ч плюсом. Тоже откуда - непонятно.
Аватара пользователя
Артур
Друг клуба
Сообщения: 1587
Зарегистрирован: 12 ноя 2009, 22:38
Бус: T3 2.8 VR6
Откуда: Ессентуки

Корректор электронного (стрелочного) спидометра на ARDUINO

Сообщение Артур »

Что-то проблем у меня таких не вылезало, у меня всё работает
8(928)376-99-75
arristo
Сообщения: 14
Зарегистрирован: 14 июн 2020, 09:37
Бус: LT-28

Корректор электронного (стрелочного) спидометра на ARDUINO

Сообщение arristo »

Нашел-таки проблему. Это мильный спидометр - я писал. И он не правильно показывает изначально. Но я нашел причину. Это - делимое в вычислении Периода. Надо ставить 1800000 (в 3 раза больше) - тогда спидометр начинает адекватно работать. Но, опять-таки, поправка не постоянная, а матричная.
Аватара пользователя
Артур
Друг клуба
Сообщения: 1587
Зарегистрирован: 12 ноя 2009, 22:38
Бус: T3 2.8 VR6
Откуда: Ессентуки

Корректор электронного (стрелочного) спидометра на ARDUINO

Сообщение Артур »

Поправка матричная - потому что сам прибор говно. Гольф-3 точно такой же.
Не знаю почему ты так решил про 1800000, а не 600000. Я проверял - на другой ардуинке я включил функцией tone(pin, 100), подключил её на вход ко второй с моей версией скетча и получил на экране надпись значения sp = 100 Mhz.
Так что всё точно, не изобретай велосипед.

Если ты изменишь 600000 на 1800000 ты получишь значение частоты на выходе в три раза выше. Зачем?

Отправлено спустя 13 минут 59 секунд:
1 миля/час=1.60934км/ч, поправка ~1,61
Что у тебя там никак не получается и откуда взялся коэффициент "3" , не вкурю я никак.

А что ты вообще получить в итоге хочешь?
8(928)376-99-75
arristo
Сообщения: 14
Зарегистрирован: 14 июн 2020, 09:37
Бус: LT-28

Корректор электронного (стрелочного) спидометра на ARDUINO

Сообщение arristo »

Ты не читаешь сообщения. И отвечаешь на свои мысли. Я написал, что поставил 1800000 и СПИДОМЕТР СТАЛ ПОКАЗЫВАТЬ ПРАВИЛЬНО ПОД ПОПРАВКУ. Я думал ты напишешь - спасибо, возьму в FAQ для мильных приборок. Ты в ответ ту же песню - "зачем?".
Затем, чтобы работало нормально.

Там два полупериода. 3.22 точнее получается, но на практике лучше 3.

Ты заметил, что Авито и прочие Автору перестали работать по запросам с ХР или W2000. А дром как работал так работает? Потому как там программисты пишут на 8-ке или 10-ке. И в случае вопроса по поддержке отвечают "А у нас всё работает". Чел думает, что если работает у него, работает точно так же и у всех. Это - не так. Плохо, что ты этого не понимаешь.
Аватара пользователя
Артур
Друг клуба
Сообщения: 1587
Зарегистрирован: 12 ноя 2009, 22:38
Бус: T3 2.8 VR6
Откуда: Ессентуки

Корректор электронного (стрелочного) спидометра на ARDUINO

Сообщение Артур »

Как? Я хочу понять и не могу.

OutputSpeed=входящие импульсы * поправка
Period=600000/OutputSpeed

Ты поменял 600000 на 1800000. Этим ты увёл длину периода в другие значения
Screenshot_20210819-211130_Excel.jpg
Я перечитал твои посты. Я не понимаю, хоть убей.
Прибор с милями ничем не отличается от км/ч, только напечатаной шкалой с другой ценой деления.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
8(928)376-99-75
Аватара пользователя
Артур
Друг клуба
Сообщения: 1587
Зарегистрирован: 12 ноя 2009, 22:38
Бус: T3 2.8 VR6
Откуда: Ессентуки

Корректор электронного (стрелочного) спидометра на ARDUINO

Сообщение Артур »

Я хочу переписать с нуля код. У меня появилась идея как всё сделать в 10 раз короче и проще, без заимствований из старого скетча
8(928)376-99-75
arristo
Сообщения: 14
Зарегистрирован: 14 июн 2020, 09:37
Бус: LT-28

Корректор электронного (стрелочного) спидометра на ARDUINO

Сообщение arristo »

Артур писал(а): 19 авг 2021, 20:49 Прибор с милями ничем не отличается от км/ч, только напечатаной шкалой с другой ценой делени
Правда? Я вот тоже так же думал. А ничего, что одометр считает километраж в милях? Это про напечатанные цифры на шкале.
Аватара пользователя
Артур
Друг клуба
Сообщения: 1587
Зарегистрирован: 12 ноя 2009, 22:38
Бус: T3 2.8 VR6
Откуда: Ессентуки

Корректор электронного (стрелочного) спидометра на ARDUINO

Сообщение Артур »

:stupid: а что он отдельно от стрелки работает?

Корректор - электронная шестерёнка. Принял 10, умножил, выдал. Всё.

Плевать какой прибор принимает сигнал - мильный, километровый, да хоть парсеки. Стрелка и одометр связаны между собой и от работы корректора эта связь не может быть нарушена или изменена.
Не тупи, бред говоришь.

Прибор не знает мильный он или километровый. В электронике нет такого понятия. Есть время и импульсы. Прибор знает, что стрелку нужно повернуть на определённый угол и одометр вращать с определённой скоростью, напрямую зависящую от количества принятых импульсов. Эта зависимость установлена в конструкции самого прибора или в его прошивке контроллера прибора, на заводе изготовителе. И она никак не меняется извне.

В программе корректора нет такого понятия КМ/ч или миль/ч, у него есть количество импульсов ЗА время.
Упоминание км в коде, просто условное обозначение, которое к реальной скорости отношение не имеет.
Вместо км/ч можно было написать арбузов/сек.

На выходе он просто отдаёт за тот же самый промежуток времени другое количество импульсов.
Всё!!!! Никак влиять на связку стрелки с одометром твоё ноухау 1800000 не может. Ты увёл период импульса в другое значение. Тоже самое мог сделать просто изменив коэффициент поправки.
8(928)376-99-75
Doctordy
Сообщения: 2
Зарегистрирован: 15 сен 2021, 22:30
Бус: T3 2.8 VR6

Корректор электронного (стрелочного) спидометра на ARDUINO

Сообщение Doctordy »

Артур, огромное спасибо за Ваш труд! подскажите, на моем авто сигнал в спидометр идет из ЭБУ, а в ЭБУ идет из блока АБС. Блок АБС пал смертью храбрых. Необходимо завести сигнал скорости напрямую с датчика АБС. Подскажите, правильно ли я понимаю, вначале нам нужно через компоратор получить меандр а потом этот меандр завести в ардуино и уже потом в ЭБУ?
Аватара пользователя
Артур
Друг клуба
Сообщения: 1587
Зарегистрирован: 12 ноя 2009, 22:38
Бус: T3 2.8 VR6
Откуда: Ессентуки

Корректор электронного (стрелочного) спидометра на ARDUINO

Сообщение Артур »

Зачем вам компоратор?
Насколько я знаю можно просто напрямую подключиться к одному из датчиков. Он даёт сигнал с репера 60 импульсов на оборот колеса, или около того, посчитайте кол-во прорезей на диске.

А что в итоге должно получиться? У вас спидометр не работает?
Потому что я бы не стал делать обманку abs, по моему это опасно шутить с тормозами.
8(928)376-99-75
Ответить