Radarsensor HLK-LD2410

    This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

    Aufgrund technischer Veränderungen ist der Mailverkehr innerhalb des Forums (Private Nachrichten) nur noch eingeschränkt möglich. Die Einschränkung ist notwendig, um zusätzliche Betriebskosten für das Forum zu vermeiden. Näheres zu den Hintergründen im Thread "Aktuelles zum Forum".Wir bitten um Verständnis.

    Hinweis kann nach Kenntnisnahme deaktiviert werden!

    • Radarsensor HLK-LD2410

      Liebe Community,

      mir ist gerade ein Radarsensor (HLK-LD2410) zugestellt worden, der neben der Bewegungserkennung auch eine Präsenzerkennung bietet. Dazu soll er auch eine Reichweiteneinstellung sowie eine Entfernungsmessung bis ca. 6m bieten. Herzschlagerkennung bei gestürzten Personen soll auch möglich sein.

      Im Netz findet man dazu lediglich Hinweise zur Verwendung mit einem ESP-Modul.

      Hat sich schon jemand an der Steuerung dieses Radarsensors mittels Atmega versucht? Anbei die Protokollbeschreibung.

      Gruß

      Ulrich
      Files
    • In diesem Forum scheint es nichts darüber zu geben.
      Ich vermute mal, dass mit dem Radar-Teil noch niemand etwas gemacht hat.

      Aber laut Datenblatt scheint das ja nicht allzu kompliziert zu sein.
      Kann man nur hoffen, dass keine Fehler an entscheidenden Stellen sind. 2 Hatte ich schon gefunden.

      Ansonsten Word-weise Zugriff im Format Little-Endian. Frame-Start sind 2 Words und Frame-Ende 1 Word.
      Tricki ist vermutlich das Protokoll, denn hier muss man vorher wissen wie lang das Frame ist.

      Wenn du ein paar Ideen brauchst, helfe ich gerne.
    • Hallo Mitch64,

      danke für deine Unterstützung, Frage welche 2 Fehler wären das?

      Mitch64 wrote:

      Kann man nur hoffen, dass keine Fehler an entscheidenden Stellen sind. 2 Hatte ich schon gefunden.
      Ich wollte erstmal die Version anfordern, dazu ist wohl zunächst in den Command-Mode zu schalten und erst danach die Versionsabfrage abzusetzen.

      Send command Mode einschalten:
      FD FC FB FA 0400 FF00 0100 04 03 02 01

      Was mich irritiert sind die Leerzeichen zwichen den Bytes. In welcher Form sollte ich den Command-Mode absenden, wäre Printbin der richtige Befehl dazu? Habe bei meiner Suche dieses (siehe Anhang) gefunden, dieser User hat jedoch keinen Erfolg.
      Files
    • Ulrich wrote:

      Frage welche 2 Fehler wären das?
      Auf dem von dir verlinken Datenblatt
      1. Fehler: In Tabelle 1 sind 2x Tx-Pins angegeben.
      2. Fehler: Hab ich vergessen. Es war aber etwas im Zusammenhang mit den dokumentierten Kommandos.

      Ich habe im Netz etwas aktuelleres gefunden (aber nicht gespeichert), wo zumindest der Fehler aus Tabelle 1 behoben war.

      Ulrich wrote:

      Ich wollte erstmal die Version anfordern, dazu ist wohl zunächst in den Command-Mode zu schalten und erst danach die Versionsabfrage abzusetzen.
      Ja, du musst zuerst den Commandmode starten, dann deine Abfrage machen und dann den Mode wieder schließen.
      In summe also 3 Commands mit entsprechenden Responses.

      Ulrich wrote:

      Was mich irritiert sind die Leerzeichen zwichen den Bytes. In welcher Form sollte ich den Command-Mode absenden, wäre Printbin der richtige Befehl dazu?
      Ich würde erst mal annehmen, dass die Leerzeichen zwischen den Bytes nur der Lesbarkeit dienen.
      Sie geben aber auch die Reihenfolge der Bytes an. Das sieht man schön, wenn man sich die Kommando-Beschreibungen weiter unten im Datenblatt anschaut. Da steht z.B. bei dem Wert für die Framelenge im Text &h0004 für 4 Byte und gesendet wird dann &h04 &h00.
      Ich würde erst mal PrintBin versuchen.

      Um bei der Framelänge mit 4 zu bleiben:
      Dim FrameLength as Word

      FrameLength=&h4

      PrintBin FrameLength

      Dann wird automatisch 04 00 gesendet (hex)

      Versuche einfach mal den Command-Mode zu öffnen und schau wie die Response aussieht. Wenn keine kommt stimmt was nicht.

      Ulrich wrote:

      Habe bei meiner Suche dieses (siehe Anhang) gefunden, dieser User hat jedoch keinen Erfolg.
      Ja bei dem Frame muss alles passen. Framelänge buss zu den Daten passen, Start und Stopp muss korrekt sein.
      Teilweise scheint es bei ihm funktioniert zu haben. Vielleicht hat teilweise die FrameLength nicht gestimmt?
    • Hier ein erster Test zum Radar-Modul. Im Programm wird lediglich in den Command-Modus geschaltet und das Modul antwortet mit ACK. Im Hterm-Bild ist nach dem Einschalten der Datenstrom ztu sehen, den das Radar-Modul von sich aus sendet, nach den 3 Sekunden Wait wird das Command-Mode Telegramm vom UNO an das Modul gesendet, welches darauf mit dem ACK-Telegramm (siehe auch Hterm-Bild) antwortet. Damit ist die erste Hürde bzgl.Protokoll-Verstehen geschafft.

      BASCOM Source Code: Radar-Modul Command-Mode

      1. ' Programm zum Test der RADAR-Module HLK-LD2410 mit Arduino UNO
      2. ' Datum : 24.06.2024 / 16:00h
      3. '
      4. $regfile = "m328pdef.dat" 'Set the AVR to use.
      5. $crystal = 16000000 'Set the AVR clock.
      6. '
      7. $hwstack = 64 'Set the capacity of the hardware stack.
      8. $swstack = 32 'Set the capacity of the software stack.
      9. $framesize = 24 'Set the capacity of the frame area.
      10. $baud = 256000 '
      11. Dim F_name As String * 50
      12. Dim F_date As String * 25
      13. Dim F_datum As String * 10
      14. Dim F_time As String * 8
      15. Dim P1 As Word
      16. Dim P2 As Word
      17. Dim P3 As Word
      18. '----------------------------------
      19. F_name = Version(3)
      20. F_date = Version(1)
      21. F_datum = Left(f_date , 10)
      22. F_time = Right(f_date , 8)
      23. 'Print F_name
      24. 'Print F_datum
      25. 'Print F_time
      26. 'Print
      27. 'Print "--------------------"
      28. P1 = &H0004 'Command-Modus Telegramm-Inhalt
      29. P2 = &H00FF
      30. P3 = &H0001
      31. Wait 3 'willkürliche Wartezeit nach Power-Up
      32. '
      33. 'Beginn Senden des Telegramms damit Radar-Modul in den Kommand-Modus schaltet
      34. 'Telegramm Präambel
      35. Printbin &HFD
      36. Printbin &HFC
      37. Printbin &HFB
      38. Printbin &HFA
      39. 'Telegramm Inhalt
      40. Printbin P1
      41. Printbin P2
      42. Printbin P3
      43. 'Telegramm Endekennung
      44. Printbin &H04
      45. Printbin &H03
      46. Printbin &H02
      47. Printbin &H01
      48. '************************************************* ******************************
      49. End
      Display All
      Files
    • Wenn das Modul schon mal antwortet, dann weiß man wie das Protokoll aufgebaut werden muss.

      Jetzt sind natürlich Routinen sinnvoll, die dir helfen das Protokoll zusammen zu setzen und abzusenden.
      So dass du nur noch
      Call EnableCommandMode()
      aufrufen musst, und die Routine baut das Protokoll zusammen und schickt es weg.

      Das Modul sendet ja von sich aus Daten.
      Hört es damit auf, wenn du in den CommandMode gehst, bis du ihn wieder verlässt?

      Mir ist noch was aufgefallen.
      Im Normalmode, wenn das Ding von sich aus Daten sendet, sind die Framedaten in sich wieder ein Protokoll.
      Hast du das auch gesehen im Datenblatt?
    • Mitch64 wrote:

      Das Modul sendet ja von sich aus Daten.
      Hört es damit auf, wenn du in den CommandMode gehst, bis du ihn wieder verlässt?
      Sobald das Modul im Comand-Modus das ACK gesendet ist, wartet das Modul auf weitere Commandos, wenn man dann das Command-Mode Endetelegramm sendet, werden wieder die Normaldaten gesendet.

      Mitch64 wrote:

      Im Normalmode, wenn das Ding von sich aus Daten sendet, sind die Framedaten in sich wieder ein Protokoll.
      Hast du das auch gesehen im Datenblatt?
      Ja, das Habe ich schon gesehen, habe mir aber diesen Infraframe noch nicht genauer angesehen. Da muss ich erst die Tabellen im Protokoll-Sheet durchforsten und vergleichen.

      Werde mir morgen, so denn Zeit, ist auch die Versionsdaten des Moduls ausgeben lassen.
    • Habe noch ein paar weitere Tests gemacht, und in eine Excel-Tabelle überführt; dort sind die ACK-Antworten zu sehen, bzw. das was das Modul nach dem Start sendet.

      Nach dem Power-Up sendet das Modul offenbar dauernd im Engineering Modus.
      Auf den Start des Command-Mode antwortet das Modul in Z-1 mit dem ACK. Die Abfrage der Version liefert in Z-2 als ACK die Versions-Daten, hier: 02.04.23022511.

      Das ACK in Z-3 ist die Antwort auf das Beenden des Command-Mode .

      In der Folge wird wiederholt und permanent gesendet:
      2-mal das ACK des Command-Mode Starts Z-4,Z-5, dann Version Z-6, dann ACK von Command-Modus Ende Z-7

      Offenbar muss man den Engineering-Mode nach dem Start erstmal beenden??

      Weitere Test und Untersuchungen stehen noch aus.
      Files
    • Hi
      Neh, da hast du dich vertan.
      Das Engineer-Format muss man explizit aktivieren, und die Einstellung wird auch nicht gespeichert. Nach einem Reset hast du immer das Basic Format

      In deinem Log sieht man das auch.
      F4 F3 F2 F1 = Startsequenz für das Report-Format
      0D 00 = Länge der nachfolgenden Framedaten in Byte = 13 Byte
      02 = Format, 2 = Basic-Info Format. 01 wäre Engineer-Format
      AA = Head der Daten

      Es ist also so wie im Datenblatt beschrieben.

      Was ich jetzt wiederum komisch finde ist, wenn du den Command-Mode beendest, wird der erfolgreich quittiert.
      Dennoch ändert sich die Startsequenz nicht zurück und es werden auch die Daten nicht gesendet wie am Anfang, vor dem Einschalten des Command-Mode.
      Hast du da vielleicht ein falsches Kommando gesendet?
      Oder musst du End-Configuration-Command senden?

      Irgendwas ist da wirklich verdreht.

      Also nochmal.
      Der Anfang stimmt mit der Startsequenz F4 F3 F2 F1. Das sind die normalen Report-Frames (keine Engineer-Mode Framses).
      Dann schaltest du den Command-Mode ein, Fragst die Version ab und schaltest den CommandMode wieder ab.
      Alle 3 Kommandos werden korrekt bestätigt.

      Das was ab Zeile 4 folgt, sind alles samt ACK-Frames von ganz offensochtlichen weiteren Anfragen.
      Woher auch die immer kommen mögen. Schickt da dein Code noch was?

      Zeile 4 + 5 ist FF 01, also Bestätigung für Start Command Mode.
      Zeile 6 wieder Ack für Versionsanfrage.
      Zeile 7 ist Bestätigung für das abschalten des Command Modes, der in
      Zeile 8 +9 wieder aktiviert wird, mit Bestätigung.
      Dann folgt wieder Bestätigung der Version.

      Wie sieht denn der Code dazu aus?

      The post was edited 4 times, last by Mitch64 ().

    • Mitch64 wrote:

      Neh, da hast du dich vertan.
      Das Engineer-Format muss man explizit aktivieren, und die Einstellung wird auch nicht gespeichert. Nach einem Reset hast du immer das Basic Format

      wenn ich dieses Bild (Anhang) betrachte, sieht es für mich so aus, als ob das Byte nach "AA" darüber bestimmt, ob der "engineering Mode" oder der "Target basic Information data " mode vorliegt. In meiner Tabelle hat das Byte nach "AA" den Wert "01"


      Aber man kann es auch anders interpretieren, da stimme ich dir schon zu. Werde das noch wei a_140_204d8852
      Files

      The post was edited 1 time, last by Ulrich ().

    • Habe mal eine für mich verständlichere Übersetzung von Zusammenhängen des Serial Communication-protocols V1.06 versucht, da letztere wohl aus einem Übersetzungsprogramm von chinesich zu englisch entstanden zu sein scheint.

      Man möge mir verzeihen, wenn etwas nicht passen sollte.
      Files
    • Für Interessierte hier noch das Ergebnis der Read-Parameter Abfrage. Mit hterm wurde zuvor der ACK-Antwort festgehalten. Das Excel-sheet zeigt zunächst die ACK-Antwort auf das Start-Kommando und danach die ACK-Antwort auf das Read-Parameter Kommando. Es sind in allen Feldern noch die default Werte des Herstellers zu sehen, da das Modul noch jungfräulich ist. Unten mein kleines Bascom-Testprogramm dazu.

      BASCOM Source Code

      1. ' Programm zum Test der RADAR-Module HLK-LD2410 mit Arduino UNO
      2. ' Datum : 25.06.2024 / 18:51h
      3. '
      4. $regfile = "m328pdef.dat" 'Set the AVR to use.
      5. $crystal = 16000000 'Set the AVR clock.
      6. '
      7. $hwstack = 64 'Set the capacity of the hardware stack.
      8. $swstack = 32 'Set the capacity of the software stack.
      9. $framesize = 24 'Set the capacity of the frame area.
      10. $baud = 256000 '
      11. Dim F_name As String * 50
      12. Dim F_date As String * 25
      13. Dim F_datum As String * 10
      14. Dim F_time As String * 8
      15. Dim Ps1 As Word
      16. Dim Ps2 As Word
      17. Dim Ps3 As Word
      18. Dim Pe1 As Word
      19. Dim Pe2 As Word
      20. Dim Pv1 As Word 'Command-Modus start Telegramm-Inhalt
      21. Dim Pv2 As Word
      22. Dim Read_pre As Word
      23. Dim Read_command As Word
      24. '----------------------------------
      25. F_name = Version(3)
      26. F_date = Version(1)
      27. F_datum = Left(f_date , 10)
      28. F_time = Right(f_date , 8)
      29. 'Print F_name
      30. 'Print F_datum
      31. 'Print F_time
      32. 'Print
      33. 'Print "--------------------"
      34. Wait 3 'willkürliche Wartezeit nach Power-Up
      35. '
      36. 'Beginn Senden des Telegramms, damit Radar-Modul in denCKommand-Modus schaltet
      37. Gosub Start_command_mode 'Beginn Senden des Telegramms, damit Radar-Modul
      38. ' in denCKommand-Modus schaltet
      39. Gosub Read_parameter
      40. Wait 1
      41. 'Gosub Radar_version
      42. Wait 1
      43. Gosub End_command_mode 'senden des Telegramms zum Verlassen des Comand-Modus
      44. '************************************************* ******************************
      45. Start_command_mode:
      46. Ps1 = &H0004 'Command-Modus start Telegramm-Inhalt
      47. Ps2 = &H00FF
      48. Ps3 = &H0001
      49. 'Telegramm Präambel
      50. Printbin &HFD
      51. Printbin &HFC
      52. Printbin &HFB
      53. Printbin &HFA
      54. 'Telegramm Inhalt
      55. Printbin Ps1
      56. Printbin Ps2
      57. Printbin Ps3
      58. 'Telegramm Endekennung
      59. Printbin &H04
      60. Printbin &H03
      61. Printbin &H02
      62. Printbin &H01
      63. Return
      64. Read_parameter:
      65. Read_pre = &H0020
      66. Read_command = &H0061
      67. Printbin &HFD
      68. Printbin &HFC
      69. Printbin &HFB
      70. Printbin &HFA
      71. 'Telegramm Inhalt
      72. Printbin Read_pre
      73. Printbin Read_command
      74. 'Telegramm Endekennung
      75. Printbin &H04
      76. Printbin &H03
      77. Printbin &H02
      78. Printbin &H01
      79. Return
      80. End_command_mode:
      81. Pe1 = &H0002 'Command-Modus Ende Telegramm-Inhalt
      82. Pe2 = &H00FE
      83. Printbin &HFD
      84. Printbin &HFC
      85. Printbin &HFB
      86. Printbin &HFA
      87. 'Telegramm Inhalt
      88. Printbin Pe1
      89. Printbin Pe2
      90. 'Telegramm Endekennung
      91. Printbin &H04
      92. Printbin &H03
      93. Printbin &H02
      94. Printbin &H01
      95. Return
      96. Radar_version:
      97. Pv1 = &H0002 'Command-Modus Version
      98. Pv2 = &H00A0
      99. Printbin &HFD
      100. Printbin &HFC
      101. Printbin &HFB
      102. Printbin &HFA
      103. 'Telegramm Inhalt
      104. Printbin Pv1
      105. Printbin Pv2
      106. 'Telegramm Endekennung
      107. Printbin &H04
      108. Printbin &H03
      109. Printbin &H02
      110. Printbin &H01
      111. Return
      112. End
      Display All
      Files