얼마전에 핸드폰을 바꿨다.
갤럭시 S23+.
갤럭시 노트9에서 바꿨는데, 신세계다. 성능도 좋고 이쁘다.
사진 백업을 해야하니 구글 포토를 보았는데, 아래 동영상을 발견하게 되었다.
기계공학과 복수전공을 하면서 졸업 논문으로 로봇 팔을 만든 것들이었다.
지금 봐도 신기하다. 로봇 팔이라니.
언젠간 한번 문서로 정리해서 기록해야겠다는 생각을 했는데,
쇠뿔도 단김에 빼라는 말이 있지 않은가.
빅데이터분석기사 필기와 리눅스마스터 1급1차의 합격 소식을 받은 지금,
추친력을 얻어 Flex sensor로 구동되고, FSR sensor를 활용하여 피드백을 받는 로봇 손 제작의 포스팅을 해보겠다.
1. 만들게 된 계기
졸업 작품을 만들면서 같은 반 학생들은 6팀정도 되었는데,
드론을 띄우는 사람도 있었고, 짐볼같은 게 굴러가면서 균형을 맞추며 서빙하는 로봇을 만드는 팀도 있었다.
우리는 ' 뉴스에서 로봇팔이 요리도한다, 로봇팔이 카페도 한다.' 이런 이야기가 나오기에 로봇팔은 점점 유망한 사업이 될 것이라고 생각했고, 인간 모양의 로봇팔을 만들어, 인간의 손동작을 따라하는 로봇팔을 만들자는 의견으로 수렴했다.
2. 준비물
1. 플렉스 센서 5개
2. 서보 모터 5개
3. 아두이노
4. 9V 리튬배터리 2개
5. PCB 판
6. 학교에 비치되어 있는 3D 프린터기
핵심은 위 그림의 플렉스 센서이다.
대략 PCB 판에 저항 달고 아두이노에 연결하면, 플렉스 센서가 동작하는 원리이다.
많이 기울일수록 플렉스 센서의 값이 작아지고,
적게 기울이면 플렉스 센서의 값이 커진다.
일단 쫙 펴져있으면 기본값으로 1024 값을 가진다.
3. 회로도
실제로 만들었을 땐 이런 모양.
장갑에 플렉스 센서를 부착하고,
플렉스 센서를 PCB판에 연결하고,
저항을 단 뒤 아두이노로 연결하면 기본 회로가 완성된다.
플렉스 센서의 구부러진 정도를 각 변수에 담고, 변수에 담은 것으로 모터를 제어하는 기본적인 회로 구성이다.
저항은 쫙 폈을때 1024값, 플렉스센서가 최대로 구부러지면 600정도의 값을 가졌다.
장갑은 원래 상남자답게 목장갑으로 테스트했는데,
목장갑을 자주 꼈다 뺐다 하니까 목장갑이 까끌까끌해져서 나중엔 끼는게 두려워지는 지경에 이르렀다.
결국 다이소에서 5천원 주고 스키장갑 구매하고 거기다 옮겼다.
4. 코드
#include <Servo.h>
Servo servo1;
const int flexpin = A0;
void setup()
{
Serial.begin(9600);
servo1.attach(9);
}
void loop()
{
int flexposition;
int servoposition;
flexposition = analogRead(flexpin);
servoposition = map(flexposition, 0, 1023, 0, 90);
servoposition = constrain(servoposition, 0, 90);
servo1.write(servoposition);
Serial.print("센서 값: ");
Serial.print(flexposition);
Serial.print(" 서보 위치: ");
Serial.println(servoposition);
delay(1000);
}
플렉스 센서가 하나 있을 때의 코드이다.
flexpin을 A0로 변경하고 플렉스 센서 핀을 A0에 연결된 것으로 한다.
그리고 map() 함수의 범위를 0부터 1023으로 수정하여 아날로그 입력 범위에 맞게 조정하면 간단하게 코드가 완성 되는 것을 볼 수 있다.
대략 600~1000 사이 값의 센서값에 따라 손이 움직이는 것을 구현했고, 그 값에 비례하여 서보의 위치값을 수정해주면 된다.
5. 3D 프린터 출력 & 메이킹 과정
현실적으로 손 모양을 직접 모델링하는 것은 우리 레벨이 아니었고,
inmoov에 무료로 손 모양을 배포해주는 분이 있어서 위 부품들을 하나하나 그대로 출력하는 노가다를 했다.
부품 하나 뽑는데 8시간까지 걸리므로 학교 3D 프린터실을 정말 많이 왔다갔다하며 노동했다.
3D 프린터가 손을 뽑는 과정. 신기하다.
하지만 굉장히 느린속도로 제작된다.
8시간정도 기다린 팔의 일부분이 완성되어 서보모터를 심어줄 수 있게 되었다.
다 심어주고 실제로 서보들을 낚시줄을 이용해 로봇팔과 연결, 움직여가며 테스트를 해본 결과.
상상이상으로 서보모터에 낀 낚시줄들이 서로 간섭이 심해 새끼 손가락이 움직이면 검지가 따라 움직이는 등 물리적인 설계에서 난항을 겪게 되었다.
그 간섭을 막기 위해 스프링을 10개정도 추가로 구입했다.
그리고 학교 천원 커피숍에서 구해온 스트로우를 각각 구멍에 장착하여 낚시줄 간 간섭을 없애는 방법을 고안했다.
무식한 방법이긴 하지만, 생각보다 잘 굴러간다.
여기 있는 메이킹들을 전부 조합하면,
이런식으로 뭔가 엄청 복잡한 느낌이 된다.
이게 각 서보마다 연결된 낚시줄의 장력이 다르고, 플렉스 센서도 각각 조금씩 가지는 값이 다르다보니
플렉스 센서 하나하나를 서보모터의 값과 연결해 맞춰주는 작업을 해주었다.
6. 완성
두구두구!
통 하나를 모델링하여 3D 프린터로 뽑고 복잡한 회로도를 박스 안에 깔끔하게 집어넣었다.
그리고 리튬 배터리는 3분정도 동작하면 방전되어버려서
아두이노에 연결할 샤오미 보조배터리 하나 추가해서 굴러가게끔 했다.
선들을 케이블타이로 정리하니 굉장히 이쁘지 않은가?
7. 수상 & 여기서 배웠던 점
https://me.hanyang.ac.kr/front/bulletin/bulletinSub2/view?id=24809&page=3
기계공학부 종합 설계에서 장려상을 수상할 수 있었다!
필자는 솔직히 좀 더 유연하게 움직이는 작품이 되길 원했다.
하지만 이 때 독학으로 아두이노를 처음 배웠고, 3D 프린터에 대한 지식도 없었다.
기계과 복수전공을 하며 맨날 유체역학, 기계진동학, 열역학 이런 것들만 하다가
무언가 진짜 '기계'를 만들어 본 것은 이게 처음이었다.
쉽지않았지만 만들면서 재밌었던 경험이었고,
느끼기에 코딩하는 것보다 '물리적으로 구현하기 정말 어렵다'는 것을 배운 보람찬 시간이었다.😊
참고로, 위 링크에서 최우수상을 받은 [삼각바퀴의 변형을 이용한 장애물 극복 로봇 메커니즘]
4년이 지난 현 시점에서도 이 팀은 아직도 기억난다.
미니카 같은게 자기 키만한 장애물 넘어가는데 진짜 기립박수 때리고싶었다.👏