Hallo über das Herzfrequenz messen gibts ja einige Beiträge. Ich möchte eventuell einen POLAR Wearlink Bluetooth Brustgurt an einen Atmega mit GPS-Modul anschließen. Ich habe da das BCA8-BTM-328 Modul. In einigen Foren wurde aber auch diskutiert, dass das Protokoll von dem Gurt nicht verfügbar wäre. Ein Beitrag behauptet aber, dass das Protokoll "simpel" wäre. Von einigen PDA Tools wird der Gurt unterstützt (nur mit Lizenzgebühren?). Meine Frage ist nun, hat jemand diesen Gurt schon mal an einen Atmega mit Bluetooth angeschlossen und kann was über das Protokoll sagen? Leider habe ich nicht wirklich was darüber gefunden. Auf verdacht den Gurt zu kaufen, dafür ist der zu teuer. MfG Achim Ps.: Ich weiß, es gibt auch den Zephyr. Der ist aber noch teuerer aber das Protokoll ist wohl verfügbar. Hat aber ne andere Ladetechnik.
Hallo aiweia, mit einer solchen Resonaz hätte ich nicht gerechnet. Hat das wirlich noch niemand der Atmelgemeinde angewand?
Hallo, ich glaube nicht, dass das WearLink Protokoll irgendwo verfügbar ist. Ich würde einen Brustgurt mit ANT+ einsetzen. Da gibt es z.Bsp. von Sparkfun ein fertiges Modul dazu. http://www.sparkfun.com/products/8565
Hallo @Christoph das ANT+ Protokoll mag gut sein, aber die Standard Brustgürtel können das nicht. Auch ist der Anschluss an Standardprogramme nicht vorhanden. Was nützt mir da der erwähnte Modul um einen solchen Gurt anzusprechen? Oder habe ich da was nicht verstanden. Es gibt schon ein Java Source Programm für den Polargurt ==> http://www.neuroupdate.com/polarbt/ aber ob das funzt weiß ich nicht. Ich schwanke eben zwischen dem Polar und dem Zephyr. Außer den Standard-Tools möchte ich da einen "eigenen" Empfangsmodul (software) stricken deshalb die Frage.
Hallo, In dem von dir angegebenen Programm (http://www.neuroupdate.com/polarbt/), das übrigens nicht mit Java sondern C# programmiert wurde, werden die Daten über eine serielle Schnittstelle gelesen. Entweder geschieht dies direkt über Bluetooth SPP oder es hängt noch irgendein Adapter am PC der über die serielle Schnittstelle gesteuert wird. Wenn das direkt über Bluetooth geht, dann ist das auch mit einem ATmega und einem Bluetooth Modul mit SPP leicht möglich. MfG Christoph
Hallo >>Wenn das direkt über Bluetooth geht, dann ist das auch mit einem ATmega >>und einem Bluetooth Modul mit SPP leicht möglich. ..das ist schon klar, deshalb die Eingangsfrage nach dem Protokoll. Das mit dem Java hatte ich mit einem entsprechenden Zephyr (HxM) Projekt verwechselt. Ich habe ja das Programm übersetzt, kann das aber nicht testen mangels Gurt.
Hallo, gibt es neue Erkenntnisse bezüglich des Protokolls ?? Noch eine schönen 3. Advent gruß oscar
Hi, das ist jetzt frei aus dem Gedaechtnis, aber im Prinzip ist es wirklich ganz einfach. Einfach eine RFCOMM Verbindung aufbauen zum Gurt. Man kriegs dann folgende Pakete (jede Zeile ein Byte): 0x254 Packet Laenge 255-Laenge Packetnummer (von 0 - 15) irgend ein status Puls rri_h rri_l rri2_h rri2_l Bei mir sind immer entweder 1 oder 2 rri mitgeschickt, das ist einfach die Zeit in ms zwischen den Herzschlaegen. Ab und zu bekomme ich auch Pakete bei denen die ersten 2 Byte fehlen, keine Ahnung warum. Aber da die Laenge ja zum Glueck eh 2 mal reincodiert ist klappts trotzdem :) mfg
Na,das klingt ja gut. Vielen Dank. Da werde ich mir doch den Gurt zulegen müssen. Noch einen schönen Abend. Gruß oscar
Hi, ich wuerde mir, wenn ich wieder einen braeuchte, aber den Zephyr zulegen. Der Polar Gurt hat naemlich keinen Akku. Da wirds schnell nervig wenn dir mitten im Laufen die Batterie ausgeht :\ mfg
Ich versuche gerade, das Polar WearLink Protokoll zu simulieren. Mein Ziel ist es, eine Schaltung für meinen analogen Brustgurt zu basteln, die dessen Signal per WearLink Protokoll und Bluetooth an mein Handy weiter gibt. Das sollte nicht allzu schwer sein. Für den analogen Empfänger gibt es hier gute Beispiele und zum Weiterreichen reicht mir ein günstiges Seriell-zu-Bluetooth Modul. Mit Hilfe des Codes von http://www.neuroupdate.com/polarbt/ habe ich ein C# Tool geschrieben, um das Protokoll zu simulieren:
1 | SerialPort port = new SerialPort("COM6"); |
2 | port.BaudRate = 115200; |
3 | port.Parity = Parity.None; |
4 | port.StopBits = StopBits.One; |
5 | port.DataBits = 8; |
6 | port.Handshake = Handshake.None; |
7 | port.Open(); |
8 | |
9 | byte[] data = new byte[8]; |
10 | |
11 | data[0] = 254; // header |
12 | data[1] = 8; // length |
13 | data[2] = 247; // 255 - length |
14 | data[3] = 1; // index |
15 | data[4] = 209; //0xF1; // status |
16 | data[5] = 90; // pulse |
17 | data[6] = 0x03; // rri_h |
18 | data[7] = 0xE8; // rri_l |
19 | |
20 | while (true) |
21 | {
|
22 | // increment index
|
23 | data[3] = (byte)(data[3] + 1); |
24 | |
25 | if (data[3] == 15) |
26 | {
|
27 | data[3] = 0; |
28 | }
|
29 | |
30 | port.Write(data, 0, data.Length); |
31 | |
32 | Thread.Sleep(1000); |
33 | }
|
Das sollte einen konstanten Puls von 90 ausgeben. Mit BlueTerm auf meinem Android-Handy sehe ich die Daten, sie kommen also schon mal an. Doch leider erkennt keine der Apps (MoveTracker, Runtastic, WalkMater...) die simulierten Daten. Weiß jemand was da falsch läuft?
Ich weiß, der Thread ist uralt, aber vielleicht hilt es ja jemand weiter, denn ich habe den Thread beim Suchen über Google gefunden, und es ist einer der ganz wenigen zum Thema. Die Lösung, die auch dem TO geholfen hätte ist: Das Bluetooth gerät muss "Polar iWL" heißen, nur dann wird es als Wearlink-Gurt erkannt. So klappt es bei mir mit OruxMaps und Run.GPS! Anbei mein kleines Python-Testprogramm (linux, daher /dev/rfcomm0):
1 | import serial |
2 | from time import sleep |
3 | |
4 | ser = serial.Serial(port='/dev/rfcomm0', baudrate=115200, bytesize=8, parity='N', stopbits=1, timeout=None, xonxoff=False, rtscts=False, dsrdtr=False) # open serial port |
5 | |
6 | print(ser.name) # check which port was really used |
7 | |
8 | psep = 0xfe |
9 | plen = 10 |
10 | pchk = 0xFF - plen |
11 | pid = 0x00 |
12 | pstatus = 209 #maybe Battery |
13 | phr = 86 |
14 | psignal = 0x03 |
15 | |
16 | #send init: |
17 | ser.write(bytearray([0x0a, 0xf5, 0x0c, 0xd1, 0x4c, 0x03, 0x06, 0x02, 0xfc])) |
18 | ser.write(bytearray([0x0a, 0xf5, 0x0a, 0xd1, 0x49, 0x03, 0x5e, 0x03, 0x44])) |
19 | |
20 | while (1): |
21 | sleep(1) |
22 | |
23 | t_ms = int((60.0/phr)*1000) |
24 | int_h = t_ms/256 |
25 | int_l = t_ms%256 |
26 | bytestring = bytearray([psep, plen, pchk, pid, pstatus, phr, int_h, int_l, int_h, int_l]) |
27 | print repr(bytestring) |
28 | try: |
29 | ser.write(bytestring) |
30 | except: |
31 | print "write error..." |
32 | # |
33 | pid += 1 |
34 | if pid == 0x10: pid = 0x00 |
35 | ser.close() |
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.