суббота, 12 января 2013 г.

Тахометр для мотоцикла. Часть 1. Знакомство с задачей

Тахометр для мотоцикла. Часть 1 . Знакомство с  задачей

На дня, ко мне обратился знакомый с просьбой оказать помощь сделать тахометр для мотоцикла. Кроме "самого тахометра" его интересовало "познакомится с Ардуиной", которой я ему все уши прожужжал :)

В постановке задачи тахометр должен быть "стрелочный", а обороты двигателя приходить Ардуине в виде "импульсов".   Так же, конечной целью было желание что-бы стрелка могла пробегать весь диапазон за секунду максимум (или намного быстрее :)), но при этом не было видно "ее шагов". Все должно было быть "плавно". При этом - не должно сбиваться/дрожать от внешних вибраций (на мотоцикле их намного больше чем в машине).

И вишенкой на всем этом пироге "хотелок" было "положено" - недорого, из подручного хлама. То есть о покупке качественных, дорогих приводов, микросхем и проч. - речи не идет (как и покупке готового). В случае удачи - опыт будет распространен на другие приборы. В итоге будет новая приборная панель для Viper F5.

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

Поэтому я решил "потратить на это время", поиграется и попробовать описать эти игры  в виде серии статей блога (в блоговедении - у меня тоже ограниченный опыт). Поэтому не стоит их рассматривать как "туториал". Я просто разбираюсь и описываю то что понял. Проект не закончен, он в процессе и "куда вывезет" - пока не понятно и мне самому.


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

Дробим на подзадачи:


Обычная архитектура для скетчей более сложных чем "мигаем диодом" является три блока/слоя:

Типичный блоки
  1. Блок чтения данных (кнопки, датчики)
  2. Блок принимающий решения основываясь на данных полученных на предыдущем шаге. Основная "логика" программы.
  3. Управление исполнительными устройствами. Исполнение того что "решил предыдущий блок". Включение моторов, реле, серв и т.п.

В случае тахометра "принимать решение" нам не нужно. Что прочитали, то и показали. Соответственно одна часть у нас "выпала" и остались две:
  1. Замер оборотов
  2. Управление стрелкой

Измерение оборотов

Мой товарищ был готов был сделать внешнюю обвязку которая будет "импульсы" конвертировать в "напряжение", которое очень просто прочитать Ардуиной через analogRead  (в отличие от меня - "схемотехники" у него опыта больше, и "железные решения" - не пугают), но я его отговорил. По старой программистской привычке: если что-то можно сделать программно (относительно просто) - будем делать программно, а не "железно". Не может сломаться та деталь которой нет :)
Итак решено: будем считать импульсы от датчика холла.

Управление стрелочкой

Проще всего стрелочку было-бы крутить с помощью сервы. В Ардуине есть встроенная библиотека для этого, серва умеет "помнить свою позицию".

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

Заменой серве был выбран шаговый двигатель. Он менее удобен так как не умеет "помнить свою позицию", придется самому об этом заботится. Но нас этим не испугать :) . Шаговый двигатель был выдран из старого 3.5' дисковода (он отвечал за перемещение карретки) и....мы приступили (продолжение будет...)




Зачем мы здесь?

Зачем этот блог?

Этот блог возник как результат моей активности на форуме http://arduino.ru/forum под именем leshak.

Приходится раз за разом отвечать на одни и те же вопросы, бороться с одними и теми же типичными "ошибками не понимания". Надоело писать одно и тоже, с минимальными вариациями

Захотелось иметь место, куда можно "послать..." ;)

Ну и банально иметь "личное место" где можно поделится опытом. Рассказать о каких-то мелких успехах/поделках.

Сам я програмист с 15-ти летним стажем. Правда мой основной язык - C# (.net)

Ардуино и C++ - скорее хобби. Которое, со временем, стало не совсем хобби  :)
За два года, чуть-чуть начитался статей по схемотехнике, вспомнил что такое закон Ома, перестал путать за какой конец братся паяльник (да. да.. пару раз хватал паяльник не за тот конец).

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

OK. Не буду больше "растекатся по древу", начнем, а там посмотрим что выйдет. Как показывает практика планы и "что вышло" слишком часто оказываются разными субстанциями, так что "не загадывая в даль...."