Форум
Форум » Разное » Флейм » Arduino в Москвич
Abarigen 17 марта 2020, 17:43:08
Arduino в Москвич
Торкнуло меня сделать один девайся для Москвича. Что куда и зачем это отдельная история. Суть в том что для реализации идеи пришлось осваивать микроконтроллеры Arduino. В частности выбор пал на Arduino UNO.
Да, это не оригинал, зато дешевле в разы и для пробы сойдет. Ну а чтобы видеть то ли там микроконтроллер этот считает, что я думаю взял еще и плату расширения с LCD экраном и кнопками (LCD Keypad 16х2).
И вот в ходе изучения и экспериментов решил на этой базе сделать пока помощник штурмана.
Если кто не в курсе, то были в советское время у раллистов приборы Halda SpeedPilot
и Halda TwinMaster
С их помощью штурман определял расстояния между КВ, отклонения от заданного режима движения и время финиша.
Вот нечто совмещающее эти функции и решил замутить.
Для получения информации о скорости автомобиля приобретен проходной датчик скорости ВАЗ.
Ставится "в разрыв" троса спидометра. Выдает 6 импульсов за 1 оборот.
Как известно привод спидометра на Москвиче (а также на ГАЗ и ЗАЗ) имеет американский (мили) стандарт, т.е. делает 624 оборота за 1 км пути. Следовательно за 1 км пути в идеальных условиях прибор должен насчитать 6*624=3744 импульсов.
Минимально прибор должен считать:
1. Время от старта [ЧЧ:ММ:СС]
2. Расстояние от старта [км]
3. Средняя скорость [км/ч]
В идеале:
4. Время текущее [ЧЧ:ММ:СС]
5. Расстояние с момента предыдущего сброса [км]
6. Время, за которое пройден участок с момента предыдущего сброса [ЧЧ:ММ:СС]
7. Средняя скорость на сброшенном участке
Дальше пойдет описание алгоритма.
Код программы (на жаргоне ардуинщиков это называется скетч) пишется на C++. Я с этим языком не очень знаком, но кое что из Pascal помню, поэтому в общих чертах понятно что куда, а что не понятно, то легко гуглится.
Синтаксис C++ специфический, поэтому чтобы не запутаться короткие формы записи я стараюсь не использовать.
Чтобы не изобретать велосипед погуглил готовые примеры локальных скетчей.
В большинстве примеров используется функция delay(). Это встроенная функция, которая делает задержку в работе микроконтроллера на указанное количество миллисекунд (для информации 1 секунда это 1000 миллисекунд). Для примеров когда нужно помогать лампочкой это подходит, но для чего-то более серьезного ее использовать не стоит. Вместо нее правильнее использовать millis(). Это тоже встроенная функция, которая при вызове сообщает сколько прошло миллисекунд с момента запуска микроконтроллера. Максимальное количество миллисекунд 4294967295 (2 в 32-й степени минус 1) и наступит оно через 4294967295/(1000*60*60*24)=49,7 дней.
Для моих нужд это не критично, но чтобы не было форс-мажоров при переходе счетчика на новый круг нужно пользоваться этой функцией через сравнение разницы текущего и предыдущего значений с требуемым.
lastTime = millis();
while(millis()-lastTime > 1000) {
}
Естественно переменную lastTime нужно относить к типу uint32_t (Целое число без знака длиной 32 бит).
Для работы с часами использовал следующий готовый алгоритм:
uint8_t hours = 0; // Целое число без знака длиной 8 бит (от 0 до 255)
uint8_t minutes = 0;
uint8_t seconds = 0;
uint32_t lastTime = 0; // Целое число без знака длиной 32 бит (от 0 до 4294967295)
void setup() {
}
void loop() {
while(millis()-lastTime > 1000) {
lastTime = millis();
seconds = seconds +1;
if (seconds >= 60) {
seconds = 0;
minutes = minutes +1;
}
if (minutes >= 60) {
minutes = 0;
hours = hours +1;
}
if (hours >= 24) {
hours = 0;
}
/* Тут должен быть вызов функции вывода времени на экран в нужной форме*/
}
}
Для подсчета импульсов использовал прерывания.
Чтобы не крутить датчик дрелью решил имитировать сигнал с помощью второй платы.
Прикрепленный файл (Размер: 102 КБайт)
______________________________________
Купил Москвич и не жалею... Никого...
|
|
Мастерская
|
Arduino в Москвич Abarigen 17 марта 2020, 17:43:08
|
Форум » Разное » Флейм » Arduino в Москвич