
Интернет-магазин «Неглупый Дом»
Модуль NE555 — это самостоятельный генератор прямоугольных импульсов, частота которых регулируется подстроечным резистором прямо на плате, без участия Arduino. В этом проекте Arduino ничего не генерирует — он измеряет реальную частоту, которую сейчас выдаёт 555, и показывает результат на дисплее TM1637.
Модуль на NE555 выдаёт на своём выходном пине прямоугольный сигнал: поочерёдно HIGH и LOW, причём длительность каждого полупериода зависит от настройки подстроечного резистора на плате — крутить его можно прямо во время работы схемы, и частота будет меняться "на лету". Частота — это количество полных периодов сигнала за секунду, а период — это время одного полного цикла HIGH+LOW.
Функция `pulseIn()` в Arduino умеет измерять длительность одного конкретного импульса (например, сколько микросекунд пин оставался HIGH) на цифровом пине. Замерив длительность полупериода HIGH и полупериода LOW отдельно и сложив их, получаем полный период в микросекундах, а частоту в герцах считаем как 1 000 000, делённое на период в микросекундах (перевод секунд в микросекунды).
Так как реализации данного модуля бывают разные, если у вас на плате нет тех контактов, которые указаны ниже — сориентируйтесь по названиям контактов на своей плате.
// ВНИМАНИЕ: рекомендую отладить код через монитор порта, так как я языковая
// модель, а не специализированный кодер, и могу что-то упустить. Основу
// и идею я накидал, но проверьте под свою схему.
#include <TM1637Display.h> // стандартная библиотека для 7-сегментного дисплея TM1637
TM1637Display display(9, 10); // CLK, DIO
const int SIGNAL_PIN = 7;
void setup() {
Serial.begin(9600);
pinMode(SIGNAL_PIN, INPUT);
display.setBrightness(5);
}
void loop() {
unsigned long highTime = pulseIn(SIGNAL_PIN, HIGH, 100000); // ждём HIGH-импульс, таймаут 100 мс
unsigned long lowTime = pulseIn(SIGNAL_PIN, LOW, 100000); // и LOW-импульс
if (highTime == 0 || lowTime == 0) {
Serial.println("Сигнал не обнаружен (таймаут)");
display.showNumberDec(0);
return;
}
unsigned long periodMicros = highTime + lowTime;
float frequency = 1000000.0 / periodMicros;
Serial.print("Частота: ");
Serial.print(frequency);
Serial.println(" Гц");
display.showNumberDec((int)frequency); // целое значение частоты в герцах на экран
}
Библиотека TM1637Display ставится через Менеджер библиотек Arduino IDE. Для измерения собственной частоты не нужна никакая дополнительная библиотека — только встроенная в Arduino функция `pulseIn()`.
Ещё модули для Arduino: Электронные модули.
🎁 Купить весь комплект со скидкой 10%
Все 2 товара сразу в корзину: 157 ₽ 141 ₽ (экономия 16 ₽)
Скидка применяется автоматически при оформлении заказа, если в корзине именно этот комплект.
Остались вопросы? Проконсультируйтесь с ИИ-инженером — он уже в курсе темы статьи и сразу ответит, ничего вводить не нужно.