Funkverbindung über 433MHz-RF-Modul mit Nano Every und Uno

Hallo Zusammen,

ich habe ein wirklich relativ unkompliziertes (zumindest für Euch) Projekt:

Ich habe auf der einen Seite einen 5 Ghz-Radarsensor, der Bewegung erkennen soll. Der ist angeschlossen an ein Arduino Nano Every. Außerdem habe ich hier ein RF-Modul (433 Mhz), da ich bei erkannter Bewegung gerne über Funk an ein Arduino Uno R3 übertragen möchte, sodass an diesem Gerät z.B. eine Leuchte angeht.
Ich habe für exakt dieses Projekt ein YouTube-Video gefunden. Der feine Herr im Video nutzt die RadioHead-Library, die nur leider offensichtlich nicht mit dem Nano Every kompatibel ist.

Also habe ich die Library TinyRF geladen und die Beispielcodes in meinen Code integriert. Das sieht dann so aus:

Transmitter:

#include "TinyRF_TX.h"

const int RadarPin = 5;
const int StatusLed = 6;
const int MotionLed = 7;

void setup() {
  setupTransmitter(); // transmitter default pin is pin #2. You can change it by editing Settings.h
  delay(2000);
  Serial.begin(115200);
  Serial1.begin(115200);
  pinMode(RadarPin, INPUT);
  pinMode(StatusLed, OUTPUT);
  pinMode(MotionLed, OUTPUT);

  byte command1[] = { 0x58, 0xd2, 0x02, 0x14, 0x00, 0x40, 0x01 }; //DELTA
  int command1Length = sizeof(command1);

  for (int i = 0; i < command1Length; i++) {
    Serial1.write(command1[i]);  // Befehl über Serial1 (HardwareSerial) senden
  }
  delay(1500);

  byte command2[] = { 0x58, 0x02, 0x01, 0x19, 0x74, 0x00 }; //DISTANZ
  int command2Length = sizeof(command2);

  for (int i = 0; i < command2Length; i++) {
    Serial1.write(command2[i]);  // Befehl über Serial1 (HardwareSerial) senden
  }
  delay(1500);

  byte command3[] = { 0x58, 0x04, 0x02, 0x01, 0x00, 0x5F, 0x00  };  //Leuchte 1s
  int command3Length = sizeof(command3);

  for (int i = 0; i < command3Length; i++) {
    Serial1.write(command3[i]);  // Befehl über Serial1 (HardwareSerial) senden
  }
  delay(1500);

  Serial.println("");
  Serial.println("Empfangene Werte in Hex:");

  while (Serial1.available()) {
    byte receivedByte = Serial1.read();
    Serial.print("0x");
    Serial.print(receivedByte, HEX);
    Serial.print(", ");
  }
  delay(200);
  digitalWrite(StatusLed, HIGH);
}

void loop() {
  int radar5Value = digitalRead(RadarPin);
  if (radar5Value == HIGH) {
    digitalWrite(MotionLed, HIGH);
    Serial.println("Bewegung erkannt - 5 GHz");

    const char* msg = "Bewegung erkannt";
    send((byte*)msg, strlen(msg));
    delayMicroseconds(TX_DELAY_MICROS);

  } else {
    digitalWrite(MotionLed, LOW);
  }

  delay(200);
}


Receiver:

#include "TinyRF_RX.h"

// the pin which will be connected to receiver module
// this pin has to support EXTERNAL interrupts
// on Arduino and similar boards this is pin 2 & 3
// on Digispark pro it's pin 3 & 9
// on ESP it's all GPIO pins except GPIO16, but using a pin that doesn't have an 
// alternate function such as pin 12-14 is recommended
uint8_t rxPin = 2;

void setup(){
  Serial.begin(115200);
  //make sure you call this in your setup
  setupReceiver(rxPin);
}

void loop(){

  const uint8_t bufSize = 30;
  byte buf[bufSize];
  uint8_t numLostMsgs = 0;
  uint8_t numRcvdBytes = 0;

  // number of received bytes will be put in numRcvdBytes
  // if sequence numbering is enabled the number of lost messages will be put in numLostMsgs
  // if you have disabled sequence numbering or don't need number of lost messages you can omit this argument
  uint8_t err = getReceivedData(buf, bufSize, numRcvdBytes, numLostMsgs);

  // the receiver has a circular FIFO buffer
  // if getReceivedData() isn't called frequently enough then older messages will get overwritten
  // so make sure the frequency at which you send messages in your tx code is slower than the frequency
  // at which you call getReceivedData() in your rx code to prevent that
  // specially when you are using sendMulti()
  // duplicate messages that are sent using sendMulti() will stay in the buffer until you read the first one
  // you can change the buffer size in settings.h

  if(err == TRF_ERR_NO_DATA){
    return;
  }

  if(err == TRF_ERR_BUFFER_OVERFLOW){
    Serial.println("Buffer too small for received data!");
    return;
  }

  if(err == TRF_ERR_CORRUPTED){
    Serial.println("Received corrupted data.");
    return;
  }

  // if sequence numbering is enabled and you use the sendMulti() function for sending a message
  // multiple times then getReceivedData() will return TRF_ERR_SUCCESS only once
  // all the duplicate messages will be automatically ignored
  // this means all you need to do is check if the return code is TRF_ERR_SUCCESS
  // these are non-repeated, crc-valid messages
  if(err == TRF_ERR_SUCCESS){
    Serial.print("Received: ");
    for(int i=0; i<numRcvdBytes; i++){
      Serial.print((char)buf[i]);
    }
    Serial.println("");

    if(numLostMsgs>0){
      Serial.print(numLostMsgs);
      Serial.println(" messages were lost before this message.");
    }
  }
  
}

Hier ist noch der Link zum RF-Modul (Transmitter und Receiver)

Nun komme ich zum Problem:

Ich habe die Module jeweils mit GND und +5V verbunden und den Data-Pin auf D2 gelegt (auf beiden Boards).

Die LED am Sender/Radarsensor leuchtet bei Bewegung korrekt auf, im Seriellen Monitor wird mir "Bewegung erkannt - 5 GHz" angezeigt. Jedoch bekomme ich keine Ausgabe im Seriellen Monitor des Arduino Uno.

Habe ich etwas übersehen? Ich hoffe ihr könnt mir helfen. Erstmal Danke für's Lesen.
Und berücksichtigt bei Euren Antworten bitte, dass ich absolute Nulpe auf dem Gebiet hier bin.

Viele Grüße

Hallo,
wie kommst du auf dieses Ergebnis:

RadioHead ist schon sehr flexibel und funktioniert auch auf den ESP8266.
OK, ich habe keinen Nano Every, daher kann ich deine Vermutung nicht widerlegen.
Und warum unbedingt den Nano Every ?

Hast du denn mit der aktuellen Library unabhängig vom Radarsensor schon eine Funkverbindung zum Laufen bekommen ? Das solltest du unbedingt vorher mal machen.

Zudem sind die von die verwendeten Funk-Module nicht sehr funktionssicher. Zumindest ist der Empfänger aus vielen Gründen Müll und vom Stand der Technik von 1927. Also nicht mehr zu empfehlen.
Setze besser die Module HC-12 ein, die funktionieren sicher und stabil auf beiden Controllern.

Meistens wird vergessen Antennen dranlöten sind welsche drauf ?

Selbst ohne Antennen kann es unter guten Voraussetzungen funktionieren.
Deswegen wäre ein Test ohne den nicht zugelassenen Radarsensor angesagt.

Hallo,

Der Nano Every basiert auf dem ATMega4809, und der ist laut diverser Foren nicht kompatibel zu RadioHead.

Den Nano Every habe ich für den Radarsensor besorgt, da der möglichst klein sein soll und die Sache mit dem Funk erst im Nachhinein dazukam.

Das habe ich versucht, bin jedoch bereits dabei gescheitert.

Ok, interessanter Einwand. Habe ehrlicherweise einfach auf Amazon nach Funk und Arduino gesucht und das erstbeste Ergebnis genommen von einem Hersteller, dessen Namen ich nicht aussprechen konnte :sweat_smile:

Danke für die Antwort schonmal! Ich vermute ich besorge einfach mal die von dir vorgeschlagenen Module, da ich mich mehr oder weniger auf die Geräte verlassen können muss.

Antennen sind bereits drauf gewesen!

Inwiefern nicht zugelassen?

Ein Link zu den Aussagen wäre doch sehr hilfreich.

Und hier hätte ein Sketch auch Informationen liefern können.

Das solltest du machen. Zumindest wird es damit sicher funktionieren.

Was genau heißt das ?
Auf der Platine selbst sind keine Antennen. Die musst du eigenständig anlöten.

Da die 5 GHz nicht für freien Nutzung zugelassen ist.
Hier findest du weitere Informationen.
Sorry....
Grad nochmal selbst gelesen.
Da hat sich offensichtlich etwas in der Zulassung geändert.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.