Kann ein 433/434 Mhz Empfänger mehrere Signale empfangen

Hallo, ich möchte mein Zimmer über einen Arduino und mehreren Empfängern und Sendern steuern.

Basis ist ein Arduino Mega 2560, an dem ein Sender und Empfänger angeschlossen sind. Dann soll es noch verschiedene Stationen geben, die auf einem Attiny 85 basieren. Diese haben dann noch entweder einen Sender oder einen Empfänger, kommt drauf an ob an dem Attiny ein Sensor oder ein Relais hängt.

Frage: Ist es möglich mit dem Empfänger, der am Arduino hängt, mehrere Nachrichten zu empfangen?

Andere Frage: Findet ihr den Fehler in dem Sketch? Ich verzweifle langsam daran.

#define LEDG 1
#define LEDR 3
#define RELAIS 0

void setup(){
  pinMode(LEDG, OUTPUT);
  pinMode(LEDR, OUTPUT);
  pinMode(RELAIS, OUTPUT);
}

void loop(){
  An();
  delay(2500);
  Aus();
  delay(2500);
}

public void An(){
 digitalWrite(LEDG, HIGH); 
 digitalWrite(LEDR, LOW);
 digitalWrite(RELAIS, HIGH);
}

public void Aus(){
 digitalWrite(LEDG, LOW); 
 digitalWrite(LEDR, HIGH);
 digitalWrite(RELAIS, LOW);
}

Fehlermeldung

Zeitschaltuhr:8: error: expected unqualified-id before 'public' Zeitschaltuhr:9: error: expected unqualified-id before 'public' Zeitschaltuhr.ino: In function 'void loop()': Zeitschaltuhr:12: error: 'An' was not declared in this scope Zeitschaltuhr:14: error: 'Aus' was not declared in this scope Zeitschaltuhr.ino: At global scope: Zeitschaltuhr:18: error: expected unqualified-id before 'public' Zeitschaltuhr:24: error: expected unqualified-id before 'public'

Lass einfach das Public weg. Dann geht es auch.

Wenn du sicherstellst das immer nur eine Nachricht gleichzeitig gesendet wird dann kann der Empfänger auch mehrere Signale empfangen.

Es gibt nur ein Problem wenn 2 Sender gleichzeitig eine Nachricht senden. Dann überlagern sich die Signale denke ich mal.

Danke. Jetzt kommt:

Zeitschaltuhr:11: error: expected unqualified-id before numeric constant Zeitschaltuhr:32: error: expected unqualified-id before numeric constant

Sicherstellen, dass sie nicht gleichzeitig senden wird schwer. Gibt es noch andere relativ günstige Möglichkeiten das zu lösen?

#define LEDG 1
#define LEDR 3
#define RELAIS 0

void setup(){
  pinMode(LEDG, OUTPUT);
  pinMode(LEDR, OUTPUT);
  pinMode(RELAIS, OUTPUT);
}

void loop(){
  An();
  delay(2500);
  Aus();
  delay(2500);
}

void An(){
 digitalWrite(LEDG, HIGH); 
 digitalWrite(LEDR, LOW);
 digitalWrite(RELAIS, HIGH);
}

void Aus(){
 digitalWrite(LEDG, LOW); 
 digitalWrite(LEDR, HIGH);
 digitalWrite(RELAIS, LOW);
}

So funktioniert es bei mir.

Das ist nicht alles von meinem Code. Hab die Lösung gefunden: eine konstante und eine Methode sollten nicht den gleichen Namen haben.

Noch irgendeine Idee, wegen dem Empfänger? Das einzige was mir einfällt: Der 1. Attiny sendet alle 5 Sekunden Der 2. Attiny sendet alle 6 Sekunden Der 3. Attiny sendet alle 7Sekunden Der 4. Attiny sendet alle 8 Sekunden ... Und wenn es keine eindeutige Antwort gibt wird sie ignoriert

MrSkuff: Frage: Ist es möglich mit dem Empfänger, der am Arduino hängt, mehrere Nachrichten zu empfangen?

Ja, die Sendungen dürfen sich nur nicht zeitlich überschneiden, sonst gibt es Wellensalat. Also es darf nur ein Sender zur Zeit auf derselben Frequenz senden, dann kann das Signal empfangen werden.

MrSkuff: Andere Frage: Findet ihr den Fehler in dem Sketch? Ich verzweifle langsam daran.

Lasse die beiden "public" weg, das sind Schlüsselworte für die objektorientierte C++-Programmierung und haben an der Stelle in Deinem Code nichts zu suchen!

Ok, Danke. Gibt es andere Möglichkeiten, bei denen es nichts ausmacht wenn mehrere Signale gleichzeitig ankommen?

MrSkuff: Gibt es andere Möglichkeiten, bei denen es nichts ausmacht wenn mehrere Signale gleichzeitig ankommen?

Wenn es Funk sein soll, dann könntest Du verschiedene Frequenzen für verschiedene Sender nehmen (433 oder 868 MHz oder 2,4 GHz) oder verschiedene Kanäle innerhalb eines Frequenzbandes, für alle Sender, die zeitgleich "on Air" sein sollen.

Du könntest auch verschiedene Sender zeitlich so miteinander synchronisieren, dass sie nie zeitgleich senden, z.B. verschiedene Sender untereinander mit Kabel verbinden, so dass sich diese darüber verständigen können, wer als erstes, zweites, drittes sendet.

Du könntest auch einfach die Kollisionen der Funkaussendungen auf Lücke setzen und dafür sorgen, dass diese möglichst gering werden. Nehmen wir z.B. Wettersensoren und du möchtest alle 3 Minuten eine Temperatur haben. Dann läßt Du z.B. einen Sender alle 175 Sekunden senden und den anderen alle 177 Sekunden. Und eine Kollision der Sendungen kann es dann nur alle 175*177 Sekunden = alle 30975 Sekunden geben, also gut zweimal am Tag stört sich die Funkaussendung solcher Sensoren bei einer Sendung.

MrSkuff: Ok, Danke. Gibt es andere Möglichkeiten, bei denen es nichts ausmacht wenn mehrere Signale gleichzeitig ankommen?

Mehrere Signale gleichzeitig hegt nicht. Kurz nacheinander schon. Am einfachsten (man muß sich um nichts kümmern) sind XBee-Module. Grüße Uwe

Wenn an den Attiny 85 Stationen noch ein Eingang frei ist, kann man diesen auch noch einen Empfänger spendieren. (die kosten doch fast nichts) Dann wäre die Möglichkeit gegeben dass jeder nur nach Aufforderung vom Mega 2560 sendet und es gibt keine Überschneidungen oder Kollisionen mehr.

oder sich mal aus China nRF24L01+ anschauen. 10 Stück 12€, Auto-ACK, CRC-Checksummed, Collision-Detection, 2,4 GHz, 120 Kanäle und eine inoffizielle Chinesische Version mit "Oma" ;)

Total geniale Chips/Module, hab die in meiner Haussteuerung drin. Die arbeiten Paket-basiert, Adressierung eingebaut, 32 Byte Payloads, maximal 5 Byte Adressen, 5 Empfangsadressen einfach herrlich :)

Viele Grüße, Tobias

Du könntest auch einfach die Kollisionen der Funkaussendungen auf Lücke setzen und dafür sorgen, dass diese möglichst gering werden. Nehmen wir z.B. Wettersensoren und du möchtest alle 3 Minuten eine Temperatur haben. Dann läßt Du z.B. einen Sender alle 175 Sekunden senden und den anderen alle 177 Sekunden. Und eine Kollision der Sendungen kann es dann nur alle 175*177 Sekunden = alle 30975 Sekunden geben, also gut zweimal am Tag stört sich die Funkaussendung solcher Sensoren bei einer Sendung.

Das ist was ich damit gemeint habe:

Der 1. Attiny sendet alle 5 Sekunden Der 2. Attiny sendet alle 6 Sekunden Der 3. Attiny sendet alle 7Sekunden Der 4. Attiny sendet alle 8 Sekunden

@die Idee mit überall einen Sender und empfänger ich glaube das das teilweise zu groß ist

aber ich steig jetzt auf den attiny84 und das 2,4Ghz modul um

Hallo,

also dem Vorschlag nRF24L01+ schließe ich mich absolut an. Die Teile sind eine feine Lösung. Man kann z.B. recht einfach vom "Master" aus der Reihe nach die "Clients" aktiv abfragen, bei Reichweitenproblemen eventuell sogar verketten (z.B. einen Client als eine art Repeater für einen anderen Client).

Welche ist eigentlich aktuell die vernünftigste (zu bevorzugte) Library ???

Christian

Eine Alternative wäre vielleicht auch noch ein RFM12B/RFM69 Transceiver, die ebenfalls in beide Richtungen funken können. Der RFM12B läuft auch mit 'nem Attiny84, beim RFM69 bin ich mir nicht sicher. Ich könnte mir auch vorstellen, dass man damit eventuell auch eine bessere Reichweite erreichen könnte im Vergleich zu 2,4 GHz, sofern das eine Rolle spielt. Hab jedoch keine Erfahrung mit den nRF24L01+.