Частотомер до 6.5 МГц на Arduino Nano: DIY измеритель частоты
Компоненты и материалы
| Arduino Nano R3 | 1 |
| LCD-дисплей 16x2 (синий на белом) | 1 |
| Биполярный транзистор NPN (общего назначения) | 1 |
| Тумблер (slide switch) | 1 |
| Тактильная кнопка (верхнее нажатие) | 1 |
| Резисторы, конденсаторы, диоды (набор) | 1 |
Необходимые инструменты
| Паяльник |
Приложения и сервисы
| Arduino IDE |
О проекте
Представленное устройство — частотомер на микроконтроллере Arduino Nano. Измеряет частоту прямоугольных, синусоидальных и треугольных сигналов.
Диапазон: от нескольких герц до 6.5 МГц.
Интервалы измерения: 0.1 с, 1 с, 10 с (переключатель).
Для измерения только прямоугольных сигналов усилитель формы не нужен — сигнал подаётся прямо на цифровой пин 5 Arduino.
Код прост благодаря библиотеке FreqCount (ссылка на скачивание ниже).
Состав устройства:
- Arduino Nano
- Плата усилителя формы сигнала
- LCD-дисплей
- Селектор формы входного сигнала
- Входной разъём JACK
- Переключатель интервала измерения: 0.1 / 1 / 10 секунд

Как видно на видео, прибор точен на всём диапазоне. Доступна калибровка:
- В папке библиотек Arduino найдите
FreqCount. - В файле
FreqCount.cppнайдите строки:#if defined (TIMER_USE_TIMER2) && F_CPU == 12000000L float correct = count_output * 0.996155;
- Замените на:
#if defined (TIMER_USE_TIMER2) && F_CPU == 16000000L float correct = count_output * 1.000000;
где1.000000— ваш коэффициент коррекции. - Калибровка: подайте 1 МГц на вход частотомера.
- После изменения загрузите скетч заново.
Готовый прибор размещён в пластиковом корпусе — полезный инструмент для радиолюбителя.
Код
Основной скетч (C/C++)
#include// https://github.com/PaulStoffregen/FreqCount/archive/master.zip #include LiquidCrystal lcd(12, 11, 6, 4, 3, 2); // RS, E, D4, D5, D6, D7 void setup() { lcd.begin(16, 2); pinMode(7, INPUT); FreqCount.begin(1000); } unsigned long f; float f0; int x, n = 3, r; void loop() { if (digitalRead(7) == HIGH) { n++; x = 0; delay(100); } lcd.setCursor(0, 1); if (n == 1) { x++; if (x == 1) { FreqCount.begin(100); } r = -1; lcd.print("T = 0.1 s "); } if (n == 2) { x++; if (x == 1) { FreqCount.begin(10000); } r = 1; lcd.print("T = 10 s "); } if (n == 3) { x++; if (x == 1) { FreqCount.begin(1000); } r = 0; lcd.print("T = 1 s "); } if (n > 3) { n = 1; } lcd.setCursor(0, 0); lcd.print("F = "); if (f >= 1000000 && n == 3) { f0 = f / 1000000.0; lcd.print(f0, 6 + r); lcd.print(" MHz"); } if (f < 1000000 && n == 3) { f0 = f / 1000.0; lcd.print(f0, 3 + r); lcd.print(" kHz"); } if (f >= 100000 && n == 1) { f0 = f / 100000.0; lcd.print(f0, 6 + r); lcd.print(" MHz"); } if (f < 100000 && n == 1) { f0 = f / 100.0; lcd.print(f0, 3 + r); lcd.print(" kHz"); } if (f >= 10000000 && n == 2) { f0 = f / 10000000.0; lcd.print(f0, 6 + r); lcd.print(" MHz"); } if (f < 10000000 && n == 2) { f0 = f / 10000.0; lcd.print(f0, 3 + r); lcd.print(" kHz"); } if (FreqCount.available()) { f = FreqCount.read(); lcd.setCursor(10, 1); lcd.print("***"); } delay(200); lcd.clear(); }
Библиотека FreqCount-master
Только скачивание (нет предпросмотра).
Схемы
Производственный процесс
- Проектирование 4-битного кодового замка на элементах XOR и NOR
- Мультиметры: от аналоговых к цифровым — полное руководство
- Измерение частоты и фазы в системах питания переменного тока
- Ретро-часы на индикаторах Numitron с Arduino: просто, надёжно, экономно
- Создание осциллографа на Arduino Nano с дисплеем Nokia 5110 (20 кГц): простое DIY-руководство
- Создание рулетки на 37 светодиодов с Arduino Nano
- DIY детектор землетрясений на ADXL335 с усилением ОУ OP07
- DIY-контроллер паяльника 862D+ — точность и надёжность
- Tetris на Arduino Nano: самостоятельная сборка 16×8 LED-матрицы на 74HC595
- Never Ride Alone: умная система безопасности для велосипедистов