433 MHz Funkmodul in Verbindung mit einem HX711 Wiegebalken

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... :pensive:

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.

Wenn du mit 3m Reichweite auskommst, ist das ok.
Andernfalls besorge dir einen besseren Empfänger. Z.B. einen RXB6 oder RXB8.

Und versuche erst die Funkstrecke zum laufen zu bringen.
Danach kannst du den Rest einbinden.

Ergänzung:
Baue die Funkstrecke nach den Beispielen in der Library "RCSwitch" auf. Wenn alles richtig angeschlossen ist, funktioniert das auch.
Und vergiss nicht die Antennen anzuschließen.
Wozu ist das Relais am Servo ?
Das kanst du dir sparen.
Und am Spannungsregler 7805 fehlen Kondensatoren. Beidseitig 100nF keramisch und Elkos am Eingang min. 100yF, am Ausgang 22yF.

Zur Stromsparen?

Ähh...ach das Relais braucht ja keinen Strom. :wink:
Naja, ok. Muss man mal nachmessen und rechnen, was das spart.

Ich würde da lieber einen Mosfet nehmen.

Wenn man es richtig beschaltet (NO Kontakt verwendet) ist es aus wenn der Servo Stromlos ist.

Für Selbstlöter sicher. Wer mit Modulen arbeitet ist das eine Lösung da Mosfetmodult (meist) keinen LLMOSFET haben.

Grüße Uwe

Deswegen ja auch der Hinweis mit ausmessen und rechnen.
Aber ok, wenns dann sein muss, ein Relais.

Genau...der gezeigte Aufbau geht allerdings nicht ohne selbst löten.
Es sei denn, es kommt alles bastelmäßig auf ein Steckbrett. :rage:

Und wenn du mit deinen bzw. dem vorgeschlagenen Funkmodulen nicht klar kommst, dann denke mal über bessere nach. Z.B. den HC-12, die sind Qualitativ sehr gut, müssen aber anders angesteuert werden.

Hallo

Ich habe versucht nach dem ganz simplen Beispiel von der Library eine Funkstrecke aufzubauen. und auch nur die Beispielsketche von den SendDemo und der ReceiveDemo-Simple aufzuspielen. Es lässt sich bei mir aber nicht Hochladen.

Auf beiden Nano Every´s schreibt er: avrdude: jtagmkII_getsync(): sign-on command: status -1

Was genau bedeutet das? Die beiden (Sender und Empfänger) liegen nebeneinander...also haben die noch gar keine Entfernung zu überwinden.(Deshalb hab ich noch keine Antenne angelötet) Ich wollte erst einmal überhaupt eine funktionierende Signalübertragung hinbekommen...was bis jetzt ja leider nicht klappt. :pensive:

Das Relais dient der Abschaltung des Servos. Servos haben nämlich die unangenehme Eigenschaft, gelegentlich zu „zittern“ und dabei Knackgeräusche von sich zu geben. ... so stand es in der Anleitung und deshalb habe ich es verbaut.

Ok sorry, das mit dem Nano Every habe ich überlesen. Meine Orientierung war die Schaltung, in der Nano steht.
Der Nano Every hat einen anderen Controller, als der "normale" Nano und braucht daher eine angepasste Library. Da bin ich überfragt, ob es die gibt.

Dennoch ist ein Problem, wenn der Sender zu dicht an deinem Empfänger liegt. Da macht der Empfänger probleme. Das ist eine Uralttechnik die kräftigere Signale nicht verträgt. Ebenso Störungen von anderen elektronischen Geräten. Ein PC oder Monitor macht auch da Probleme.
Das hat aber nicht mit dem hochladen zu tun.
Da hängt es am Every.
Hier findest du Informationen, wie es mit dem Every auch funktionieren soll.

Und das mit dem Relais war mir jetzt klar. Da würde ich einen Mosfet Transistor nehmen, der braucht keinen eigenen Strom.

Ok Das bedeutet also ich besorge mir ein UNO oder normales Nano und dann gucke ich weiter?

Ich habe gelesen, dass der Every auch auf PIN2 (D2) in Interrupt PIN 0 hat. deshalb ging ich davon aus es würde auch damit gehen. Es ist auch auf ATMEGA328 eingestellt. Daher habe ich auf dieser Seite keine Probleme vermutet.

vielen Dank schon mal an dieser Stelle für die schnelle und nette Hilfe!

Das habe ich jetzt übrigens hinbekommen, aber da passiert im Serial Monitor auf beiden Seiten einfach nichts.

Ich habe meine Beitrag noch erweitert.

mySwitch.enableReceive(digitalPinToInterrupt(2))
Das ist wichtig.

1 Like

OH SUPER !!!

Danke!!! Ich empfange was :slight_smile:

Vielen Vielen Dank!

Dann guck ich die Tage mal ob ich den Rest auch noch hinbekomme. Vielen Dank für den wirklich wichtigen entscheidenden Hinweis!

Alles klar, gerne.
Und wenn damit dein Problem gelöst ist kannst du den entsprechenden Post auch als gelöst anhaken.

Ja das mach ich wenn ich alles verkabelt habe und es dann funktioniert auf jeden Fall. :wink:

EDIT:

Vielen vielen Dank! Alles klappt so wie ich wollte.

Da kann man noch so lange selber suchen...auf diesen Hinweis wäre ich nie alleine gekommen! Also noch mal vielen Dank an die tolle und nette Hilfe. Auch an die Hinweise bezüglich anderer Bauteile (Das werde ich mir für Zukünftige Projekte bestimmt behalten).

Danke für alle Tips und die Hilfe!

Danke, das ist auch ok.

Ok, gerne.
Und für die Problemsuche in Google nur die richtigen Begriffe eingeben.
Hier z.B. "Nano Every RCSwitch".

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