Arduino не принимает данные радиоприемника на 433 мгц

Тема в разделе "Arduino & Shields", создана пользователем Johnny_Luger, 27 фев 2021.

  1. Johnny_Luger

    Johnny_Luger Нуб

    Всем доброго времени суток.

    Который день не могу решить проблему, поэтому прошу помощи.

    Пытаюсь наладить радиосвязь между двумя ардуинами с помощью приемника и передатчика на 433 Мгц. Использую библиотеку RCSwitch.

    Код передатчика (Arduino UNO):
    Код (C++):

    #include <RCSwitch.h>
    RCSwitch mySwitch = RCSwitch();

    void setup() {
      Serial.begin(9600);
     
      // Transmitter is connected to Arduino Pin #3
      mySwitch.enableTransmit(3);
    }

    void loop() {
      mySwitch.send(B1000, 4);
      delay(1000);
    }
    Код передатчика (Iskra Nano Pro):
    Код (C++):
    #include <RCSwitch.h>

    RCSwitch mySwitch = RCSwitch();

    void setup() {
      Serial.begin(9600);
      mySwitch.enableReceive(0);  // Receiver on interrupt 0 => that is pin #2
    }

    void loop() {
      Serial.println((analogRead(A5) * 5.0) / 1024.0);
      if (mySwitch.available()) {

        Serial.print("Received ");
        Serial.print( mySwitch.getReceivedValue() );
        Serial.print(" / ");
        Serial.print( mySwitch.getReceivedBitlength() );
        Serial.print("bit ");
        Serial.print("Protocol: ");
        Serial.println( mySwitch.getReceivedProtocol() );
       
        mySwitch.resetAvailable();
      }
    }
    Однако метод mySwitch.available() все время возвращает false.

    Припаивал антенну - не помогло.
    Обеспечивал отдельное стабилизированное питание для приемника/передатчика - не помогло.
    Использовал другие библиотеки - не помогло.

    Передатчик MX-FS-03V, приемник MX-05V.

    Все выводы подключены правильно. Приемник на выводе #2.

    Для проверки перекинул выход приемника на аналоговый вход ардуины. На осциллограмме видно, что какие-то данные приходят.
    [​IMG]

    В чем проблема, куда копать? Заранее спасибо за помощь.
     
  2. parovoZZ

    parovoZZ Гуру

    в сторону мусорки. Это говно заменить на HC-12.
     
  3. Johnny_Luger

    Johnny_Luger Нуб

    Допустим, говно, но с банальной задачей "принять-получить данные" оно же должно справляться, разве нет?
     
  4. parovoZZ

    parovoZZ Гуру

    В аппаратных решениях для радиорелейки обязательно в пакете обмена присутствует преамбула. Преамбула - это просто меандр какой-то длины, по которой приёмник подстроит свою частоту. Такое решение позволяет увеличить селективность, а за счёт более высокой селективности, можно увеличить чувствительность. Всё это приводит к более высокой стабильности радиообмена.
    Если необходимо решение, которое работает сразу - то HC-12 маст хэв.
     
    issaom нравится это.
  5. issaom

    issaom Гуру

    Судя по количеству "восторженных" отзывов в сети - эта хрень вообще мало у кого работает. Это из разряда купил - включил - выкинул. Поэтому совсем не факт, что справится с банальной задачей....HC-12 маст хэв!
     
  6. Johnny_Luger

    Johnny_Luger Нуб

    Понял, спасибо за ответы. Может, тогда подскажите насчет конкретной реализации?

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

    Голый HC-12 использовать не получится, тк он использует UART...
     
  7. parovoZZ

    parovoZZ Гуру

    И будет оно реагировать на всё. Сосед ставит тачку на сигналку, соседский сын играет в радиомашинку...на всё будет реакция.
     
  8. Рокки1945

    Рокки1945 Гуру

    А почему не JDY-40 - там и контроллера не надо ....
     
  9. Ariadna-on-Line

    Ariadna-on-Line Гуру

    Тестировал подключением к "виртуальному ком-порту" компа (USB-TTL конвертор). Как радио-удлиннитель. Вполне нормально работало. Где-то в форуме выкладывал. Приемник - сверхрегенератор. Не зря паровоз про преамбулу говорит - Приемнику нужно время для входа в рабочий режим после простоя (Тпр > 1 сек). Т.е. если передатчик выключался дольше чем на 1 сек. - он должен включиться, а полезные данные передавать не сразу. Не парьте мозги с библиотеками - просто подключите к сериалам, и обычными serial.print(), serial.read() - вперед на мины. Вместо преамбулы - просто повторение команды раза три. Сами заметите, что первые две передачи приемник примет с ошибками. А,да битрейт больше чем 9600 не включайте. Поскольку помех в эфире дофига, без парсинга строки не обойдетесь.
    ПС. Как всегда может случится заморок с исходным уровнем. Передатчику исходный уровень - ноль. А какой исходный уровень сериала Ардуины - ХЗ не помню. Так что serial.begin(2400, ???) надо экспериментировать.
     
    Последнее редактирование: 5 мар 2021
  10. Johnny_Luger

    Johnny_Luger Нуб

    Период уменьшать пробовал - не помогло.
    Пробовал через digitalWrite() посылать данные - результат примерно тот же.
    К сериалу еще не подключал, но если больше ничего не получится, то рискну.

    А вообще понравился вариант с использованием JDY-40. Судя по описанию - как раз то, что нужно. Жаль, что найти удалось только на алике. Интересно, есть ли что-то аналогичное и более доступное...
     
  11. Ariadna-on-Line

    Ariadna-on-Line Гуру

    1/ Ставить JDY-40 - это примерно как реактивный двигатель на телегу.
    2/ getReceivedValue() - значит что библа организует буфер входных данных, из которых по вашему запросу берет уже полученные данные. Вероятно или вы не совсем знаете принцип работы библиотеки, и чего-то там недописали в скетче, или она почти повторяет работу обычного сериала.
     
    Последнее редактирование: 5 мар 2021
  12. Johnny_Luger

    Johnny_Luger Нуб

    Скетчи почти один в один взяты из примеров в папке с библиотекой RCSwitch, так что тут ошибка исключена.

    Пробовал передавать через сериал - результат тот же.

    Простейшая задача - зажечь светодиод с выхода приемника. И не получается реализовать. Уже не знаю, что еще попробовать...
     
  13. Ariadna-on-Line

    Ariadna-on-Line Гуру