-
Тахометр на БСЗ
Прива всем, имеется авто, карбюратор, с бесконтактной системой зажигания.
Подключаю ардуино к датчику холла, хочу сделать тахометр... ну и вобщем то не работает))) может ктонить сможет мне помочь? спасибо)
вот код:
PHP код:
//Reads the State of a Pot and displays on screen
int potPin = 1;
int Old = 0;
int Now = 0;
long time = 0;
int count = 0;
void setup()
{
pinMode(potPin, INPUT);
Serial.begin(9600);
Old = analogRead(potPin);
time = millis();
}
void loop()
{
Now = analogRead(potPin);
if (abs(Now - Old) >= 400)
{
Old = Now;
count++;
if (count = 50)
{
//замеряем время за 50 импульсов и все это переводим в обороты в минуту
Serial.println(3000000/((millis() - time)*2));
count = 0;
time = millis();
}
}
}
-
Re: Тахометр на БСЗ
Аналоговый вход зачем используешь?
1-Переконфигурируй этот порт на цифровой.
2-Ты не получишь 50 имульсов, длительность импульса на низких оборотах может составлять десятки миллисекунд . В итоге ты один импульс считаешь большое количество раз.
-
Re: Тахометр на БСЗ
Chip, спс что откликнулся)
Аналоговый вход.... не знаю зачем использую, счас попробую цифровой)
по поводу импульсов... устройство именно так себя и веет, т.е. ставишь считывать хоть 2 импульса хоть 20000 оно это мгновенно считывает(((( хотя я же вроде сделал проверку чтобы считывал тока када смена импульса идет.....
И как тогда быть?!? вообще чтоли не получится сделать?(((((((
-
Re: Тахометр на БСЗ
Получится, только нужно ждать окончания положительного импульса, только потом проверять наличие нового импульса
-
Re: Тахометр на БСЗ
подключил к цифровому каналу, терь ваще ляпота - показывает 0 када искры нет, 1 када искра есть....
осталось 2 проблемы:
1) (millis() - time) возвращает всегда разные значения, от 0 до 40... почему может быть такая нестабильность?!?
2) не могу перевести это все дело в об\мин
может кто сможет подсказать чтонить?!? спасибо)
-
Re: Тахометр на БСЗ
Выложи свой скетч, я посмотрю в чем проблема
-
Re: Тахометр на БСЗ
А можно узнать как Arduino подключить к датчику Холла?
Хочу поставить тахометр на скутер, там есть датчик положения коленвала, предполагаю что что он и есть датчик Холла, как лучше к нему подключиться, чтобы не нарушить цепь
зы. Электрическая схема скутера: http://www.let-s.ru/letsdoc/el_shema_lets.pdf
-
Re: Тахометр на БСЗ
sirik, мне кажетсо что у тебя там нет датчика холла... возможно датчик положения коленвала изменяет свое сопротивление в зависимости от положениеколенвала)
а подключать просто - к одному контакту цепляешь свой проводок для ардуино, и провод который к камутатору идет)
кстати... я так понял у тебя там карб стоит-> есть подсос, который надо в зависимости от температуры дергать.... я вот счас как раз упражняюсь чтобы застравить ардуино дергать воздушную заслонку про прогреве=)
Chip, скетч:
PHP код:
int potPin = 6; // Порт для провода от датчика холла
int Old = 0; // старое значение сигнала с датчика
int Now = 0;// последнее значение сигнала с датчика
long time = 0; // для сохранения времени начала счета импульсов
int count = 0; // колличество импльсов
void setup()
{
pinMode(potPin, INPUT);
Serial.begin(9600);
Old = digitalRead(potPin);
time = millis();
}
void loop()
{
Now = digitalRead(potPin); // обновляем значение сигнала
if (Now != Old) // если значение сменилось
{
Old = Now; // запоминаем новое значени сигнала
count++; // считаем колличество сигналов
if (count = 100) // хотим пощитать 50 импульсов(25 оборотов), значит сигнал сменится 100 раз
{
//замеряем время за 50 импульсов и все это переводим в обороты в минуту
Serial.println(150000/(millis() - time)); // переводим полученный результат в обороты в минуту
count = 0; // сбрасываем счетчик
time = millis(); // начинаем новый счет времени
}
}
}
-
Re: Тахометр на БСЗ
Попробуй подправленный скетч
Почему 150000 делишь?
PHP код:
int potPin = 6; // Порт для провода от датчика холла
int Old = 0; // старое значение сигнала с датчика
int Now = 0;// последнее значение сигнала с датчика
long time = 0; // для сохранения времени начала счета импульсов
int count = 0; // колличество импльсов
void setup()
{
pinMode(potPin, INPUT);
Serial.begin(9600);
Old = digitalRead(potPin);
time = millis();
}
void loop()
{
Now = digitalRead(potPin); // обновляем значение сигнала
if (Now != Old) // если значение сменилось
{
Old = Now; // запоминаем новое значени сигнала
count++; // считаем колличество сигналов
if (count == 100) // хотим пощитать 50 импульсов(25 оборотов), значит сигнал сменится 100 раз
{
//замеряем время за 50 импульсов и все это переводим в обороты в минуту
Serial.println(150000/(millis() - time)); // переводим полученный результат в обороты в минуту
count = 0; // сбрасываем счетчик
time = millis(); // начинаем новый счет времени
}
}
}
-
Re: Тахометр на БСЗ
2 Rembo2743: датчик Холла точно есть, попробую подключить как ты объяснил
насчет подсоса: он автоматически работает при заводе скутера: чем холоднее на улице, тем дольше он работает
и еще вопрос: допустим пришло всего 90 импульсов, тогда тахометр не выдаст ничего, имхо надо по времени ориентироваться. например раз в полсекунды выдавать на гора кол импульсов