Тахометр

fanis
Offline
Зарегистрирован: 07.06.2013

Привет друзья!

Нужно сделать программу которая будет узнавать сколько об\мин вращается вал.

Схема такова. Кнопка которая установлена на вал нажимается 1 раз за оборот. Кнопку прсоединяем к 5в и например 6 пин.

Информацию о оборотх в минуту хочется узнавать по сериал порту.

Буду очень благодарен за любую помощь.

Поможете? 

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

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

maksim
Offline
Зарегистрирован: 12.02.2012

В правом верхнем углу наберите тахометр и нажмите Поиск.

fanis
Offline
Зарегистрирован: 07.06.2013

Нашел код 

#define RPMpin 2 // датчик Холла
long microsold = 0;
int rpm = 0;

void setup() { 
  Serial.begin(9600);
  digitalWrite(RPMpin, 1);
  attachInterrupt(0, RPM, FALLING);
}

void loop() {
  Serial.println(rpm, DEC); // об/мин
}
void RPM (){
  rpm = (1000000.0/(micros() - microsold))*60;
  microsold = micros();
}

Показания тахометра будут верными если кнопка прикрепленная на вало будет нажиматься один раз за оборот?

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

fanis пишет:

Показания тахометра будут верными если кнопка прикрепленная на вало будет нажиматься один раз за оборот?

(валяется под столом) кнопка прикрепленая на валу ............ гыыыы     

извините, не смог сдержаться...

maksim
Offline
Зарегистрирован: 12.02.2012

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

#define RPMpin 2 // датчик Холла
volatile int rpm = 0;

void setup() { 
  Serial.begin(9600);
  digitalWrite(RPMpin, 1);
  attachInterrupt(0, RPM, FALLING);
}

void loop() 
{
  Serial.println(rpm*60, DEC); // об/мин
  rpm = 0;
  delay(1000);
}

void RPM ()
{
  rpm++;
}