цифровая электроника
вычислительная техника
встраиваемые системы

 

Как сделать FM-трансмиттер на Arduino и NS73M своими руками

Автор: Mike(admin) от 5-05-2017, 19:55

Сегодня FM-передатчики пользуются немалой популярностью, в первую очередь благодаря тому, что радиоприемники и магнитолы старых машин не читают информацию с современных накопителей (флешек, SD-карт). Поэтому автолюбители покупают такие FM-передатчики, чтобы с этих накопителей транслировать в эфир любимую музыку на ближайшее расстояние, чтобы FM-приемник принял эту информацию.


FM-трансмиттер NS73M

Сегодня FM-передатчики можно найти в магазинах бытовой техники и электроники. Китайские модели стоят относительно дешево, брендовые же модели имеют приличную цену. Но, к счастью, FM-передатчик можно сделать самому на основе Arduino и модуля NS73M.


Модуль NS73M является основой FM-передатчика. Он может передавать данные на частотах от 87.5 МГц до 108 МГц, поддерживает стерео благодаря правому и левому каналам, работает в диапазоне напряжений от 2.7 В до 3.6 В и имеет максимальную мощность 2 мВт. При этом обеспечивается максимальная дальность транслирования до 18 м при очень качественной антенне, но, как правило, стандартная дальность составляет не более 10 метров.


Фактически, этот проект представляет собой объединение двух высокоинтегрированных модулей. Оба модуля (передатчик NS73MFM, Arduino UNO) могут быть смонтированы на макете и соединены между собой. Схема подключения Arduino и NS73M приведена на изображении ниже.


Как сделать FM-трансмиттер на Arduino и NS73M своими руками

Ниже представлен код (скетч) взаимодействия Arduino и модуля FM-передатчика NS73M. Этот код генерирует цифровые тоны с помощью Arduino и организует широковещательные передачи на левом канале (L). Для стерео выполняется модуляция L+R. Для передачи звука просто подключите источник звука к LIN, RIN и GND. Используйте тот же код, чтобы установить частоту вещания, но уберите генерацию тона.



#include "pitches.h"
int CK = 13; // Линия тактирования
int DA = 11; // Линия данных
int LA = 10; // Защелка
 
int AudioPin = 9; // Тоновый выход
 
int notes[] = {
  NOTE_A4, NOTE_B4, NOTE_C3
};
 
int numNotes = 3;
 
void setup() {
  Serial.begin(9600);
  pinMode(CK, OUTPUT);
  pinMode(DA, OUTPUT);
  pinMode(LA, OUTPUT);
  digitalWrite(LA, LOW); // Разблокируем передатчик
  delay(100);            // Ждем 0.1 с
  spi_send(0x0E, B00000101); // Программный сброс
  spi_send(0x01, B10110100); // Регистр 1: принудительная поднесущая, пилотный сигнал включен
  spi_send(0x02, B00000011); // Регистр 2: разблокировка обнаружения, передающая мощность 2 мВт
  spi_send(0x03, B10001010); // Регистр 3: установка частоты вещания 97.3, младший байт
  spi_send(0x04, B00101110); // Регистр 4: установка частоты вещания 97.3, старший байт
 spi_send(0x08, B00011010); // Регистр 8: установка осциллятора на диапазон 2
  spi_send(0x00, B10100001); // Регистр 0: 200 мВ аудио вход, 75-микросекундная пауза, кристалл выключен, питание включено
  spi_send(0x0E, B00000101); // Программный сброс
  spi_send(0x06, B00011110); //Register 6: подкачка на 320 мкА и 80 мкА
  Serial.print("Transmitting");  // Для отладки
 
}
 
void loop() {
  // square wave tones
  //tone(9, notes[random(numNotes)], 500);
  // random frequency
  tone(9, random(50, 5000), 20);
  delay(10);
}
 
void spi_send(byte reg, byte data)  // Процедура отправки адреса и данных по SPI
{
  int x;
  int n;
  digitalWrite(LA, LOW);
 
  for (x = 0 ; x < 4 ; x++)          
  {
    digitalWrite(CK, LOW);        
    n = (reg >> x) & 1;            
    if (n == 1) {
      digitalWrite(DA, HIGH);    
    }
    else {
      digitalWrite(DA, LOW);     
    }
    Serial.print(n);
    digitalWrite(CK, HIGH); 
  }
 
  for (x = 0 ; x < 8 ; x++)         
  {
    digitalWrite(CK, LOW);         
    n = (data >> x) & 1;
    if (n == 1) {
      digitalWrite(DA, HIGH);    
    }
    else {
      digitalWrite(DA, LOW);    
    }
    Serial.print(n);
    digitalWrite(CK, HIGH);       
  }
  delayMicroseconds(1);        
  digitalWrite(LA, HIGH);           
  delayMicroseconds(4);
  digitalWrite(LA, LOW);
  digitalWrite(CK, LOW);            //Линию CK в 0 В в конце передачи данных
  Serial.print("\n");               // Устанавливаем новую линию для отладки
 
}



Теги: Arduino, FM-передатчик, NS73M



Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий