Hallo
Es geht bei mir wieder um ein Escape-Projekt.
Ich habe ein 433 HMz Funkmodul gekauft und möchte in meinem Projekt mit dem Druck auf einem Wiegebalken (Senderseite) einen Servomotor (Empfängerseite) bewegen, der dann eine Kiste entriegeln soll.
Jetzt stoße ich aber schon sehr schnell an meine Anfänger-Grenzen! Ich bekomme einfach kein Signal vom Sender zum Empfänger. Nach langem ausprobieren, dachte ich ich fange mal bei Null an und mache das einfachste vom einfachen und übermittle nur ein Signal aus dem Tutorial:
https://funduino.de/nr-03-433mhz-funkverbindung
Aber selbst das klappt bei mir nicht.
Ich arbeite mit 2 Arduino Nano Every. Ich habe die Verkabelung so vorgenommen wie beschrieben. (Ich habe bis jetzt nur den ersten Teil Probiert ohne irgendwas anderes anzuschließen)
Es wäre super, wenn ihr mir helfen könntet.
Ich schicke euch hier jetzt auch mal mein EIGENTLICHES Projekt rein, vielleicht findet ihr dort auch schon Fehler.
Projekt: Bild mit Druckschalter und öffnen einer sich automatisch entriegelnden Schatulle.
Sketch für den Druckschalter:
#include <RCSwitch.h> //Bibliothek für das Funkmodul 868MHz oder 433MHz
RCSwitch mySwitch = RCSwitch(); //Das Funkmodul wird ab jetzt mit "mySwitch" angesprochen
#include <HX711.h> //Bibliothek für den Waagesensor HX711
//HX711.DT an Pin A1
//HX711.SCK an Pin A0
HX711 scale;
int Code = 1234; //Hier den zu sendenden Code eingeben
int val;
int Toleranz = 300; //Hier erforderlichen Druck auf den Schalter eingeben (ohne Druck = 0, leichtes Antippen = 50, normal drücken = 200)
void setup()
{
mySwitch.enableTransmit(3); // Der Sender wird an Pin 3 angeschlossen
Serial.begin(9600);
scale.begin(A1, A0); //HX711.DT an Pin A1, HX711.SCK an Pin A0
scale.set_scale(320.f);
scale.tare();
Serial.print("read: \t\t");
Serial.println(scale.read()); //gibt eine einzelne Messung auf dem seriellen Monitor aus
Serial.print("read average: \t\t");
Serial.println(scale.read_average(15)); //gibt den Durchschnitt von 15 Messungen aus
Serial.print("get units: \t\t");
Serial.println(scale.get_units(5), 1); //gibt den Durchschnitt von 5 Messungen aus minus Tara, geteilt durch den scale-Wert
}
void loop()
{
val = scale.get_units(3); //gibt den Durchschnitt von 3 Messungen in die Variable val aus
delay(200);
Serial.println(val);
if(val > Toleranz)
{
mySwitch.send(Code, 24); //Das Funkmodul sendet den Code drei Mal
delay(10);
mySwitch.send(Code, 24);
delay(10);
mySwitch.send(Code, 24);
delay(10);
Serial.print(Code);
}
}
Sketch für den Servomotor:
#include <RCSwitch.h> //Bibliothek für das Funkmodul 868MHz oder 433MHz
RCSwitch mySwitch = RCSwitch(); //Das Funkmodul wird ab jetzt mit "mySwitch" angesprochen
#include <Servo.h> //Bibliothek zur Servoansteuerung
Servo myservo; //Das Servo wird ab jetzt mit "myservo" angesprochen
//Funkmodul-Empfänger an D2 anschließen
//Servo an D9 anschließen
int code = 1234; //Hier den über das Funkmodul erwarteten Code eintragen
const int RelaisPin = 7; //Relais an D7 anschließen (Low-Trigger; bei HIGH-Trigger-Relais müssen die Befehle HIGH und LOW vertauscht werden)
int Winkel1 = 50; //Hier Öffnewinkel des Servo eintragen
int Winkel2 = 150; //Hier Schließwinkel des Servo eintragen
void setup()
{
Serial.begin(9600);
mySwitch.enableReceive(0); //Empfänger ist an Interrupt-Pin "0" - Das ist am UNO oder NANO der Pin2
pinMode(RelaisPin, OUTPUT);
myservo.attach(9); //verbindet das Servo mit Pin D9
digitalWrite(RelaisPin, LOW); //schaltet das Relais ein - Das angeschlossene Relais ist low trigger!
myservo.write(Winkel1); //öffnet den Riegel
delay(8000); //8 Sekunden Zeit nach Einlegen der Batterie, den Deckel zu schließen
myservo.write(Winkel2); //Servo schließt
delay(1500);
digitalWrite(RelaisPin, HIGH); //schaltet das Relais aus
delay(1500);
}
void loop()
{
if (mySwitch.available()); //Wenn ein Code empfangen wird...
{
int value = mySwitch.getReceivedValue(); //...werden die empfangenen Daten unter "value" gespeichert
Serial.println(value); //Befehl zur Ausgabe des Codes im seriellen Monitor
if (value == code) //Wenn der Code mit dem unter "code" eingestellen identisch ist
{
digitalWrite(RelaisPin, LOW); //Das Relais schaltet das Servo ein
delay(1500);
myservo.write(Winkel1); //Servo öffnet
delay(10000); //Der Riegel ist 10sek. lang offen
myservo.write(Winkel2); //Servo schließt
delay(500);
digitalWrite(RelaisPin, HIGH); //Das Relais schaltet das Servo aus
mySwitch.resetAvailable(); //setzt den Empfänger zurück
}
delay(5000);
}
}
Zur Info: Ich habe es geschafft, dass im Serial Monitor für den Druckschalter immer der Code 1234 gesendet wurde. Aber auf der Empfängerseite hat er im Serial Monitor immer nur 0 angezeigt. Also hat er zwar auf Daten gewartet, aber keine empfangen.
Da ich das prüfen wollte habe ich alles wieder abgebaut, und nur die Sender und Empfänger angeschlossen (Wie oben bereits erklärt). Und wenn ich schon daran scheitere... ![]()
Also bitte ich euch um eure freundliche Hilfe. Ich habe schon viel auf verschiedenen Seiten gesucht, kann aber kein Englisch und bin somit auf deutsche Seiten angewiesen...und diesmal irgendwie nicht wirklich weitergekommen. Bitte verzeiht es mir.
Über eure Antworten würde ich mich freuen. Ich habe hier schon sehr viel Hilfe erfahren und konnte mit eurem wissen ein anderes Projekt erfolgreich beenden. Daher hier noch mal ein herzliches Danke an dieser Stelle.
Ich hoffe es ist alles verständlich erklärt.
Vielen Dank schon mal.

