안녕하세요.
세강의 @joonghoonlee입니다.
덧글 알림을 보고 들어갔다가 무척 기분 좋은 일이 있었습니다.
첫 관련 질문을 받았습니다.
그래서 일을 잠시 옆으로 밀어놓고 탄력받은 김에 올리기로 했습니다.
제가 무슨일을 하냐구요?
딱히 비밀도 아니고 궁금하신분이 있다면 조만간 알려드리겠습니다 ^^!
자!!
먼저 구성은 이러합니다.
SG-Power_AMP와 ARDUINO UNO 그리고 SG-90 서보모터와 생체측정패드입니다.
물론 브레드보드와 연결선도 필요합니다.
여기에 보이시는 SG-Power_AMP는 네 맞습니다. 직접 그려서 외주업체에 맡겨 만든겁니다!!ㅎㅎ
SG-Power_AMP에 생체측정 케이블 연결부에 생체측정케이블을 연결시킨 후,
(TP1,VCC,GND,TP2)부분을 아래의 그림과 같이 연결합니다.
SG-90 서브모터는 선 색깔에 맞추어 아두이노에 연결합니다. 이때 연결은 PWM이 지원
되는 아두이노 포트를 사용합니다.
생체전극은 빨강, 초록, 검정이 있습니다. 아래 사진과 같이 제어하고자 하는 근육면에
빨강과, 초록을 부착하고 검정은 측정하고자 하는 근육면과 다른부분에 부착하여 검정(생체
접지)으로 측정하고자 하는 근육면의 신호가 흘러들어가지 않도록 부착하여 줍니다.
실제 테스트에서는 왼손의 근육을 이용하였으나, 제어하고 싶은 근육부위에 부착하여
사용하셔도 됩니다. 검정(생체 접지)을 측정하고자 하는 근육에 같이 사용하게 되면 사용
은 가능하나 만족스러운 데이터를 얻기 힘들 수 있으니 주의합시다.
아래 사진을 참고하시면됩니다.
회로 구성은 다음과 같습니다.
자 회로구성이 완료 되었다면 이제 아두이노 코딩을 해보도록 하겠습니다.
먼저 컴퓨터에 아두이노를 연결해 주시고, 설치된 아두이노 프로그램을 실행합니다.
코딩을 위한 세팅부터 알려드리겠습니다.
물론 기존에 아두이노를 접해보신분은 잘 하시겠지만 이왕하는거 아무것도 모르는 분들을 위해
지금당장 아두이노를 사와도 사용하실수 있도록!!
메뉴에서 [툴] ▶ [보드] ▶ [Arduino Uno] 선택 (처음 한번 세팅되면 다음부터는생략)
메뉴에서 [툴] ▶ [포트] ▶ [COMx] 선택 (단, x는 [시작] ▶ [제어판] ▶ [장치관리자] ▶
[포트] ▶ [Ardino Uno(COMx)]로 보이는 상태에서 x에 대항되는 숫자)
셋팅이 완료되었다면 코딩 준비가 완료된 것입니다.
준비가 되었으니 본격적으로 코딩을 해볼까요?!
#include<Servo.h>
Servo myservo1;
Servo myservo2;
int i = 90;
int up = 380; //팔 위 근전도값 지정
int down = 350; //팔 아래 근전도값 지정
//근전도는 사람마다 전극을 붙이는곳 마다 값이 다르게 뜨기 때문에
//아날로그 입력을 받아서 플로터로 확인후 up, down 값을 자신에 맞게조절
void setup() {
Serial.begin(9600); //서보모터 초기화
myservo1.attach(9); // 1번모터 9번 핀에서 사용
myservo1.write(90); // 1번 모터 90도로 초기화
myservo2.attach(10); // 2번모터 9번 핀에서 사용
myservo2.write(20); // 2번 모터 20도로 초기화
}
void loop() {
int sensorValue1 = analogRead(A0); //근전도 값 받아옴
int sensorValue2 = analogRead(A1); //근전도 값 받아옴
//Serial.println(sensorValue1);
//Serial.println(sensorValue2);
//모터2번 조종
if (sensorValue1 > up + 10 && sensorValue2 > down + 10) {
myservo2.write(170);
delay(3000);
myservo2.write(20);
delay(3000);
}
//모터1번 조종
if (sensorValue1 > up) {
i = i + 20;
if (i >= 150) {
i = 100;
}
delay(700);
}
else if (sensorValue2 > down) {
i = i - 20;
if ( i <= 20) {
i = 20;
}
delay(700);
}
myservo1.write(i);
delay(100);
}
상단 메뉴에서 스케치 아이콘을 찾아 클릭하고 아래쪽에 "스케치 컴파일" ▶ "업로딩" ▶
"업로딩 완료및 "avrdude done, Thank you" 메시지가 나타나는지 확인!
자 이제 모든 준비가 완료 되었습니다.
이제 응용해서 활용하시면 됩니다 ^^
물론
아~ 이렇게되는거구나 하고 넘어가셔도 됩니다!! ㅎㅎ
Q&A는스팀달러 안받고 올려드려요 ㅎㅎ
대답하신 중훈님이야 말할 것도 없지만 질문하신 분도 그 방면 지식이 대단하신듯....즉 저는 질문도 답도 넘 어려붱~~~^^
아..이건 쉽게 말하면, 프라모델 조립 순서같은겁니다.
음~ 컴퓨터언어 역시 [갑골문,금문,전서,예서....초서..아..더생각나지 않네요;;] 서체의 종류처럼 다양하기에
그 종류를 정해서 어떻게 붓을 잡는지부터(붓잡는건 붓펜가지고 동영상보며 연습중입니다 ㅎㅎ] 써놓은 글입니다 ㅎㅎ 내용은 모르더라도 흐름은 아마 모든 학문이 비슷 하리라 봅니다 ^^
안녕하세요~ 제 팔로워분들 글보다가 혼자 자주만나뵙게되어
이렇게 찾아왔어요 :)
이렇게 정성스레 써주신 글 보상 받으시면 좋겠는걸요!!
변경해주세요!!(저는 뉴비라.0.02밖에 안오르지만 ㅠ)
^^;; 저도 이제 일주일 차 뉴비라면 뉴비입니다 ㅎㅎ반갑습니다 ㅎㅎ참고로 글을 게시하시면 삭제도 안되거니와 보팅설정 변경도 아마 안될겁니다 ^^~ 참고 하셔요 ㅎㅎ 곧 놀러 가겠습니다~ㅎㅎㅎ
오오오 두고두고 보려고 리스팀 했습니다!!!
진짜 대단하십니다... 관심있는 분야였는데, 문과라 이해도 힘들었었는데
전문적으로 하시는 분을 뵈니 그저 감탄...
기판설계도 직접 할줄 알고 코딩도 직접 할 줄 알아야 하는군요!!!
코딩은 나름 조금 공부하다가 지지부진한 상태고,
기판설계는 너무어려워서... 그냥 포기했었는데 어허허허
몇가지 궁금한 점이 있습니다!
코드 중에서 AnalogRead() 함수의 경우 따로 생성하지 않으셨는데,
이건 기본적으로 상속받아오는건가요?!!
그리고 기본 변수로 잡아주신 UP과 DOWN의 근전도 값은
미리 가지고 있는 데이터를 바탕으로 잡아주신건가요?!!
제가 지식이 적어서... 어허허허
자세한 설명 감사합니다!!! 앞으로 많이 배워가겠습니다!ㅎㅎㅎ
아닙니다 ^^;;
아두이노에서 제공하는 기본소스들이 정말 다양해서 사실 저도 좀 놀랐습니다 ㅎㅎ
analogRead(pin)은 아날로그핀에 연결된 아날로그 신호 선의 전압값을 디지털 값으로 읽어 들이는 함수입니다
아두이노 우노 보드는 6개의 아날로그 핀을 열어두었습니다
혹시 다른 보드를 활용하실 수도 있으니 다른보드도 알려드리겠습니다.
미니 보드와 나노 보드는 8개
메가 보드는 16개를 열어둡니다.
10비트 AD변환기(아날로그-디지털변환기)를 가지고 있습니다.
여기서 10비트란 측정한 0 ~5V사이의 아날로그 입력전압을2^10(2의 10승) 즉
1024 단계로 나눠 디지털 값으로 바꿔 준게되며,
5V / 1024 는 0.0049V(4.9mV) 단위로 측정할 수 있다는 것으로 표현 할수도 있습니다 ^^;;;
하나를 설명하려다 보니
하위 목록까지 점점 설명하느라 길어졌네요 ^^;;ㅎㅎㅎ
다음 질문이 있다면 시간을 두고 포스팅으로 좀 쉽게 사진이랑 넣어 설명해 드리겠습니다 ㅎㅎ
그래봐야 서너시간 정도 밖에 안걸립니다 ㅎㅎㅎ
아날로그 핀을 의미하는 거였군요...!!! 생각보다 정말 기능이
많아서 신기합니다 ㅎㅎㅎ
그나저나 서너시간 밖에 안걸리신다니...어허허허
제가 공부를 좀 더 해서 정말 중요한 것, 모르는 것만 질문드려야 겠습니다 ㅎㅎㅎ
자세히 설명해주셔서 감사합니다!!! 다음 포스팅도 기대하겠습니다!!! ㅎㅎㅎ
^^물어봐 주셔서 감사합니다 ㅎㅎ
kr-science를 활성화 시키는 첫시작 같은 기분이네요 ㅎㅎ