Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

AM-передатчик на Arduino Nano: передача звука по радиочастоте

Компоненты

Принцип работы

Настоящая амплитудная модуляция (AM) требует аналогового управления амплитудой несущей частоты. Arduino выдаёт только цифровые уровни (0/1), поэтому полноценного AM получить нельзя. Однако можно сымитировать AM через ШИМ (PWM):

  1. АЦП считывает аудиосигнал (порт A0).
  2. Таймер 1 (16-бит) генерирует ШИМ с разрешением 10 бит (частота ~18,5 кГц).
  3. Таймер 2 выдаёт несущую частоту на pin D11 (PB3) — настраивается от 31 кГц до 8 МГц.
  4. ШИМ модулирует несущую: на выходе 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() { }

Схема подключения

Приёмник: обычный AM-радиоприёмник, настроенный на частоту несущей (по умолчанию 600 кГц).

Важные замечания

Производственный процесс

  1. Наследие и эволюция классического джукебокса
  2. Нотные издания: от средневековых манускриптов к современному издательству — обзор отрасли
  3. Светофоры: инженерия, история и будущие инновации
  4. Сделай свой LUMAZOID: DIY Arduino музыкальный визуализатор
  5. Сборка Bluetooth-робота-шпиона на Arduino с управлением с телефона
  6. Декодирование PPM-сигнала RC-приёмника на Arduino: пошаговое руководство
  7. FlickMote: жестовое IR-пульт для умного дома на Arduino 101 и ультразвуковом датчике
  8. DIY Arduino TV-B-Gone: универсальный пульт для выключения любого телевизора
  9. Создание пользовательских LED-часов с будильником — видно с 12 метров
  10. Использование термистора: пошаговое руководство для Arduino