정전식 터치 센싱 3D 프린팅 의수 - 아두이노 제어 구동
부품 및 소모품
| 부품 |
수량 |
| Arduino UNO |
1 |
| MG996R 서보 모터 |
1 |
| TTP223 정전식 터치 센서 |
2 |
| 점퍼 와이어 (범용) |
1세트 |
| 브레드보드 (범용) |
1 |
앱 및 온라인 서비스
프로젝트 소개
이 프로젝트는 기존 3D 프린팅 의수에 적용할 수 있는 아이디어입니다. 기존 전동 의수에서 정전식 터치 센싱 기술을 손가락 구동에 활용한 사례를 찾지 못했습니다. 이 프로젝트는 아두이노 정전식 터치 센싱 구동과 e-NABLE 피닉스 핸드 디자인 리믹스라는 두 가지 멋진 요소를 결합했습니다.
피닉스 핸드는 본래 신체 동력(바디 파워드) 방식입니다. 이를 위해 필요한 부품 설계를 선택해 전동 의수로 변환했습니다.
정전식 터치 센싱의 장점은 터치만으로 손가락을 쉽게 구동할 수 있다는 점입니다. 현재 모델은 개별 손가락 제어는 불가능하며, 무게 지지력과 파지력 향상을 위한 추가 개발이 필요합니다.
부품 준비
- Arduino Uno
- TTP223 터치 센서 - 2개
- MG996R 서보 모터
피닉스 핸드 조립: 상세 조립 과정은 다음 단계들에서 설명합니다.
플렉서(굴곡선): 낚시줄 사용 / 익스텐서(신전선): 고무줄 사용
필요 도구: 3D 프린터, 글루건
1단계: 손 출력
이 프로젝트는 기존에 설계된 e-NABLE 피닉스 핸드를 사용합니다.
제 필요에 맞춰 다음 부품만 출력했습니다.
손가락
- finger_phalanx.stl - 4개
- fingertip_long.stl - 2개
- fingertip_short.stl - 2개
- thumb_phalanx.stl - 1개
- thumbtip.stl - 1개
손바닥
- palm_right_new_supports.stl - 1개
스냅 핀
- fingertip_pin.stl - 4개
- knuckle_pin_long.stl - 1개
- knuckle_pin_short.stl - 2개
- thumb_knuckle_pin.stl - 1개
- thumbtip_pin.stl - 1개
이미 상세한 제작 지침이 있으므로 여기선 자세히 다루지 않습니다.
Flsun 3D 프린터로 출력했으며 총 10-12시간 소요되었습니다.
(참고: 이 부품들은 오른손용입니다.)
2단계: 손 조립
피닉스 핸드 제작 과정은 이미 공개되어 있으니 자세히 다루지 않습니다. 궁금한 점은 댓글로 남겨주세요.
플렉서는 낚시줄, 익스텐서는 고무줄을 사용했습니다.
** 원활한 결합을 위해 약간의 샌딩이 필요할 수 있습니다.
3단계: 전자 부품
구동은 2개의 터치 센서(TTP223)로 제어합니다. 터치 센서 입력이 서보 모터를 통해 손가락을 펴고 접게 합니다.
회로도 및 아두이노 코드:
#include <Servo.h>
Servo myservo;
#define CTS1Pin 2 // 정전식 터치 센서 1 핀
#define CTS2Pin 3 // 정전식 터치 센서 2 핀
int pos;
void setup() {
myservo.attach(9); // 서보를 핀 9에 연결
}
void loop() {
int CTSValue1 = digitalRead(CTS1Pin);
int CTSValue2 = digitalRead(CTS2Pin);
if (CTSValue1 == HIGH) {
for (pos = 0; pos <= 180; pos += 1) {
myservo.write(pos);
delay(15);
}
}
if (CTSValue2 == HIGH) {
for (pos = 180; pos >= 0; pos -= 1) {
myservo.write(pos);
delay(15);
}
}
}
즐거운 메이킹!
읽어주셔서 감사합니다. 더 필요한 정보가 있으면 댓글로 물어봐 주세요. 최선을 다해 답변드리겠습니다.
코드
#include <Servo.h>
Servo myservo;
#define CTS1Pin 2
#define CTS2Pin 3
int pos;
void setup() {
myservo.attach(9);
}
void loop() {
int CTSValue1 = digitalRead(CTS1Pin);
int CTSValue2 = digitalRead(CTS2Pin);
if (CTSValue1 == HIGH) {
for (pos = 0; pos <= 180; pos += 1) {
myservo.write(pos);
delay(15);
}
}
if (CTSValue2 == HIGH) {
for (pos = 180; pos >= 0; pos -= 1) {
myservo.write(pos);
delay(15);
}
}
}
회로도
회로도 이미지 참조