AM-передатчик на Arduino Nano: передача звука по радиочастоте
Компоненты
- Arduino Nano R3 — 1 шт.
- Резисторы 10 кОм — 2 шт.
- Конденсатор 10 мкФ — 1 шт.
- Макетная плата — 1 шт.
Принцип работы
Настоящая амплитудная модуляция (AM) требует аналогового управления амплитудой несущей частоты. Arduino выдаёт только цифровые уровни (0/1), поэтому полноценного AM получить нельзя. Однако можно сымитировать AM через ШИМ (PWM):
- АЦП считывает аудиосигнал (порт A0).
- Таймер 1 (16-бит) генерирует ШИМ с разрешением 10 бит (частота ~18,5 кГц).
- Таймер 2 выдаёт несущую частоту на pin D11 (PB3) — настраивается от 31 кГц до 8 МГц.
- ШИМ модулирует несущую: на выходе D11 появляется сигнал, который обычный AM-приёмник детектирует как звук (работает как НЧ-фильтр).
Это концепт-доказательство. Для реального применения нужны: НЧ-фильтр на входе (антиалиасинг) и ВЧ-фильтр на выходе (подавление гармоник).
Код прошивки
/* CC BY-SA 4.0 */
#define ANTENNA_PIN PB3 // D11 на Nano/Uno
void setup() {
Serial.begin(115200);
// Несущая частота (Timer2)
uint32_t fTransmit = 600; // кГц
DDRB |= (1 << ANTENNA_PIN);
TCCR2A = (1 << COM2A0) | (1 << WGM21); // CTC, toggle OC2A
TCCR2B = (1 << CS20); // без предделителя
OCR2A = F_CPU / (2000 * fTransmit) - 1;
// PWM для аудио (Timer1, 10-bit Fast PWM)
TCCR1A = (1 << WGM11) | (1 << WGM10);
TCCR1B = (1 << WGM12) | (1 << CS10);
TIMSK1 = (1 << OCIE1A) | (1 << TOIE1);
// АЦП: свободный запуск, опорное 1.1В, предделитель 64
ADMUX = (1 << REFS1) | (1 << REFS0);
ADCSRA = (1 << ADEN) | (1 << ADSC) | (1 << ADATE) | (1 << ADPS2) | (1 << ADPS1);
DIDR0 = (1 << ADC0D);
}
// Переполнение Timer1 — загрузка нового значения ШИМ из АЦП
ISR(TIMER1_OVF_vect) {
uint8_t adcl = ADCL;
uint8_t adch = ADCH;
OCR1A = (adch << 8) | adcl;
DDRB |= (1 << ANTENNA_PIN); // включить выход несущей
}
// Сравнение Timer1 — отключение выхода (конец импульса ШИМ)
ISR(TIMER1_COMPA_vect) {
DDRB &= ~(1 << ANTENNA_PIN);
}
void loop() { }
Схема подключения
- Аудиовход → делитель на 2×10 кОм + конденсатор 10 мкФ → A0
- Антенна → D11 (PB3) — просто провод длиной ~20–30 см
- Общая земля
Приёмник: обычный AM-радиоприёмник, настроенный на частоту несущей (по умолчанию 600 кГц).
Важные замечания
- Работает только вблизи приёмника (метры) — мощность минимальна.
- Качество звука низкое (8-бит, 18 кГц), но речь и мелодии различимы.
- Для стабильности несущей лучше использовать кварцевый генератор, а не внутренний RC.
Производственный процесс
- Наследие и эволюция классического джукебокса
- Нотные издания: от средневековых манускриптов к современному издательству — обзор отрасли
- Светофоры: инженерия, история и будущие инновации
- Сделай свой LUMAZOID: DIY Arduino музыкальный визуализатор
- Сборка Bluetooth-робота-шпиона на Arduino с управлением с телефона
- Декодирование PPM-сигнала RC-приёмника на Arduino: пошаговое руководство
- FlickMote: жестовое IR-пульт для умного дома на Arduino 101 и ультразвуковом датчике
- DIY Arduino TV-B-Gone: универсальный пульт для выключения любого телевизора
- Создание пользовательских LED-часов с будильником — видно с 12 метров
- Использование термистора: пошаговое руководство для Arduino