Cảm biến quang thường dùng hai loại phổ biến:
Cảm biến | Arduino |
---|---|
VCC | 5V |
GND | GND |
OUT | D2 |
Mỗi khi vật thể (cánh hoặc vạch phản xạ) đi qua cảm biến, cảm biến sẽ gửi một xung (HIGH hoặc LOW) về Arduino. Đếm số xung trong một khoảng thời gian → tính được tốc độ quay (RPM).
cpp
const byte sensorPin = 2; // Chân OUT của cảm biến nối vào chân 2 (ngắt ngoài)
volatile unsigned int pulseCount = 0;
unsigned long lastMillis = 0;
int rpm = 0;
const int pulsesPerRevolution = 1; // Số xung cho 1 vòng (tùy bạn thiết kế)
void setup() {
pinMode(sensorPin, INPUT);
attachInterrupt(digitalPinToInterrupt(sensorPin), countPulse, FALLING);
Serial.begin(9600);
}
void loop() {
if (millis() - lastMillis >= 1000) { // Mỗi 1 giây tính tốc độ
rpm = (pulseCount * 60) / pulsesPerRevolution; // Đổi ra vòng/phút
Serial.print("Speed: ");
Serial.print(rpm);
Serial.println(" RPM");
pulseCount = 0;
lastMillis = millis();
}
}
void countPulse() {
pulseCount++;
}
Lưu ý:
- Nếu đĩa chia nhiều khe hoặc có nhiều vạch phản xạ trên bánh xe, hãy chỉnh
pulsesPerRevolution
cho đúng số xung mỗi vòng.- Có thể dùng ngắt
FALLING
hoặcRISING
tùy cảm biến.