Тахометр для мотоцикла. Часть 1 . Знакомство с задачей
На дня, ко мне обратился знакомый с просьбой оказать помощь сделать тахометр для мотоцикла. Кроме "самого тахометра" его интересовало "познакомится с Ардуиной", которой я ему все уши прожужжал :)
В постановке задачи тахометр должен быть "стрелочный", а обороты двигателя приходить Ардуине в виде "импульсов". Так же, конечной целью было желание что-бы стрелка могла пробегать весь диапазон за секунду максимум (или намного быстрее :)), но при этом не было видно "ее шагов". Все должно было быть "плавно". При этом - не должно сбиваться/дрожать от внешних вибраций (на мотоцикле их намного больше чем в машине).
И вишенкой на всем этом пироге "хотелок" было "положено" - недорого, из подручного хлама. То есть о покупке качественных, дорогих приводов, микросхем и проч. - речи не идет (как и покупке готового). В случае удачи - опыт будет распространен на другие приборы. В итоге будет новая приборная панель для Viper F5.
Привод стрелки планировалось сделать на шаговике (он уже был в наличии, из старого FDD). Это и предопределило мое согласие. В живую, держа в руках, я с шаговыми двигателями еще не игрался (хотя, конечно уже был знаком с ними "удаленно"), мне это было интересно.
Поэтому я решил "потратить на это время", поиграется и попробовать описать эти игры в виде серии статей блога (в блоговедении - у меня тоже ограниченный опыт). Поэтому не стоит их рассматривать как "туториал". Я просто разбираюсь и описываю то что понял. Проект не закончен, он в процессе и "куда вывезет" - пока не понятно и мне самому.
И вишенкой на всем этом пироге "хотелок" было "положено" - недорого, из подручного хлама. То есть о покупке качественных, дорогих приводов, микросхем и проч. - речи не идет (как и покупке готового). В случае удачи - опыт будет распространен на другие приборы. В итоге будет новая приборная панель для Viper F5.
Привод стрелки планировалось сделать на шаговике (он уже был в наличии, из старого FDD). Это и предопределило мое согласие. В живую, держа в руках, я с шаговыми двигателями еще не игрался (хотя, конечно уже был знаком с ними "удаленно"), мне это было интересно.
Поэтому я решил "потратить на это время", поиграется и попробовать описать эти игры в виде серии статей блога (в блоговедении - у меня тоже ограниченный опыт). Поэтому не стоит их рассматривать как "туториал". Я просто разбираюсь и описываю то что понял. Проект не закончен, он в процессе и "куда вывезет" - пока не понятно и мне самому.
Любое решение подобных задач начинается с "дробления на подзадачи" (типичная ошибка новичков - пытаются написать "сразу готовый скетч"). Нужно решать их по отдельности, а потом "соединяем все вместе".
Дробим на подзадачи:
Обычная архитектура для скетчей более сложных чем "мигаем диодом" является три блока/слоя:
- Блок чтения данных (кнопки, датчики)
- Блок принимающий решения основываясь на данных полученных на предыдущем шаге. Основная "логика" программы.
- Управление исполнительными устройствами. Исполнение того что "решил предыдущий блок". Включение моторов, реле, серв и т.п.
В случае тахометра "принимать решение" нам не нужно. Что прочитали, то и показали. Соответственно одна часть у нас "выпала" и остались две:
- Замер оборотов
- Управление стрелкой
Измерение оборотов
Мой товарищ был готов был сделать внешнюю обвязку которая будет "импульсы" конвертировать в "напряжение", которое очень просто прочитать Ардуиной через analogRead (в отличие от меня - "схемотехники" у него опыта больше, и "железные решения" - не пугают), но я его отговорил. По старой программистской привычке: если что-то можно сделать программно (относительно просто) - будем делать программно, а не "железно". Не может сломаться та деталь которой нет :)
Итак решено: будем считать импульсы от датчика холла.
Итак решено: будем считать импульсы от датчика холла.
Управление стрелочкой
Проще всего стрелочку было-бы крутить с помощью сервы. В Ардуине есть встроенная библиотека для этого, серва умеет "помнить свою позицию".
Но мы решили не искать легкий путей. Серва - относительно дорога. К тому же, как правило, свою позицию серва определяет с помощью внутреннего потенциометра (переменного резистора, как "крутилка" у старых телевизоров что имеет фатальный недостаток - при активном "кручении" потенциометр начинает изнашиваться и серва "дрожит".
А так как при езде, обороты прыгают постоянно, стрелка постоянно "мечется", мы поняли что решение на серве хоть и просто, но будет очень не долговечным.
Заменой серве был выбран шаговый двигатель. Он менее удобен так как не умеет "помнить свою позицию", придется самому об этом заботится. Но нас этим не испугать :) . Шаговый двигатель был выдран из старого 3.5' дисковода (он отвечал за перемещение карретки) и....мы приступили (продолжение будет...)