Ардуино Нано Тахометр
Предупреждение: потенциометр на некоторых ИК-датчиках может находиться в несколько ином положении. Я использовал модель https://grabcad.com/library/hw-201-1. Убедитесь, что ваши совпадают.
Кроме того, настройте потенциометр на известные обороты. Некоторые показания могут быть слишком высокими из-за дребезга. Уменьшайте чувствительность до минимально возможного уровня.
Детали предназначены для приклеивания на место.
ВЫПОЙКИ ОТ OLED-ДИСПЛЕЯ (очень помогает удаление черной прокладки). паять непосредственно на контактные площадки
Аппаратное обеспечение:
Arduino Nano с портом USB-C, без разъемов (я использовал китайскую подделку)
OLED-дисплей I2C 128X64 (белый текст, 0,96)
ИК-датчик приближения (один прозрач��ый светодиод, один черный светодиод.)
Проводка:
ИК-датчик ВЫХОД → D2
Дисплей ПДД → А4
Дисплей SCL → A5
Соедините все GND вместе
Соедините все 5В вместе
Код:
#include
#include
#define OLED_RESET -1
Дисплей Adafruit_SSD1306 (128, 64, &Wire, OLED_RESET);
#define PULSE_PIN 2
#define DEBOUNCE_US 10000 // порог устранения дребезга в микросекундах
энергозависимые длинные беззнаковые импульсы = 0;
летучий беззнаковый long LastPulseTime = 0;
беззнаковый длинный LastTime = 0;
// Прерываем сервисную процедуру с устранением дребезга
недействительный countPulse() {
unsigned long now = micros();
if (сейчас — LastPulseTime > DEBOUNCE_US) {
импульсы++;
LastPulseTime = сейчас;
}
}
недействительная настройка() {
pinMode (PULSE_PIN, INPUT);
AttachInterrupt(digitalPinToInterrupt(PULSE_PIN), countPulse, RISING);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
display.setTextColor(SSD1306_WHITE);
}
недействительный цикл() {
if (millis() — LastTime >= 1000) {
нетПрерывания();
беззнаковый длинный счет = импульсы;
импульсы = 0;
прерывания();
беззнаковое целое число оборотов = количество * 60;
display.clearDisplay();
display.setTextSize(1);
display.setCursor(0, 0);
display.print(«RPM:»);
display.setTextSize(3);
display.setCursor(0, 20);
display.print(об/мин);
дисплей.дисплей();
LastTime = миллис();
}
}





























