Arduino Nano Tachometer (Đồng hồ đo vòng tua RPM)
Mẫu Arduino Nano Tachometer dùng cảm biến IR và màn hình OLED I2C 128x64 để đo vòng tua. Có thể đọc khoảng 10k–20k RPM tùy điều kiện và chất lượng cảm biến. Kèm hướng dẫn đi dây và code.
Mô tả
Cảnh báo: Con biến trở (potentiometer) trên một số cảm biến IR có thể nằm hơi khác vị trí. Mình dùng model của https://grabcad.com/library/hw-201-1. Nhớ kiểm tra để cái của bạn canh cho khớp.
Ngoài ra, vui lòng chỉnh biến trở của bạn theo một mức rpm đã biết. Một số lần đo có thể bị cao quá do debounce. Giảm độ nhạy xuống tới khi thấp nhất có thể.
Các chi tiết được thiết kế để dán keo cố định.
THÁO HÀN CHÂN (DESOLDER) KHỎI MÀN HÌNH OLED (gỡ cái spacer header màu đen ra sẽ dễ hơn nhiều). Hàn trực tiếp vào pad
Phần cứng (Hardware):
Arduino Nano cổng USB-C, không gắn header (mình dùng hàng Trung Quốc)

Màn hình 128X64 I2C OLED (chữ trắng, 0.96)

Cảm biến tiệm cận IR (một LED trong suốt, một LED đen.)

Đi dây (Wiring):
OUT của cảm biến IR → D2
SDA của màn hình → A4
SCL của màn hình → A5
Nối chung tất cả GND
Nối chung tất cả 5V
Code:
#include <Adafruit_SSD1306.h>
#include <Wire.h>
#define OLED_RESET -1
Adafruit_SSD1306 display(128, 64, &Wire, OLED_RESET);
#define PULSE_PIN 2
#define DEBOUNCE_US 10000 // debounce threshold in microseconds
volatile unsigned long pulses = 0;
volatile unsigned long lastPulseTime = 0;
unsigned long lastTime = 0;
// Interrupt Service Routine with debounce
void countPulse() {
unsigned long now = micros();
if (now - lastPulseTime > DEBOUNCE_US) {
pulses++;
lastPulseTime = now;
}
}
void setup() {
pinMode(PULSE_PIN, INPUT);
attachInterrupt(digitalPinToInterrupt(PULSE_PIN), countPulse, RISING);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
display.setTextColor(SSD1306_WHITE);
}
void loop() {
if (millis() - lastTime >= 1000) {
noInterrupts();
unsigned long count = pulses;
pulses = 0;
interrupts();
unsigned int rpm = count * 60;
display.clearDisplay();
display.setTextSize(1);
display.setCursor(0, 0);
display.print("RPM:");
display.setTextSize(3);
display.setCursor(0, 20);
display.print(rpm);
display.display();
lastTime = millis();
}
}
Giấy phép
Tác phẩm này được cấp phép theo
Creative Commons — Attribution — Noncommercial — Share AlikeCC-BY-NC-SA
File mô hình
Chưa có bản in nào được khoe. Hãy là người đầu tiên!
Chưa có bình luận nào. Hãy là người đầu tiên!