6th Finger Prosthetic V2- POWERED
Model details
- Platform
Printables
- Price
- Free
- License
- CC-BY-NC-SA
- Non-commercial use only, with credit; share remixes under the same license.
- Formats
- 3MFSTL
- 14 Likes
- 40 Downloads
- 0 Makes
- 2 Comments
- 920 Views
Description
Uses micro servo, bend sensor, and Arduino Nano to power the ligament for the finger.
EXTERNAL PARTS USED: Arduino Nano MG90S Micro Servo
SpectraFlex Flex Sensor by Spectra Symbol (55mm)
HUION Artist Glove
Fishing Line (Braided 60lb)
10K Resistor
M3 Hardware
Wiring diagram (connect GND to GND on Nano and VIN to 5v on Nano):
Credit:
Ligament assembled using trimmed servo horn (to just have the part that slides on the servo), and glued servo spool around it (pulley item).
Hot glue sensor into the inside of the glove to track the bend of your pinky.
QUESTIONS? Please DM. Next update will use custom PCB to help the lack of power to the servo and increase system stability (OPEN TO COLLABORATIONS FOR THAT).
Arduino CODE (includes 3 second calibration times for extended and retraction):
#include <Servo.h>
Servo myServo;
const int flexsensor = A0; const int servoPin = 11;
float emaValue = 0; const float alpha = 0.15; // Smoothing
int sensorMin = 0; int sensorMax = 1023;
const unsigned long sampleDuration = 3000; // 3 seconds
// === Nonlinear mapping === float nonlinearMap(float x) { float normalized = constrain((x - sensorMin) / float(sensorMax - sensorMin), 0.0, 1.0); float curved = pow(normalized, 1.5); // Exponential response return curved * 180.0; }
void setup() { Serial.begin(9600); myServo.attach(servoPin);
// === CALIBRATION STEP 1 === Serial.println("Calibration: Straighten your finger..."); myServo.write(0); // Move to open position delay(3000); // Give user time sensorMin = averageSensor(sampleDuration); Serial.print("Sensor MIN: "); Serial.println(sensorMin);
// === CALIBRATION STEP 2 === Serial.println("Now curl your finger fully..."); myServo.write(180); // Move to closed position delay(3000); // Give user time sensorMax = averageSensor(sampleDuration); Serial.print("Sensor MAX: "); Serial.println(sensorMax);
emaValue = analogRead(flexsensor); // Initialize EMA }
void loop() { int rawValue = analogRead(flexsensor); emaValue = alpha * rawValue + (1 - alpha) * emaValue;
float servoAngle = nonlinearMap(emaValue); servoAngle = constrain(servoAngle, 0, 180);
myServo.write((int)servoAngle);
// Debug output Serial.print("Raw: "); Serial.print(rawValue); Serial.print(" | EMA: "); Serial.print((int)emaValue); Serial.print(" | Servo: "); Serial.println((int)servoAngle);
delay(10); }
// === Helper: Sensor Averaging === int averageSensor(unsigned long duration) { unsigned long start = millis(); long sum = 0; int count = 0;
while (millis() - start < duration) { int val = analogRead(flexsensor); sum += val; count++; delay(10); }
return sum / count; }
Similar models
Jewelry Box Lock Servo
MARS, Medication Alarm Reminder System
Wind Turbine
Automatic Key Stroker
Third Thumb
Vertical button with arduino WEMOS
Automated 7 Segment mechanical counter
Treat dispencer (with a twist)
Arduino Giga Development Platform
Mini Moving Head Projector
RC Benchy 2.0
Names are used only to indicate the source of a result. Polyzon is not affiliated with the listed sites.


Comments