目前,我有一台带有磁性拾音器的柴油发动机。我想使用 Arduino (Uno/Nano) 来测量发动机转速。
磁性拾音器 描述:磁性拾音器安装在齿轮上(最常见的是车辆钟形外壳内的飞轮),当齿轮转动时,拾音器将为齿轮上的每个齿产生电脉冲。然后仪器读取这些脉冲,将其解释为正确的 RPM 或速度。来自磁性速度传感器的信号,每秒齿数 (HZ),与发动机速度成正比。
磁性拾音器图像: MP - 自供电
我尝试使用二极管对信号进行整流,然后使用带有 .1Uf 电容器的电阻器限制电流以过滤噪声,然后将其连接到 Optocopler 4N35 和从 Opto 到 Arduino 中断引脚的输出,只需观察 Arduino 中断 ping 非常高受周围环境影响。
此外,我尝试将磁性拾音器直接连接到“A0”引脚并使用模拟读取并将 LED 连接到引脚 13,只是为了监控来自 MP 的脉冲。
int sensorPin = A0;
int ledPin = 13;
int sensorValue = 0;
void setup() {
pinMode(ledPin, OUTPUT);
Serial.begin(9600);
}
void loop() {
// read the value from the sensor:
sensorValue = analogRead(sensorPin);
digitalWrite(ledPin, HIGH);
delay(sensorValue);
digitalWrite(ledPin, LOW);
Serial.println(sensorValue);
Serial.println(" ");
}
使用analogueRead
LED 作为拾取器产生的脉冲的指示器。(测试使用小电机和小齿轮保护Arduino)。
我也尝试使用 LM139 比较器,但读数没有意义(例如:60 RPM、1500 RPM、2150 RPM、7150 RPM)。
LM139 使用的代码:
// read RPM
volatile int rpmcount = 0;
//see http://arduino.cc/en/Reference/Volatile
int rpm = 0;
unsigned long lastmillis = 0;
void setup() {
Serial.begin(9600);
attachInterrupt(0, rpm_fan, RISING);
//interrupt cero (0) is on pin two(2).
}
void loop() {
if (millis() - lastmillis == 500) {
/*Update every one second, this will be equal to reading frequency (Hz).*/
detachInterrupt(0); //Disable interrupt when calculating
rpm = rpmcount * 60;
/* Convert frequency to RPM, note: this works for one interruption per full rotation. For two interrupts per full rotation use rpmcount * 30.*/
Serial.print(rpm); // print the rpm value.
Serial.println(" ");
rpmcount = 0; // Restart the RPM counter
lastmillis = millis(); // Update lastmillis
attachInterrupt(0, rpm_fan, RISING); //enable interrupt
}
}
void rpm_fan() {
/* this code will be executed every time the interrupt 0 (pin2) gets low.*/
rpmcount++;
}
// Elimelec Lopez - April 25th 2013
将磁性拾音器与 Arduino 连接以显示 RPM 的最佳方式或方法是什么?