Pi-loton Project a bicycle Cadence, Speedometer and Odometer flow

This is just an experimental speedometer and odometer flow. Full project journal at https://github.com/CSCado/Pi-Loton-Project . This project is subject for peers review. comments, feedbacks and improvements are highly welcome.

[{"id":"5a5ea2f2.e652dc","type":"rpi-gpio in","z":"eee72f37.6dc038","name":"Pedal Sensor","pin":"35","intype":"up","debounce":"25","read":false,"x":187,"y":224,"wires":[["4d5a13de.9b38ec","e7ea3d50.4b1b6","ee89f341.369cf"]]},{"id":"98c086d6.6dbd08","type":"rpi-gpio in","z":"eee72f37.6dc038","name":"Wheel Sensor","pin":"40","intype":"up","debounce":"1","read":false,"x":103.05561065673828,"y":506.1389865875244,"wires":[["945935de.4bd0e8","bbce5d39.5bd04","fda24ec1.8c0dc"]]},{"id":"4d5a13de.9b38ec","type":"switch","z":"eee72f37.6dc038","name":"","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"0","vt":"num"}],"checkall":"true","repair":false,"outputs":1,"x":356,"y":282,"wires":[["a686b3b8.402338"]]},{"id":"a686b3b8.402338","type":"interval-length","z":"eee72f37.6dc038","format":"mills","bytopic":false,"minimum":"","maximum":"","window":"","timeout":false,"msgTimeout":"","minimumunit":"msecs","maximumunit":"msecs","windowunit":"msecs","msgTimeoutUnit":"msecs","reset":false,"startup":false,"msgField":"payload","timestampField":"timestamp","repeatTimeout":false,"name":"","x":388.00001525878906,"y":138.57143592834473,"wires":[["b7508949.c572a8"],[]]},{"id":"8dee18cb.3647e","type":"function","z":"eee72f37.6dc038","name":"Crank RPM","func":"var x = msg.payload;\nvar rev = (60000/x);// milliseconds in a minute\nvar msg1 = {payload:rev};\nreturn msg1;","outputs":1,"noerr":0,"x":750.428581237793,"y":145.00002765655518,"wires":[["abbe2edb.a4f88","e68dbde5.97eb8"]]},{"id":"abbe2edb.a4f88","type":"ui_gauge","z":"eee72f37.6dc038","name":"","group":"df423369.1e76","order":2,"width":"4","height":"3","gtype":"gage","title":"Cadence","label":"RPM","format":"{{value | number: 0}}","min":0,"max":"200","colors":["#00b500","#e6e600","#ca3838"],"seg1":"","seg2":"","x":552.9999923706055,"y":282,"wires":[]},{"id":"e7ea3d50.4b1b6","type":"trigger","z":"eee72f37.6dc038","op1":"","op2":"0","op1type":"nul","op2type":"num","duration":"2","extend":false,"units":"s","reset":"0","bytopic":"all","name":"","x":253,"y":351,"wires":[["abbe2edb.a4f88","e68dbde5.97eb8"]]},{"id":"ee89f341.369cf","type":"trigger","z":"eee72f37.6dc038","op1":"","op2":"1","op1type":"nul","op2type":"num","duration":"2","extend":false,"units":"s","reset":"1","bytopic":"all","name":"","x":265,"y":387,"wires":[["abbe2edb.a4f88","e68dbde5.97eb8"]]},{"id":"88a44ce4.9e933","type":"ui_gauge","z":"eee72f37.6dc038","name":"","group":"df423369.1e76","order":4,"width":"4","height":"2","gtype":"gage","title":"Wheel Speed","label":"KMPH","format":"{{value| number:0 }}","min":0,"max":"75","colors":["#00b500","#e6e600","#ca3838"],"seg1":"","seg2":"","x":1057.2503128051758,"y":671.1669573783875,"wires":[]},{"id":"abd42eb2.0c93e8","type":"interval-length","z":"eee72f37.6dc038","format":"mills","bytopic":false,"minimum":"","maximum":"","window":"","timeout":false,"msgTimeout":"","minimumunit":"msecs","maximumunit":"msecs","windowunit":"msecs","msgTimeoutUnit":"msecs","reset":false,"startup":false,"msgField":"payload","timestampField":"timestamp","repeatTimeout":false,"name":"","x":420.33333587646484,"y":625.4167404174805,"wires":[["49f7f80e.6f7f38"],[]]},{"id":"49f7f80e.6f7f38","type":"function","z":"eee72f37.6dc038","name":"Wheel Rpm","func":"var x = (msg.payload)/10;\nvar rev = (60000/x);\nvar msg1 = {payload:rev};\nreturn msg1;","outputs":1,"noerr":0,"x":470.61031341552734,"y":530.6208896636963,"wires":[["910fb33a.eb335"]]},{"id":"910fb33a.eb335","type":"function","z":"eee72f37.6dc038","name":"wheel speed calculator","func":"var rpm = msg.payload;\nvar radius = 30.48; // Wheel base\nvar cm_in_meters= 100;\nvar sec_in_an_hour = 3600;\nvar circumference_cm = (2* Math.PI) * radius;\n\nvar dist_meters =  (circumference_cm * rpm )/ cm_in_meters;\nvar meters_per_sec =dist_meters /3600; \n//var km_per_hour = (km_per_sec * sec_in_an_hour * 1.8);\n//var msg1 = {payload: km_per_hour};\nvar msg1 = {payload: meters_per_sec};\nreturn msg1;","outputs":1,"noerr":0,"x":691.2500038146973,"y":612.2500247955322,"wires":[["d5469fbc.adcaf","74eae5f3.60d65c"]]},{"id":"4307b027.66a52","type":"function","z":"eee72f37.6dc038","name":"Odometer Counter","func":"var x = msg.payload;\nvar local=flow.get('data') || {};\nif (local.count===undefined)//test exists\n{\n  local.count=0;\n}\nlocal.count += x/2; // change to distance  \nflow.set('data',local);\nvar msg1 = {payload: local.count};\nreturn msg1;\n","outputs":1,"noerr":0,"x":166.66668319702148,"y":947.9999866485596,"wires":[["7d06f4fc.898a3c","c80fca23.dbd388"]]},{"id":"b7abe1b9.8ace5","type":"change","z":"eee72f37.6dc038","name":"","rules":[{"t":"delete","p":"data","pt":"flow"}],"action":"","property":"","from":"","to":"","reg":false,"x":495.6666793823242,"y":1121.000072479248,"wires":[["7d06f4fc.898a3c","c80fca23.dbd388"]]},{"id":"7d06f4fc.898a3c","type":"ui_text","z":"eee72f37.6dc038","group":"df423369.1e76","order":10,"width":"8","height":"1","name":"","label":"Distance  in Meters","format":"{{msg.payload | number: 3}}","layout":"row-spread","x":177.66669845581055,"y":1065.3333587646484,"wires":[]},{"id":"4c80f1f8.7e46e","type":"inject","z":"eee72f37.6dc038","name":"","topic":"","payload":"0","payloadType":"num","repeat":"","crontab":"","once":false,"onceDelay":0.1,"x":241.6666717529297,"y":1109,"wires":[["b7abe1b9.8ace5","7d06f4fc.898a3c"]]},{"id":"d5469fbc.adcaf","type":"function","z":"eee72f37.6dc038","name":"unit converter KPH","func":"var x = msg.payload;\nvar mps_to_kmph = 3.6;\nvar adjustment = 2.9;\nvar z = (mps_to_kmph * adjustment) * x;\nvar msg1 = {payload:z};\nreturn msg1;","outputs":1,"noerr":0,"x":769.0000915527344,"y":531.666784286499,"wires":[["3a7f6418.c779dc"]]},{"id":"90d9c959.9542c8","type":"ui_button","z":"eee72f37.6dc038","name":"","group":"df423369.1e76","order":11,"width":"8","height":"1","passthru":false,"label":"Distance Reset","tooltip":"","color":"","bgcolor":"","icon":"","payload":"0","payloadType":"num","topic":"","x":324.3333282470703,"y":1220,"wires":[["b7abe1b9.8ace5","7d06f4fc.898a3c","c80fca23.dbd388"]]},{"id":"945935de.4bd0e8","type":"trigger","z":"eee72f37.6dc038","op1":"","op2":"0","op1type":"nul","op2type":"num","duration":"2","extend":false,"units":"s","reset":"0","bytopic":"all","name":"","x":860.6666870117188,"y":893,"wires":[["88a44ce4.9e933","e634acdc.d7123"]]},{"id":"bbce5d39.5bd04","type":"trigger","z":"eee72f37.6dc038","op1":"","op2":"1","op1type":"nul","op2type":"num","duration":"2","extend":false,"units":"s","reset":"1","bytopic":"all","name":"","x":872.6666870117188,"y":929,"wires":[["88a44ce4.9e933","e634acdc.d7123"]]},{"id":"c80fca23.dbd388","type":"ui_text","z":"eee72f37.6dc038","group":"df423369.1e76","order":6,"width":"8","height":"1","name":"","label":"Distance  in Miles","format":"{{(value)/1609.3 | number: 3}}","layout":"row-spread","x":868,"y":1183.6666259765625,"wires":[]},{"id":"e68dbde5.97eb8","type":"ui_chart","z":"eee72f37.6dc038","name":"","group":"df423369.1e76","order":9,"width":"8","height":"3","label":"Cadence RPM Chart ","chartType":"line","legend":"false","xformat":"HH:mm:ss","interpolate":"linear","nodata":"","dot":false,"ymin":"0","ymax":"200","removeOlder":"20","removeOlderPoints":"","removeOlderUnit":"60","cutout":0,"useOneColor":false,"colors":["#1f77b4","#aec7e8","#ff7f0e","#2ca02c","#98df8a","#d62728","#ff9896","#9467bd","#c5b0d5"],"useOldStyle":false,"outputs":1,"x":601.6667098999023,"y":360.666711807251,"wires":[[]]},{"id":"e634acdc.d7123","type":"ui_gauge","z":"eee72f37.6dc038","name":"","group":"df423369.1e76","order":3,"width":"4","height":"2","gtype":"gage","title":"Aprx Ave Speed","label":"km","format":"{{value| number:0 }}","min":0,"max":"75","colors":["#00b500","#e6e600","#ca3838"],"seg1":"","seg2":"","x":1361.8610763549805,"y":636.2224016189575,"wires":[]},{"id":"fda24ec1.8c0dc","type":"switch","z":"eee72f37.6dc038","name":"","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"0","vt":"num"}],"checkall":"true","repair":false,"outputs":1,"x":149.99999618530273,"y":709.3333377838135,"wires":[["abd42eb2.0c93e8","7dd5e471.f23b3c"]]},{"id":"2d270dc0.249862","type":"function","z":"eee72f37.6dc038","name":"Odometer test function","func":"var rpm = msg.payload;\nvar radius = 30.48; // Wheel base\nvar cm_in_m= 100;\nvar sec_in_an_hour = 3600;\nvar circumference_cm = (2* Math.PI) * radius;\n\nvar dist_m =  (circumference_cm * rpm )/ cm_in_m;\n//var meters_per_sec =dist_m /60; \nvar msg1 = {payload: dist_m};\nreturn msg1;","outputs":1,"noerr":0,"x":173.33338928222656,"y":850.0000324249268,"wires":[["4307b027.66a52"]]},{"id":"7dd5e471.f23b3c","type":"change","z":"eee72f37.6dc038","name":"","rules":[{"t":"change","p":"payload","pt":"msg","from":"0","fromt":"num","to":"1","tot":"num"}],"action":"","property":"","from":"","to":"","reg":false,"x":144.3798828125,"y":770.6103515625,"wires":[["2d270dc0.249862"]]},{"id":"7f4e6b32.a80f44","type":"function","z":"eee72f37.6dc038","name":"Average Speed Test","func":"var x = msg.payload;\nvar mstokph = 3.6;\nvar z = (x * mstokph);\nvar msg1 = {payload:z};\nreturn msg1;","outputs":1,"noerr":0,"x":422.26564025878906,"y":881.0898942947388,"wires":[[]]},{"id":"74eae5f3.60d65c","type":"trigger","z":"eee72f37.6dc038","op1":"","op2":"","op1type":"nul","op2type":"payl","duration":"600","extend":false,"units":"ms","reset":"","bytopic":"all","name":"","x":808.7656555175781,"y":728.500036239624,"wires":[[]]},{"id":"8c6ee7c2.d6cc48","type":"combine-statistic","z":"eee72f37.6dc038","name":"","topic":"","operator":"mean","falsy":"include","defer":"25","timeout":0,"distinction":"_msgid","x":1409.1840591430664,"y":889.7066841125488,"wires":[["e634acdc.d7123"]]},{"id":"b7508949.c572a8","type":"smooth","z":"eee72f37.6dc038","name":"","property":"payload","action":"mean","count":"5","round":"","mult":"single","x":573.5117416381836,"y":138.69140911102295,"wires":[["8dee18cb.3647e"]]},{"id":"3a7f6418.c779dc","type":"trigger","z":"eee72f37.6dc038","op1":"","op2":"","op1type":"nul","op2type":"payl","duration":"600","extend":false,"units":"ms","reset":"","bytopic":"all","name":"","x":1028.01171875,"y":533.734375,"wires":[["88a44ce4.9e933","8c6ee7c2.d6cc48"]]},{"id":"df423369.1e76","type":"ui_group","z":"","name":"Bicycle Crank and Wheel Sensors","tab":"b12ebccc.218e98","disp":false,"width":"8","collapse":false},{"id":"b12ebccc.218e98","type":"ui_tab","z":"","name":"Speedometer and RPM Test Project","icon":"dashboard","disabled":false,"hidden":false}]

Flow Info

Created 5 years, 3 months ago
Rating: 5 1

Owner

Actions

Rate:

Node Types

Core
  • change (x2)
  • function (x7)
  • inject (x1)
  • switch (x2)
  • trigger (x6)
Other

Tags

  • raspberry
  • pi
  • reed
  • switch
Copy this flow JSON to your clipboard and then import into Node-RED using the Import From > Clipboard (Ctrl-I) menu option