image

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

Исправить положение можно с помощью простого маломощного радиопередатчика, действующего в радиусе нескольких метров. В процессе сборки одной из таких конструкций у автора родилась идея попытаться сделать такой передатчик на базе Arduino.

Основные требования к устройству: имеющаяся в наличии плата Arduino UNO или Arduino Leonardo, максимальная простота электрической схемы (не сложнее самых простых передатчиков на одном транзисторе) и удовлетворительное для АМ-диапазона качество звучания.

В качестве несущей для наших целей можно использовать сигнал прямоугольной формы, получить который не составляет труда, а прием вести на одной из гармоник. С учетом малой мощности передатчика, сигналы «лишних» гармоник не будут распространятся далее пределов комнаты и не создадут помех окружающим.

Сложности возникают с управлением амплитудой: сигнал на выходах может принимать только два значения, а использование даже простейшего ЦАП добавит в конструкцию десяток резисторов.

Замечание с забеганием вперед об analogWrite
Заметим, что использовать ШИМ и analogWrite в их классическом варианте не удастся из-за высокой частоты несущей, не менее 150 кГц для нижней границы диапазона ДВ. Хотя именно ШИМ, но использованная в ином качестве, поможет получить решение.

С другой стороны, просто реализуется управление длительностью импульса. Выясним, как этот параметр повлияет на амплитуды входящих в состав сигнала гармоник.

Обозначим $f(t)$ функцию прямоугольного сигнала с периодом $T$, длительностью импульса $L$ и амплитудой A:
image

В разложении $f(t)$ в ряд Фурье

$f(t)=\frac{a_0}{2} + \sum_{n=1}^{\infty}\left[a_n\cos\left(\frac{2\pi n t}{T}\right) + b_n\sin\left(\frac{2\pi n t}{T}\right)\right]$

коэффициенты $b_n$ в силу чётности $f(t)$ равны нулю. Следовательно, амплитуда $n-$й гармоники совпадает с коэффициентом

$a_n=\frac{2}{T}\int_{-T}^{T}f(s)\cos\left(\frac{2\pi n s}{T}\right)ds = \frac{2}{T}\int_{-L/2}^{L/2}A\cos\left(\frac{2\pi n s}{T}\right)ds=$

$=\left.\frac{A}{\pi n}\sin\left(\frac{2 \pi n s}{T}\right)\right|_{-L/2}^{L/2}=\frac{2A}{\pi n}\sin\left(\frac{\pi n L}{T}\right).$


Но $\sin(x) = x + o(x^2)$ при $x\to 0$ и $\sin(x)$ хорошо приближается $x$, если $x$ мало. Значит, при малых $L$ зависимость амплитуды $n-$й гармоники от $L$ близка к линейной, и вместо амплитуды несущей можно изменять длительность импульса, заботясь о том, чтобы она не превышала некоторой достаточно малой величины!

Несложно написать скетч для формирования такого сигнала, но в этом нет необходимости: готовый сигнал нужной нам формы можно получить на выходе с широтно-импульсной модуляцией. При частоте ШИМ 62,5 кГц частота третьей гармоники равна 187.5 кГц, и она попадает в радиовещательный диапазон длинных волн. Достаточно подать на соответствующий выход Arduino сигнал низкой частоты и подключить к нему антенну, остальное сделает ШИМ. Важно лишь, чтобы значение параметра value функции analogWrite не превышало границы, определяемой величиной допустимых искажений. Оценим эту границу.

Пусть $L=\alpha T$, где $\alpha \in [0, 1]$ — длительность импульса в долях периода. Тогда

$a_n(\alpha)=\frac{2A}{\pi n}\sin(\alpha\pi n)$

.
Относительное отклонение $a_n(\alpha)$ от линейной функции $2A\alpha$

$\frac{2A\alpha - \frac{2A}{\pi n}\sin(\alpha\pi n)}{2A\alpha}=\frac{\alpha\pi n - \sin(\alpha\pi n)}{\alpha\pi n}\to 0$


при $\alpha\to 0$. С увеличением $\alpha$ отклонение растёт. Для $\alpha=0.085$ и $n=3$ оно составляет около 10%, что достаточно много. При выборе гармоники более высокого порядка отклонение становится еще больше. Так как при 8 битной ШИМ длительности импульса $\alpha=1$ соответствует value=255, то для для $\alpha\leq 0,085$ необходимо, чтобы value не превышал $255\cdot 0,085\approx 22$. Полученная оценка позволяет получить представление о порядке допустимых величин и далее подобрать подходящие значения экспериментально.

Итогом громоздкого блока теории являются простая схема:
image

и очень простой скетч:

void setup() {
// Параметры ШИМ
TCCR1A = TCCR1A & 0xe0 | 1;
TCCR1B = TCCR1B & 0xe0 | 0x09;
}

int const SHIFT = 8;
int const SCALE = 8;

void loop() {
  analogWrite(9, (analogRead(A0) - 512) / SCALE + SHIFT);
}

В качестве антенны использован отрезок монтажного провода длиной 1 метр.

SHIFT задает значение на выходе ШИМ при отсутствии входного сигнала. В процессе модуляции оно меняется в пределах от 1 до 15, длительность импульса при этом составляет от 1/255 до 15/255 периода.

Константа SCALE подобрана экспериментально так, чтобы сигнал с выхода телефона укладывался в допустимые границы значений на выходе ШИМ.

При подаче на вход устройства синусоиды 1 кГц от ГСС, на выходе приемника, настроенного на частоту 187,5 кГц, получается громкий сигнал неискаженной формы:

image

Дальность приема на карманный супергетеродин составляет около полутора метров.

Второй раз в диапазоне ДВ сигнал принимается на частоте 250 кГц. Потеря качества на слух при переходе на четвертую гармонику незаметна. С увеличением номера гармоники искажения растут, но при выбранных параметрах и на девятой гармонике 562,5 кГц, попадающей в нижнюю часть диапазона средних волн, качество остается приемлемым.

Увеличивая (в разумных пределах) значение SHIFT, можно попытаться добиться повышения качества звучания за счет поиска компромисса между увеличением количества уровней дискретизации и ростом искажений. SCALE в этом случае нужно уменьшить, чтобы сохранить коэффициент модуляции. Однако, теряется возможность приёма на более высоких гармониках. Например, эксперимент с SHIFT = 16 и SCALE = 4 показал неплохой результат на частоте 187,5 кГц, но в диапазоне СВ искажения оказались очень большими.

В итоге получилось простое устройство, не содержащее самодельных катушек индуктивности. К его достоинствам можно отнести стабильность частоты несущей и отсутствие паразитной частотной модуляции, что обычно является проблемой для простейших конструкций.

В заключение статьи видео с демонстрацией работы микропередатчика.

Комментарии (23)


  1. virtualsys
    04.07.2018 13:35
    +1

    А если использовать DDS AD9850? Он и КВ диапазон перекроет. Цена вопроса около 10$. Решение будет элегантным. Или хотелось прямо из чистого Ардуино, без доп-модулей?


    1. dm_p2016 Автор
      04.07.2018 15:15

      Да, целью было сделать без дополнительных модулей, использовать минимум элементов и применять только самые доступные детали. Дело не столько в цене — сама задача показалась интересной именно в таком варианте. Но и между 10$ и совсем «бесплатно» (если ардуино уже имеется) все-таки тоже есть разница:)


    1. Elmot
      05.07.2018 11:08

      LPD(рация) передатчик за $3
      habr.com/post/389771


  1. madf
    04.07.2018 14:51

    На видео вообще непонятно, что происходит.)


    1. dm_p2016 Автор
      04.07.2018 15:26

      Основная цель видео — демонстрация качества звучания и того, что все это действительно работает. Справа — описанное устройство, чёрный шнур подает на вход низкочастотный сигнал от ноутбука. Желтый провод, уходящий от Ардуино за пределы экрана — антенна. Из приемника звучит принятый от нее сигнал.


      1. madf
        04.07.2018 15:34
        +1

        Надо было хоть ручками провода подергать, показав, что радио сигнал имеет или пропадает, да и радио выглядит как игрушка (кусок пластика), непонятно, что звук от него.


        1. dm_p2016 Автор
          04.07.2018 16:22

          Хорошая идея. Спасибо! Воспользуюсь ей и пересниму видео.


  1. Int_13h
    04.07.2018 18:17

    То же самое, но без СМС
    image


    1. azudem
      04.07.2018 18:37

      Сарказм не уместен, учитывая, что содержательная часть статьи вовсе не о том, о чём вы подумали, прочитав (только?) заголовок. Я, например, вообще не знал, что управляя длительностью импульсов ШИМа в малой окрестности нуля можно получить АМ на гармониках, да так, что можно уверенно передавать речь. Без всяких ЦАПов, аналоговых схем — чисто на цифре.


      1. Int_13h
        05.07.2018 17:59

        Никаких сарказмов, метод интересен, но уж больно непрактичен. А катушка с конденсатором — в любом радиомодуле до сих пор применяется — и вайфай, и блютус — и это неспроста.


        1. dm_p2016 Автор
          05.07.2018 18:48

          Не соглашусь с непрактичностью. Даже для примера из вашего комментария — если ребёнок хочет собрать действующий передатчик, то подарить ему Ардуино и воспользоваться схемой выше несоизмеримо проще (возможно, это будет в чем-то менее познавательно, но более познавательно в чем-то другом), чем раздобыть такой же замечательный конструктор Электронные кубики, как у вас. Ведь он есть далеко не у всех.


          1. Int_13h
            06.07.2018 06:03

            В случае ребенка еще и пресловутый порог вхождения — для Ардуины его надо научить программировать. Гораздо проще научиться спаять из горсти радиодеталей по картинке, для этого даже читать особо не нужно уметь. Вот ему сейчас 5 лет, какая ардуина? А передатчик собрал из кубиков за 15 минут с консультациями и получил работающее устройство!
            А из моего детского опыта — радиопередатчик на рассыпухе это самое простое устрйоство после «хеллоувордовского» мультивибратора — обязательно заработает, с радиоприемниками и то сложнее.
            И еще раз повторю, нет ничего сложного подключить эту горсть радиодеталек к той же ардуине и получить уже не пару метров дальности.


  1. tormozedison
    04.07.2018 21:06
    +4

    — Я знаю, как заменить целый транзистор.
    — Как?
    — Для этого потребуется всего одно Ардуино.


    1. dm_p2016 Автор
      05.07.2018 18:40

      Речь не о замене транзистора Ардуино, а способе получения аналогового АМ-сигнала на цифровом выходе.
      Но замечу, что и самый простой передатчик состоит не только из одного транзистора. А для стабильной частоты несущей и подавления паразитной ЧМ потребуется около двух десятков дискретных элементов.


  1. dephonica
    04.07.2018 22:50
    +2

    Когда-то делал похожий маячок но не с AM модуляцией, а CW — морзянкой («beacon.avi cw arduino» поиском в youtube). Идея реализации AM модуляции очень крутая, уже опробовал. Только аудио поток приходит через UART с PC, а не по аналогу.
    Это, кстати, камень в огород передатчиков на рассыпухе, которые такое не сумеют без дополнительного ЦАП. И бесплатно поменять модуляцию на ЧМ в них тоже не получится. И перестроить частоту несущей по таймеру (или заданному алгоритму) они тоже не смогут.
    Уж где-где, а в области радио, где почти все современные радиопередающие устройства как минимум программируемые (а всё чаще — вообще, программно определяемые), сарказмировать насчёт условного «ардуино» несколько странно.


    1. nafgne
      05.07.2018 09:40

      Это не бесплатно. Вы заранее поместили в схему полмиллиона транзисторов вместо одного.


      1. n12eq3
        05.07.2018 11:19

        для конечного пользователя это бесплатно. количество транзисторов не имеет никакого значения вообще, имеет значение количество корпусов и/или сложность использования. и для многих сфер применения сторонники (адепты) лепить всё на отдельных транзисторах или логике — пролетают прямо со свистом


      1. dephonica
        05.07.2018 12:15

        Это спорно, что корпусированный транзистор принципиально дешевле в производстве, чем микроконтроллер. Учитывая, что как минимум мощные транзисторы сейчас изготавливаются той-же фотолитографией, только с менее строгими нормами. Отличие в стоимости производства наверное ещё есть, но оно уже сейчас не слишком значительное, судя по розничным ценам на отдельные элементы.
        И в любом случае, всё движется к целиком программно-определяемым устройствам (в ближнем пределе — к нанороботам а-ля Лазаревич), хорошо это или плохо. Те-же гироскутеры и коптеры (особенно коптеры) — ещё один пример таких программно-определяемых устройств. Которые без софта представляют собой практически идентичные девайсы (схемотехнически), а софт определяет чем устройству быть — гироскутером или коптером.


        1. nafgne
          05.07.2018 16:19

          Что насчёт стоимости разработки микроконтроллера, написания/доработки средств разработки, отладки и прочих утилит, написания документации?


          1. dephonica
            05.07.2018 16:52

            В случае средств разработки, документации, утилит, прошивки — здесь всё как с любым информационным продуктом, затраты разработчик несёт только при создании первого экземпляра. Все последующие имеют нулевую себестоимость.


            1. nafgne
              05.07.2018 18:18

              То-то я и вижу, что все микросхемы существуют только в одной ревизии, а все средства разработки созданы в 1980 и больше не менялись, ога.


              1. dephonica
                05.07.2018 21:23

                Не очень понятно, с чем вы спорите. Микросхема здесь нерелевантна — она материальный продукт и каждая её копия стоит денег.
                А себестоимость миллиона копий windows 10 ровно такая же, как и одной единственной копии, без учёта погрешностей на цену гигабайта в хранилище данных.
                После того как продукт вышел в релиз, рост его себестоимости останавливается и не увеличивается независимо от числа сделанных копий. Багфиксы, сервиспаки — это отдельные услуги от производителя, которые или заложены в цену основного продукта или оплачиваются пользователем отдельно. Следующие версии и ревизии — это отдельные продукты, для которых действуют те-же самые законы ценообразования и которые почти всегда пользователь покупает заново.
                Вроде бы это очевидные вещи, с чем тут не соглашаться?


  1. bougakov
    05.07.2018 11:52