Hochstartwinde: Funkgesteuert

Hallo Rolf

Ich habe mich ja noch nicht viel mit ESP32LoRa beschäftigt, da ich erst meine Testwinde mit der aktiven Seilführung fertig machen möchte.
Ich meine aber zu wissen, das auf 868 Mhz / 433 Mhz nur 1% Einschaltdauer zulässig ist. Kannst du das bestätigen?
Hast du deiner Nachbarin eigentlich gebeichtet, das du der Verursacher für ihre Funkprobleme warst? Durch deine Erfahrung können wir zum Glück ähnliche Probleme vermeiden. …..Danke dafür.

Kannst du mir Vor.- oder Nachteile benennen die für oder gegen 868 Mhz bzw. 433 Mhz sprechen?

Gruß Peter
 

S_a_S

User
Peter,
das sollte der Allgemeinzuteilung für SRDs zu entnehmen sein. 433MHz hat da zumindest keine Beschränkung bei 10mW Sendeleistung.
Vermutlich kann die Library auch mit hierzulande nicht erlaubten Parameter benutzt werden.

Grüße Stefan
 

RolfK

User
Hallo Peter,
unsrer Nachbarin wußte, daß ich mich mit Elektronik Entwicklung beschäftige und hatte mich direkt in Verdacht. Sie hat das Ganze aber mit Humor aufgenommen.
Frage zum Duty Cycle:
In Europa wird die Einschaltdauer durch Abschnitt 4.3.3 der Norm ETSI EN300.220-2 V3.2.1 (2018-06) geregelt. Diese Norm definiert die folgenden Unterbänder und ihre Arbeitszyklen:
K (863 MHz - 865 MHz): 0.1%
L (865 MHz - 868 MHz): 1%
M (868 MHz - 868,6 MHz): 1%
N (868,7 MHz - 869,2 MHz): 0.1%
P (869,4 MHz - 869,65 MHz): 10%
Q (869,7 MHz - 870 MHz): 1%
das wären pro Tag: 24 Stunden x 60 Minuten * 1 % = 14,4 Minuten die wir mit einem LoRa-WAN-Node senden dürften!
Das bezieht sich jedoch auf ein LoRa WAN, wir senden jedoch nur per to per.
https://www.thethingsnetwork.org/forum/t/fair-use-policy-explained/1300
Wir sollten uns trotzdem fair verhalten und auf keinen Fall Garagentore blockieren.
Ich sende vom Client nur kurze Start uns Stop Befehle, dies ist vernachlässigbar.
Nach dem Start der Windensteuerung fragt der Client allerdings jede Sekunde den Status der Windensteuerung ab. Der Server antwortet mit folgendem Datensatz:
  • Status“ RX = Motor läuft, SX = Motor steht
    X enthält folgende Werte:
    S = Seilriss bzw. ausgeklinkt
    N = Notaus
    H = Seilspannung zu hoch
    space = default
  • Spannung
  • Strom,
  • Temperatur
  • Seilspannung
alle Werte durch Komma getrennt.
Beispiel: „R “,25,45,35,120
Zusätzlich zur o.g. Payload werden noch folgende Informationen übertragen:
  • destination address
  • sender address
  • message ID
  • payload length
so dass ca. 20 Zeichen übertragen werden. Die sogenannte Airtime beträgt bei einem Spreading Faktor von SF7 ca. 70 Msec. Bei einem Startvorgang vom maximal 18 Sekunden soll jede Sekunde eine Statusmeldung erfolgen. Die Airtime beträgt dann 1,2 Sekunden pro Startvorgang. Der Duty Cycle beträgt damit bei einem Startvorgang maximal 7%. Na ja, ist etwas zu hoch aber nur für 18 Sekunden.

LoRa Library
Die Windensteuerung – der Server- darf natürlich nicht während des Sendens der Statusmeldung 70 Msec blockiert werde. Die Library „LoRa.h“ https://github.com/sandeepmistry/arduino-LoRa wickelt den Sendevorgang auf Treiber Ebene ab, so das die Windensteuerung nicht blockiert wird.

Die Library unterstützt auch euren ESP 32 LoRa:

Viele Grüße

Rolf


Als Anlage füge ich das Kapitel LoRa aus meiner Doku als Anhang ein.
 

Anhänge

  • Erweiterung mit LoRa.pdf
    426,6 KB · Aufrufe: 35
Hallo Rolf,
Ihr macht euch da ja echt mega viele Gedanken und Arbeit, sogar mit Doku. Dauersenden ist sicherlich nicht gut; das mache ich auch nicht. Allerdings hatte ich jetzt nicht daran gedacht, wie lange ich tatsächlich im Schnitt Sende.

Ich nutze die heltec.h Library, in der annähernd alle Funktionen enthalten sind, die ich für mein LoRa-Modul brauche. Auf was sie basiert, weiß ich jedoch nicht. Mein Aufbau sieht momentan wie folgt aus:

Es gibt eine Startstelle und eine Winde. Beim Starten des Systems wird LoRa initialisiert. Danach wird nichts mehr aktiv von meiner Seite gesendet. Was die Library im Hintergrund macht, weiß ich nicht.

Nachdem an der Startstelle alle Parameter eingestellt wurden, wird das Startmenü geöffnet. Hier stehen für den Start alle wichtigen Informationen. Gleichzeitig werden mit diesem Auswählen alle Daten als Integer zur Winde gesendet und von dieser bestätigt. Die Bestätigung erfolgt dadurch, dass die Winde vor jeden Integerwert eine 1 packt. So kann die Startstelle prüfen, ob die Werte korrekt übertragen wurden.

Nun warten beide Teilnehmer darauf, dass der Windenpilot das Fußpedal betätigt. Ab dem Moment wird, aktuell noch im 0,5-Sekunden-Abstand, der Startstelle mitgeteilt, dass gestartet wird. Die Winde antwortet darauf mit dem aktuellen Wert der Seilspannung. Ein Ausklingbefehl muss ich nicht senden, da ich den Seilwinkel messen werde. Somit weiß die Winde selbst, wann ausgeklingt wird. Beim Loslassen des Pedals wird noch viermal das Abbruchsignal gesendet.

Das ist der momentane Aufbau meines Codes. Jedoch ist das nur der Teil, den ich mir überlegt habe und der in der Startstelle implementiert ist. An der Winde sitze ich momentan dran und erarbeite hier den Code in Etappen.

Zu Beginn wollte ich alles mit Float-Werten machen. Im Code arbeite ich auch mit Float, jedoch war die Übertragung von Float nicht zuverlässig. Warum kann ich nicht sagen, habe ich nicht herausgefunden. Allerdings hatte ich dabei öfter fehlerhafte Werte oder nicht übertragene Werte. Strings wollte ich vermeiden, da sie aus meiner Sicht mehr Aufwand machen abzufragen als Floats.

Die Floats werden nun übrigens einfach mit 10 multipliziert und so dann als Integer übertragen.



"Intager und ihre Bedeutung:
Send:
0.00-20.00=Seilspannung
30.00=Ready Start
40.00=Start in Progress
50.00=Batterie Voltage Winde
60.00=Start schicke mir die Seilspannung
70.00= Abbruch"


Mit der genutzen Libary muss ich auch keine Adressen ect verwalten. Tatsächlich reicht es mit 2 Zeilen Code das LoRa zu initialisieren. Dort wird nur das Frequenzband angegeben und die Sendeleistung. Mehr nicht.
 
Hallo Programmierprofis

Mit Interesse verfolge ich eure Programmieransätze. Ich muss aber gestehen, das ich dem noch nicht so richtig folgen kann. Habe mich noch nicht viel mit ESP32LoRa beschäftigt. Welche Library, ob Float oder Integer, da habe ich mir noch keine Gedanken gemacht. Auch mit englischen Kommentaren kann ich wenig anfangen.
Mein Programmkonzept ist noch ganz am Anfang, wobei die Betriebssicherheit im Vordergrund steht.
Bei Störungen, welcher Art auch immer (Seilriss, Trommelblockade oder Funkstörungen), soll meine Winde sofort einen Start abbrechen und in Standby gehen.
Übertragene Datenmenge sollte so minimal wie möglich sein und die eigendliche Windensteuerug nicht beeinflussen.
Ich stelle mir das so vor:
Nur wenn gestartet werden soll (Fußschalter gedrückt) sendet der Fußschalter die vorgewählte Seilspannung in regelmäßigen Abständen (vielleicht 2x pro Sek.) , wofür ein Byte ausreichen sollte. Ist die Vorgabe „0“ oder wird nicht gesendet, dann geht die Winde in Standby.
Bei Startende sendet die Winde einmalig den Windenstatus und geht anschießend in Standby. Im Standbay reicht es wahrscheinlich wenn alle paar Minuten der Status aktualisiert wird.
Es sollte auch eine Art Bindung realisiert werden, damit die Winde nicht auf einen fremden Sender reagiert und umgekehrt. Die Datenübertragung sollte auch auf Plausibilität geprüft werden, oder macht das LoRa automatisch?

Gruß Peter
 
Hallo Peter,
Nur wenn gestartet werden soll (Fußschalter gedrückt) sendet der Fußschalter die vorgewählte Seilspannung in regelmäßigen Abständen
Das wäre eine Idee. Jedoch denke ich, dass bei dem Funksystem noch mehr Daten vor diesem Start ausgetauscht werden müssen, zum Beispiel, ob mit Schuss oder ohne, Akkuspannung der Winde usw. Ein regelmäßiges Senden des Status der Winde ist dann vorher auch nicht notwendig. Das heißt, es gibt bei mir keinen Datentransfer, solange ich an der Startstelle keinen Start beginne.
Es sollte auch eine Art Bindung realisiert werden, damit die Winde nicht auf einen fremden Sender reagiert und umgekehrt. Die Datenübertragung sollte auch auf Plausibilität geprüft werden, oder macht das LoRa automatisch?
Hier weiß ich nicht genau, wie die Bibliothek das bei mir macht. Jedoch hatte ich keine Probleme, das Ganze zu Hause oder auch draußen zu nutzen. Es kam also nie zu Störungen. Ich führe den Plausibilitätscheck durch, indem ich die Daten von der Startstelle zur Winde schicke und die Winde die Daten dann wieder zur Startstelle schickt. Diese Daten werden dann angezeigt, und ich führe persönlich den Check durch.

Während des Startvorgangs akzeptiert die Winde nur noch zwei Werte: 40.00 für 'Start in Progress' und 70.00 für 'Abbruch'.

Die Winde hat natürlich auch die Möglichkeit, den Start selbst abzubrechen, falls irgendwelche Parameter nicht stimmen.
 

RolfK

User
Hallo Peter, hallo Arne,

Ich habe bewußt eine Adressierung implementiert. Es wird zusätzlich zu den Nettodaten (Payload) die Sende- und Empfängeradresse und die Länge der Nachricht gesendet. Auf Empfängerseite wird die Nachricht nur angenommen, wenn die Daten plausibel sind. Damit stelle ich sicher, daß ich nicht auf Nachrichten von irgendwelchen andere LoRa Sendern reagiere.

Die Statusinformationen von der Windensteuerung (Server) an das Bedienteil (Client) - Spannung , Strom, Temperatur und Seilspannung - werden nur zur Anzeige in dem Display des Bedienteils gesendet. Über Umfang und Zyklus der Datenübertragung bin ich noch nicht entschieden.
Die eigentliche Steuerung erfolgt unabhängig davon in der Windensteuerung. Damit kann die Windensteuerung unabhängig vom LoRa auf alle Störungen reagieren.
Das heißt, Seilriß, Temperatur, Spannung und Strom werden auf Max bzw. Min Werte geprüft, wie in der Winde ohne Lora. Das Ausklinken wird ebenfalls anhand der Seilspannung erkannt. Aufgrund der Statusrückmeldung können die Daten der Steuerung auf dem Bedienteil visualisiert werden.
Die Statistikdaten konnten ohne LoRa direkt auf dem Display des Bedienteils graphisch angezeigt werden. Dies ist nicht mehr möglich, da die Statusmeldungen nicht oft genug gesendet werden. Allerdings werden Statistikdaten weiter auf der Windensteuerung auf SD Karte gespeichert.

Das Senden und Empfangen der Daten erfolgt nicht blockierend , das heißt die Steuerung der Winde wird nicht beeinträchtig.
Viele Grüße Rolf
 
Hallo Programmierprofis
Jedoch denke ich, dass bei dem Funksystem noch mehr Daten vor diesem Start ausgetauscht werden müssen, zum Beispiel, ob mit Schuss oder ohne, Akkuspannung der Winde usw.
In meinem Fall kann ich als Seilspannung 0,0/ 1,5/ 1,6/ 1,8/ 2,0/ 2,5/ 3,0/ 3,5/ 4,0/ 4,5/ 5,0/ 6,0/ 7.0/ 8,0/ 9,0/ 10.0/ 12,0/ 15,0 kg Seilspannung wählen. Das sind dann 18 Werte alle noch mal mit Schuss, dann sind es 36. Mit ein Byte lassen sich 256 Werte unterschidliche übertragen, da bleibt noch genügend Luft für eine Prüfzahl oder Ähnlichem.

Ich führe den Plausibilitätscheck durch, indem ich die Daten von der Startstelle zur Winde schicke und die Winde die Daten dann wieder zur Startstelle schickt. Diese Daten werden dann angezeigt, und ich führe persönlich den Check durch.
Während des Startens kannst du vermutlich nicht auf das Display schauen. Mir reicht es vermutlich am Startende den Status der Winde prüfen zu können.

Dies ist nicht mehr möglich, da die Statusmeldungen nicht oft genug gesendet werden.
Die Statusmeldung sollte dann aber bis zum nächsten Start angezeigt bleiben und aktualisiert werden.

Gruß Peter
 
Hallo zusammen,
Ich habe bewußt eine Adressierung implementiert.
Interessanter ansatz und gut zu wissen. Vielleich rüste ich das noch nach muss ich mal schauen.
Mal aus interesse wie machst du das außer der Adressierung?
Die eigentliche Steuerung erfolgt unabhängig davon in der Windensteuerung. Damit kann die Windensteuerung unabhängig vom LoRa auf alle Störungen reagieren.
So habe ich das auch vor umzusetzen.
Während des Startens kannst du vermutlich nicht auf das Display schauen. Mir reicht es vermutlich am Startende den Status der Winde prüfen zu können.
Ja, das stimmt. Hier habe ich mich wohl auch falsch ausgedrückt. Ich prüfe vor dem Start die übermittelten Werte mit dieser Technik. Später beim Start werden nur noch zwei LoRa-Befehle/empfangene Daten zugelassen. Das ist schon ein sehr großer Zufall, wenn ein anderes LoRa-Modul genau die gleichen Daten zur Winde sendet.

Gruß Arne
 
Hallo Programmierprofis
Das ist schon ein sehr großer Zufall, wenn ein anderes LoRa-Modul genau die gleichen Daten zur Winde sendet.
Das könnte bei mir schon eher zum Problem werden. In meinem Verein gibt es bereits drei meiner Winden. Vermutlich werden alle mit der aktiven Seilführung nachgerüstet. Wenn dann auch noch der Wunsch nach einer Funkverbindung aufkommt, könnte es eng werden. Wenn dann zwei Winden gleichzeitig in Betrieb sind, würde bei Betätigung eines Fußschalters zwei Winden gleichzeitig starten. Das muss ich durch die Software auf jeden Fall ausschließen. Fußschalter müssen bei mir eindeutig einer Winde zugeortnet werden. Das sollte jedoch kein Problem werden. Oder wie seht ihr das?

Gruß Peter
 
Ok, darüber habe ich noch gar nicht nachgedacht und gebe dir recht. Beim Betrieb von mehreren Winden ist das eventuell ein Problem. Ich weiß aber nicht, wie die Library arbeitet. Irgendwie muss diese ja den anderen Teilnehmer erreichen oder glaubt ihr, der Sender sendet einfach und alle Empfänger empfangen das Signal? Ich habe leider nur 2 Module und kann dies deswegen nicht testen. Ich lese mal etwas in der von mir verwendeten Library nach, vielleicht finde ich hier etwas.
 
Hallo Zusammen
Ich lese mal etwas in der von mir verwendeten Library nach, vielleicht finde ich hier etwas.
Hallo Arne, welche Library verwendest du denn und hast du schon neue Erkenntnisse.

Zur Zeit bin ich noch mit der letzten Winde beschäftigt, die noch mit dem Arduino Nano arbeiten soll. Danach geht es mit dem ESP32LoRa los. Muss dann erst noch die Restarbeiten an der neuen Mechanik erledigen und dann den ESP verdrahten. Das vorhandene Windenprogramm werde ich wohl an den ESP anpassen müssen. Sobald das erledigt ist, geht es ans Funken.

Ich denke, das ich während des Startens, vielleicht 2 mal pro Sekunde, die Kennung der Winde (Fertigungsnummer) und den gewünschten Seilzug sende.
Der Empfänger akzeptiert die Sendung nur, wenn die Fertigungsnummer stimmt.
Wird Seilzug „0“ gesendet oder die Sendung mehrmals nicht akzeptiert bedeutet dies Startende und anschließend Standbay.
Wird nicht mehr gesendet, bleibt es bei Standbay und gelegentliches Rücksenden des aktuellen Windenstatus.
Ich denke das könnte so gehen und es wird nicht unnötig viel gesendet.
Gruß Peter
 
Hallo Peter,
Library verwendest du
ich nutze die heltec.h für die LoRa übtertragung und das Display. Ist auch der Hersteller meines Boards somit passt das ganz gut.
hast du schon neue Erkenntnisse
Ja die habe ich. Meine Library macht hier keine eigene Adressierung. Allgemein ist es so das bei LoRa keine Adressierung oder Binding erfolgt. Heißt jeder LoRa Empfänger empfängt die Nachricht die gesendet wurde. Wie das ganze bei manchen Fernsteuerungen mit den 900MHz dann geht weiß ich wiederum nicht.
Ich werde noch eine Adressierung implementieren aus euren genannten Gründen.

Gruß Arne
 

S_a_S

User
Arne,
ein Beispiel für Addressierung findest Du hier.
Da kommt auf die physikalische Übertragung ( LoRaClass::write / LoRaClass::read) noch ein Protokollstack (LoRa.beginPacket, LoRa.write, LoRa.endPacket) oben drüber mit (einfacher) Adressierung mit Sender / Empfänger. Auch wenn da multiple steht, funktioniert das auch bei Punkt zu Punkt-Verbindung mit nur zwei Geräten. Klar, vollkommen abhörsicher und störsicher ist das nicht, wenn sich jemand mit einer baugleichen Windenanlage auf der gleichen Adresse anmeldet.

Grüße Stefan
 
Hallo Programmierprofis

Ich habe jetzt etwas mit dem ESP programmiert. Die Spannungsversorgung lief über den USB Anschluss. Nun möchte ich den ESP aber ohne USB in der Winde betreiben. Der Nano hatte dafür Vin, den ich benutzt habe. Der ESP scheint das aber nicht zu haben. 3.3V und 5V scheinen nur Ausgänge zu sein. Welche Möglichkeiten gibt es ausser USB den ESP mit Spannung zu versorgen. Wie macht ihr das?

Gruß Peter
 

S_a_S

User
Peter,
der 5V pin sollte mit dem USB + verbunden sein. Von dort geht dann noch eine Verpolschutz-Diode zum 3V3- Regler.
Kannst ja zur Sicherheit mit dem Ohmmeter durchklingeln. Könnte auch je nach Board sein, dass der 5V pin nach der Diode ist - und dann etwas weniger Spannung hat.

Also einfach an dem 5V pin einspeisen.

Grüße Stefan
 
Guten Morgen Peter, Stefan,
5V pin sollte mit dem USB + verbunden sein
Das ESP32 von Heltec funktioniert genauso. Laut Datenblatt befindet sich der Pin jedoch nach der Diode. Ich habe dies zwar nicht im Schaltplan überprüft, aber eine Diode als Verpolschutz nach dem Akku montiert. Somit bin ich sicher, dass die DC/DC-Wandler auf meiner Platine, keine verpolte Spannung erhalten.

Gruß Arne
 
Hallo Programmierprofis

Danke für die schnelle Antwort.
In dem Zusammenhang möchte ich noch einmal darauf hinweisen, das auch alle Ein./ Ausgänge des ESP keine Spannungen über 3.3 V vertragen.
Die Mosfet Treiber dürfen also auch nicht mit 5V Logikspannung sondern nur mit 3.3V versorgt werden. Sonst gelangt über deren Eingänge mehr als 3.3V an die Ausgänge des ESP.

Gruß Peter
 
Nachtrag

Habe mir den Schaltplan für die Treiber noch einmal angesehen. Sollte kein Problem sein die Treiber Logik auch mit 5V zu versorgen. Die beiden Eingänge Bremse/Power sind ja mit den beiden Dioden gegen 5V Logik Spannung abgesichert.

Gruß Peter
 
Hallo zusammen

Habe mich jetzt erst mal entschieden die Treiberplatine weiterhin mit 12 / 5V zu versorgen.
Die PWM Eingänge sind ja gegenüber dem ESP mit Dioden abgesichert. Nur die Sensorsignale, die ich zur Messung der Drehzahl, Drehrichtung und Umdrehung nutze habe ich mit Spannungsteiler zum ESP geführt um die Spannung unter 3,3V zu halten.

20240321_110100.jpg
20240321_110131.jpg



Da die Sensorplatine weiterhin 5V Spannung zur Verfügung stellt, habe ich sie gleich genutzt den ESP über Vin (5V) mit Spannung zu versorgen.
Auch mein Display (12864ZW) wird weiterhin mit 5V betrieben und kommt mit 3,3V an den Steuereingängen gut zu recht.

Stromsensor, Seilzugsensor und Einstellpoti werden dann vom ESP mit 3,3V versorgt. Einen Temperatursensor verwende ich nicht mehr, sondern einen NTC Widerstand, um eine Temperaturüberwachung zu realisieren.

Hier noch ein Bild vom NTC Widerstand.

20240321_115105.jpg


Habe ein Messingröhrchen an einen der MosFets gelötet und den mit Anschlusskabel versehenen NTC Widerstand hindurchgezogen.

Werde mich jetzt bald an die Programmierung wagen.

Gruß Peter
 
Ansicht hell / dunkel umschalten
Oben Unten