산업안전보조의수_김주황_강원대
활동 보고서
김*황
2025-08-22
(G-bridge 로봇 의수 프로젝트) 저희 팀명은 "in the Friends"로 산업을 뜻하는 영단어 "industry"와 친구를 합성한 용어로 의미있는 문장으로 다듬어 사용하였습니다. 따라서 저희 팀의 주제는 산업 역군이 사용하였을때 도움을 줄 수 있는 의수를 만들고자 하였고, 기존의 의수 혹은 외골격의 부족한점을 채울수 있는 기능을 넣자는 아이디어를 가지고 시작하였습니다. 기본적으로 손가락에 적외선 센서를 달고 물건의 길이 혹은 거리를 측정하는 기능, 압력을 세게 쥐었을때 의수또한 반응하여 파지력을 높이는 기능 등의 산업에서 "작업에 필요한"기능들을 고안하였고, 뜨거운 물체를 감지하면 빠르게 손을 펴게 만들어 인간의 반사반응을 극대화 해주는 장치, 혈압센서를 달고 위험군의 혈압이라면 작동을 중지하여 휴식을 취하게 할 수 있는 기능 등의 산업에서 "안전에 필요한"기능들을 고안하였습니다. 하지만, 외골격 모델링을 마치고, 프린팅 시간을 예상한 결과 제시간에 맞추지 못한다는 사실을 알고, 팀원들과 늦은시간 회의를 통해 또다른 로봇손을 만들어 우리가 생각한 기능들이 구현된다는 점을 보여주자는 의견을 좁혀졌고, 기능들 또한 기존의 예상했던 기능에서 두가지를 남기고 제시간에 구현이 힘들거같은 기능은 과감히 버려 문제를 해결했습니다. 결국 최종적으로 로봇 손의 작동을 구현하지는 못했으나, 회로와 부품들 측면에서 로봇 손만 있으면 구현이 가능할 정도로 완성을 시켜 놓았고, 원활히 작동함을 확인하였습니다. 아래는 저희 팀에서 작성한 코드의 예제 이며, 코드의 구성은 간단하게 만하면, 외부 함수를 생성하여 모터의 동작들을 구현하고, loop 반복문에서 조건문을 설정하여, 특정 조건에 특정 기능을 수행 하도록 명령하였습니다. 기존에는 5개의 모터와 구부림 센서를 부착하려 하였으나 센서들을 아날로그 신호에 부착해야하지만, 아두이노의 아날로그 핀이 부족하여, 모터를 4개 센서를 3개 사용하여 문제를 해결하였습니다. (예제) #include <Servo.h> #include "DHT.h" #include <Wire.h> #include <LiquidCrystal_I2C.h> #define DHTPIN 7 #define DHTTYPE DHT11 LiquidCrystal_I2C lcd(0x27,16,2); DHT dht(DHTPIN, DHTTYPE); Servo servo[4]; int flexPin[4] = {A0, A1, A2}; int servoPin[4] = {9, 5, 6}; int FSRsensor = A3; int value = 0; int led = 3; void setup() { dht.begin(); pinMode(led, OUTPUT); for (int i = 0; i < 3; i++) { servo[i].attach(servoPin[i]); } } void control(int index) { int flex_pos = analogRead(flexPin[index]); int servo_pos = map(flex_pos, 500, 1000, 0, 180); servo_pos = constrain(servo_pos, 0, 180); servo[index].write(servo_pos); delay(5); } void strong() { for (int i = 0; i < 3; i++) { servo[i].write(0); } lcd.setCursor(0,0); //텍스트가 LCD에 나타날 위치 lcd.print("Strong Grip mode"); lcd.setCursor(0,1); lcd.print("Go for it!"); digitalWrite(led, LOW); } void stretch() { for (int i = 0; i < 3; i++) { servo[i].write(180); } lcd.setCursor(0,0); //텍스트가 LCD에 나타날 위치 lcd.print("Careful! so hot"); lcd.setCursor(0,1); lcd.print("take Your Hand!"); digitalWrite(led, HIGH); } void loop() { value = analogRead(FSRsensor); float temperature = dht.readTemperature(); lcd.init(); // LCD초기 설정 lcd.backlight(); // LCD초기 설정 if (value > 500){ strong(); } else if (temperature > 30){ stretch(); } else{ for (int i = 0; i < 3; i++) { control(i); } lcd.setCursor(0,0); //텍스트가 LCD에 나타날 위치 lcd.print("Free Mode"); lcd.setCursor(3,1); lcd.print("Move Freely!"); digitalWrite(led, LOW); delay(5); } }
코드에디터









