Приём-передача 433 МГц

FefeXX
Offline
Зарегистрирован: 29.11.2019

Доброго времени суток!

Создаю небольшой приборчик, отображающий температуру в удалённом месте (расстояние 8 метров, провод не пустить).

В прототипе всё работает:

Передатчик + приемник XY-MK-5V 433Mhz.

Передатчик подключён к Digispark (плюс на Digispark висит датчик DS20B18).

Датчик температуры висит на D2, передатчик радиосигнала на D4.

Код:

#include <OneWire.h>
#include <DS18B20.h>
#include <RCSwitch.h>

#define ONE_WIRE_BUS 2

OneWire oneWire(ONE_WIRE_BUS);
DS18B20 sensor(&oneWire);
RCSwitch mySwitch = RCSwitch();

void setup() {
  sensor.begin();
  //pinMode(1, OUTPUT);
  mySwitch.enableTransmit(4);
}

int tC;
void loop() {
  sensor.requestTemperatures();
  while (!sensor.isConversionComplete());  
  tC = sensor.getTempC();

  mySwitch.send(tC, 24);
  delay(1000);
}

Приёмник подключён к Arduino UNO, к D2 (прерывание 0). Тут тоже всё просто, код из примера:

#include <RCSwitch.h>

RCSwitch mySwitch = RCSwitch();

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

void loop() {
  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();
  }
}

Данные приходят!

Received 8 / 24bit Protocol: 1
Received 8 / 24bit Protocol: 1
Received 8 / 24bit Protocol: 1
Received 8 / 24bit Protocol: 1
Received 8 / 24bit Protocol: 1
Received 8 / 24bit Protocol: 1
Received 8 / 24bit Protocol: 1

Теперь пытаюсь привести модуль приёма в компактный вид:

Подключаю приёмник 433 МГц к Arduino Pro mini (5V, atmega168, 16 МГц) - не работает.

Подключаю приёмник 433 МГц к Arduino Pro mini (5V, atmega328, 16 МГц) - не работает.

Подключаю приёмник 433 МГц к Arduino Nano (5V, atmega328, 16 МГц) - не работает.

Однако если выводить digitalRead(2) в монитор порта - скачут "нолики и единички" - т.е. что-то на D2 таки приходит.

Код тот же. Подключение пинов - тоже.

Припаивал антенну к приёмнику - не влияет на результат (на передатчике она есть).

 

Уже вторые сутки мучаюсь, очень много гуглил - результата нет.

Пожалуйста, выручайте ))

FefeXX
Offline
Зарегистрирован: 29.11.2019

Для проверки добавил функцию attachInterrupt().

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

void loop() {
 // 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();
  //}
}

void LaJopa() {
  //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();
 // }
}

Соответственно контроллер видит, что на D2 есть изменения HIGH/LOW, т.к. выполняется функция LaWopa. Однако протокол не распознаётся (как я понимаю):

Received 0 / 0bit Protocol: 0
Received 0 / 0bit Protocol: 0
Received 0 / 0bit Protocol: 0
Received 0 / 0bit Protocol: 0
Received 0 / 0bit Protocol: 0
Received 0 / 0bit Protocol: 0
Received 0 / 0bit Protocol: 0
Received 0 / 0bit Protocol: 0
 
Соответственно от чего условие if (mySwitch.available()) {...} может не выполняься?
wdrakula
wdrakula аватар
Offline
Зарегистрирован: 15.03.2016

в передатчик напряжение повыше, до 12 Вольт, антенны в оба устройства 300000/433/4=173 мм. И все эти советы есть в сети, если не йух сосать, а гуглем пользоваться.

И да, я лично это проверял. И да у меня в столе есть пара таких модулей и я смогу снять пруф-видео, что так - работает.

Ленивые новички уже порядком задолбали!!!

Logik
Offline
Зарегистрирован: 05.08.2014

//плюс на Digispark висит датчик DS20B18

А либка для ds18b20. Нужно что-то менять.

Вы похоже решили что если две либки по отдельности работают, то и вместе будут.

Попринимайте чего от наивности, таблетки какие попить или травку для ингаляции ;)

FefeXX
Offline
Зарегистрирован: 29.11.2019

wdrakula пишет:

в передатчик напряжение повыше, до 12 Вольт, антенны в оба устройства 300000/433/4=173 мм. И все эти советы есть в сети, если не йух сосать, а гуглем пользоваться.

И да, я лично это проверял. И да у меня в столе есть пара таких модулей и я смогу снять пруф-видео, что так - работает.

Ленивые новички уже порядком задолбали!!!

Антенны есть. 12 вольт попробую. Хорошо. Отчего тогда на 5 вольтах на Uno всё отлично работает?

 

Logik пишет:

//плюс на Digispark висит датчик DS20B18

А либка для ds18b20. Нужно что-то менять.

Вы похоже решили что если две либки по отдельности работают, то и вместе будут.

Попринимайте чего от наивности, таблетки какие попить или травку для ингаляции ;)

 

Причём тут "либка" для ds18b20??? Написал же:

"Датчик температуры висит на D2, передатчик радиосигнала на D4.

Приёмник подключён к Arduino UNO, к D2 (прерывание 0).

Данные приходят!"

1 Received 8 / 24bit Protocol: 1
2 Received 8 / 24bit Protocol: 1
3 Received 8 / 24bit Protocol: 1
4 Received 8 / 24bit Protocol: 1
5 Received 8 / 24bit Protocol: 1
6 Received 8 / 24bit Protocol: 1
7 Received 8 / 24bit Protocol: 1

 - с датчиком в связке с передатчиком всё нормально. Тут проблемы нету.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Вы сюда поспорить пришли?

FefeXX пишет:
Отчего тогда на 5 вольтах на Uno всё отлично работает?

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