{"id":3153,"date":"2023-01-31T19:36:28","date_gmt":"2023-01-31T19:36:28","guid":{"rendered":"https:\/\/www.sydspost.nl\/?p=3153"},"modified":"2023-08-10T15:11:23","modified_gmt":"2023-08-10T15:11:23","slug":"cycling-cadence-speed-sensor","status":"publish","type":"post","link":"https:\/\/www.sydspost.nl\/index.php\/2023\/01\/31\/cycling-cadence-speed-sensor\/","title":{"rendered":"Cycling cadence &#038; Speed sensor"},"content":{"rendered":"<h1 style=\"text-transform:none;\" class=\"wp-block-post-title has-text-color has-black-color\">Cycling cadence &#038; Speed sensor<\/h1>\n\n\n<p>Onlangs m&#8217;n Polar M600 sporthorloge vervangen door een Garmin Forerunner 955. Daar moeten natuurlijk van allerlei sensoren aan gekoppeld worden. Je kunt die sensoren uiteraard kant-en-klaar kopen van de bekende merken zoals Polar, Garmin, Wahoo etc. Maar veel leuker is om ze zelf te maken. Als inspiratiebron heb ik de Wahoo Blue SC Speed en Candanssensor genomen:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1000\" height=\"792\" src=\"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/image-15.png\" alt=\"\" class=\"wp-image-3154\" srcset=\"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/image-15.png 1000w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/image-15-300x238.png 300w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/image-15-768x608.png 768w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><\/figure>\n\n\n\n<p>Mijn opzet is als volgt:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Centraal staat een Seeed Xiao Studio ESP32C3 microcontroller, deze zorgt voor de rekenkracht en (BLE, Bluetooth) connectiviteit, is ultraklein en gebruikt weinig stroom<\/li>\n\n\n\n<li>Deze wordt gevoed door een 3.7v oplaadbare Lipo batterij <\/li>\n\n\n\n<li>De magneten op de spaak en crank worden uitgelezen met een reed switch<\/li>\n\n\n\n<li>Om stroom te besparen wordt de ESP32C3 microcontroller automatisch in &#8216;Deepsleep&#8217; modus gezet na 60 seconden idle te zijn geweest<\/li>\n\n\n\n<li>Een draai aan het wiel of de crank zorgt ervoor dat de ESP32C3 microcontroller wordt opgestart<\/li>\n\n\n\n<li>De wiel- en crank rotaties worden op basis van de GATT-specificaties via bluetooth gecommuniceerd naar afnemende devices (Garmin horloge, app op telefoon etc.)<\/li>\n<\/ul>\n\n\n\n<p>Te bestellen artikelen:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>Artikel<\/td><td>Aantal<\/td><td>Prijs p\/stuk<\/td><td>Totaal<\/td><td>Waar verkrijgbaar<\/td><\/tr><tr><td>Seeed Xiao Studio ESP32C3<\/td><td>1<\/td><td>\u20ac 6,50<\/td><td>\u20ac 6,50<\/td><td><a href=\"https:\/\/www.kiwi-electronics.com\/nl\/seeed-studio-xiao-esp32c3-11039\" target=\"_blank\" rel=\"noreferrer noopener\">kiwi-electronics.com<\/a><\/td><\/tr><tr><td>3.7v Lipo accu 2000mAh<\/td><td>1<\/td><td>\u20ac 4,42<\/td><td>\u20ac 4,42<\/td><td><a href=\"https:\/\/nl.aliexpress.com\/item\/1005002919536938.html?spm=a2g0o.order_list.order_list_main.4.21ef79d2aADq6n&amp;gatewayAdapt=glo2nld\" target=\"_blank\" rel=\"noreferrer noopener\">Aliexpress.com<\/a><\/td><\/tr><tr><td>Reed switch<\/td><td>2<\/td><td>\u20ac 0,08<\/td><td>\u20ac 0,16<\/td><td><a href=\"https:\/\/nl.aliexpress.com\/item\/4000773848015.html?spm=a2g0o.order_list.order_list_main.4.21ef79d2j3saNq&amp;gatewayAdapt=glo2nld\" target=\"_blank\" rel=\"noreferrer noopener\">Aliexpress.com<\/a><\/td><\/tr><tr><td>RGB led cathode 5mm<\/td><td>1<\/td><td>\u20ac 0,07<\/td><td>\u20ac 0,15<\/td><td><a href=\"https:\/\/nl.aliexpress.com\/item\/33041295150.html?spm=a2g0o.order_list.order_list_main.5.21ef79d2cOmiIR&amp;gatewayAdapt=glo2nld\" target=\"_blank\" rel=\"noreferrer noopener\">Aliexpress.com<\/a><\/td><\/tr><tr><td>Weerstand 220Ohm<\/td><td>3<\/td><td><\/td><td><\/td><td>Op voorraad<\/td><\/tr><tr><td>Weerstand 10K Ohm<\/td><td>2<\/td><td><\/td><td><\/td><td>Op voorraad<\/td><\/tr><tr><td>Weerstand 220K Ohm<\/td><td>2<\/td><td><\/td><td><\/td><td>Op voorraad<\/td><\/tr><tr><td>JST connector 2-voudig PCB mount<\/td><td>1<\/td><td><\/td><td><\/td><td>Op voorraad<\/td><\/tr><tr><td>Male header 2-voudig, haaks<\/td><td>3<\/td><td><\/td><td><\/td><td>Op voorraad<\/td><\/tr><tr><td>Male headers 7-voudig<\/td><td>2<\/td><td><\/td><td><\/td><td>Op voorraad<\/td><\/tr><tr><td>PLA Filament 1.75mm<\/td><td>? meter<\/td><td>\u20ac 0,068<\/td><td><\/td><td>Op voorraad<\/td><\/tr><tr><td>Rrskit 360 Graden Roterende Stuur Houder Voor Garmin<\/td><td>1<\/td><td>\u20ac 4,15<\/td><td>\u20ac 4,15<\/td><td><a href=\"https:\/\/nl.aliexpress.com\/item\/1005002433127497.html?spm=a2g0o.detail.1000014.11.49f638e4MEAzFw&amp;gps-id=pcDetailBottomMoreOtherSeller&amp;scm=1007.40000.317745.0&amp;scm_id=1007.40000.317745.0&amp;scm-url=1007.40000.317745.0&amp;pvid=e206e2fc-6cd2-4b13-a159-2f0539e999e8&amp;_t=gps-id:pcDetailBottomMoreOtherSeller,scm-url:1007.40000.317745.0,pvid:e206e2fc-6cd2-4b13-a159-2f0539e999e8,tpp_buckets:668%232846%238112%23534&amp;pdp_ext_f=%7B%22sku_id%22%3A%2212000028291619406%22%2C%22sceneId%22%3A%2230050%22%7D&amp;pdp_npi=3%40dis%21EUR%218.29%214.15%21%21%21%21%21%400b0a23aa16757735537545798e07b4%2112000028291619406%21rec%21NL%212531304109\" target=\"_blank\" rel=\"noreferrer noopener\">Aliexpress.com<\/a><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Benodigdheden:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>USB-C kabel + laptop\/desktop<\/li>\n<\/ul>\n\n\n\n<p>Gereedschap:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Soldeerbout + tin<\/li>\n\n\n\n<li>Tangetje<\/li>\n\n\n\n<li>3D printer<\/li>\n<\/ul>\n\n\n\n<p>Geinstalleerd en up-and-running:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>python 3.10.7 of hoger<\/li>\n\n\n\n<li>esptool (pip install esptool)<\/li>\n\n\n\n<li>ampy (pip install adafruit-ampy)<\/li>\n<\/ul>\n\n\n\n<p>Stap 1. Proefopstelling gemaakt<\/p>\n\n\n\n<p>De Seeed Xiao Studio ESP32C3 heb ik voorzien van Micropython (zie ook mijn tutorial <a href=\"https:\/\/www.sydspost.nl\/index.php\/2023\/01\/17\/micropython-flashen-op-seeed-studio-xiao-esp32c3\/\" target=\"_blank\" rel=\"noreferrer noopener\">Micropython flashen op Seeed studio Xiao ESP32C3<\/a>). Om de in de stap 2. ontwikkelde python code te testen heb ik twee 7-pins headers op het Xiao bordje gesoldeerd (alleen die pins gesoldeerd die gebruikt worden zodat ik ze gemakkelijk weer los kan solderen). Vervolgens het bordje op een breadboard gedrukt. Om de reed switch sensoren te emuleren heb ik twee tactile switches (vlakke puls schakelaars) m.b.v. een 10K weerstand op de breadboard gedrukt en een en ander met jumperkabels verbonden conform onderstaand schema:<\/p>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"654\" height=\"243\" data-id=\"3157\" src=\"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/Proefopstelling.png\" alt=\"\" class=\"wp-image-3157\" srcset=\"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/Proefopstelling.png 654w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/Proefopstelling-300x111.png 300w\" sizes=\"auto, (max-width: 654px) 100vw, 654px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"2560\" height=\"1280\" data-id=\"3158\" src=\"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230128_124357-scaled.jpg\" alt=\"\" class=\"wp-image-3158\" srcset=\"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230128_124357-scaled.jpg 2560w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230128_124357-300x150.jpg 300w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230128_124357-1024x512.jpg 1024w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230128_124357-768x384.jpg 768w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230128_124357-1536x768.jpg 1536w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230128_124357-2048x1024.jpg 2048w\" sizes=\"auto, (max-width: 2560px) 100vw, 2560px\" \/><\/figure>\n<\/figure>\n\n\n\n<p>Om het meten van het batterijspanning te simuleren heb ik een voltage devider van 10 en 47K toegevoegd die is aangesloten op de 5v pin van de ESP32C3. Dit brengt het voltage terug naar ongeveer 4.1v, vergelijkbaar met de piekspanning van een 3.7v Lipo batterij die volledig opgeladen is. Uiteraard kan de ESP32C3 geen 4.1v verdragen op zijn pins, daarom een twee voltage divider toepast in de vorm van een 10K en 4.7K weerstand in serie met een B100K potentiometer. Met behulp van de potentiometer kan het verloop van de batterijspanning gesimuleerd worden.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"778\" height=\"416\" src=\"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/Proefopstelling-2.png\" alt=\"\" class=\"wp-image-3196\" srcset=\"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/Proefopstelling-2.png 778w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/Proefopstelling-2-300x160.png 300w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/Proefopstelling-2-768x411.png 768w\" sizes=\"auto, (max-width: 778px) 100vw, 778px\" \/><\/figure>\n\n\n\n<p>Tot slot een RGB Led toegevoegd die de status van de Cadencesensor gaat aangeven, namelijk:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Rood: Onvoldoende batterijspanning<\/li>\n\n\n\n<li>Groen: Sensor operationeel<\/li>\n\n\n\n<li>Blauw: Sensor via bluetooth geconnect aan device<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"512\" height=\"1024\" src=\"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230131_203219-512x1024.jpg\" alt=\"\" class=\"wp-image-3197\" srcset=\"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230131_203219-512x1024.jpg 512w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230131_203219-150x300.jpg 150w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230131_203219-768x1536.jpg 768w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230131_203219-1024x2048.jpg 1024w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230131_203219-scaled.jpg 1280w\" sizes=\"auto, (max-width: 512px) 100vw, 512px\" \/><figcaption class=\"wp-element-caption\">Volledige proefopstelling<\/figcaption><\/figure>\n\n\n\n<p>Stap 2. Python script ontwikkeld<\/p>\n\n\n\n<p>Als basis heb ik de C++ code van Neal Markham gebruikt, te vinden op hackster.io: <a href=\"https:\/\/particle.hackster.io\/neal_markham\/ble-bicycle-speed-sensor-f60b80\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/particle.hackster.io\/neal_markham\/ble-bicycle-speed-sensor-f60b80<\/a>. Deze code heb ik omgezet naar Micropython en verder vervolmaakt.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from machine import deepsleep, Pin, ADC\nimport machine\nimport bluetooth\nfrom ble_advertising import advertising_payload\nfrom micropython import const\nimport time\nimport struct\nimport esp32\n\nUPDATE_INTERVAL_MS                      = 2000\nDEEP_SLEEP_INTERVAL_MS                  = 60000\nlastUpdate                              = 0\nlastwheelUpdate                         = 0\nlastcrankUpdate                         = 0\nswCount                                 = 0\nwheel_rev_period                        = 0\ncrank_rev_period                        = 0\ndebouncePeriod                          = const(150)                    # interrupt debounce period, per magnet passby\nlastInterruptMillis                     = 0\n\n# Battery level Variables\nlastBattery                             = 33\nminBattery                              = 30                            # minBattery\/10 = minimum voltage to prevent Lipo battery from damage\n\n# Cycling Variables\ncum_wheel_rev                           = 0\nlast_wheel_event                        = 0\ncum_cranks                              = 0\nlast_crank_event                        = 0\n\n# Cycling Speed and Cadence configuration\nGATT_CSC_UUID                           = const(0x1816)\nGATT_CSC_MEASUREMENT_UUID               = const(0x2A5B)\nGATT_CSC_FEATURE_UUID                   = const(0x2A5C)\nGATT_SENSOR_LOCATION_UUID               = const(0x2A5D)\nGATT_SC_CONTROL_POINT_UUID              = const(0x2A55)\n\n# Device Information configuration\nGATT_DEVICE_INFO_UUID                   = const(0x180A)\nGATT_MANUFACTURER_NAME_UUID             = const(0x2A29)\nGATT_MODEL_NUMBER_UUID                  = const(0x2A24)\n\n# CSC Measurement flags\nCSC_MEASUREMENT_WHEEL_REV_PRESENT       = const(0x01)\nCSC_MEASUREMENT_CRANK_REV_PRESENT       = const(0x02)\n\n# CSC feature flags\nCSC_FEATURE_WHEEL_REV_DATA              = const(0x01)\nCSC_FEATURE_CRANK_REV_DATA              = const(0x02)\nCSC_FEATURE_MULTIPLE_SENSOR_LOC         = const(0x04)\n\n# Sensor location enum\nSENSOR_LOCATION_OTHER                   = const(0)\nSENSOR_LOCATION_TOP_OF_SHOE             = const(1)\nSENSOR_LOCATION_IN_SHOE                 = const(2)\nSENSOR_LOCATION_HIP                     = const(3)\nSENSOR_LOCATION_FRONT_WHEEL             = const(4)\nSENSOR_LOCATION_LEFT_CRANK              = const(5)\nSENSOR_LOCATION_RIGHT_CRANK             = const(6)\nSENSOR_LOCATION_LEFT_PEDAL              = const(7)\nSENSOR_LOCATION_RIGHT_PEDAL             = const(8)\nSENSOR_LOCATION_FROT_HUB                = const(9)\nSENSOR_LOCATION_REAR_DROPOUT            = const(10)\nSENSOR_LOCATION_CHAINSTAY               = const(11)\nSENSOR_LOCATION_REAR_WHEEL              = const(12)\nSENSOR_LOCATION_REAR_HUB                = const(13)\nSENSOR_LOCATION_CHEST                   = const(14)\nSENSOR_LOCATION_SPIDER                  = const(15)\nSENSOR_LOCATION_CHAIN_RING              = const(16)\n\n# Bluetooth \n_ADV_APPEARANCE_CADENCE_SENSOR          = const(1155)              # org.bluetooth.characteristic.gap.appearance.xml\nsensor_name                             = const(\"myCadenceSensor\")\n\n# SC Control Point op codes\nSC_CP_OP_SET_CUMULATIVE_VALUE           = const(1)\nSC_CP_OP_START_SENSOR_CALIBRATION       = const(2)\nSC_CP_OP_UPDATE_SENSOR_LOCATION         = const(3)\nSC_CP_OP_REQ_SUPPORTED_SENSOR_LOCATIONS = const(4)\nSC_CP_OP_RESPONSE                       = const(16)\n\n# SC Control Point response values\nSC_CP_RESPONSE_SUCCESS                  = const(1)\nSC_CP_RESPONSE_OP_NOT_SUPPORTED         = const(2)\nSC_CP_RESPONSE_INVALID_PARAM            = const(3)\nSC_CP_RESPONSE_OP_FAI                   = const(4)\n\n# Battery level\nBLE_SIG_UUID_BATTERY_SVC                = const(0x180F)\nBLE_SIG_BATTERY_LEVEL                   = const(0x2A19)\n\n# IRQ\n_IRQ_CENTRAL_CONNECT                    = const(1)\n_IRQ_CENTRAL_DISCONNECT                 = const(2)\n_IRQ_GATTS_INDICATE_DONE                = const(20)\n\n# CSC simulation configuration\nCSC_FEATURES                            = (CSC_FEATURE_WHEEL_REV_DATA | CSC_FEATURE_CRANK_REV_DATA | CSC_FEATURE_MULTIPLE_SENSOR_LOC)\n\nCSC_UUID                                = bluetooth.UUID(GATT_CSC_UUID)                                                                 # \"Cycling Speed and Cadence\"\torg.bluetooth.service.cycling_speed_and_cadence\t0x1816\tGSS\nCSC_Measurement                         = (bluetooth.UUID(GATT_CSC_MEASUREMENT_UUID), bluetooth.FLAG_NOTIFY,)                           # \"CSC Measurement\"\torg.bluetooth.characteristic.csc_measurement\t0x2A5B\nCSC_Feature                             = (bluetooth.UUID(GATT_CSC_FEATURE_UUID), bluetooth.FLAG_READ,)                                 # \"CSC Feature\"\torg.bluetooth.characteristic.csc_feature\t0x2A5C\nSensor_Location                         = (bluetooth.UUID(GATT_SENSOR_LOCATION_UUID), bluetooth.FLAG_READ,)                             # \"Sensor location\"\torg.bluetooth.characteristic.sensor_location\t0x2A5D\nSC_ControlPoint                         = (bluetooth.UUID(GATT_SC_CONTROL_POINT_UUID), bluetooth.FLAG_INDICATE | bluetooth.FLAG_WRITE,) # \"SC ControlPoint\"\torg.bluetooth.characteristic.sc_control_point\t0x2A55\n\nCyclingSpeedAndCadenceService           = (CSC_UUID, (CSC_Measurement, CSC_Feature, Sensor_Location, SC_ControlPoint,),)\n\n# The battery level service allows the battery level to be monitored\nBatteryLevel_UUID                       = bluetooth.UUID(BLE_SIG_UUID_BATTERY_SVC)\nBatteryLevel                            = (bluetooth.UUID(BLE_SIG_BATTERY_LEVEL), bluetooth.FLAG_NOTIFY,)\nBatteryLevel_service                    = (BatteryLevel_UUID, (BatteryLevel,),)\n\nServices                                = (CyclingSpeedAndCadenceService, BatteryLevel_service,)\n\ndef millis():\n    return round(time.time()*1000)\n\ndef switchIsr(pin):\n    global swCount, wheel_rev_period, lastwheelUpdate, lastcrankUpdate, cum_wheel_rev, last_wheel_event, debouncePeriod\n    global cum_cranks, crank_rev_period, last_crank_event, lastInterruptMillis\n \n    if (millis() - lastInterruptMillis &gt; debouncePeriod):\n    \n        swCount            += 1\n        lastInterruptMillis = millis()\n    \n        if (pin == Pin(4)):\n            wheel_rev_period    = millis() - lastwheelUpdate\n            lastwheelUpdate     = millis()\n            cum_wheel_rev      += 1\n            last_wheel_event   += wheel_rev_period\n        \n        if (pin == Pin(2)):\n            crank_rev_period    = millis() - lastcrankUpdate\n            lastcrankUpdate     = millis()\n            cum_cranks         += 1\n            last_crank_event   += crank_rev_period\n            \n        measurements_update()\n        print(\"Interrupt handling\")\n        \ndef blecsc_simulate_speed_and_cadence():\n    global wheel_rev_period, crank_rev_period\n    global cum_wheel_rev, last_wheel_event, cum_cranks, last_crank_event\n\n    lastInterruptMillis = millis() # fake Interrupt on D0 &amp; D2\n    \n    # Calculate simulated measurement values\n    wheel_rev_period  = (36*64*WHEEL_CIRCUMFERENCE_MM) \/ (625*csc_sim_speed_kph)\n    cum_wheel_rev    += 1\n    last_wheel_event += wheel_rev_period\n\n    crank_rev_period  = (60*64) \/ csc_sim_crank_rpm\n    cum_cranks       += 1\n    last_crank_event += crank_rev_period\n\ndef measurements_update():\n    global swCount\n   \n    print(\"Measurement Update Loop\")\n    \n    if (swCount):\n\n        # unsigned long currentTime = millis()\n        \n        swCount = 0\n       \n        print(\"Wheel_Rev_Period : %d\", wheel_rev_period)\n        print(\"LastwheelUpdate : %d\", lastwheelUpdate)\n        print(\"Cum_Wheel_Rev : %d\", cum_wheel_rev)\n        print(\"Crank_Rev_Period : %d\", crank_rev_period)\n        print(\"LastcrankUpdate : %d\", lastcrankUpdate)\n        print(\"Cum. Cranks : %d\", cum_cranks)\n\n    print(\"Finished Measurement Update Loop\")\n    \ndef convert(x, in_min, in_max, out_min, out_max):\n    return (x - in_min) * (out_max - out_min) \/\/ (in_max - in_min) + out_min\n\nclass BLEcsc:\n    def __init__(self, ble, name=sensor_name):\n        self._ble = ble\n        self._ble.active(True)\n        self._ble.irq(self._irq)\n        ((self._CSC_Measurement_handle, self._CSC_Feature_handle, self._Sensor_Location_handle, self._SC_ControlPoint_handle,), (self._BatteryLevel_handle,), ) = self._ble.gatts_register_services((Services))\n        self._connections = set()\n        self._payload = advertising_payload(\n            name=name, services=&#91;CSC_UUID], appearance=_ADV_APPEARANCE_CADENCE_SENSOR\n        )\n\n        self._advertise()\n\n    def _irq(self, event, data):\n        # Track connections so we can send notifications.\n        if event == _IRQ_CENTRAL_CONNECT:\n            conn_handle, _, _ = data\n            self._connections.add(conn_handle)\n        elif event == _IRQ_CENTRAL_DISCONNECT:\n            conn_handle, _, _ = data\n            self._connections.remove(conn_handle)\n            # Start advertising again to allow a new connection.\n            self._advertise()\n        elif event == _IRQ_GATTS_INDICATE_DONE:\n            conn_handle, value_handle, status = data\n            \n    def set_csc(self, csc, notify=False, indicate=False):\n        # Write CSC Feature\n        self._ble.gatts_write(self._CSC_Feature_handle, struct.pack(\"2s\", CSC_FEATURES.to_bytes(2, 'little'))) # Change to your setup\n        if notify or indicate:\n            for conn_handle in self._connections:\n                if notify:\n                    # Notify connected centrals.\n                    self._ble.gatts_notify(conn_handle, self._CSC_Feature_handle)\n                if indicate:\n                    # Indicate connected centrals.\n                    self._ble.gatts_indicate(conn_handle, self._CSC_Feature_handle)         \n        \n        # Write sensor location\n        self._ble.gatts_write(self._Sensor_Location_handle, struct.pack(\"1s\", SENSOR_LOCATION_RIGHT_CRANK.to_bytes(1, 'little'))) # Change to your own sensor location\n        if notify or indicate:\n            for conn_handle in self._connections:\n                if notify:\n                    # Notify connected centrals.\n                    self._ble.gatts_notify(conn_handle, self._Sensor_Location_handle)\n                if indicate:\n                    # Indicate connected centrals.\n                    self._ble.gatts_indicate(conn_handle, self._Sensor_Location_handle)         \n\n        # Write the local value, ready for a central to read.\n        self._ble.gatts_write(self._CSC_Measurement_handle, struct.pack(\"%ds\" % 11, csc))\n        if notify or indicate:\n            for conn_handle in self._connections:\n                if notify:\n                    # Notify connected centrals.\n                    self._ble.gatts_notify(conn_handle, self._CSC_Measurement_handle)\n                if indicate:\n                    # Indicate connected centrals.\n                    self._ble.gatts_indicate(conn_handle, self._CSC_Measurement_handle)\n                    \n        # Write batterylevel\n        self._ble.gatts_write(self._BatteryLevel_handle, struct.pack(\"&lt;B\", convert(lastBattery, 29, 33, 0, 100)))\n        if notify or indicate:\n            for conn_handle in self._connections:\n                if notify:\n                    # Notify connected centrals.\n                    self._ble.gatts_notify(conn_handle, self._BatteryLevel_handle)\n                if indicate:\n                    # Indicate connected centrals.\n                    self._ble.gatts_indicate(conn_handle, self._BatteryLevel_handle)\n\n\n    def _advertise(self, interval_us=500000):\n        self._ble.gap_advertise(interval_us, adv_data=self._payload)\n\n# Init lastInterruptMillis, lastwheelUpdate and lastcrankUpdate\nlastInterruptMillis = millis()\nlastwheelUpdate     = millis()\nlastcrankUpdate     = millis()\n\n# Set up pin modes for input, interrupt for input\nD0 = Pin(2, Pin.IN, Pin.PULL_DOWN)                  # Wheel reed-sensor GPIO2\nD0.irq(trigger=Pin.IRQ_FALLING, handler=switchIsr)\n\nD2 = Pin(4, Pin.IN, Pin.PULL_DOWN)                  # Crank reed-sensor GPIO4\nD2.irq(trigger=Pin.IRQ_FALLING, handler=switchIsr)\n\nD1 = ADC(Pin(3))                                    # Batterylevel GPIO3\nD1.atten(ADC.ATTN_11DB)                             # Full range: 0 - 3.3v\n\nBLE = bluetooth.BLE()\ncsc = BLEcsc(BLE)\n\n# Setup RGB Led\nRed   = Pin(5, Pin.OUT, Pin.PULL_DOWN)              # Red led\nGreen = Pin(6, Pin.OUT, Pin.PULL_DOWN)              # Green led\nGreen.value(1)\nBlue  = Pin(7, Pin.OUT, Pin.PULL_DOWN)              # Blue led\n\n# Set up deep_sleep mode\nesp32.wake_on_ext1(pins = (D0, D2,), level = esp32.WAKEUP_ANY_HIGH)\n\n\n# Loop\nwhile True:\n    if (millis() - lastUpdate &gt;= UPDATE_INTERVAL_MS):\n        lastUpdate = millis()\n        \n        if len(csc._connections) != 0:\n            Red.value(0)\n            Green.value(0)\n            Blue.value(1)\n            \n            # blecsc_simulate_speed_and_cadence() # Simulate wheel and crank movement\n            swCount    += 1\n           \n            data_buf     = bytearray(11)\n \n            # The Cycle Measurement Characteristic data is defined here:\n            # https:\/\/www.bluetooth.com\/wp-content\/uploads\/Sitecore-Media-Library\/Gatt\/Xml\/Characteristics\/org.bluetooth.characteristic.csc_measurement.xml\n            # First byte is flags. Wheel Revolution Data Present (0 = false, 1 = true) = 1, Crank Revolution Data Present (0 = false, 1 = true), so the flags are 0x03 (binary 11 converted to HEX).\n            # buf&#91;0]=0x03;\n            \n            data_buf&#91;0] |= CSC_MEASUREMENT_WHEEL_REV_PRESENT | CSC_MEASUREMENT_CRANK_REV_PRESENT\n             \n            # Setting values for cycling measures (from the Characteristic File)\n            # Cumulative Wheel Revolutions (unitless)\n            # Last Wheel Event Time (Unit has a resolution of 1\/1024s)\n            # Cumulative Crank Revolutions (unitless)\n            # Last Crank Event Time (Unit has a resolution of 1\/1024s)\n            \n            data_buf&#91;1:4]  = cum_wheel_rev.to_bytes(4, 'little')\n            data_buf&#91;5:6]  = int(last_wheel_event).to_bytes(2, 'little')\n            data_buf&#91;7:8]  = cum_cranks.to_bytes(2, 'little')\n            data_buf&#91;9:10] = int(last_crank_event).to_bytes(2, 'little')\n\n            csc.set_csc(data_buf, notify=True, indicate=False)\n\n            # Read batterylevel\n            lastBattery    = convert(D1.read(), 0, 4095, 0, 33)           # Read batterylevel\n            print(\"Battery voltage:\", lastBattery)\n            \n            time.sleep_ms(1000)          \n        \n        else:\n            Red.value(0)\n            Green.value(1)\n            Blue.value(0)\n\n            print(\"Not yet connected\")\n            cum_wheel_rev    = 0                  # keep the cumulative wheel revolutions at 0 whilst not connected\n            cum_cranks       = 0                  # keep the cumulative crank revolutions at 0 whilst not connected\n            last_wheel_event = 0                  # keep the last wheel event at 0 whilst not connected\n            last_crank_event = 0                  # keep the last wheel event at 0 whilst not connected\n            \n    if ((millis() - lastInterruptMillis &gt;= DEEP_SLEEP_INTERVAL_MS) or (lastBattery &lt; minBattery)):\n        if (lastBattery &lt; minBattery):\n            Green.value(0)\n            Blue.value(0)\n            Red.value(1)\n        time.sleep(10)\n        print(\"Going to sleep now\")\n        deepsleep()\n<\/code><\/pre>\n\n\n\n<p>Toelichting:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Voor het advertisen van de bluetooth services maak ik gebruik van het ble_advertising example van de micropython github pagina: <a href=\"https:\/\/github.com\/micropython\/micropython\/blob\/master\/examples\/bluetooth\/ble_advertising.py\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/github.com\/micropython\/micropython\/blob\/master\/examples\/bluetooth\/ble_advertising.py<\/a><\/li>\n\n\n\n<li>Na de initialisatie van de verschillende micropython bibliotheken worden de verschillende variabelen en constanten gedefinieerd<\/li>\n\n\n\n<li>Vervolgens worden de bluetooth objecten en characteristic voor CSC measurement, feature, &#8230; en batterylevel gedefinieerd, dit conform de GATT specificatie supplement voor bluetooth: <a href=\"https:\/\/www.bluetooth.com\/specifications\/specs\/gatt-specification-supplement-5\/\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/www.bluetooth.com\/specifications\/specs\/gatt-specification-supplement-5\/<\/a><\/li>\n\n\n\n<li>Daarna worden er een aantal functies gedefinieerd, namelijk:\n<ul class=\"wp-block-list\">\n<li>millis(), python equivalent voor de C++ functie millis()<\/li>\n\n\n\n<li>switchIsr(), deze functie wordt aangeroepen bij iedere interrupt (lees iedere keer dat de reed-switch contact maakt) van de GPIO&#8217;s GPIO0 (D0) en GPIO4 (D2), deze functie zorgt voor ophoging van het aantal wiel- en crank omwentelingen<\/li>\n\n\n\n<li>blecsc_simulate_speed_and_cadence(), simulatie functie, kun je aanroepen als je nog geen proefopstelling of reed-switches hebt, deze simuleert wiel- en crank omwentelingen<\/li>\n\n\n\n<li>convert(), equivalent voor de C++ functie map()<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Vervolgens wordt de class BLEcsc gedefinieerd, met daarbinnen de volgende functies:\n<ul class=\"wp-block-list\">\n<li>__init__(): initialiseert bluetooth en start advertising van de services<\/li>\n\n\n\n<li>_irq(): interrupt afhandeling van een nieuwe connectie<\/li>\n\n\n\n<li>set_csc(): schrijft de gemeten wiel- en crankomwentelingen en batterijlevel naar de geconnecteerde GATT-clients<\/li>\n\n\n\n<li>_advertise(): hulp functie voor het adverteren van de services<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>In de Setup sectie worden een aantal variabelen van een waarde voorzien, de GPIO&#8217;s geinitialiseerd en de wake_on_ext1 functie van GPIO&#8217;s GPIO0 en GPIO4 geactiveerd, ook worden de GPIO&#8217;s voor de RGB led geinitialiseerd<\/li>\n\n\n\n<li>Daarna volgt de loop die er iedere 2 seconden voor zorgt dat als er een GATT-client geconnecteerd is de gemeten wiel- en crank omwentelingen en het level van de batterij doorgegeven wordt aan betreffende GATT-client<\/li>\n<\/ul>\n\n\n\n<p>De benodigde files kun je uiteraard downloaden:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>File<\/td><td>download locatie<\/td><td>Toelichting<\/td><\/tr><tr><td>ble_advertising.py<\/td><td><a href=\"https:\/\/raw.githubusercontent.com\/micropython\/micropython\/master\/examples\/bluetooth\/ble_advertising.py\" target=\"_blank\" rel=\"noreferrer noopener\">Github<\/a><\/td><td>Bibliotheek voor het advertisen van bluetooth services<\/td><\/tr><tr><td>myCadenceSensor.py<\/td><td><a href=\"https:\/\/drive.google.com\/file\/d\/1Mlt9k7HuetQoRqaNb_Dhp0hOzAs3T0m1\/view?usp=share_link\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/drive.google.com\/file\/d\/1Mlt9k7HuetQoRqaNb_Dhp0hOzAs3T0m1\/view?usp=share_link<\/a><\/td><td><\/td><\/tr><tr><td>install.bat<\/td><td><a href=\"https:\/\/drive.google.com\/file\/d\/1-gwOdbaXByOzhqYYPvZa_Vde9yyI_Aqi\/view?usp=share_link\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/drive.google.com\/file\/d\/1-gwOdbaXByOzhqYYPvZa_Vde9yyI_Aqi\/view?usp=share_link<\/a><\/td><td>Installatie script, pas wel eerst de COM poort en eventueel bestandslocaties aan<\/td><\/tr><tr><td>main.py<\/td><td><a href=\"https:\/\/drive.google.com\/file\/d\/19i0vmKWKnd4CZCgp9zUTcgJQYYvQg8vf\/view?usp=share_link\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/drive.google.com\/file\/d\/19i0vmKWKnd4CZCgp9zUTcgJQYYvQg8vf\/view?usp=share_link<\/a><\/td><td>Zorgt ervoor dat myCadenceSensor.py automatish gestart wordt na (re)boot van de ESP32C3<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Om de myCadenceSensor software \u00e9n Micropython software te installeren op de ESP32C3 kun je het batch-commando bestand install.bat gebruiken. Pas wel eerst de COM-poort en eventueel bestandslocatie van de files aan. Sluit de ESP32C3 middels een USB-C kabel aan op je laptop\/desktop.<\/p>\n\n\n\n<p>Stap 3. Testen python script + connectie met GATT-client<\/p>\n\n\n\n<p>Na de proefopstelling bij elkaar gestoken te hebben op een breadboard, en de ESP32C3 geprepareerd te hebben m.b.v. het install.bat script is het tijd om \u00e9\u00e9n en ander te testen.<\/p>\n\n\n\n<p>Zodra de ESP32C3 aangesloten wordt op een stroombron (laptop of adapter) begint hij met het adverteren van de bluetooth services onder de naam &#8220;myCadenceSensor&#8221; (pas eventueel deze naam aan op regel 70 van myCadenceSensory.py). Let op, probeer niet vanaf je telefoon of laptop het device te pairen, dit is namelijk niet geimplementeerd binnen de bluetooth stack van de Micropython distributie van de generic esp32c3 en resulteert in een crash van de software.<\/p>\n\n\n\n<p>Voor een eerste test kun je het beste de app &#8220;nRF Connect&#8221; van Nordic Semiconductor installeren op je telefoon, deze is te vinden in de Google play store: <a href=\"https:\/\/play.google.com\/store\/apps\/details?id=no.nordicsemi.android.mcp&amp;hl=nl&amp;gl=US\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/play.google.com\/store\/apps\/details?id=no.nordicsemi.android.mcp&amp;hl=nl&amp;gl=US<\/a><\/p>\n\n\n\n<p>Nadat je de app gestart hebt, kies binnen &#8220;Devices&#8221; voor het tabblad &#8220;Scanner&#8221; en klik op &#8220;SCAN&#8221;:<\/p>\n\n\n\n<p> <\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/Screenshot_20230130-152949-512x1024.jpg\" alt=\"\" class=\"wp-image-3160\" style=\"width:384px;height:768px\" width=\"384\" height=\"768\" srcset=\"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/Screenshot_20230130-152949-512x1024.jpg 512w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/Screenshot_20230130-152949-150x300.jpg 150w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/Screenshot_20230130-152949-768x1536.jpg 768w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/Screenshot_20230130-152949-1024x2048.jpg 1024w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/Screenshot_20230130-152949.jpg 1080w\" sizes=\"auto, (max-width: 384px) 100vw, 384px\" \/><\/figure>\n\n\n\n<p>Als het goed is verschijnt nu de device &#8220;myCadenceSensor&#8221; in het overzicht, klik op &#8220;CONNECT&#8221;, er wordt nu een nieuw tabblad geopend:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/Screenshot_20230130-153008-512x1024.jpg\" alt=\"\" class=\"wp-image-3161\" style=\"width:384px;height:768px\" width=\"384\" height=\"768\" srcset=\"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/Screenshot_20230130-153008-512x1024.jpg 512w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/Screenshot_20230130-153008-150x300.jpg 150w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/Screenshot_20230130-153008-768x1536.jpg 768w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/Screenshot_20230130-153008-1024x2048.jpg 1024w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/Screenshot_20230130-153008.jpg 1080w\" sizes=\"auto, (max-width: 384px) 100vw, 384px\" \/><\/figure>\n\n\n\n<p>Klik vervolgens op &#8220;Cycling Speed and Cadence&#8221;, en je krijgt de characteristics van de bluetooth service te zien, inclusief hun waarden:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/Screenshot_20230130-153025-512x1024.jpg\" alt=\"\" class=\"wp-image-3162\" style=\"width:384px;height:768px\" width=\"384\" height=\"768\" srcset=\"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/Screenshot_20230130-153025-512x1024.jpg 512w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/Screenshot_20230130-153025-150x300.jpg 150w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/Screenshot_20230130-153025-768x1536.jpg 768w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/Screenshot_20230130-153025-1024x2048.jpg 1024w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/Screenshot_20230130-153025.jpg 1080w\" sizes=\"auto, (max-width: 384px) 100vw, 384px\" \/><\/figure>\n\n\n\n<p>Druk nu een paar keer op de pushbuttons van de proefopstelling om wiel- en crank omwentelingen te simuleren, je ziet vervolges de waarden van Wheel rev en Crank rev oplopen:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/Screenshot_20230130-153043-512x1024.jpg\" alt=\"\" class=\"wp-image-3163\" style=\"width:384px;height:768px\" width=\"384\" height=\"768\" srcset=\"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/Screenshot_20230130-153043-512x1024.jpg 512w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/Screenshot_20230130-153043-150x300.jpg 150w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/Screenshot_20230130-153043-768x1536.jpg 768w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/Screenshot_20230130-153043-1024x2048.jpg 1024w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/Screenshot_20230130-153043.jpg 1080w\" sizes=\"auto, (max-width: 384px) 100vw, 384px\" \/><\/figure>\n\n\n\n<p>Let op, als er 60 seconden (DEEP_SLEEP_INTERVAL_MS op regel 11) geen wiel- of crank omwentelingen zijn gesignaleerd, gaat het device automatisch op Deepsleep en wordt de connectie verbroken !<\/p>\n\n\n\n<p>Nu dit werkt is de volgende stap om een verbinding te maken met je sporthorloge, in mijn geval een Garmin Forerunner 955 Solar. De volgende instructies zijn speficiek voor dit horloge, raadpleeg de handleiding van jou horloge\/device voor de instellingen die nodig zijn om verbinding te maken met een Cycling speed- and cadence sensor.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"351\" height=\"346\" src=\"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/image-16.png\" alt=\"\" class=\"wp-image-3164\" srcset=\"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/image-16.png 351w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/image-16-300x296.png 300w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/image-16-50x50.png 50w\" sizes=\"auto, (max-width: 351px) 100vw, 351px\" \/><\/figure>\n\n\n\n<p>Hou de knop (3) &#8220;UP&#8221; ingedrukt, het volgende scherm verschijnt:<\/p>\n\n\n\n<figure class=\"wp-block-image size-medium\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"300\" src=\"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160258-edited-300x300.jpg\" alt=\"\" class=\"wp-image-3167\" srcset=\"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160258-edited-300x300.jpg 300w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160258-edited-1024x1024.jpg 1024w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160258-edited-150x150.jpg 150w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160258-edited-768x768.jpg 768w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160258-edited-1536x1536.jpg 1536w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160258-edited.jpg 2048w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160258-edited-640x640.jpg 640w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160258-edited-666x666.jpg 666w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160258-edited-50x50.jpg 50w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/figure>\n\n\n\n<p>Druk de knop (4) &#8220;DOWN&#8221; meerdere keren in totdat de instelling &#8220;Sensors en accessoires&#8221; verschijnt:<\/p>\n\n\n\n<figure class=\"wp-block-image size-medium\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"300\" src=\"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160332-edited-300x300.jpg\" alt=\"\" class=\"wp-image-3169\" srcset=\"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160332-edited-300x300.jpg 300w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160332-edited-1024x1024.jpg 1024w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160332-edited-150x150.jpg 150w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160332-edited-768x768.jpg 768w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160332-edited-1536x1536.jpg 1536w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160332-edited.jpg 2048w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160332-edited-640x640.jpg 640w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160332-edited-666x666.jpg 666w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160332-edited-50x50.jpg 50w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/figure>\n\n\n\n<p>Druk op de knop (5) &#8220;Start-Stop&#8221; om deze keuze te bevestigen, en het volgende scherm verschijnt:<\/p>\n\n\n\n<figure class=\"wp-block-image size-medium\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"300\" src=\"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160521-edited-300x300.jpg\" alt=\"\" class=\"wp-image-3171\" srcset=\"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160521-edited-300x300.jpg 300w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160521-edited-1024x1024.jpg 1024w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160521-edited-150x150.jpg 150w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160521-edited-768x768.jpg 768w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160521-edited-1536x1536.jpg 1536w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160521-edited.jpg 2048w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160521-edited-640x640.jpg 640w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160521-edited-666x666.jpg 666w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160521-edited-50x50.jpg 50w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/figure>\n\n\n\n<p>Druk nogmaals op de knop (5) &#8220;Start-Stop&#8221; om de keuze te &#8220;Voeg nieuw toe&#8221; te bevestigen, en het volgende scherm verschijnt:<\/p>\n\n\n\n<figure class=\"wp-block-image size-medium\"><img loading=\"lazy\" decoding=\"async\" width=\"286\" height=\"300\" src=\"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160543-1-286x300.jpg\" alt=\"\" class=\"wp-image-3175\" srcset=\"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160543-1-286x300.jpg 286w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160543-1-976x1024.jpg 976w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160543-1-768x806.jpg 768w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160543-1-1463x1536.jpg 1463w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160543-1-1951x2048.jpg 1951w\" sizes=\"auto, (max-width: 286px) 100vw, 286px\" \/><\/figure>\n\n\n\n<p>Druk de knop (4) &#8220;DOWN&#8221; meerdere keren in totdat de optie &#8220;Snelheid\/cadanssensor&#8221; verschijnt. Bevestig deze keuze met de knop (5) &#8220;Start-stop&#8221;, en het horloge gaat op zoek naar de &#8220;myCadenceSensor&#8221; en vind deze<\/p>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-2 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-medium\"><img loading=\"lazy\" decoding=\"async\" width=\"294\" height=\"300\" data-id=\"3177\" src=\"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160616-294x300.jpg\" alt=\"\" class=\"wp-image-3177\" srcset=\"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160616-294x300.jpg 294w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160616-1004x1024.jpg 1004w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160616-768x784.jpg 768w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160616-1505x1536.jpg 1505w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160616-2007x2048.jpg 2007w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160616-50x50.jpg 50w\" sizes=\"auto, (max-width: 294px) 100vw, 294px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-medium\"><img loading=\"lazy\" decoding=\"async\" width=\"292\" height=\"300\" data-id=\"3178\" src=\"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160639-292x300.jpg\" alt=\"\" class=\"wp-image-3178\" srcset=\"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160639-292x300.jpg 292w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160639-996x1024.jpg 996w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160639-768x790.jpg 768w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160639-1494x1536.jpg 1494w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160639-1991x2048.jpg 1991w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160639-50x50.jpg 50w\" sizes=\"auto, (max-width: 292px) 100vw, 292px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-medium\"><img loading=\"lazy\" decoding=\"async\" width=\"274\" height=\"300\" data-id=\"3179\" src=\"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160724-1-274x300.jpg\" alt=\"\" class=\"wp-image-3179\" srcset=\"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160724-1-274x300.jpg 274w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160724-1-935x1024.jpg 935w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160724-1-768x841.jpg 768w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160724-1-1402x1536.jpg 1402w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160724-1-1870x2048.jpg 1870w\" sizes=\"auto, (max-width: 274px) 100vw, 274px\" \/><\/figure>\n<\/figure>\n\n\n\n<p>Druk op de knop (5) &#8220;Start-stop&#8221; om de &#8220;myCadenceSensor&#8221; toe te voegen. De sensor wordt automatisch verbonden. Druk daarna meerdere keren op de knop (6) &#8220;Back&#8221; om terug te keren naar het hoofdscherm.<\/p>\n\n\n\n<p>Om de werking van de Cycling speed en cadence sensor te testen starten we nu een fietstraining. Druk langere tijd op de knop (5) &#8220;Start-stop&#8221;, het volgende scherm verschijnt:<\/p>\n\n\n\n<figure class=\"wp-block-image size-medium\"><img loading=\"lazy\" decoding=\"async\" width=\"265\" height=\"300\" src=\"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160811-265x300.jpg\" alt=\"\" class=\"wp-image-3181\" srcset=\"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160811-265x300.jpg 265w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160811-905x1024.jpg 905w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160811-768x869.jpg 768w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160811-1357x1536.jpg 1357w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160811-1810x2048.jpg 1810w\" sizes=\"auto, (max-width: 265px) 100vw, 265px\" \/><\/figure>\n\n\n\n<p>Druk meerdere keren op de knop (4) &#8220;DOWN&#8221; om naar de activiteit fietsen te navigeren:<\/p>\n\n\n\n<figure class=\"wp-block-image size-medium\"><img loading=\"lazy\" decoding=\"async\" width=\"293\" height=\"300\" src=\"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160819-293x300.jpg\" alt=\"\" class=\"wp-image-3182\" srcset=\"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160819-293x300.jpg 293w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160819-1001x1024.jpg 1001w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160819-768x786.jpg 768w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160819-1502x1536.jpg 1502w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160819-2002x2048.jpg 2002w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160819-50x50.jpg 50w\" sizes=\"auto, (max-width: 293px) 100vw, 293px\" \/><\/figure>\n\n\n\n<p>Druk tweemaal op de knop (5) &#8220;Start-stop&#8221; om de training te starten, de &#8220;myCadenceSensor&#8221; wordt automatisch verbonden:<\/p>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-3 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"989\" height=\"1024\" data-id=\"3189\" src=\"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160827-2-989x1024.jpg\" alt=\"\" class=\"wp-image-3189\" srcset=\"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160827-2-989x1024.jpg 989w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160827-2-290x300.jpg 290w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160827-2-768x795.jpg 768w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160827-2-1484x1536.jpg 1484w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160827-2-1978x2048.jpg 1978w\" sizes=\"auto, (max-width: 989px) 100vw, 989px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"952\" height=\"1024\" data-id=\"3187\" src=\"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160856-1-952x1024.jpg\" alt=\"\" class=\"wp-image-3187\" srcset=\"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160856-1-952x1024.jpg 952w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160856-1-279x300.jpg 279w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160856-1-768x826.jpg 768w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160856-1-1428x1536.jpg 1428w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160856-1-1903x2048.jpg 1903w\" sizes=\"auto, (max-width: 952px) 100vw, 952px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"2135\" height=\"2199\" data-id=\"3188\" src=\"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160912-1.jpg\" alt=\"\" class=\"wp-image-3188\" srcset=\"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160912-1.jpg 2135w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_160912-1-291x300.jpg 291w\" sizes=\"auto, (max-width: 2135px) 100vw, 2135px\" \/><\/figure>\n<\/figure>\n\n\n\n<p>Druk nu wederom een aantal keren op de pushbuttons van de proefopstelling, en je ziet de afstand en snelheid oplopen:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"512\" height=\"1024\" src=\"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_163102-scaled-e1675094147992-512x1024.jpg\" alt=\"\" class=\"wp-image-3190\" srcset=\"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_163102-scaled-e1675094147992-512x1024.jpg 512w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_163102-scaled-e1675094147992-150x300.jpg 150w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_163102-scaled-e1675094147992-768x1536.jpg 768w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_163102-scaled-e1675094147992-1024x2048.jpg 1024w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/IMG_20230130_163102-scaled-e1675094147992.jpg 1280w\" sizes=\"auto, (max-width: 512px) 100vw, 512px\" \/><\/figure>\n\n\n\n<p>Nadat je de training hebt opgeslagen (Druk knop (5) &#8220;Start-stop&#8221; langere tijd in, en kies binnen het menu daarna voor &#8220;Sla op&#8221;) kun je de training raadplegen in Garmin Connect:<\/p>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-4 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"512\" height=\"1024\" data-id=\"3193\" src=\"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/Screenshot_20230130-163231-512x1024.jpg\" alt=\"\" class=\"wp-image-3193\" srcset=\"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/Screenshot_20230130-163231-512x1024.jpg 512w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/Screenshot_20230130-163231-150x300.jpg 150w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/Screenshot_20230130-163231-768x1536.jpg 768w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/Screenshot_20230130-163231-1024x2048.jpg 1024w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/Screenshot_20230130-163231.jpg 1080w\" sizes=\"auto, (max-width: 512px) 100vw, 512px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"512\" height=\"1024\" data-id=\"3192\" src=\"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/Screenshot_20230130-163159-512x1024.jpg\" alt=\"\" class=\"wp-image-3192\" srcset=\"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/Screenshot_20230130-163159-512x1024.jpg 512w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/Screenshot_20230130-163159-150x300.jpg 150w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/Screenshot_20230130-163159-768x1536.jpg 768w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/Screenshot_20230130-163159-1024x2048.jpg 1024w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/Screenshot_20230130-163159.jpg 1080w\" sizes=\"auto, (max-width: 512px) 100vw, 512px\" \/><\/figure>\n<\/figure>\n\n\n\n<p>De software werkt, nu de hardware.<\/p>\n\n\n\n<p>Stap 3. PCB ontwerp<\/p>\n\n\n\n<p>M.b.v. Autodesk Eagle heb ik het volgende ontwerp voor een printplaat gemaakt.<\/p>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default wp-block-gallery-5 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"880\" height=\"820\" data-id=\"3363\" src=\"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/08\/Cadencesensor-brd.png\" alt=\"\" class=\"wp-image-3363\" srcset=\"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/08\/Cadencesensor-brd.png 880w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/08\/Cadencesensor-brd-300x280.png 300w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/08\/Cadencesensor-brd-768x716.png 768w\" sizes=\"auto, (max-width: 880px) 100vw, 880px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"694\" data-id=\"3364\" src=\"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/08\/Cadencesensor-sch-1024x694.png\" alt=\"\" class=\"wp-image-3364\" srcset=\"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/08\/Cadencesensor-sch-1024x694.png 1024w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/08\/Cadencesensor-sch-300x203.png 300w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/08\/Cadencesensor-sch-768x520.png 768w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/08\/Cadencesensor-sch.png 1212w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n<\/figure>\n\n\n\n<p>Partlist:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"849\" height=\"346\" src=\"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/08\/image.png\" alt=\"\" class=\"wp-image-3369\" srcset=\"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/08\/image.png 849w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/08\/image-300x122.png 300w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/08\/image-768x313.png 768w\" sizes=\"auto, (max-width: 849px) 100vw, 849px\" \/><\/figure>\n\n\n\n<p>Toelichting:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Voorlopig twee 7-pins female headers ingetekend, dit om de ESP32C3 eenvoudig te kunnen vervangen indien nodig. Als de beschikbare ruimte in de behuizing dit niet toelaat, dan vervang ik die door male headers en soldeer ik de ESP32C3 hierop vast. <\/li>\n<\/ul>\n\n\n\n<p>Note: 10-8 Bij het assembleren van de PCB kwam ik tot de conclusie dat het monteren van de ESP32C3 op de PCB m.b.v. male- en female headers teveel hoogte\/ruimte zou innemen, daarom besloten om de ESP32C3 rechtstreeks m.b.v. male headers op de PCB te solderen. Is wat minder onderhoudsvriendelijk, maar het is niet anders.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>De RGB led komt haaks op de printplaat gesoldeerd en steekt aan de bovenkant door de behuizing, aandacht voor waterdicht monteren hiervan<\/li>\n\n\n\n<li>In Pad 1 en Pad 2 worden twee draadjes gesoldeerd, en aan de achterkant van de ESP32C3 op de batterypads gesoldeerd, misschien vervang ik dit nog door een JST aansluiting, afhankelijk van uitkomst 1e bullit<\/li>\n\n\n\n<li>Op de aansluitingen voor de Crank reel, Charger en Switch worden 90 graden 2 pins male headers gesoldeerd, zodat de behuizing van de electronica en batterij eenvoudig van het frame afgeklikt kan worden om de batterij op te kunnen laden.<\/li>\n<\/ul>\n\n\n\n<p>Uiteraard zijn de CAD en gerber files weer te downloaden:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>File<\/td><td>Download link<\/td><td>Toelichting<\/td><\/tr><tr><td>cadence_sensor.brd<\/td><td><a href=\"https:\/\/drive.google.com\/file\/d\/1ex3KKgROhpnCS2rucznjsG9N9lS3dZpj\/view?usp=drive_link\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">https:\/\/drive.google.com\/file\/d\/1ex3KKgROhpnCS2rucznjsG9N9lS3dZpj\/view?usp=drive_link<\/a><\/td><td>Autodesk Eagle: Board<\/td><\/tr><tr><td>cadense_sensor.sch<\/td><td><a href=\"https:\/\/drive.google.com\/file\/d\/1zHE4fW12rUPSz7ChkjH9MyqzBjXZU-FX\/view?usp=drive_link\" target=\"_blank\" rel=\"noreferrer noopener nofollow\">https:\/\/drive.google.com\/file\/d\/1zHE4fW12rUPSz7ChkjH9MyqzBjXZU-FX\/view?usp=drive_link<\/a><\/td><td>Autodesk Eagle: Schema<\/td><\/tr><tr><td>cadense_sensor_2023_07_08.zip<\/td><td><a href=\"https:\/\/drive.google.com\/file\/d\/1N4K_KAIcQnwwZ3KpXSGLUUkTolDhAHhP\/view?usp=drive_link\">https:\/\/drive.google.com\/file\/d\/1N4K_KAIcQnwwZ3KpXSGLUUkTolDhAHhP\/view?usp=drive_link<\/a><\/td><td>ZIP-file met de gerber files<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Stap 4. PCB besteld<\/p>\n\n\n\n<p>Bij\u00a0<a href=\"https:\/\/www.pcbgogo.com\/\" target=\"_blank\" rel=\"noreferrer noopener\">PCB gogo<\/a>\u00a0de in stap 3. ontwikkelde PCB besteld, hiervoor de volgende instellingen gebruikt:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"714\" height=\"759\" src=\"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/08\/Knipsel.png\" alt=\"\" class=\"wp-image-3365\" srcset=\"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/08\/Knipsel.png 714w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/08\/Knipsel-282x300.png 282w\" sizes=\"auto, (max-width: 714px) 100vw, 714px\" \/><\/figure>\n\n\n\n<p>De kosten bedragen maar liefst $ 5,- voor 5 printplaten. Heb deze bestelling gecombineerd met 2 andere PCB\u2019s en daardoor de verzend- en inklaringskosten laag kunnen houden. Totaal komen de kosten op zo&#8217;n \u20ac12,50 inclusief inklaringskosten.<\/p>\n\n\n\n<p>Stap 5. PCB assembleren<\/p>\n\n\n\n<p>De PCB&#8217;s zijn binnengekomen, zien er goed uit. Jammer is dat de partnummers en -waarden ontbreken op de PCB, maar zal wel een verkeerde keuze hebben gemaakt in het toekennen een label aan een layer of het exporteren naar Gerber.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"768\" src=\"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/08\/IMG_20230810_102511-1024x768.jpg\" alt=\"\" class=\"wp-image-3368\" srcset=\"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/08\/IMG_20230810_102511-1024x768.jpg 1024w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/08\/IMG_20230810_102511-300x225.jpg 300w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/08\/IMG_20230810_102511-768x576.jpg 768w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/08\/IMG_20230810_102511-1536x1152.jpg 1536w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/08\/IMG_20230810_102511-2048x1536.jpg 2048w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/08\/IMG_20230810_102511-440x330.jpg 440w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>We gaan de componenten op de PBC solderen, benodigd zijn:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>1x Reed switch<\/li>\n\n\n\n<li>1x RGB led cathode 5mm<\/li>\n\n\n\n<li>3x Weerstand 220 Ohm<\/li>\n\n\n\n<li>2x Weerstand 10K Ohm<\/li>\n\n\n\n<li>2x Weerstand 220K Ohm<\/li>\n\n\n\n<li>4x JST connector 2-voudig PCB mount, haaks<\/li>\n\n\n\n<li>2x male headers 7-voudig<\/li>\n\n\n\n<li>1x PCB<\/li>\n\n\n\n<li>1x ESP32C3<\/li>\n\n\n\n<li>Soldeerbout + tin<\/li>\n\n\n\n<li>Tangetje<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-medium\"><img loading=\"lazy\" decoding=\"async\" width=\"225\" height=\"300\" src=\"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/08\/IMG_20230810_165904-225x300.jpg\" alt=\"\" class=\"wp-image-3373\" srcset=\"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/08\/IMG_20230810_165904-225x300.jpg 225w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/08\/IMG_20230810_165904-768x1024.jpg 768w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/08\/IMG_20230810_165904-1152x1536.jpg 1152w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/08\/IMG_20230810_165904-1536x2048.jpg 1536w, https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/08\/IMG_20230810_165904-scaled.jpg 1920w\" sizes=\"auto, (max-width: 225px) 100vw, 225px\" \/><\/figure>\n\n\n\n<p>De headers had ik al eerder op de ESP32C3 gesoldeerd, dus deze stap sla ik nu over. Heb er voor gekozen om alleen die pinnen vast te solderen die gebruikt worden, dus D0, D1, D2, GND en 3V3. Mocht de ESP32C3 het begeven, dan hoef ik alleen die pinnen los te solderen om een vervangende ESP32C3 te plaatsen. We beginnen met het solderen van de weerstanden op de PCB, benodigd zijn:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>3x Weerstand 220 Ohm<\/li>\n\n\n\n<li>2x Weerstand 10K Ohm<\/li>\n\n\n\n<li>2x Weerstand 220K Ohm<\/li>\n<\/ul>\n\n\n\n<p>Steek de weerstanden op de juiste plek door de PCB, en soldeer ze vast.<\/p>\n\n\n","protected":false},"excerpt":{"rendered":"<p>Onlangs m&#8217;n Polar M600 sporthorloge vervangen door een Garmin Forerunner 955. Daar moeten natuurlijk van allerlei sensoren aan gekoppeld worden.<\/p>\n<p><a href=\"https:\/\/www.sydspost.nl\/index.php\/2023\/01\/31\/cycling-cadence-speed-sensor\/\" class=\"more-link\">Verder lezen<span class=\"screen-reader-text\">Cycling cadence &#038; Speed sensor<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_lmt_disableupdate":"","_lmt_disable":"","_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[48],"tags":[],"class_list":["post-3153","post","type-post","status-publish","format-standard","hentry","category-onderhanden-projecten"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Cycling cadence &amp; Speed sensor - Mijn domotica projecten<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.sydspost.nl\/index.php\/2023\/01\/31\/cycling-cadence-speed-sensor\/\" \/>\n<meta property=\"og:locale\" content=\"nl_NL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Cycling cadence &amp; Speed sensor - Mijn domotica projecten\" \/>\n<meta property=\"og:description\" content=\"Onlangs m&#8217;n Polar M600 sporthorloge vervangen door een Garmin Forerunner 955. Daar moeten natuurlijk van allerlei sensoren aan gekoppeld worden.Verder lezenCycling cadence &#038; Speed sensor\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.sydspost.nl\/index.php\/2023\/01\/31\/cycling-cadence-speed-sensor\/\" \/>\n<meta property=\"og:site_name\" content=\"Mijn domotica projecten\" \/>\n<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/syds.post\/\" \/>\n<meta property=\"article:published_time\" content=\"2023-01-31T19:36:28+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-08-10T15:11:23+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/image-15.png\" \/>\n<meta name=\"author\" content=\"Syds\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Geschreven door\" \/>\n\t<meta name=\"twitter:data1\" content=\"Syds\" \/>\n\t<meta name=\"twitter:label2\" content=\"Geschatte leestijd\" \/>\n\t<meta name=\"twitter:data2\" content=\"22 minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.sydspost.nl\\\/index.php\\\/2023\\\/01\\\/31\\\/cycling-cadence-speed-sensor\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.sydspost.nl\\\/index.php\\\/2023\\\/01\\\/31\\\/cycling-cadence-speed-sensor\\\/\"},\"author\":{\"name\":\"Syds\",\"@id\":\"https:\\\/\\\/www.sydspost.nl\\\/#\\\/schema\\\/person\\\/429f92898f98d9c4e01b8fad60975b21\"},\"headline\":\"Cycling cadence &#038; Speed sensor\",\"datePublished\":\"2023-01-31T19:36:28+00:00\",\"dateModified\":\"2023-08-10T15:11:23+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.sydspost.nl\\\/index.php\\\/2023\\\/01\\\/31\\\/cycling-cadence-speed-sensor\\\/\"},\"wordCount\":2080,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.sydspost.nl\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.sydspost.nl\\\/index.php\\\/2023\\\/01\\\/31\\\/cycling-cadence-speed-sensor\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.sydspost.nl\\\/wp-content\\\/uploads\\\/2023\\\/01\\\/image-15.png\",\"articleSection\":[\"Onderhanden projecten\"],\"inLanguage\":\"nl-NL\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.sydspost.nl\\\/index.php\\\/2023\\\/01\\\/31\\\/cycling-cadence-speed-sensor\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.sydspost.nl\\\/index.php\\\/2023\\\/01\\\/31\\\/cycling-cadence-speed-sensor\\\/\",\"url\":\"https:\\\/\\\/www.sydspost.nl\\\/index.php\\\/2023\\\/01\\\/31\\\/cycling-cadence-speed-sensor\\\/\",\"name\":\"Cycling cadence & Speed sensor - Mijn domotica projecten\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.sydspost.nl\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.sydspost.nl\\\/index.php\\\/2023\\\/01\\\/31\\\/cycling-cadence-speed-sensor\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.sydspost.nl\\\/index.php\\\/2023\\\/01\\\/31\\\/cycling-cadence-speed-sensor\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.sydspost.nl\\\/wp-content\\\/uploads\\\/2023\\\/01\\\/image-15.png\",\"datePublished\":\"2023-01-31T19:36:28+00:00\",\"dateModified\":\"2023-08-10T15:11:23+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.sydspost.nl\\\/index.php\\\/2023\\\/01\\\/31\\\/cycling-cadence-speed-sensor\\\/#breadcrumb\"},\"inLanguage\":\"nl-NL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.sydspost.nl\\\/index.php\\\/2023\\\/01\\\/31\\\/cycling-cadence-speed-sensor\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"nl-NL\",\"@id\":\"https:\\\/\\\/www.sydspost.nl\\\/index.php\\\/2023\\\/01\\\/31\\\/cycling-cadence-speed-sensor\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.sydspost.nl\\\/wp-content\\\/uploads\\\/2023\\\/01\\\/image-15.png\",\"contentUrl\":\"https:\\\/\\\/www.sydspost.nl\\\/wp-content\\\/uploads\\\/2023\\\/01\\\/image-15.png\",\"width\":1000,\"height\":792},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.sydspost.nl\\\/index.php\\\/2023\\\/01\\\/31\\\/cycling-cadence-speed-sensor\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.sydspost.nl\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Cycling cadence &#038; Speed sensor\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.sydspost.nl\\\/#website\",\"url\":\"https:\\\/\\\/www.sydspost.nl\\\/\",\"name\":\"Mijn domotica projecten\",\"description\":\"met Domoticz\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.sydspost.nl\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.sydspost.nl\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"nl-NL\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.sydspost.nl\\\/#organization\",\"name\":\"Mijn domotica projecten\",\"url\":\"https:\\\/\\\/www.sydspost.nl\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"nl-NL\",\"@id\":\"https:\\\/\\\/www.sydspost.nl\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.sydspost.nl\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/Domoticz-logo.png\",\"contentUrl\":\"https:\\\/\\\/www.sydspost.nl\\\/wp-content\\\/uploads\\\/2020\\\/12\\\/Domoticz-logo.png\",\"width\":256,\"height\":256,\"caption\":\"Mijn domotica projecten\"},\"image\":{\"@id\":\"https:\\\/\\\/www.sydspost.nl\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.sydspost.nl\\\/#\\\/schema\\\/person\\\/429f92898f98d9c4e01b8fad60975b21\",\"name\":\"Syds\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"nl-NL\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/fe78554f84c2c27fe1c643dcb3f2d0231d9a2dcdb96cc25f3538e38d9465e24d?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/fe78554f84c2c27fe1c643dcb3f2d0231d9a2dcdb96cc25f3538e38d9465e24d?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/fe78554f84c2c27fe1c643dcb3f2d0231d9a2dcdb96cc25f3538e38d9465e24d?s=96&d=mm&r=g\",\"caption\":\"Syds\"},\"sameAs\":[\"https:\\\/\\\/www.sydspost.nl\",\"https:\\\/\\\/www.facebook.com\\\/syds.post\\\/\"],\"url\":\"https:\\\/\\\/www.sydspost.nl\\\/index.php\\\/author\\\/wp_admin\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Cycling cadence & Speed sensor - Mijn domotica projecten","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.sydspost.nl\/index.php\/2023\/01\/31\/cycling-cadence-speed-sensor\/","og_locale":"nl_NL","og_type":"article","og_title":"Cycling cadence & Speed sensor - Mijn domotica projecten","og_description":"Onlangs m&#8217;n Polar M600 sporthorloge vervangen door een Garmin Forerunner 955. Daar moeten natuurlijk van allerlei sensoren aan gekoppeld worden.Verder lezenCycling cadence &#038; Speed sensor","og_url":"https:\/\/www.sydspost.nl\/index.php\/2023\/01\/31\/cycling-cadence-speed-sensor\/","og_site_name":"Mijn domotica projecten","article_author":"https:\/\/www.facebook.com\/syds.post\/","article_published_time":"2023-01-31T19:36:28+00:00","article_modified_time":"2023-08-10T15:11:23+00:00","og_image":[{"url":"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/image-15.png","type":"","width":"","height":""}],"author":"Syds","twitter_card":"summary_large_image","twitter_misc":{"Geschreven door":"Syds","Geschatte leestijd":"22 minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.sydspost.nl\/index.php\/2023\/01\/31\/cycling-cadence-speed-sensor\/#article","isPartOf":{"@id":"https:\/\/www.sydspost.nl\/index.php\/2023\/01\/31\/cycling-cadence-speed-sensor\/"},"author":{"name":"Syds","@id":"https:\/\/www.sydspost.nl\/#\/schema\/person\/429f92898f98d9c4e01b8fad60975b21"},"headline":"Cycling cadence &#038; Speed sensor","datePublished":"2023-01-31T19:36:28+00:00","dateModified":"2023-08-10T15:11:23+00:00","mainEntityOfPage":{"@id":"https:\/\/www.sydspost.nl\/index.php\/2023\/01\/31\/cycling-cadence-speed-sensor\/"},"wordCount":2080,"commentCount":0,"publisher":{"@id":"https:\/\/www.sydspost.nl\/#organization"},"image":{"@id":"https:\/\/www.sydspost.nl\/index.php\/2023\/01\/31\/cycling-cadence-speed-sensor\/#primaryimage"},"thumbnailUrl":"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/image-15.png","articleSection":["Onderhanden projecten"],"inLanguage":"nl-NL","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.sydspost.nl\/index.php\/2023\/01\/31\/cycling-cadence-speed-sensor\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.sydspost.nl\/index.php\/2023\/01\/31\/cycling-cadence-speed-sensor\/","url":"https:\/\/www.sydspost.nl\/index.php\/2023\/01\/31\/cycling-cadence-speed-sensor\/","name":"Cycling cadence & Speed sensor - Mijn domotica projecten","isPartOf":{"@id":"https:\/\/www.sydspost.nl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.sydspost.nl\/index.php\/2023\/01\/31\/cycling-cadence-speed-sensor\/#primaryimage"},"image":{"@id":"https:\/\/www.sydspost.nl\/index.php\/2023\/01\/31\/cycling-cadence-speed-sensor\/#primaryimage"},"thumbnailUrl":"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/image-15.png","datePublished":"2023-01-31T19:36:28+00:00","dateModified":"2023-08-10T15:11:23+00:00","breadcrumb":{"@id":"https:\/\/www.sydspost.nl\/index.php\/2023\/01\/31\/cycling-cadence-speed-sensor\/#breadcrumb"},"inLanguage":"nl-NL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.sydspost.nl\/index.php\/2023\/01\/31\/cycling-cadence-speed-sensor\/"]}]},{"@type":"ImageObject","inLanguage":"nl-NL","@id":"https:\/\/www.sydspost.nl\/index.php\/2023\/01\/31\/cycling-cadence-speed-sensor\/#primaryimage","url":"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/image-15.png","contentUrl":"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2023\/01\/image-15.png","width":1000,"height":792},{"@type":"BreadcrumbList","@id":"https:\/\/www.sydspost.nl\/index.php\/2023\/01\/31\/cycling-cadence-speed-sensor\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.sydspost.nl\/"},{"@type":"ListItem","position":2,"name":"Cycling cadence &#038; Speed sensor"}]},{"@type":"WebSite","@id":"https:\/\/www.sydspost.nl\/#website","url":"https:\/\/www.sydspost.nl\/","name":"Mijn domotica projecten","description":"met Domoticz","publisher":{"@id":"https:\/\/www.sydspost.nl\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.sydspost.nl\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"nl-NL"},{"@type":"Organization","@id":"https:\/\/www.sydspost.nl\/#organization","name":"Mijn domotica projecten","url":"https:\/\/www.sydspost.nl\/","logo":{"@type":"ImageObject","inLanguage":"nl-NL","@id":"https:\/\/www.sydspost.nl\/#\/schema\/logo\/image\/","url":"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2020\/12\/Domoticz-logo.png","contentUrl":"https:\/\/www.sydspost.nl\/wp-content\/uploads\/2020\/12\/Domoticz-logo.png","width":256,"height":256,"caption":"Mijn domotica projecten"},"image":{"@id":"https:\/\/www.sydspost.nl\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.sydspost.nl\/#\/schema\/person\/429f92898f98d9c4e01b8fad60975b21","name":"Syds","image":{"@type":"ImageObject","inLanguage":"nl-NL","@id":"https:\/\/secure.gravatar.com\/avatar\/fe78554f84c2c27fe1c643dcb3f2d0231d9a2dcdb96cc25f3538e38d9465e24d?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/fe78554f84c2c27fe1c643dcb3f2d0231d9a2dcdb96cc25f3538e38d9465e24d?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/fe78554f84c2c27fe1c643dcb3f2d0231d9a2dcdb96cc25f3538e38d9465e24d?s=96&d=mm&r=g","caption":"Syds"},"sameAs":["https:\/\/www.sydspost.nl","https:\/\/www.facebook.com\/syds.post\/"],"url":"https:\/\/www.sydspost.nl\/index.php\/author\/wp_admin\/"}]}},"modified_by":"Syds","jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.sydspost.nl\/index.php\/wp-json\/wp\/v2\/posts\/3153","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.sydspost.nl\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.sydspost.nl\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.sydspost.nl\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sydspost.nl\/index.php\/wp-json\/wp\/v2\/comments?post=3153"}],"version-history":[{"count":14,"href":"https:\/\/www.sydspost.nl\/index.php\/wp-json\/wp\/v2\/posts\/3153\/revisions"}],"predecessor-version":[{"id":3374,"href":"https:\/\/www.sydspost.nl\/index.php\/wp-json\/wp\/v2\/posts\/3153\/revisions\/3374"}],"wp:attachment":[{"href":"https:\/\/www.sydspost.nl\/index.php\/wp-json\/wp\/v2\/media?parent=3153"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sydspost.nl\/index.php\/wp-json\/wp\/v2\/categories?post=3153"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sydspost.nl\/index.php\/wp-json\/wp\/v2\/tags?post=3153"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}