Спидометр, тахометр, одометр для любой техники (с GPS модулем).

Vladikas
Offline
Зарегистрирован: 25.07.2013

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

Использованные модули:

Arduino Nano, GPS приёмник от видеорегистратора, OLED экран 128х64 SSD1306, понижающий преобразователь напряжения на MP1584, сенсорная кнопка на TTP223, ну и рассыпуха по мелочи указана на схеме. Вместо сенсорной кнопки можно поставить обычную (пин замыкать на массу), но тогда нужно изменить конфигурацию в скетче (33 строку закомментировать). Кстати, сенсорная кнопка работает отлично - сквозь пластик палец в кожаной перчатке нормально отрабатывает, но нужно вплотную прижать/приклеить сенсорную пластину к пластику (отпаять пины, сделать эту сторону плоской).

GPS модуль покупал вот этот https://ru.aliexpress.com/item/32879520862.html, но что-то цена на него сейчас неадекватная (стоил с доставкой 300 рублей). Вот пара похожих лотов, похоже, что там внутри у всех одно и то же https://ru.aliexpress.com/item/33024312145.html и https://ru.aliexpress.com/item/33022736881.html Возможно, что по 200 рублей продают без ГЛОНАСС. Я в своём приёмнике пытался его активировать (чип вроде поддерживает), но не заработало. Да и нафиг он тут не нужен.

Логика работы такая:

Когда только включился показывает служебный экран:
    chars            символов принято
    sentences    фраз с позицией принято
    failed            ошибочных контрольных сумм
    passed         прошедших контрольных сумм
    hdop            горизонтальная точность
    lat                широта
    lng               долгота
    available      символов в буфере (1 - переполнение для softserial)

Если при этом заведён мотор, то показан тахометр.
Когда будет получено время с GPS, то будет показан экран времени.
Когда будет скорость выше минимальной (minTrueSpeed), то будет показана скорость.

Однократное нажатие кнопки - переключение экрана.
Двухкратное - блокировка на текущем экране (символ Н справа вверху).
Длительное удержание на экране одометров - сброс одометра.

В правом нижнем углу количество спутников. На экране тахометра внизу экрана рисуется полоска (максимум 10000 об/мин).

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

Вцелом устройство работает нормально, не смотря на то, что внутри говнокод (старался всё комментировать). Иногда может зависнуть, если мотоцикл стоял ночь под дождём или едешь по сильному туману. Отловить проблему мне не удалось. Склоняюсь к тому, что зависает OLED экран. После того, как покрыл всю пайку цапон-лаком, стало гораздо лучше.

Пришлось немного модифицировать шрифты для библиотеки работы с экраном. Их надо добавить в папку библиотеки SSD1306Ascii и добавить шрифт в файл allFonts.h (переделанная библиотека прилагается).

Так же можно сделать устройство с двумя экранами, чтоб на одном из них всё время были, например, часы или тахометр. Можно сделать на отдельной ардуине только тахометр.

Все файлы (с библиотеками и прочим) https://yadi.sk/d/MXha8QHyRGsR2w

Скетч и шрифты https://yadi.sk/d/jMVPCIzbapkLCQ

b707
Онлайн
Зарегистрирован: 26.05.2017

скорость с GPS идет? и как быстродействие?

Vladikas
Offline
Зарегистрирован: 25.07.2013

Всё кроме оборотов идёт с GPS. Модуль выдаёт инфу в порт раз в секунду, так что экран спидометра обновляется раз в секунду. Экран тахометра обновляется раз в 100мс или раз в 500мс в зависимости от того аппаратный UART используется для связи с GPS или софтовый.

Vladikas
Offline
Зарегистрирован: 25.07.2013

Видео работы https://youtu.be/4xzfTJs3LxY

EduardNN
Offline
Зарегистрирован: 21.04.2019

Интересное устройство. С удовольствием собрал - работает. Но есть пару вопросов. С индикатором 128x64 0.96 дюймов на SSD1306, почему то сильно занижена яркость. Можно ли добавить поддержку других индикаторов в проект( например WG12864a или от мобильников )? 

Как с вами связаться ?

Vladikas
Offline
Зарегистрирован: 25.07.2013

Про яркость - попробовать изменить текущую с помощью oled.setContrast(255);

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

Связаться можно прямо тут.

EduardNN
Offline
Зарегистрирован: 21.04.2019

Не нашел такой строки...

Vladikas
Offline
Зарегистрирован: 25.07.2013
 
 

Правильно, её надо добавить где-нибудь после инициализации дисплея.

EduardNN
Offline
Зарегистрирован: 21.04.2019

Жаль, что я полный ноль программировании :(

Нашел в скетче два места где встречается инициализация дисплея , но добавление oled.setContrast(255);

результата не принесло.

Помог анализ примеров из библиотеки SSD1306Ascii.

После замены строки oled.begin(&SH1106_128x64, I2C_ADDRESS);//инициализация экрана 

на oled.begin(&Adafruit128x64, I2C_ADDRESS);//инициализация экрана

с яркостью дисплея все отлично.

Еще раз спасибо автору за интересное уст-во !!!

 

 

 

Vladikas
Offline
Зарегистрирован: 25.07.2013
 
 

У вас чип другой на дисплее, получается. Ну уже не ноль, прогресс есть!

Спасибо за отзыв.

Vladikas
Offline
Зарегистрирован: 25.07.2013
 
 

Ещё пара моментов. В коде есть строчки для предварительной инициализации одометров.

oilOdometerInit= 2000000;//пробег (в метрах) с замены масла для инициализации
totalOdometerInit= 42823000;//пробег (в метрах) на родном одометре для инициализации

И есть возможность сбросить все одометры в ноль. Замкнуть на минус при включении 5 пин.

resetPin = 5;//пин кнопки сброса одометров при инициализации

 

EduardNN
Offline
Зарегистрирован: 21.04.2019

     

Vladikas
Offline
Зарегистрирован: 25.07.2013

Хм, точно. В объяснении работы детектора правильно нарисовал, а в основной схеме косяк.

Интересно, что в черновике всё правильно, а в чистовике нет. Исправил, перезалил https://yadi.sk/d/h7TjM8uJZi5Rkw

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

EduardNN пишет:

Жаль, что я полный ноль программировании :(

Только в программировании?

Цитата:

Помог анализ примеров из библиотеки SSD1306Ascii.

После замены строки oled.begin(&SH1106_128x64, I2C_ADDRESS);//инициализация экрана 

 

Вас не смущает, что 1306 и 1106 - это разные контроллеры (хотя и имеющие кое-что общее), соответственно, код для одного вполне может не подходить к другому, в частности, поддерживать только часть заявленных функций.

Vladikas
Offline
Зарегистрирован: 25.07.2013
 
 

Не вводите людей в заблуждение? Какими функциями эти контроллеры не совместимы?

APJ
Offline
Зарегистрирован: 25.03.2015

Vladikas пишет:

Хм, точно. В объяснении работы детектора правильно нарисовал, а в основной схеме косяк.

Интересно, что в черновике всё правильно, а в чистовике нет. Исправил, перезалил https://yadi.sk/d/h7TjM8uJZi5Rkw

 

Похоже что всё равно косяк остался. R2 наверное должен быть от + 12 в к стабилитрону и R3

Vladikas
Offline
Зарегистрирован: 25.07.2013
 
 

Блин. Нельзя в час ночи такое рисовать.

EduardNN
Offline
Зарегистрирован: 21.04.2019

andriano пишет:

EduardNN пишет:

Жаль, что я полный ноль программировании :(

Только в программировании?

Цитата:

Помог анализ примеров из библиотеки SSD1306Ascii.

После замены строки oled.begin(&SH1106_128x64, I2C_ADDRESS);//инициализация экрана 

 

Вас не смущает, что 1306 и 1106 - это разные контроллеры (хотя и имеющие кое-что общее), соответственно, код для одного вполне может не подходить к другому, в частности, поддерживать только часть заявленных функций.

Ну куда же нам без таких одаренных и эрудированных пофи ?

Где же вы были, когда я пытался разобраться с причиной недостаточной яркости дисплея ???

Толку от вашей реплики ноль...

SSD1306 и CH1106 считаются, как бы совместимыми контроллерами , есть только одно небольшое различие между SSD1306 и SH1106: контроллер SH1106 имеет внутреннюю оперативную память 132x64 пикселей. SSD1306 имеет только 128x64 пикселей. 

EduardNN
Offline
Зарегистрирован: 21.04.2019

R3 вроде от +12...

если смотреть на схему детектора выключения.

Vladikas
Offline
Зарегистрирован: 25.07.2013
 
 

У меня на черновике правильно нарисовано (по которому я собирал). Благо устройство пару лет работало, пока мотоцикл не продал. А на чистовую перерисовать не получается, ночью голова хочет спать, а не рисовать...

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

EduardNN пишет:

SSD1306 и CH1106 считаются, как бы совместимыми контроллерами , есть только одно небольшое различие между SSD1306 и SH1106: контроллер SH1106 имеет внутреннюю оперативную память 132x64 пикселей. SSD1306 имеет только 128x64 пикселей. 

Не только.

Есть и другие различия.

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

 

PS.

Цитата:

Толку от вашей реплики ноль...

Моя реплика вызвана удивлением, вызванным вашим сообщением.

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

Вам это, возможно, и ни к чему (хотя уметь правильно расставлять акценты важно само по себе, и этому тоже надо учиться), а вот читателям Вашего сообщения мое замечание может и оказаться полезным.\

PPS.

Цитата:

Где же вы были, когда я пытался разобраться с причиной недостаточной яркости дисплея ???

О том, что Вы указываете в своем коде 1106, я узнал только из Вашего сообщения № 8. А где я мог еще об этом узнать?

Vladikas
Offline
Зарегистрирован: 25.07.2013

В очередной раз исправил свои косяки. Надеюсь, окончательно ))

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

Фотографии в отдельных постах удалены по запросу ТС. На будущее, выкладывайте картинки с шириной ок. 640, чтобы не вылезало за разметку.

Prony
Offline
Зарегистрирован: 12.01.2021

Доброе время суток. Сразу прошу прощения, если вопрос будет глупым, но я только делаю первые шаги в автоматизации , да и образование у меня не профильное (. Ваш проект, это для меня гора новой информации, как по программированию, так и по сборке схемы, так что впереди много вечеров на изучение и осознание кода )). 
Если можно вопрос: на схеме отдельно вынесен «детектор выключения», какая его функция? Спасибо 

Vladikas
Offline
Зарегистрирован: 25.07.2013

EEPROM микроконтроллера имеет ограниченный ресурс. Можно было бы писать одометры в EEPROM всё время, при каждом их изменении, но тогда память может быстро (на самом деле не очень быстро) сдохнуть. Чтоб продлить жизнь памяти используется детектор выключения. Как только питание 12 вольт пропадает микроконтроллер записывает данные в EEPROM, работая в эти доли секунды от конденсатора.

**********

Детектор не "вынесен отдельно", сам компаратор находится внутри микроконтроллера, это просто перерисовано более подробно.

Prony
Offline
Зарегистрирован: 12.01.2021

Спасибо. Как отправил сообщение, и уже понял что скорее всего найду ответы в самом коде. Но пишу с телефона, и кода  Вашего под рукой нет. Скажите, Вы не думали реализовать в дополнение и «датчик топлива» вернее отсчитывать сколько его израсходовано с момента заправки . (Мой мотоцикл - Honda VT750- штатного датчика не имеет).
топливный насос в моем мотоцикле импульсный и управляется темже сигналом что и приходит на катушку - как я понимаю его Вы и использовали для тахометра.

DetSimen
DetSimen аватар
Онлайн
Зарегистрирован: 25.01.2017

Vladikas пишет:

EEPROM микроконтроллера имеет ограниченный ресурс. Можно было бы писать одометры в EEPROM всё время, при каждом их изменении, но тогда память может быстро (на самом деле не очень быстро) сдохнуть. Чтоб продлить жизнь памяти используется детектор выключения. Как только питание 12 вольт пропадает микроконтроллер записывает данные в EEPROM, работая в эти доли секунды от конденсатора.

Решение так себе. Едешь ты едешь из Москвы в Крым, хранишь данные своего одометра в ОЗУ, чтобы EEPROM не протирать, проехал, например, уже 1800км, потом, уякс, помеха прилетела по питанию, Ардуина перезагрузилась и "До свиданья, правильные данные одометра." 

v258
Онлайн
Зарегистрирован: 25.05.2020

Vladikas пишет:

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

Достаточно писать не в одну и ту же ячейку, а тысяч через 50-100 переносить запись в другую. И сохранять ее адрес в, скажем, нулевой. Тогда можно будет без проблем сохранять несколько миллионов км, записывая их при каждом изменении

Vladikas
Offline
Зарегистрирован: 25.07.2013

Думал о датчике топлива. Но на моём китайце карбюратор и бензин идёт самотёком. С импульсным насосом идея интересная, я бы попробовал. А так то у меня для пробега от заправки отдельный одометр был. Мне его хватало.

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

DetSimen
DetSimen аватар
Онлайн
Зарегистрирован: 25.01.2017

Vladikas пишет:
Посмотрел бы я на того человека, который не слезая с мотоцикла смог проехать из Москвы в Крым.

Я по деццтву из Н-ска до Кургана доезжал за 1 дневной перегон. Отдыхал 1 раз, после Омска (~660 км).  Потерять хотя бы 500км из-за сбоя - тоже ничего хорошего. 

Vladikas
Offline
Зарегистрирован: 25.07.2013

Мне хватало моего варианта, делал то для себя устройство. Так-то никто не машает стопицот защит напихать. Я по большей части только часами пользовался и бензиновым одометром. Бак 12 литров, заправлялся каждые 100км.

serhiy58
Offline
Зарегистрирован: 19.06.2019

Подскажите, пожалуйста, в Вашем проекте расстояние считается от нулевой точки по прямой(карте) или пересчитывается приближенно к пройденному расстоянию?

Vladikas
Offline
Зарегистрирован: 25.07.2013

Раз в секунду, когда GPS отдаёт данные библиотека TinyGPSPlus вычисляет расстояние между предыдущим измерением и текущим. Я эти данные плюсую.

unsigned long distance =
(unsigned long)TinyGPSPlus::distanceBetween(gps.location.lat(),
                                            gps.location.lng(),
                                                       lastlat,
                                                      lastlng);

 

serhiy58
Offline
Зарегистрирован: 19.06.2019

Vladikas пишет:

Я эти данные плюсую.

Спасибо!!!

progrik
Offline
Зарегистрирован: 30.12.2018

v258 пишет:
Достаточно писать не в одну и ту же ячейку, а тысяч через 50-100 переносить запись в другую. И сохранять ее адрес в, скажем, нулевой. Тогда можно будет без проблем сохранять несколько миллионов км, записывая их при каждом изменении
если раз в секунду (это скорость опроса gps) писать, например, uint32_t, то протянет все это ~296 дней _движения_.
я не знаю среднее время жизни мотоциклиста на колесах, но мне кажется, некоторые из них все-таки могут прожить дольше) и уж тем более, если использовать прибор для более серьезного и живучего транспорта - маршрутки, такси)
и сохранность данных - сбой при записи в ячейку с перезагрузкой - жесткая потеря данных без возможности восстановления...

предлагаю писать uint32_t, каждый раз со сдвигом на 4 ячейки, в метрах, с проверкой чтением, по кольцу, каждые секунд 10|20|30, только если изменились данные (или просто изменились, или более чем на 100м, например), и можно при выключении мотора... много чего можно))

при загрузке читаются данные и проверяются на адекватность - если идет увеличение метража, и оно адекватное - от 1м до максимум, что может проехать транспорт за N сек, читаем дальше. если метраж уменьшается (попали на старую запись или сбой), или за N сек проехали 100500+- метров (сбой) - всё, наткнулись на последнее адекватное значение, его и используем...

уважайте _всех_ участников дорожного движения!
ни гвоздя, ни жезла! :)

serhiy58
Offline
Зарегистрирован: 19.06.2019

А что, если писать на CD карту, после каждого глушения мотора?

sadman41
Онлайн
Зарегистрирован: 19.10.2016

Пишите во FRAM / EERAM / NVRAM. Последнее есть в дешманских RTC DS1307.

v258
Онлайн
Зарегистрирован: 25.05.2020

progrik пишет:

v258 пишет:
Достаточно писать не в одну и ту же ячейку, а тысяч через 50-100 переносить запись в другую. И сохранять ее адрес в, скажем, нулевой. Тогда можно будет без проблем сохранять несколько миллионов км, записывая их при каждом изменении
если раз в секунду (это скорость опроса gps) писать, например, uint32_t, то протянет все это ~296 дней _движения_.

Эдак можно любую идею в хлам извратить ))) В одометре сохраняются километры, соответственно, и писать нужно при достижении каждого километра. Метры/сантиметры там не нужны

progrik
Offline
Зарегистрирован: 30.12.2018

v258 пишет:
Эдак можно любую идею в хлам извратить ))) В одометре сохраняются километры, соответственно, и писать нужно при достижении каждого километра. Метры/сантиметры там не нужны
ответ принят.
защита от сбоев - изврат
повышенная точность - изврат
ты серьезно не видел сотни метров на одометре? даже за километровым колесиком прячется механизм, который _учитывает_ каждый сантиметр, знать != показывать. а этому - пох, гуляем! бармен, всем по километру!))

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

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

v258
Онлайн
Зарегистрирован: 25.05.2020

progrik пишет:

v258 пишет:
Эдак можно любую идею в хлам извратить ))) В одометре сохраняются километры, соответственно, и писать нужно при достижении каждого километра. Метры/сантиметры там не нужны
ответ принят.
защита от сбоев - изврат
повышенная точность - изврат

.

Какие сбои, нервный ты наш? Потеряется километр - драма вселенская?

progrik пишет:

ты серьезно не видел сотни метров на одометре? даже за километровым колесиком прячется механизм, который _учитывает_ каждый сантиметр, знать != показывать. а этому - пох, гуляем! бармен, всем по километру!))

Серьезно. Нету на одометре, ни метров, ни десятков метров, ни сотен. Как автовладелец со стажем ответственно заявляю ;)

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

А ту часть, которая таки сотни показывает и сбрасывается кнопкой, никому в здравом уме сохранять в голову не придет. Собственно, и не сохраняют, ибо при отключении аккумулятора эти данные сбрасываются. Т.к. ценности не представляют.

progrik пишет:
.

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

Ты, во-первых, тыкалку сначала отрасти, а во-вторых - это ты в тему ввалился ответом на мой пост. Ну и в-третьих, если бы ты умел читать, то увидел бы, что я предлагаю как раз менять ячейки для записи, только не раз в секунду. Но это ж нужно понимать прочитанное ;)

 

progrik
Offline
Зарегистрирован: 30.12.2018

v258 пишет:
а тысяч через 50-100 переносить запись в другую.
что вот это за херня? при любом сбое все твои 50-100 ТЫСЯЧ(!!!) километров полетят коту под хвост!
если одометр показывает километры, это не означает, что он не учитывает метры.

ЗЫ: сорри, виноват, зрение подвело: ты не предлагал писать каждое измеРение, а каждое измеНение... давно очки хочу купить))
это не отменяет ненадежность))

v258 пишет:
это ты в тему ввалился ответом на мой пост
я ввалился потому, что увидел, что ты написал не надежное решение. я и не булькал, что ты извращенец, а предложил улучшения по точности и сделать прибор максимально возможно надежным. за что был объявлен извращенцем)) выглядишь, как школьнег. тыкать буду тебе и дальше))

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

v258
Онлайн
Зарегистрирован: 25.05.2020

progrik пишет:

v258 пишет:
а тысяч через 50-100 переносить запись в другую.
что вот это за херня? при любом сбое все твои 50-100 ТЫСЯЧ(!!!) километров полетят коту под хвост!
если одометр показывает километры, это не означает, что он не учитывает метры.

ЗЫ: сорри, виноват, зрение подвело: ты не предлагал писать каждое измеРение, а каждое измеНение... давно очки хочу купить))
это не отменяет ненадежность))
 

В нулевой (например) ячейке хранится адрес ячейки, куда записаны текущие данные. Т.е. при включении контроллер уже знает, откуда их взять и куда при изменении записать. Через 100 тык запись переносится в следующие ячейки. в нулевой ячейке обновляется адрес. Соответственно, общее количество километров, которое можно сохранить в EEPROM, будет измеряться десятками миллионов километров (а если делать перенос в другие ячейки по факту износа - т.е. при каждой записи проверять записанное и переносить данные только если они записались некорректно, то там вообще до Марса и обратно можно будет прокатиться). Есть желание писать подробнее? Да не вопрос, даже если писать через каждые сто метров, ресурса EEPROM хватит на всю жизнь транспортного средства. И никаких ежесекундных записей. Одометр - это такая фигня, в которой потеря десятка/сотни километров за все время эксплуатации никакой погоды не сделает. Это всего лишь счетчик общего пробега.

Что касается ненадежности, то сама ардуина в автомобиле - это уже ненадежно. Т.к. она для подобных условий эксплуатации не предназначена. Ну и подсчет пробега по ГПСу - само по себе ненадежное занятие, ибо подсчитывает расстояние не по траектории, а по прямой между точками замера. При активной городской езде с постоянными поворотами будет теряться довольно ощутимое количество метров )))

v258
Онлайн
Зарегистрирован: 25.05.2020

progrik пишет:

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

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

ЗЫ: отключение зажигания не означает полное обесточивание всей электроники автомобиля, ну это ж даже детям известно ;)

v258
Онлайн
Зарегистрирован: 25.05.2020

progrik пишет:

за что был объявлен извращенцем)) 

Про извращенца повеселил, спасибо )))

progrik
Offline
Зарегистрирован: 30.12.2018

v258 пишет:
В нулевой (например) ячейке хранится адрес ячейки, куда записаны текущие данные.....
огоспаде... не надо мне пояснять, я понял с первого раза. а ты - нет. смотри сюдой:
(для наглядности десятичную систему поюзаем)
ты пишешь в четыре ячейки 1000, было 0999. при записи происходит сбой, успевает записаться к примеру только 1. а 000 - нет.
при повторном чтении ты обнаружишь 1999км. что ты и как восстановишь? никак и ничто.
ну так хоть стало понятно, нет?
мое решение надежнее в бесконечность раз)))
v258 пишет:
ибо подсчитывает расстояние не по траектории, а по прямой между точками замера. При активной городской езде с постоянными поворотами будет теряться довольно ощутимое количество метров
и сколько поворотов ты проедешь за секунду? опять морозишь...)))

вообще, если бы я делал для себя, я бы и от датчиков колес не отказывался бы... в том-же городе жыпиэс может очень нагородить...

v258
Онлайн
Зарегистрирован: 25.05.2020

progrik пишет:

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

Это неважно. Главное, что погрешность есть, и никакими мерами ты ее не скорректируешь

Komandir
Offline
Зарегистрирован: 18.08.2018

Круг вокруг Кремля в Москве может несколько раз швырнуть вас на Урал и обратно !!! GPS для одометра - ЗЛО !

progrik
Offline
Зарегистрирован: 30.12.2018

v258 пишет:
Это неважно. Главное, что погрешность есть, и никакими мерами ты ее не скорректируешь

вешается датчик от дорогой мыши (или дорогой датчик от мыши) с объективом (в коптерах этот датчик называется Optical Flow, для стабилизации без жыпиэс), и по нему считаем пробег)) (в темное время суток ИК диод на подсветку дороги)... лужи - да, больно))

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

итого 3 источника. выводим все три на прибор и время в мировых столицах с курсом биткоина, и радуемся)))

Komandir пишет:
Круг вокруг Кремля в Москве может несколько раз швырнуть вас на Урал и обратно !!! GPS для одометра - ЗЛО !
похоже на то. проверка на адекватность данных немного решает, но колеса крутятся надежнее))

 

v258
Онлайн
Зарегистрирован: 25.05.2020

progrik пишет:

мое решение надежнее в бесконечность раз)))

Ну и как оно поможет от сбоя при записи? Особенно с учетом, что нужно еще найти, в какую ячейку писалось последний раз?

Тут со сбоями бороться нужно, а не с их последствиями

progrik
Offline
Зарегистрирован: 30.12.2018

v258 пишет:
Ну и как оно поможет от сбоя при записи? Особенно с учетом, что нужно еще найти, в какую ячейку писалось последний раз?
так ты ничего и не понял...
правильные показания ищутся в памяти только при загрузке.
каждый раз данные пишутся в следующую группу ячеек, поэтому предыдущие записи - это бекап.
после сбоя при загрузке где вместо 1000 записалось 1999 будет ясно, что это был сбой.
в предыдущей ячейке будет идти 999, потом 1999. такого быть не может - 1000 попугаев за 10 сек. ошибка. значит считаем правильными данными 999...
что блин не понятного я ХЗ...
перечитай, что я написал сначала... несколько раз. ты-же не понял вообще алго восстановления после сбоя....

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

v258
Онлайн
Зарегистрирован: 25.05.2020

Перебирать всю EEPROM при старте? А что, кузяво ))) 

Слишком наворочено. Если нужен бэкап, то достаточно писать его один раз, а не размазывать по всей памяти. Перенес данные в соседнюю ячейку вместо них записал новые. И при считывании проверять, что разница между данными в одну единицу. Да, удастся записать не 20 млн. км, а всего 10 млн, но не нужно скакать по всей памяти и вычислять, где что лежит ;)

И таки принимать меры, чтобы сбоев при записи НЕ БЫЛО