Простая глушилка FM радио на Arduino: разбираемся, как это работает

Разбираем, как Arduino создаёт помехи в FM-диапазоне. Схема, скетч, объяснение принципов работы гармоник и предупреждение о законности.
Когда я впервые увидел схему «глушилки» на Arduino, меня это зацепило не с практической стороны, а с чисто инженерной. Как может простая плата с тактовой частотой 16 МГц создавать помехи в FM-диапазоне? Оказывается, может — и довольно эффективно. Но давайте сразу расставим точки над i.
Важное предупреждение
Этот проект носит исключительно образовательный характер. Он создан для того, чтобы показать, как работает генерация радиочастотных помех, как устроен FM-диапазон и почему так важно соблюдать законодательство о радиочастотах. Создание и использование устройств, подавляющих или заглушающих радиосигнал, в России запрещено и подпадает под действие КоАП РФ и Уголовного кодекса. Не используйте эту схему для реального подавления сигналов — только для экспериментов на макете с подключённым к осциллографу или анализатору спектра выходом, либо в лабораторных условиях с согласованной нагрузкой вместо антенны.
Если вам интересна тема радиоэлектроники — лучше соберите FM-передатчик или приёмник. Это и полезнее, и законнее. А данная статья — про то, как работает генерация шума на цифровой плате.
Что нам понадобится
Для сборки проекта нужен минимум компонентов:
- Плата Arduino (Uno, Nano или Mega — подойдёт любая на ATmega328P или ATmega2560)
- Макетная плата (breadboard)
- Соединительные провода
- Резистор 100–220 Ом (для ограничения тока)
- Кусок провода 10–15 см в качестве антенны (опционально, для экспериментов)
- Осциллограф или анализатор спектра (настоятельно рекомендую для проверки)
Никаких дополнительных модулей не требуется. Вся «магия» происходит за счёт быстрого переключения цифровых выводов микроконтроллера.
Как вообще Arduino может создавать помехи в FM-диапазоне?
FM-радио в России и Европе вещает в диапазоне 87,5–108 МГц. Тактовая частота Arduino — всего 16 МГц. Казалось бы, как можно создать помехи на частоте в 5–6 раз выше тактовой?
Ответ кроется в гармониках. Любой прямоугольный сигнал, который генерирует микроконтроллер, содержит не только основную частоту, но и её нечётные гармоники: 3-ю, 5-ю, 7-ю и так далее. Если основная частота — 16 МГц, то:
- 3-я гармоника — 48 МГц
- 5-я гармоника — 80 МГц
- 6-я гармоника — 96 МГц (уже ближе к FM-диапазону)
- 7-я гармоника — 112 МГц
Но проблема в том, что амплитуда гармоник быстро убывает. Чтобы получить заметный сигнал в FM-диапазоне, нужно генерировать импульсы с очень крутыми фронтами и на частоте, которая даст гармоники в нужном диапазоне.
Альтернативный подход: генерация на кратных частотах
Есть и другой способ — использовать быстрое переключение вывода с частотой, которая сама попадает в FM-диапазон. Arduino Uno на 16 МГц может переключать вывод со скоростью до 8 МГц (половина тактовой), если использовать прямую работу с портами. Но 8 МГц — это всё ещё не FM.
Однако если мы будем формировать на выводе последовательность импульсов с частотой следования, скажем, 96 МГц... стоп, это невозможно на 16 МГц контроллере.
Реальный подход: шумовой генератор
На самом деле, простые «глушилки» на Arduino работают не на конкретной частоте, а создают широкополосный шум в диапазоне десятков-сотен МГц. Это происходит за счёт очень быстрого переключения вывода в случайном или псевдослучайном порядке. Фронты импульсов содержат энергию в широком диапазоне частот, включая FM-диапазон.
Классический способ — использовать Timer/Counter для генерации прямоугольных импульсов на максимально возможной частоте и модулировать их случайным сигналом.
Собираем схему
Схема предельно проста:
Arduino Digital Pin 9 ────┬─── 100 Ом ──── Антенна (10-15 см провода)
│
GND (общий)
Резистор нужен для ограничения тока и защиты вывода микроконтроллера. Антенну можно не подключать вовсе — излучение будет, но слабее. Для лабораторных экспериментов подключите выход через резистор к осциллографу.
Скетч: генерация помех
Вот базовый скетч, который создаёт широкополосные помехи в FM-диапазоне:
/*
* FM Jammer / Noise Generator for Arduino
*
* ВНИМАНИЕ: Только для образовательных целей!
* Использование в реальных условиях может нарушать законодательство РФ.
*
* Платформа: Arduino Uno / Nano (ATmega328P @ 16 MHz)
* Подключение: Digital Pin 9 -> резистор 100 Ом -> антенна/осциллограф
*/
// Используем Timer1 для генерации высокочастотного сигнала на Pin 9 (OC1A)
void setup() {
// Настраиваем Pin 9 как выход
DDRB |= (1 << PB1); // Pin 9 = PB1 = OC1A
// Настройка Timer1 для быстрого PWM
TCCR1A = 0;
TCCR1B = 0;
// Fast PWM, 8-bit, без предделителя
// Частота PWM = 16 МГц / (2 * (1 + 0)) = 8 МГц
TCCR1A |= (1 << WGM10) | (1 << COM1A1); // Fast PWM 8-bit, non-inverting
TCCR1B |= (1 << WGM12) | (1 << CS10); // Предделитель = 1
// Устанавливаем скважность 50%
OCR1A = 127;
}
void loop() {
// Периодически меняем скважность для создания шумовой модуляции
static uint8_t duty = 0;
static unsigned long lastChange = 0;
if (millis() - lastChange > 1) { // Меняем каждую 1 мс
lastChange = millis();
// Псевдослучайное изменение скважности
// Используем xorshift для генерации случайных чисел
static uint16_t state = 0xACE1;
state ^= state << 7;
state ^= state >> 9;
state ^= state << 8;
duty = (state >> 8) & 0xFF;
OCR1A = duty;
}
}
Как это работает
-
Timer1 настраивается в режим Fast PWM с частотой 8 МГц. Это максимальная частота, которую можно получить на ATmega328P при тактовой 16 МГц.
-
Сигнал 8 МГц с вывода OC1A (Pin 9) содержит гармоники на 24, 40, 56, 72, 88, 104 МГц и так далее. Как раз в FM-диапазон попадают гармоники на 88 и 104 МГц.
-
Изменение скважности (duty cycle) каждую миллисекунду создаёт дополнительную модуляцию, которая расширяет спектр сигнала. В результате получается широкополосный шум, перекрывающий значительную часть FM-диапазона.
Улучшенная версия с шумовой модуляцией
Для более эффективного подавления (в лабораторных условиях!) можно использовать аппаратный генератор случайных чисел:
/*
* Расширенная версия генератора шума
* Использует аналоговый шум с пина A0 для модуляции
*/
const int noisePin = A0; // Неподключенный аналоговый пин для снятия шума
void setup() {
// Настройка Timer1 как в предыдущем примере
DDRB |= (1 << PB1);
TCCR1A = 0;
TCCR1B = 0;
TCCR1A |= (1 << WGM10) | (1 << COM1A1);
TCCR1B |= (1 << WGM12) | (1 << CS10);
OCR1A = 127;
// Настраиваем АЦП для чтения шума
ADMUX = (1 << REFS0) | (1 << MUX0); // AVCC, A0
ADCSRA = (1 << ADEN) | (1 << ADPS2) | (1 << ADPS1) | (1 << ADPS0); // Включить, предделитель 128
}
void loop() {
// Читаем значение с аналогового пина
ADCSRA |= (1 << ADSC); // Запускаем преобразование
while (ADCSRA & (1 << ADSC)); // Ждём завершения
uint8_t value = ADCL >> 6; // Старшие биты результата
// Используем значение для модуляции
OCR1A = 127 + (value - 32) * 2; // Центрируем около 50% скважности
}
Проверка результата
С помощью осциллографа
- Подключите щуп осциллографа к выходу (Pin 9) через резистор 100 Ом.
- Установите развёртку 50–100 нс/дел.
- Вы должны увидеть прямоугольные импульсы частотой около 8 МГц.
- При использовании второго скетча скважность импульсов будет постоянно меняться.
С помощью анализатора спектра
Это лучший способ увидеть реальную картину:
- Подключите выход к анализатору спектра через аттенюатор (20–30 дБ).
- Установите диапазон 80–110 МГц.
- Вы увидите пики на гармониках 8 МГц сигнала — примерно на 88, 96, 104 МГц.
- При использовании модуляции пики будут «размазаны» по спектру.
С помощью FM-приёмника
Если у вас есть портативный FM-радио, вы можете проверить эффект. Но помните: не делайте этого в реальных условиях, где могут пострадать другие люди. Только в лаборатории или экранированном помещении.
Типичные ошибки и как их избежать
1. Слишком длинный вывод к антенне
Длинные провода работают как антенна и создают паразитные излучения на других частотах. Держите соединения короткими.
2. Отсутствие резистора
Без резистора 100 Ом вывод микроконтроллера может быть повреждён из-за перегрузки по току, особенно при подключении к антенне или осциллографу.
3. Неправильный пин
В скетче используется Pin 9 (OC1A). Если вы подключите антенну к другому пину, сигнала не будет. Проверьте маркировку на плате.
4. Слишком низкое напряжение питания
При питании от USB Arduino может «проседать» под нагрузкой. Используйте внешний источник 7–12 В или качественный USB-хаб.
Что можно улучшить
Добавление усилителя
Для увеличения мощности сигнала (в лабораторных целях) можно добавить широкополосный усилитель на транзисторе:
Arduino Pin 9 ---[100 Ом]--- База 2N2222
|
Эмиттер --- GND
|
Коллектор ---[катушка 3-5 витков]--- +5V
|
Антенна (10 см)
Но помните: увеличение мощности делает устройство более опасным с точки зрения законодательства.
Использование ESP32
ESP32 с тактовой частотой 240 МГц может генерировать помехи непосредственно в FM-диапазоне без гармоник. Но это уже другая история.
Практическое применение знаний
Понимание того, как работают гармоники и как микроконтроллеры создают помехи, полезно не только для «глушилок». Эти знания помогают:
- Правильно проектировать экранирование корпусов для своих устройств
- Выбирать частоты PWM так, чтобы они не создавали помех радиоприёмникам
- Понимать, почему некоторые устройства с дешёвыми импульсными блоками питания создают помехи
- Проектировать фильтры для подавления нежелательных гармоник
Если вы хотите углубиться в тему Arduino, обратите внимание на подборку полезных скетчей: сборник полезных скетчей для Arduino: 7 прошивок, которые реально пригодятся. Там есть и другие интересные проекты, которые можно собрать за вечер.
Заключение
Мы разобрали, как Arduino может создавать помехи в FM-диапазоне за счёт генерации прямоугольных импульсов с частотой 8 МГц и их гармоник. Схема предельно проста — нужен только микроконтроллер, резистор и кусок провода. Но помните: этот проект создан исключительно в образовательных целях.
Реальная польза от этого эксперимента — понимание того, как работают гармоники, как микроконтроллеры влияют на радиоэфир и почему так важно проектировать устройства с учётом электромагнитной совместимости. Эти знания пригодятся вам при создании любых DIY-проектов — от метеостанций до умного дома.
Если вы хотите собрать что-то действительно полезное на Arduino, лучше обратите внимание на проекты вроде автоматического полива или таймера — они принесут реальную пользу и не создадут проблем с законом. А если вас интересует именно радиочастотная тематика — соберите FM-передатчик или приёмник, это и интереснее, и безопаснее.
Экспериментируйте, учитесь и помните о законодательстве!
Понравилась статья?
Поставьте лайк и сохраните полезный материал в закладки.
Сборник полезных скетчей для Arduino: 7 прошивок, которые реально пригодятся
Arduino для начинающих: первый скетч и основы программирования
Arduino и OLED дисплей SSD1306: выводим данные красиво
Arduino и SD-карта: логируем данные датчиков на microSD
Arduino и сервоприводы: от мигания светодиода до роборуки
Пишем скетчи своими руками для Arduino — с нуля