{"id":29872617,"url":"https://github.com/aerecurax/bionic_arm","last_synced_at":"2025-07-30T21:33:18.030Z","repository":{"id":123480822,"uuid":"234197986","full_name":"aerecurax/bionic_arm","owner":"aerecurax","description":"A project that control a 3D printed bionic arm and makes use of a micro-controller (Arduino UNO) ","archived":false,"fork":false,"pushed_at":"2020-06-01T12:58:52.000Z","size":2137,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-06-13T15:02:45.704Z","etag":null,"topics":["arduino-nano","arm","bend","flex-sensor","micro-controller"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/aerecurax.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2020-01-16T00:06:01.000Z","updated_at":"2020-10-24T06:48:46.000Z","dependencies_parsed_at":null,"dependency_job_id":"5553bcff-f1d0-4481-9315-778039a65234","html_url":"https://github.com/aerecurax/bionic_arm","commit_stats":null,"previous_names":["aerecurax/bionic_arm"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/aerecurax/bionic_arm","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aerecurax%2Fbionic_arm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aerecurax%2Fbionic_arm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aerecurax%2Fbionic_arm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aerecurax%2Fbionic_arm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aerecurax","download_url":"https://codeload.github.com/aerecurax/bionic_arm/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aerecurax%2Fbionic_arm/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267944974,"owners_count":24170214,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-30T02:00:09.044Z","response_time":70,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["arduino-nano","arm","bend","flex-sensor","micro-controller"],"created_at":"2025-07-30T21:31:02.690Z","updated_at":"2025-07-30T21:33:18.014Z","avatar_url":"https://github.com/aerecurax.png","language":"C++","readme":"# Bionic Arm (using Gloves)\n A minute replication of the human arm\n\n\u003chr/\u003e\n\n### DEFINITION\nBionic Arm means an artificial arm. This project is a very minute/minor replication of the human arm’s capability. We were able to successfully implement fingers movement.\n\nThis process was achieved using 3D printed arm (material used, Polylactic acid (PLA), micro controller (Arduino Nano), flex/bend sensors (as the input component) and servo motors/actuators (as the output component).\n\n\u003cem\u003e\u003cb\u003e3D-Printed Arm\u003c/b\u003e\u003c/em\u003e: The arm was printed from the 3D models. Then coupled together. Find the 3D models here.\n\n\u003cem\u003e\u003cb\u003eArduino Nano\u003c/b\u003e\u003c/em\u003e: is a Nano module of Arduino (micro controller). This serves as the processing centre of the I/O components.\n\n\u003cem\u003e\u003cb\u003eFlex/Bend sensor\u003c/b\u003e\u003c/em\u003e: is an analog component, we can obtain degrees of bend from this component up to 180 degrees.\nActuators/Servo motors: this an output component, it reads values in degrees and rotates by the speculated degree.\n\n\u003chr/\u003e\n\n### HOW IT WORKS\nThe bend degree of the glove fingers (from the flex sensors which are attached on the gloves) are sent to the micro controller, (the reading ranges from analog components which includes flex sensor is 0 - 1024).\n\nThe values from each sensor (which is a number from 0- 1024) is mapped to degrees between and including 0 – 180. Then, the mapped value is written to the specified servo motor which then moves the finger its attached to.\n\nThis process is repeated continuously. See [Bionic Arm Project.pdf](/Bionic%20Arm%20Project.pdf) for diagram\n\n\u003chr/\u003e\n\n### CIRCURT SIMULATION\n![alt text](/simulation.jpeg \"Circuit simulation\")\n\n\u003chr/\u003e\n\n### Tools/Materials used\n1. Arduino IDE\n2. Micro controller (Arduino Nano) 3. 3D printed arm\n3. 5 servo motors/actuators\n4. 5 bend/flex sensors\n5. 5 resistors\n6. Double-Faced Circuit board\n7. Six6-Wattbatteries\n8. Heavy-duty glove\n9. Fishing line\n10. 3D printed arm\n\n    Others\n11. Jumper wires\n12. Soldering Iron and solder\n13. Glue gun\n14. Probably scissors, pliers, screwdrivers and blade\n\n##### Attached in the root folder of this document are:\nbionic_arm\nThis directory contains the main code that controls the micro controller. And it’s the program currently been run on the micro controller.\n\nSource: **bionic_arm/bionic_arm.ino**\n```c++\n#include \u003cServo.h\u003e\n\n// Prepare the servo/actuators object\nServo servo1;\nServo servo2;\nServo servo3;\nServo servo4;\nServo servo5;\n\n// Define the analog input pin to measure flex sensor position:\nconst int flexpin1 = 4;\nconst float SR1 = 25791.85; \nconst float BR1 = 16186.11; \n\nconst int flexpin2 = 3;\nconst float SR2 = 2134.84; \nconst float BR2 = 1141.14; \n\nconst int flexpin3 = 2;\nconst float SR3 = 802.68; \nconst float BR3 = 1732.52; \n\nconst int flexpin4 = 1;\nconst float SR4 = 2750.77; \nconst float BR4 = 2647.06; \n\nconst int flexpin5 = 0;\nconst float SR5 = 6611.91; \nconst float BR5 = 4526.23; \n\n// Resitance value and VCC\nconst float VCC = 4.98;\nconst float R_DIV = 47500.0;\n\nvoid setup() {\n  // Prepare Serial for logging\n  Serial.begin(9600);\n\n  // Configure all pins\n  pinMode(flexpin1, INPUT);\n  pinMode(flexpin2, INPUT);\n  pinMode(flexpin3, INPUT);\n  pinMode(flexpin4, INPUT);\n  pinMode(flexpin5, INPUT);\n\n  // Attach all servo motors\n  servo1.attach(3);\n  servo2.attach(4);\n  servo3.attach(5);\n  servo4.attach(6);\n  servo5.attach(8);\n}\n\nvoid loop() {\n  // Read flex inputs\n  int flexposition1 = analogRead(flexpin1); // Input value from the analog pin.\n  int flexposition2 = analogRead(flexpin2); // Input value from the analog pin.\n  int flexposition3 = analogRead(flexpin3); // Input value from the analog pin.\n  int flexposition4 = analogRead(flexpin4); // Input value from the analog pin.\n  int flexposition5 = analogRead(flexpin5); // Input value from the analog pin.\n\n  // Convert the flex reading to wider range ohms\n  float flexV1 = flexposition1 * VCC / 1023.0;\n  float flexR1 = R_DIV * (VCC / flexV1 - 1.0);\n\n  float flexV2 = flexposition2 * VCC / 1023.0;\n  float flexR2 = R_DIV * (VCC / flexV2 - 1.0);\n\n  float flexV3 = flexposition3 * VCC / 1023.0;\n  float flexR3 = R_DIV * (VCC / flexV3 - 1.0);\n\n  float flexV4 = flexposition4 * VCC / 1023.0;\n  float flexR4 = R_DIV * (VCC / flexV4 - 1.0);\n\n  float flexV5 = flexposition5 * VCC / 1023.0;\n  float flexR5 = R_DIV * (VCC / flexV5 - 1.0);\n  // End conversions\n\n  //Map al flex readings to degree and constrain to 180 degrees rotation\n  int servoposition1 = map(flexR1, SR1, BR1, 0, 180);;   // Output value to the servo.\n  servoposition1 = constrain(servoposition1, 0, 180);\n\n  int servoposition2 = map(flexR2, SR2, BR2, 180, 0);;   // Output value to the servo.\n  servoposition2 = constrain(servoposition2, 0, 180);\n  if(servoposition2 \u003e 140) servoposition2 = 140;\n\n  int servoposition3 = map(flexR3, SR3, BR3, 180, 0);;   // Output value to the servo.\n  servoposition3 = constrain(servoposition3, 0, 180);\n\n  int servoposition4 = map(flexR4, SR4, BR4, 180, 0);;   // Output value to the servo.\n  servoposition4 = constrain(servoposition4, 0, 180);\n\n  int servoposition5 = map(flexR5, SR5, BR5, 180, 0);;   // Output value to the servo.\n  servoposition5 = constrain(servoposition5, 0, 180);\n  // End mapping.\n\n  // Write positions to the servo motors or actuators\n  servo1.write(servoposition1);\n  servo2.write(servoposition2);\n  servo3.write(servoposition3);\n  servo4.write(servoposition4);\n  servo5.write(servoposition5);\n  // End writing\n\n  // Log all informations\n  Serial.print(\"----------------------------------------\");\n  Serial.print(\"\\nsensor1: \" + String(flexposition1));\n  Serial.print(\" flexR1: \" + String(flexR1));\n  Serial.print(\"  servo1: \" + String(servoposition1));\n  Serial.print(\"\\n\");\n  \n  Serial.print(\"sensor2: \" + String(flexposition2));\n  Serial.print(\" flexR2: \" + String(flexR2));\n  Serial.print(\"  servo2: \" + String(servoposition2));\n  Serial.print(\"\\n\");\n  \n  Serial.print(\"sensor3: \" + String(flexposition3));\n  Serial.print(\" flexR4: \" + String(flexR3));\n  Serial.print(\"  servo3: \" + String(servoposition3));\n  Serial.print(\"\\n\");\n  \n  Serial.print(\"sensor4: \" + String(flexposition4));\n  Serial.print(\" flexR4: \" + String(flexR4));\n  Serial.print(\"  servo4: \" + String(servoposition4));\n  Serial.print(\"\\n\");\n  \n  Serial.print(\"sensor5: \" + String(flexposition5));\n  Serial.print(\" flexR5: \" + String(flexR5));\n  Serial.print(\"  servo5: \" + String(servoposition5));\n  Serial.print(\"\\n--------------------------------------------------------------------\");\n  // End logging\n  \n  // Delay loop for 500 millisecond\n  delay(500);\n}\n```\ntest_case\nThis directory contains the test code used to obtain the values of the flex sensor.\n\nSource: **test_case.ino**\n```c++\n#include \u003cServo.h\u003e\n\n// Prepare the servo/actuators object\nServo servo;\n\n// Set analog input number\nconst int FLEX_PIN = 1;\nconst float VCC = 4.98;\nconst float R_DIV = 47500.0;\n\nconst float STRAIGHT_RESISTANCE = 233.30;\nconst float BEND_RESISTANCE = 186.46; \n\nvoid setup()\n{\n  Serial.begin(9600);\n  pinMode(FLEX_PIN, INPUT);\n\n  // set digital output number / servo motor number\n  servo.attach(5);\n}\n\nvoid loop()\n{\n  int flexADC = analogRead(FLEX_PIN);\n  Serial.println(\"Analog Read: \" + String(flexADC));\n  \n  float flexV = flexADC * VCC / 1023.0;\n  float flexR = R_DIV * (VCC / flexV - 1.0);\n  Serial.println(\"Flex Resistance: \" + String(flexR) + \" ohms\");\n\n  float angle = map(flexR, STRAIGHT_RESISTANCE, BEND_RESISTANCE, 180, 0);\n  angle = constrain(angle, 0, 180);\n  servo.write(angle);\n  \n  Serial.println(\"Angle: \" + String(angle) + \" degrees\");\n  Serial.println();\n\n  delay(1000);\n}\n\n```\n**ISSUES AND OBSERVATIONS**\nSee [Bionic Arm Project.pdf](/Bionic%20Arm%20Project.pdf)\n\n#### LICENSE\n```java\nMIT License\n\nCopyright (c) 2020 developersunesis\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n\n```\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faerecurax%2Fbionic_arm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faerecurax%2Fbionic_arm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faerecurax%2Fbionic_arm/lists"}