아두이노에서 ADXL345 3축 기울기센서를 이용해 기울기를 알아내는 방법을 알아보자.



기울기센서는 크게 분류해서 2종류로 나눌 수 있다.

  • 3축 기울기 정보 x, y, z를 따로따로 받는 센서

  • SDO, SDA, SDL을 이용해 하나의 정보로 받는 센서

x, y, z 축의 정보를 따로따로 받는 센서는 센서의 연결부분에 x, y, z라고 명시적으로 표현되어 있다. 대표적으로 ADXL335가 있는데, 이 센서가 ADXL345보다 쓰기 편해서 인터넷에서 찾을 수 있는 기울기 센서 관련 많은 문서들이 이 기울기 센서를 사용하고 있다. 반면 SDO, SDA, SDL을 사용하는 센서는 위의 센서보다 훨씬 빠른 속도로 기울기를 측정할 수 있는 장점이 있으나, 비교적 사용이 어려운 점이 있다. ADXL345는 3축의 정보를 하나의 값으로 받아 다른 방법이 필요하다. ADXL345를 사용하기 위해서는 다음 사이트의 예제 코드가 필요하다.

https://www.sparkfun.com/tutorials/240

위의 사이트에서 기본적인 센서 제어 코드를 받을 수 있다. 이번 글에서는 이를 약간 응용하여 시각적으로 기울기를 표현하는 것을 최종 목표로 하도록 하겠다. 


먼저 아두이노와 센서를 연결해 기울기를 읽어들이는 작업을 해보자.

ADXL345는 3축의 가속도를 센서에서 읽어 아두이노로 정보를 전송한다. 센서의 CS핀에 일정한 전압을 걸어주게 되면 센서가 활성화되어서 SDO, SDA, SDL 핀을 이용해 x, y, z축 기울기의 정보를 보내주게 된다. 다음 예제를 통해 이 방법을 알아보겠다.


1. 필요 부품

아두이노 보드, ADXL345 3축 가속도 센서, 케이블...

 

2. 회로도

센서와 보드를 다음과 같이 연결한다.

센서 - 아두이노 보드

GND - GND

VCC - 3.3V

CS   - 10

SDO - 12

SDA - 11

SCL - 13





3. 아두이노 코드


4. 실행 결과

위 코드에서 보았듯이 ADXL345는 받아들인 센서값을 16진수 6자리로 받아들이게 된다. 이를 앞에서부터 2자리씩 잘라 각 성분을 x, y, z에 대입하면 0~255 사이의 정수로 된 성분값을 얻어낼 수 있다. 이 코드를 실행시킨 결과는 다음과 같다.

이 결과를 보면 센서에서 읽어들인 x, y, z 기울기 성분값이 ','를 경계로 차례대로 출력되고 있는 것을 볼 수 있다.

 그럼 두번째로 이를 보다 시각적으로 알아보기 쉽게 하기 위해 Processing을 이용해 정육면체가 기우는 것으로 표현해보자. 

 Processing은 Arduino가 시리얼 모니터에 출력한 값을 읽어들여 사용하는 방식으로 서로 연결해 사용할 수 있다. 이를 코드로 표현해보자.


5. Processing 코드


ADXL345에서 받은 x, y, z의 성분값을 각변위벡터로 표현할 수 있으므로 정육면체가 기울어지는 정도를 x, y, z에 비례하도록 하면 받은 데이터값에 따라 기울어지는 것을 볼 수 있다. 사람의 입장에서 보았을 때 보다 직관적일 수 있도록 센서의 입장에서 보이는 데이터인 x, y, z에 좌우를 대칭변환시켰다. 실행 결과는 다음과 같다.


6. 결론

이 글을 통해 기울기 센서중 하나인 ADXL345를 아두이노에서 사용하는 방법과 이를 프로세싱에 연동해 가시적으로 표현하는 방법을 알아보았다. 기울기 센서를 이용해 실제 물체가 어떻게 기울어져있는지를 알 수 잇었다는 것이 의미가 있었던 것 같다. 아쉬웠던 점은 기울기를 측정할 수 있는 점을 이용해서 활용하지 못했다는 점이였다. 그래서 다음에는 기울기를 이용해 물체를 움직이거나 상태를 측정하는 활동을 하고 싶다.

Posted by 김건우_ 트랙백 0 : 댓글 0

댓글을 달아 주세요

Arduino and Processing Serial Communication

작성자 : 권혁원


1. 개요

아두이노는 수 많은 센서들을 이용하여 어느 분야에서든지 유용하게 쓰일 수 있따. 또한 프로세싱은 코딩을 통하여 무궁무진한 그래픽을 구현하는 언어이다. 이 두 언어가 서로 통신이 가능하다는 말을 듣고서 호기심이 생겨 어떠한 방법으로 통신을 하는지, 어떤 코드를 이용하면 통신이 가능하게 할 수 있는지 등을 알아보고싶어 이 프로젝트를 계획하였다.


2. Code

<Arduino Code (INPUT)>

<Processing Code (OUTPUT)


위의 코드를 보면 아두이노와 프로세싱의 두 언어가 서로 커뮤니케이션을 한다는 것을 보여준다. 아두이노에서 보낸 값을 프로세싱에서 받는 형식으로 코드를 작성하였다. 위의 코드는 아두이노의 코드, 아래쪽의 코드가 프로세싱 코드이다. 아두이노에서 시리얼 값을 전송하는 방법엔 print, write 이 두가지 함수가 존재하였다. 이 두 가지 함수가 각각 프로세싱에선 어떤 값으로 받아들이는 지에대한 예제를 작성한 결과이다.

<if == 51일 때>

<if == 3 일 때>

다음 각각의 그림은 print, write 이 두함수로 각각 받아들였을 때의 결과 화면이다. 이를 통하여 print는 시리얼 값을 아스키코드 값으로 넘겨준다는 것을 알 수 있으며, write는 다른 값으로 if(x == 3)으로 바꾸었을 때 write함수를 사용한 결과가 사각형이 나오는 것을 보아 write함수는 값을 변환하지 않고 그대로 넘겨준다는 것을 알았다.


3. 결론

프로세싱에서 아두이노의 신호를 받아드리러면 import processing.serial.*;, Serial port; 이 두가지 함수를 이용한다는 것을 알았으며, void setup() {port = new Serial(this, Serial.list()[port번째수],9600);}으로 아두이노 에서처럼 초기화를 시켜준 뒤, 최종적으로 port.read();로 아두이노에서 write혹은 print함수를 써서 받아들인 시리얼 값을 읽는 다는 것을 알았따. 또한 프로세싱에서 아두이노로 전송을 할 시엔 port.write();로 넘길 수 있어 아두이노에서 프로세싱으로 만이 아닌 프로세싱에서 아두이노로도 값을 전달 할 수 있어 쌍방향 통신이 가능하다는 것을 알게 되었다. 또한 write는 괄호 안의 값을 글대로 넘겨주며 print는 아스키코드로 변환하여 넘겨준다는 것 역시 알 수 있게 되었다.


4. 참고 문헌

http://wiki.processing.org

http://www.processing.org

http://www.arduino.cc






Posted by 혁원 트랙백 0 : 댓글 0

댓글을 달아 주세요

블루투스를 이용한 아두이노 탱크


1. 제작동기


평소에 로봇에 관심이 많고 좋아하고 특히 모터를 좋아하는 나는 아두이노로 탱크를 만들기로 했다. 아두이노 탱크를 만들기로 결심하고 어떻게 이 탱크를 조종할까 고민 중 스마트폰 어플리케이션 중 블루투스를 이용하는 조종기 어플리케이션을 발견하게 되고 블루투스로 조종을 할 수 있는 아두이노 탱크를 만들기로 결심하였다.



2.이론적 배경


(1)블루투스 :

 

블루투스(Bluetooth)는 휴대폰, 노트북, 이어폰·헤드폰 등의 휴대기기를 서로 연결해 정보를 교환하는 근거리 무선 기

술 표준을 뜻한다. 주로 10미터 안팎의 초단거리에서 저전력 무선 연결이 필요할 때 쓰인다. 블루투스 통신기술은

1994년 휴대폰 공급업체인 에릭슨(Ericsson)이 시작한 무선 기술 연구를 바탕으로, 1998년 에릭슨, 노키아, IBM,

도시바, 인텔 등으로 구성된 ‘블루투스 SIG(Special Interest Group)’를 통해 본격적으로 개발됐다. 이후 블루투스

SIG 회원은 급속도로 늘어나 2010년 말 기준 전세계 회원사가 13,000여 개에 이른다.


(2) DC 모터 :

일반적으로 모터는 전력을 이용하여 회전운동의 힘을 얻는 기계이다. 전류에서 돌림힘을 끌어내는 원리는

"자기장 속을 흐르는 전류에는 자기력이 작용한다"라는 것이며, 이 자기력의 방향은 자계와 전류 방향에

직각이 된다. 이 관계는 플레밍의 왼손 법칙으로 표시된다. DC모터는 모터 중 직류 전원을 사용하는 모터이다.

 

(3) 서보 모터 : 서보모터란 세 가지 연결부위를 가지고 있는 모터로 하나는 GND(접지), 다른 하나는 5V,

나머지 하나는 입력신호가 들어오는 전선으로 사용하며 입력된 값만큼 모터를 특정 방향으로 돌리는

모터이다. 여기에서는 휴대폰과 연결하여 아두이노의 신호값을 받아서 포신을 회전시키는데 이용된다.


3. 제작기


일단 아두이노 탱크의 외형제작을 위해 '로보로보'사의 프레임들과 모터 4개를 다루기 위해 모터 드라이브를 썼다.

(물론 메인보드랑 프로그램은 아두이노 것을 썼다.)

로보로보 사의 모터들을 보면 DC모터는 선이 2개, 서보모터는 선이 3개가 있는데 나는 DC모터의 빨간색 선은 VCC

검은색 선은 GND이고 서보모터의 빨간색 선은 VCC 검은색 선은 GND 마지막으로 DC모터와 달리 추가적으로 하나

더 있는 노란색 선은 서보모터를 추가적인 조작(예를 들어 각도값을 주어 동작한게하는 것 등등)을 할 수 있게 한다.


(좌 DC모터 우 서보모터)


다음으로 여러가지의 DC모터를 조작하기 위한 DC모터 드라이브란

렇게 생겼고 모터를 여러개 사용 가능하도록 해준다. 보드 하나당 최대 모터를 2개까지 연결가능하며

드라이브 보드가 여러개만 2개 이상도 가능하다. 왼쪽의 핀4개(사진은 8개가 있지만 제가 사

용한 보드는 왼쪽에 핀이 4개 있었다.)는 DC모터와 연결하는 부분으로 각 모터당 핀 2개,

GND와 VCC를 필요로 하였고 왼쪽에 핀 12개는 6개씩 각 모터랑 연결되어 메인보드로 부터 신호를 받아내는 부분이다. 

위 드라이브를 보시면 오른쪽 핀들 옆에 화살표(GND를 알리는 화살표)가 있는데 그 방향을 기준으로

세로로 3개씩 한 세트의 핀이다. 첫번째 세트의 핀, 두번째 세트의 핀, 세번째 세트의 핀, 네번째 세트의 핀

각 세트마다 아래(화살표가 있는 라인)에서부터 검은색, 빨간색, 노란색 선을 끼우시면 된다.

 

연결은 첫번째 노란색 선(a)을 6번 포트에 두번째 노란색 선(b)을 7번 포트에 연결했습니다. 이것은 제가 모터 테스트 삼아 사용했던 프로그램으로 a에 LOW, b에 HIGH를 하면 전진 a에 HIGH, b에 LOW로 하니 후진을 하였다. 

그리고 이제 탱크의 포신을 조작할 서보모터를 연결한다. 아래에 포신의 좌우를 조작할 서보모터 하나 상하를 움직일 서보모터 하나 고무줄을 발사하기 위한 서보모터 추가적으로 하나 이렇게 연결한다. 

1번 서보모터가 고무줄을 발사하기 위한 서보모터
2번 서보모터가 포신을 상하로 움직이기 위한 서보모터
3번 서보모터가 포신을 좌우로 움직이기 위한 서보모터이다.


그리고 블루투스 모듈이다.

사용한 블루투스 모듈은 DF-Robot Bluetooth V3라는 블루투스 모듈이다.

 

블루투스 모듈의 핀을 보면 좌측부터 GND VCC NC RXD TXD GND 3V3이 있는데 그 중 GND VCC RXD TXD를

사용합니다. TXD와 RXD는 어디에 연결하는지 아래 코드에 나와있다.


스마트폰의 블루투스 어플리케이션은 공개적으로 무료로 배포되는 어플리케이션을 사용했다.  

'bluetooth controller'라는 어플로 사용하기 쉽고 플레이스토어에서 다운로드 가능하다.



이렇게 아두이노로 블루투스 탱크의 외부를 제작한 후 프로그램을 짭니다.

선이 너무 많아 회로도 그리기도 어렵고 보셔도 알아보기 힘드실 것 같아 설명으로 하겠다.


사용한 아두이노는 아두이노 mega보드를 사용하였다. 포트가 부족해서 UNO로는 제작이 어려울 것 이다.

LF는 LEFT FORWARD로 왼쪽 앞바퀴를 뜻하고 RF는 RIGHT FORWARD로 오른쪽 앞바퀴를 뜻한다.

LB는 LEFT BACK으로 왼쪽 뒷바퀴를 뜻하고 RB는 RIGHT BACK으로 오른쪽 뒤바퀴를 뜻한다.

왼쪽 앞바퀴의 첫번째 노란색 선은 6번 포트 두번째 노란색 선은 7번 포트에 연결을 한다.

왼쪽 뒷바퀴의 첫번째 노란색 선은 8번, 두번째 노란색 선은 9번 포트에 연결을 한다.

오른쪽 앞바퀴의 첫번째 노란색 선은 10번, 두번째 노란색 선은 11번 포트에 연결을 한다.

오른쪽 뒷바퀴의 첫번째 노란색 선은 12번, 두번째 노란색 선은 13번 포트에 연결을 한다.

그리고 블루투스 모듈의 TX선은 62번 포트(A8 포트), RX선은 63번 포트(A9 포트)에 연결을 한다.

BS는 BOTTOM SERVO MOTOR로 포신의 좌우 운동을 담당하는 서보모터이다. 5번 포트에 연결한다.

US는 UPDOWN SERVO MOTOR로 포신의 상하 운동을 담당하는 서보모터이다. 38번 포트에 연결한다.

LS는 LAUNCH SERVO MOTOR로 고무줄 발사를 담당하는 서보모터이다. 22번 포트에 연결한다.


그리고 블루투스 신호는 1~9까지 수신이 가능한데 나는 각각

블루투스 신호 1일때는 전진 2일때는 후진 3일때는 좌회전 4일때는 우회전 5일떄는 포탑 좌회전 6일때는 포탑 우회전 7일 때는 포탑 위로 8일때는 포탑 아래로 9일떄는 신호 9가 한번 오면 탱크를 정지하게 하고 두번 눌리면 고무줄을 발사하게 한다. 


4. 동영상







참고 문헌 및 사이트
1. 블루루스 :  서동민 / IT동아 기자 네이버 캐스트 http://navercast.naver.com/contents.nhn?rid=122&contents_id=5531

2. 모터 : 위키백과 http://ko.wikipedia.org/wiki/%EC%A0%84%EB%8F%99%EA%B8%B0, 블로그 글 http://makethat.tistory.com/3

3. 모터 사진 및 모터 드라이브 사진 : 로보로보 쇼핑몰 http://www.roborobo.co.kr/shop/depth_1.php



Posted by 햄스터 신준범 트랙백 0 : 댓글 3

댓글을 달아 주세요

  1. addr | edit/del | reply 햄스터 신준범 2013.10.07 22:10 신고

    우와 잘 만드셨네요 제작기간은 얼마나 걸리셨나요?


사운드 센서를 이용하여 립싱크 로봇을 만들어 보자

구현방법

1. 사운드 센서로 입력 받은 값에 따라 다른 입모양을 출력하는 립싱크 로봇을 만든다.

- 기존의 shift register를 이용하는 대부분의 립싱크 로봇보다 코드가 짧고 회로가 단순한 립싱크 로봇을 구현한다. (본래에는 shift register를 사용하고자 했지만 후에 사용하지 않기로 결정했다)

- 센서 입력값에 따라 로봇의 표정이 자연스럽게 변할 수 있도록 입력받은 센서값을 알맞게 변형 시킨다.

- shift register를 사용하지 않음으로써 생기는 마지막 열의 지연 현상을 최대한 없애고 그에 따라 나오는 문제인 과도한 깜빡임 문제를 알맞게 해결한다.

2. 아두이노를 이용한 아두이노 스피커를 만들어서 노래를 출력한다.

-Free MP3 Wma Converter라는 프로그램으로 mp3형식의 음악파일을 wav 파일로 변환한다.


1.8x8도트매트릭스란?

8x8도트매트릭스는 위 그림과 같이 8개의 행과 8개의 열로 이루어진 배열과 같다. 64개의 LED를 행8개, 열8개의 포트로 조절하는 것이다. 이러한 매트릭스의 기본은 한줄씩 킨다는 것이다. 각 열의 집합을 데이터라인이라고 하며 한줄의 행을 스캔라인이라고 한다. 첫 번째 행과 첫 번쨰 열의 즉, (1,1)위치의 LED를 킬려면 1번째 행의 포트와 1번쨰 열의 포트에 신호를 보내주면 된다. 함수의 좌표로 이해하면 더 쉬울 수도 있다. 그런데 LED배열의 모양을 고려할 때 어느 스캔라인에 신호를 주는지까지 고려할 필요는 없으므로  스캔라인은 for문을 돌려서 다 켜준다. 이제 각 열에서 어떤 LED에 신호를 줘야 할지만 고려하면 된다. 필요한 표정의 개수만큼의 행의 개수를 가진 2차원 배열을 선언해준다. 이것은 문서 뒤편의 코드를 참고하기로 한다. 1의 신호가 들어오는 곳의 LED는 켜지고 0의 신호가 들어오는 LED의 불은 꺼지게 된다. 1번쨰 열의 모든 LED에 불이 들어오게 해주고 싶으면 이진법(11111111)의 신호를 보내주면 되는 것이다. 그런데 이 이진법으로 배열을 만들어주면 코드가 너무 길어지므로 16진법으로 바꾼다. 숫자 15를 이진법으로 나타내려면 4자리가 필요한데 16진법을 사용하면 첫째 자리에 15까지의 숫자를 표현할 수 있다. 10진법을 쓰면 한 자리에 숫자를 9까지 쓰는데, 16진법에서는 10부터 15까지를 알파벳 A부터 E까지로 대입해서 표현한다.16진법을 나타내기 위해서는 앞에 0X라는 표현을 쓰면 된다. 15라는 숫자를 16진법으로 나타내면 0X0E가 될 것이고 32라는 숫자를 16진법으로 나타내면 0X20이 될것이다. 1열의 모든 LED를 키려면 16진법으로 0xEE의 신호를 보내주면 된다. 


처음에 고려헀던 얼굴 모양의 배열 작성한것,

센과 치히로 괴물을 만들기로 결정한 후에 입모양만을 배열로 작성한 것.

2.사운드센서란?

주변 소리의 크기를 0부터 1023까지 아날로그(연속적)으로 입력을 받는 센서이다. 입력 받는 값을 이용하여 조건문을 만들어 코딩을 하면 된다. 사운드 센서를 브레드보드에 연결하기 위해서는 우선 납땜을 해야 한다는 것을 잊지 않도록 한다. 세핀이 있는데 vcc는 전압, gnd는 아두이노의 gnd에 연결하고 나머지 하나는 아두이노에 연결될 핀과 연결하는 자리이며 뒷부분의 나사를 돌림으로써 감도를 조절할 수 있다.

2. 회로도

사운드 센서는 위에 사운드 센서에 관련해서 설명했던 파트에 나와있는 사진에서처럼

GND에는 아두이노의 GND혹은 브레드보드에서 GND를 연걸한 부분, OUT은 각자가 설정한

신호를 전송해줄 포트, VCC에는 전압을 공급 받을 부분에 연걸하면 된다.



5. 완성된 작품

 

1. 밑부분 달기 전 예비 완성작                                   2. 예비 완성작 내부 모습

3. 밑단 부착후 완성작 모습  


 5. 최종 사용 코드

총 16개의 핀을 shift register를 사용하지 않아도 조절 할 수 있도록 for문을 사용했다. 사용중인 아두이노의 0~7까지의 디지털핀은 스캔라인으로 사용되었고 디지털핀 8~13 아날로그핀 0,1핀은 데이터핀으로 사용되었다. 데이터핀은 레지스터로 보면 포트가 PORTB와 PORTC로 나누어져 있기 때문에 데이터를 각 레지스터로 나누어준다.

PORTB=(data[scan]&0x3F);

PORTC=data[scan]>>6;

데이터 하위 6비트를 취해서 PORTB에 넣어 주고 데이터의 상위 2비트를 PORTC에 넣어주기 위해 시프트 연산을 한다. scan_line[]은 스캔라인을 한열씩 선택하기 위해 배열로 만들어 놓은 것이다. scan line[scan]에서 scan이 0부터 7까지 증가하면서 한라인씩 선택해서 한열 씩 차례로 HIGH(신호가 들어오는 상태)가 된다.



Posted by 전호진 트랙백 0 : 댓글 0

댓글을 달아 주세요

이번에 작업할내용은 MPU6050 + HMC5883L + MS5611  이 세개의 센서가 같이 이루어져있는 10개의 자유도를 갖는 통합 센서를 다루어볼 예정이다. 그전에 먼저 각각의 칩이 어떠한 기능을 하는지 부터 알아보자

먼저 MPU6050의 경우에는 두가지 종류가 있는데 이 통합 센서에는 두종류가 하나의 칩으로 합쳐져 들어있다. 이칩은 가속도와 각속도를 측정하는 칩으로 x,y,z축 각 3방향의 각속도와 가속도를 측정할수있어 총 6개의 자유도를 가지고 있다.

HMC5883L같은 경우에는 지자계 센서인데  3개의 방향으로 지자계의 영향을 알아차릴수 있다.

MS5611은 기압 센서로써 섭씨-45도부터 80도 사이의 범위에서 기압을 측정할수있는 센서이다.




<3방향의 가속도+각속도 측정>                      <3방향의 지자계측정>                 <특정온도범위내에서 기압측정>


지금까지 통합센서를 이루고 있는 기본적인 칩에대하여 살펴보았다. 구성하고있는 칩들을 한군데에 모아놓은 것이 이 통합센서인데 이 통합센서는 지금껏 우리가 아두이노에서 많이 사용해오던 통신방식과는 다른 특별한 통신방식을 사용한다.바로 I2C 방식으로써 5vGnd를 통하여 센서에 전력을 공급하며 scl포트와 sda포트를 사용하여 데이터를 주고 받는 방식이다. 2개의 포트 밖에 사용안하지만 여러 데이터를 주고 받을 수 있는 것은 주파수를 바꾸면서 정보를 보내는 I2C통신의 장점이자 특징이다.이런 통신방식의 차이점에 유의하여 회로구성과 코드 작성을 해야할것이다.


기본적인 배경지식은 이쯤에서 충분하다고 생각하고 이제 본격적으로 이센서를 사용해볼 시간이다.

이센서의 회로구성은 I2C 통신방식을 사용하는 센서들의 기본적인 연결방식과 동일하다.

센서의vcc 포트를 아두이노의 5v와 연결하고 센서의 GND를 아두이노의 GND와 연결시킨다.

여기까지는 일반적인 센서와의 차이점이 없는 부분이다.

I2C통신에서는 SCL과 SDA라는 포트가 등장하는 데 바로 이부분이 I2C통신의 핵심이다.

이부분을 아두이노에 연결할때에는 주의할점이있다.

arduino mega의 경우에는 SCL포트와 SDA 포트가 따로 존재하지만 ardoino uno의 경우에는 포트가 부족하여 SCL과 SDA포트가 따로 존재하지 않기때문에 다른 포트로 대체하여 사용하게 된다. 그래서  ardoino uno를 사용할때에는 SDA는 A4 포트와 연결하고 SCL의 경우에는 A5포트와 연결해 주어야하는 주의점이 있다.



이렇게 회로를 구성하고 나면 실질적인 데이터를 센서로 부터 받아야 한다. 먼저이센서에서 가속도 값과 각속도값을 먼저 받아올 것이다. 왜냐면 하나의 칩에서 나오는 데이터를 받아올수있으면 통신에 이상이없다고 생각할수있기때문에 MPU6050의 정보를 먼저 받아보기 위해서이다. 

이 코드를 아두이노 프로그램을 바로사용하면 작동하지 않을수도 있다. 왜냐하면 새로운 해더 파일이 필요하기때문이다. 따라서 이 코드를 사용하고 싶으면 다음 사이트에 들어가서 파일을 다운받아 사용해보기를 권장한다.

http://www.uctronics.com/10dof-imu-ms5611-hmc5883l-mpu6050-sensor-module-p-857.html

이 코드를 아두이노로 작동시킨다음에 정상적으로 작동한다면 이 통합센서와 아두이노의 통신이 잘이루어진다고 볼수있다. 나머지 칩에서 나오는 데이터가 잘받아지는지 확인해보고 싶다면 위 사이트에서 다운받은 파일에서 다른 칩들에 대한 코드를 작동시켜보면 된다.


이제 이 통합센서에 대한 기본적인 작동을 해보았으므로 응용을 시켜볼 때가 왔다.

이 센서는 각속도 가속도 지자계 기압 을 측정할수있는 센서이다. 따라서 이 센서가 적용될수있는 것을 생각해보면 어떠한 물체의 운동상태를 나타내볼수있다는 생각을 해볼수있다. 그러므로 이센서를 비행체에 장착했다는 가정을 해볼수있다. 쿼드콥터같은 비행체에 적용해보고 싶지만 경제적인 측면에서 조금 무리일수있으므로 쿼드콥터를 Processing 이라는 언어를 사용하여 시뮬레이션을 해볼생각이다.

이 통합센서에서 나오는 값을 아두이노를 통해 받은 다음 Processing을 통해 시뮬레이션으로 화면에 센서값에 따라 가상의 비행체가  어떠한 운동상태를 갖는지 표현해볼생각이다.

비행체를 시뮬레이션할때 사용한 프로그램은 Multiwii라는 Processing을 통해 짜여진 프로그램을 사용할것이다.

(Multiwii코드를 여기에 올리기에는 길이가 너무길고 복잡하므로 그냥 생략하고 사이트를 통해 다운로드 하는것을 추천합니다.

이에따른 아두이노 코드도 같이 제공 되어있으므로 아두이노코드를 따로 코딩할 필요도 없습니다.)

https://code.google.com/p/multiwii/downloads/detail?name=MultiWii_2_1.zip&ca


프로그램을 다운받아 작동시켜 보면 다음과 같은 결과를 화면을 통해 볼수있을것이다.

비록 직접짠 코드로 이루어진 프로그램이 아니라 제공된 프로그램을 이용하여 만들어낸 결과이지만 이통합센서를 통해 쿼드콥터를 제어할때 필요한 정보를 얻을 수있다는 사실을 알수있었다.





이번작업을 통해서 통합센서의 기본적인 구성과 새로운 통신방식에 대하여 알수있어 의미가 있었다고 생각되며 미리짜놓은 프로그램을 사용하였지만 응용분야를 찾을 수 있어 다음번에 새로운 작업을 할때 이 통합센서를 사용할수있다는 생각을 할수있어서 이 센서에 대한 새로운 가능성을 볼수있었다.




Posted by 박상비누 트랙백 0 : 댓글 0

댓글을 달아 주세요

작성자 : 김경만

아두이노와 프로세싱을 이용하여 Face-Tracking 기술을 구현해 보자 


1. 개요


최근 얼굴인식 기술이 많이 발전하면서  얼굴인식 기술을 응용한 기술도 많이 나오고 있습니다. 그 중 하나가 Face-Tracking 이라는 기술로 얼굴을 추적하는 기술인데 CCTV에 많이 사용되고 있습니다. 움직이지 않는 CCTV보다 Face-Tracking 이 가능한 CCTV가 더욱 많은 범위를 효율적으로 보여줄 수 있으며 얼굴을 정확히 화면에 담을 수 있기 때문인데요. 이렇게 응용이 되고 있는 Face-Tracking 기술을 직접 구현해보고 또한 딱딱하게 카메라만 있는 것이 아닌 로봇을 만들어 사람을 처다 보는 것 처럼 만든다면 더욱 의미 있을 것 같아 제작하게 되었습니다.


준비물


아두이노 기판, 브래드 보드, 서보모터 2개, 브래킷 2개

여기서 잠깐, 서보모터란?

서보모터란 세 가지 연결부위를 가지고 있는 모터로 하나는 GND(접지), 다른 하나는 5V, 나머지 하나는 입력신호가 들어오는 전선으로 사용하며 입력된 값만큼 모터를 특정 방향으로 돌리는 모터입니다. 여기에서는 카메라와 연결하여 아두이노의 신호값을 받아서 카메라를 회전시키는데 이용됩니다.

여기서 잠깐, 브래킷이란?


브래킷이란 기기류를 매달기 위해 벽이나 구조체 등에서 돌출시킨 지지 구조재입니다. 여기서는 카메라를 매달아서 카메라의 방향을 조종하기 위해 필요한 부품입니다.

 

얼굴을 추적하여 카메라의 방향을 돌리기 위해서는 얼굴을 추적하는 기술과 그것을 통한 카메라의 회전이 있어야 합니다. 전체적인 메커니즘은 얼굴을 인식하여 얼굴이 항상 카메라의 중앙에 오도록 카메라를 회전시키는 것입니다. 얼굴을 추적하는 기술은 소프트웨어를 통해, 카메라의 회전은 하드웨어를 통해 구현할 것입니다.

2. Breadboard & Schematic

① 아두이노와 서보모터의 연결

얼굴을 추적하여 따라가기 위해서는 모터를 돌려야 하는 값을 아두이노가 컴퓨터에게 받아서 모터에게 보내주어야 합니다. 아래에 보이는 사진은 서보모터 2개와 아두이노를 브래드 보드를 이용하여 연결한 회로도이며 빨간색 선은 5V에, 검정색 선은 GND(접지)에, 노란색선은 입력핀에 연결시켜야 하며 노란색선이 바로 모터를 어느만큼 돌릴지 정해주는 입력값들이 보내지는 통로입니다.


② 서보모터와 웹캠의 연결

얼굴을 따라가기 위해서는 서보모터에 브래킷을 달고, 브래킷에 카메라를 부탁하는 형태를 만들어야 합니다. 이때, 얼굴은 카메라의 화면상에서 움직이기 때문에 x축 방향과 y축 방향 모두의 방향을 제어해 주어야 합니다. 그래서 서보모터를 2개 사용하는 것이며 하나는 x축, 하나는 y축을 맡게 됩니다. 브래킷과 서보모터는 나사를 통해 연결하였으며 브래킷과 카메라는 철사를 이용하여 연결하였습니다.


          <브래킷과 서보모터의 연결부분>                               <브래킷과 카메라의 연결부분>

3. Code     

소프트웨어의 역할은 카메라를 통해 입력받은 영상값에서 얼굴을 인식하고, 얼굴의 좌표를 통해 카메라가 회전해야하는 모터의 값을 계산하여 모터에 전달해주는 것입니다. 프로세싱과 아두이노, 그리고 Open CV 라는 세가지 프로그램을 사용하는데 Open CV는 영상을 처리해주는 프로그램으로 이미 알려진 프로그램입니다. 프로세싱은 이 프로그램을 통해 영상에서 얼굴을 찾고, 좌표를 계산하여 얼굴이 중앙에 오도록 바꾸어야 할 모터값을 아두이노에게 시리얼 통신을 이용하여 보내줍니다. 아두이노는 프로세싱에게 받은 모터값을 연결된 서보모터에게 전달해 주는 역할을 합니다.

① Open CV 설치 및 설정

먼저 Open CV 1.0 버전을 다운받으셔야 합니다. http://opencv.org 여기서 최신버전이 아닌 1.0 버전을 다운받으세요. 첨부파일을 보면 XML문서파일 2개가 있을것입니다. 이 XML문서 두개는 얼굴을 인식하게 해주는 기본 소스입니다. 즉, Open CV는 영상의 정보를 받아들여 이 XML문서에 있는 값에 해당하는지를 판단하여 얼굴인지 아닌지를 판단해 주는것입니다. XML문서에는 많은 수치가 쓰여져 있습니다. Open CV를 설치하셨다면 환경변수를 설정해주어야 하며 내컴퓨터의 Processing 파일 안에 Open CV 파일을 넣어주어야 합니다. 


haarcascade_frontalface_alt.xml


haarcascade_profileface.xml




② 프로세싱 소프트웨어

 

 


③ 아두이노 소프트 웨어


 

 

 

4. 완성 사진 

                                                               <완성된 사진>

                                            <로봇의 형태로 만든 것>

5. Video

사용한 웹캠이 자동 초점조절 기능이 있어서 초점을 맞출 때 얼굴을 잡지 못해 따라오지 못하는 문제가 발생했습니다. 


6. 결론

구현한 하드웨어에서 웹캠 부분에 로봇의 머리를 연결하고 밑의 서보모터 부분에 몸통 부분을 연결함으로써 몸통은 가만히  있고 머리만 사람을 향해 돌아가는 로봇을 만들었습니다. 연결방식을 웹캠은 로봇의 입에 끼운 후 스카치테이프로 고정시켰고 밑의 모터는 몸통부분에 크기에 맞는 구멍을 뚫어 끼웠습니다. 몸통의 아랫부분은 무게중심을 위해 넓적한 판으로 했습니다. 또한 얼굴이 중앙에 오도록 일정한 값만큼 계속 회전하는 알고리즘을 사용했었는데 얼굴을 빠르게 따라오지 못하는 모습을 보였습니다. 하지만 너무 많은 회전을 주게 되면 얼굴이 가만히 있을 때 왔다갔다 크게 흔드는 현상이 있었습이다. 그래서 저는 얼굴의 좌표와 화면의 중앙 좌표가 많이 차이날 수록 많이 모터값을 바꾸는 오차에 비례한 P제어를 사용했으며 위 동영상이 P제어를 사용한 동영상입니다. 학교 정보시간에 배운 PID제어에서 P제어를 제 프로젝트에 사용하여 더 좋은 효과를 내었기 때문에 기분이 좋았으며 카메라를 다루는 작업이라 신기하기도 하면서 재미있었습니다. 

 


 

출처 <서보모터 사진 : G마켓 - 서보모터 검색 http://goo.gl/fwXUmz
       <브래킷 사진 : https://www.sparkfun.com/tutorials/304>
       <서보모터와 아두이노 회로도 : https://www.sparkfun.com/tutorials/304>

 

 

Posted by 김경만 트랙백 0 : 댓글 5

댓글을 달아 주세요

  1. addr | edit/del | reply forbujas 2013.11.12 15:37

    아싸 일등

  2. addr | edit/del | reply so 2014.05.08 20:34

    안녕하세요? OpenCV와 아두이노를 통해 영상처리와 서보모터 제어를 구현하는 프로젝트를 진행중인 학생입니다. 자세한 정보를 통해 많은 것을 얻어갑니다.
    다름이 아니라 프로젝트 진행중 어려움이 있어 자문 좀 구하려고 합니다. 작성자님께서는 프로세싱 프로그램까지 사용하셨는데 OpenCV와 아두이노만으로 구현하지는 못하는 것인지 궁금합니다. ultimate333@naver.com 으로 답변부탁드립니다. 감사합니다.

    • addr | edit/del 수아기 2014.05.08 22:52 신고

      저희 학생을 대신해 제가 답변을 드립니다.
      아시다시피 OpenCV는 영상처리에 특화된 라이브러리 일 뿐입니다. 해당 라이브러리를 사용해서 필요한 명령들을 내려주는 주체가 있어야겠죠. 저희는 그것을 프로세싱을 사용한 것입니다. 물론 여타의 다른 프로그래밍 언어가 될수도 있겠죠.

      그리고 답변을 본인의 메일로 부탁을 하셨는데 댓글을 확인해주시는것이 더 바람직하다고 봅니다.

  3. addr | edit/del | reply 2015.04.29 13:50

    비밀댓글입니다

  4. addr | edit/del | reply 하쿠레이 레이무 2015.09.26 18:05

    안녕하세요
    좋은 강좌를 보고 따라하고 있는 사람입니다.
    제가 완벽히 강좌를 따라했는데도 웹캠이 인식이 되지 않아서 그러는데
    강좌에서 사용하신 웹캠 모델명좀 알 수 있을까요?

초음파 센서를 이용해서 차량의 후진보조센서를 만들어 보자

1. 초음파 센서란??

초음파 센서란 초음파 센서 내에 있는 파원에서 발사된 초음파 펄스가 측정물의 표면에서 반사되어 다시 초음파 센서로 되돌아올 때까지의 시간을 측정하여 측정 대상에 따른 정보를 얻는 방법을 사용 한다. 즉, 초음파를 송신 후 되돌아 올 때까지의 지연시간을 측정하는 방법을 사용 하는 것이다. 일반적으로 공기 중에서의 음속은 약 340m/s인 것을 이용하여 측정 시간의 반에 음속을 곱해서 거리를 알아낼 수 있다.

2. 아두이노와 초음파 센서를 이용한 거리측정

후진보조센서를 만들기 전 먼저 초음파 센서와 아두이노를 연동하는 법을 익혀보자. 아두이노에 사용할 초음파 센서 모델은 SRF05로 이 초음파 센서가 아두이노와 연결이 되는 모습은 아래와 같다.



 위의 초음파 센서를 보면 아두이노와 연결해야 하는 곳이 구멍이 뚫려 있는 것을 볼 수 있다.

이럴 때는 당황하지 말고 옆의 아두이노용 직각 행 핀 헤더를 이용해서 구멍에 맞도록 5개를 따로 떼어낸 뒤 초음파 센서와 납땜을 해서 브래드 보드에 연결을 하면 더 편리하게 초음파 센서를 사용할 수 있다.

 

다음은 초음파 센서와 아두이노 이용해 거리와 그 상태를 표시할 때 아두이노에 사용할 수 있는 코드이다.


이 코드는 아두이노와 초음파 센서를 이용해서 일정 범위의 거리에 따라 그 상태를 말해주는 것이다.


비록 이 코드가 길어보일 수도 있지만 반복되는 부분이 많아 그리 긴 코드는 아니다. 먼저 컴퓨터와 시리얼 통신을 할 포트를 설정을 해 준 뒤에 아두이노의 핀 중 하나를 초음파가 나가는 신호를 주는 핀으로 또 다른 핀은 초음파가 들어오는 신호를 받는 핀으로 설정을 한다. 그 다음에 초음파 센서를 이용해 나온 시간을 측정하여 물체까지의 거리를 계속적으로 측정하면 그 거리를 범위를 나눠 위험, 주의, 안전을 표시해 준다.

*위의 코드를 이용하면 아두이노와 컴퓨터가 서로 시리얼 통신을 하고 있기 때문에 시리얼 모니터를 이용해 실행 값들을 볼 수 있다.



3.자동차의 후진보조장치 만들기

이제 본격적으로 자동차의 후진보조센서를 만들어 보도록 하자. 자동차를 타 보면 후진을 할 때 물체와의 거리에 따라서 소리가 나는 주기가 달라지는 것을 알 수 있다. 우리가 초음파 센서를 이용해 후진보조장치를 만들 때는 피에조 부저와 부저가 울리는 주기를 이용해서 운전자에게 주의를 주도록 하자.

*피에조 부저란?


 (우리가 사용할 피에조 부저의 사진)

피에조 부저를 아두이노에 연결하는 방법은 아래를 참고하자.



다음은 코드를 살펴보도록 하자.

이 코드도 그리 긴 코드가 아니다. 위에 나와있는 아두이노와 초음파센서를 이용할 때 사용한 코드에서 각각의 상황에 따라 피에조 부저가 울리는 주기만 바꿔주면 그만이다. 따라서 위의 코드와 달리진 것은 피에조 부저를 사용할 핀을 정해준 것과 피에조 부저를 울리기 위해 사용한 코드이다. 각각의 상황에 따라 달라진 것은 duration을 다르게 설정해 준 것 뿐이다. 이 duration은 재생 시간으로써 위에서 말한 주기에 해당한다고 볼 수 있다.

   

(완성된 후진보조장치의 모습)

 

 

(후진보조장치의 작동 모습)

*동영상을 보실 때는 소리를 키우고 보시는게 이해하시기에 좋습니다.


4. 웹에 초음파 센서의 상태 업로드

위의 작업까지 손쉽게 할 수 있었다면 이번에는 웹에 초음파 센서의 값을 업로드 해 보자.(물론 이 작업은 따로 코딩도 필요가 없을 뿐더러 난이도가 높은 작업은 아니다.) 웹에 초음파 센서의 상태를 업로드 하는 것은 매우 간단하다. 먼저 웹에 업로드 할 때는 우리가 웹에 업로드를 할 수 있도록 도움을 주는 Bloom이라는 프로그램을 이용하자.



Bloom 프로그램의 역할은 시리얼 포트를 통해 받은 정보들을 오픈 TCP/IP 소켓 연결로 변환을 시키는 것이다. 옆에 그림에 나와있듯이 여러 시리얼 포트들을 통해 많은 기기가 연결된 host pc에서 Bloom 프로그램을 실행 시키면 다른 기기들에서 TCP/IP 연결을 통해 접근이 가능하도록 해 준다. 이런 점을 이용하여 초음파 센서의 값을 인터넷으로 보내 다른 컴푸터에서 볼 수 있도록 하자.






옆의 사진은 Bloom 프로그램을 실행 시켰을 때의 사진이다. 여기서는 TCP/IP 포트를 지정해 준 뒤에 컴퓨터와 연결이 되어 있는 시리얼 포트를 입력을 한다. 그리고 서로 통신을 할 통신 속도를 정해 주면 인터넷으로 초음파 센서의 값과 상태를 업로드 시킬 수 있다. 


(Bloom을 이용해 인터넷에 초음파 센서의 값과 상태를 올린 결과사진)



5. 결론 및 제언

 초음파 센서와 함께 피에저 부저를 이용하여 후진보조센서를 만들어 보니 초음파 센서가 거리를 표현하는데 오류가 잦은 것을 알게 되었고 이에 따라 소리가 잘 나지 않는 경우도 잦았다. 그 이유에 대해서 생각해 보니 초음파 센서가 거리를 측정하기 위해 초음파를 발생시킬 때 이 발생하는 초음파가 직선이 아닌 부채꼴 형태로 퍼져 나가면서 거리를 측정하는 원리를 이용하기 때문이었다. 즉 내가 원하는 사물이 아닌 다른 사물의 거리를 측정하는 경우가 발생하여 오차가 발생했다고 생각했다. 그래서 다음에는 직진으로 나아가며 사물을 측정하는 센서를 이용해서 더 정확하고 오차율이 적은 후진 보조 센서를 만들어 보고 싶다.


초음파 센서와 아두이노연결 방법 사진출처 

http://jheonk.tistory.com/category/%EC%A0%84%EC%9E%90%EA%B3%B5%ED%95%99/Arduino

피에조 부저 사진 출처

:http://www.planetarduino.org/?cat=404

Bloom 사진 출처

:https://sensormonkey.eeng.nuim.ie/index.php/site/page?view=support.bloom

Posted by 주은97 트랙백 0 : 댓글 1

댓글을 달아 주세요

  1. addr | edit/del | reply 2016.11.06 12:45

    비밀댓글입니다

포토인터럽터(GP1A57HRJ00F)를 이용해서 중력가속도를 측정해보자

글쓴이 : 백동현

1. 포토 인터럽터란?

[1]

중력가속도를 측정하는 장치에 필요한 중요 부품은 포토인터럽터이다. Sharp사에서 만든 포토인터럽터를 이용해 제작하였다. 사용한 부품에 대한 상세정보를 알기 위해 제품명인 GP1A57HRJ00F로 검색해보기를 권장한다. 포토인터럽터는 크게 적외선 송신부와 수신부를 통해 물체의 통과여부를 판단하게 된다[2]. 물체를 감지할 수 있는 포토인터럽터로 중력가속도를 측정하고자 한.


2. 중력가속도란?

우리는 지구의 중력장 내에서 살아가고 있다. 즉, 중력이 삶에 영향을 미친다는 것이다. 중력은 쉽게 말하면 지구가 나를 잡아당기는 힘이다. 힘에는 가속도가 존재한다. 이때, 중력에서의 가속도가 중력가속도이다. 중력가속도는 다양한 방법으로 측정이 가능하다. 본 측정하는 장치는 자유낙하를 이용해 중력가속도를 측정하고자 한다. 자유낙하는 초기속도가 0인 물체를 중력장에 낙하시켜 중력가속도를 받으며 떨어지는 물체의 움직임을 말한다. 즉, 고등학교 물리교과에 등장하는 등가속도식을 이용하면 가속도를 구할 수 있을 것이다.


3. 가설

자유낙하시킨 물체의 속도를 측정하고, 속도를 이용해 가속도를 구한다. 이때 구한 가속도가 중력가속도일 것이다.

하지만 본 실험장치는 많은 실험적 오차의 원인이 존재한다.

(1) 공기의 저항이 존재한다.

물체가 낙하하는 통로는 플라스틱 파이프관을 이용해 쇠구슬을 낙하시킬 것이다. 이때 쇠구슬이 낙하하는 동안 파이프 내에 공기는 더 압축되면서 공기저항이 점점 강하게 작용할 것이다. 즉, 파이프관 내부의 공기에 의해 공기저항이 발생하여 쇠구슬을 조금더 느리게 내려오게 될 것이고, 아래로 내려올 수록 공기저항이 더 강하게 작용하여 속력변화도 일정하지 않아 가속도를 구하는데 오차가 발생하게 될 것이다.

조금 더 정밀한 실험장치로 보완하기 위해서는 파이프에 구멍을 뚫어 공기가 배출되는 구멍을 만들도록 한다.

(2) 정확한 자유낙하운동을 측정할 수 없다.

설계한 실험장치의 경우 물체를 손으로 잡은 상태에서 자유낙하시킨다. 정확히 초기속도가 0으로 낙하시켰다고 하더라도 손을 놓은 지점부터 시간을 측정하지 않고 조금 이후(파이프를 조금 통과한 후)부터 시간을 측정하므로 이를 보정해주어야 한다. 이 보정은 본 장치의 경우 첫 포토인터럽터를 아래로 내리고 초기속도가 0인 지점부터 거리를 직접측정한 뒤 이론값의 중력가속도를 이용해 보정하였다.

이를 보완하기 위해서는 전자석을 이용해 물체를 낙하시키고 낙하시킨 시작부터 시간을 측정하면 정밀하게 측정이 가능해 시간적인 오차를 줄일 수 있다. 


4. 개발하게된 계기

실험장치를 개발한 것은 정밀한 중력가속도를 측정하기보다는 가속도의 정의와 의미를 파악할 수 있는 실험교구로서 개발을 했다. 따라서 실험상황 속에서 가속도의 의미를 파악하고 사용자가 등가속도식에 대한 이해를 돕기 위한 방법으로 중력가속도를 측정하고자 한다. 정밀하게 중력가속도를 측정하고 싶다면 진자운동의 주기나 천해파의 속도 등을 이용해 구하는 방법으로 구하기를 추천한다.


5. 제작과정

(1) 하드웨어

하드웨어의 전체적인 모습은 앞서 말한 것들을 조합하면 어림잡아 설계가 될 것으로 예상될 것이다. 큰 틀에서 벗어나지 않고 실험기구를 제작하였다. 우선적으로 자유낙하시키는 물체는 작은 쇠구슬로 하였다. 그 구슬보다 조금 큰 파이프를 자유낙의 경로를 위한 관으로 제작하였다. 전체적인 모습은 다음과 같다.

포토인터럽터는 총 4개를 사용하여 한번의 실험으로 총 3개의 중력가속도를 측정하도록 설계하였다. 앞서 말한 가정 같이 공을 놓는 위치가 첫번째 센서(A)가 있는 위치까지 4cm라는 거리가 존재한다. 이에 대한 보정은 과학적 이론을 바탕으로 소프트웨어 부분에서 보정해줄 것이다. 위에서 제시한 거리들은 임의로 지정한 것이기 때문에 꼭 위 그림에서의 값만큼 차이가 날 필요는 없다.

GP1A57HRJ00F 센서의 구조를 통해 연결방법을 설명하고 구체적으로 제작한 모습을 보여주도록 하겠다.

[2][3]

위에 그림들은 GP1A57HRJ00F 센서를 그린 모식도이다. 그림에서 알 수 있지만 부가 설명을 하자면 1과 3번에 해당하는 부분은 5V 전압에 연결해주도록하고, 2번과 5번에 해당하는 부분은 GND로 접지시켜준다. 또한 4번에 해당하는 부분은 아두이노의 디지털(Digital)부분에 연결시켜준다.

위에 사진과 같이 만들었지만 이 글을 읽는 독자들은 더 간단하고 깔끔하게 회로를 디자인 할 수 있을 것이다. 따라서 구체적인 회로 구성 모습은 글에 첨부하지 않도록 하겠다.

위 그림과 같이 포토 인터럽터를 파이프에 연결시키고 구슬을 통과시킬 때 이를 읽을 수 있도록 하고 전선은 깔끔하게 뒤 파이프를 통해 배선정리를 해준다.

제작된 외관의 전체적인 모습은 파이프에 포토 인터럽터 센서 4개를 각 위치에 맞게 연결해준 것 뿐이다. 이를 통해 중력가속도를 측정하기 위해서는 아두이노에 필요한 소프트웨어의 알고리즘이 중요하다. 자세한 알고리즘을 살펴보도록 하겠다.


(2) 소프트웨어

중력가속도는 앞서 말했듯이 고등학교 과정 속에서 배우는 등가속도식으로 구하게 된다. 따라서 포토인터럽터간의 거리와 그 거리동안 통과한 시간을 이용해 속도를 구하고 이를 통해 가속도를 구하는 것이다. 다음은 아두이노 코드의 일부를 발췌한 것이다.

소스코드를 살펴보면 그저 우리가 생각하는 공식에 맞춰 프로그래밍이 되어있지 않다는 점을 발견할 수 있다. 이는 bojeong이란 부분 때문에 그러한 의문이 생기게 된 것일 것이다. bojeong은 위에서 말한 가정에서의 오차를 줄이기 위함이다. 초기에 4cm 만큼의 거리를 두고 첫번째 포토인터럽터를 설치한다. 따라서 이로 생기는 초기속도 0이 아닌 것을 보정해주는 것이다. 보정하는 방식 역시도 고등학교 물리교과 과정 속에서 배우는 등가속도 식을 이용한다.

6. 제작 후 실행 동영상



※ 사진첨부

[1] 포토인터럽터; GP1A57HRJ00F http://www.digikey.com/product-detail/en/GP1A57HRJ00F/425-1935-5-ND/718287

[2] 포토인터럽터 모식도; https://www.sparkfun.com/datasheets/Components/GP1A57HRJ00F.pdf

[3] 포토인터럽터 아두이노 연결 모식도;

http://www.teachengineering.org/view_activity.php?url=collection/nyu_/activities/nyu_train/nyu_train_activity1.xml

※ 참고문헌

[1] 아두이노 포토인터럽터 http://eskelt.tistory.com/68 (2013.08.30)


Posted by 백동현 트랙백 3 : 댓글 2

댓글을 달아 주세요

  1. addr | edit/del | reply kpatriot 2015.05.19 22:31

    혹시 설계도를 주실 수 있으신가요?

  2. addr | edit/del | reply 재원 2015.05.19 22:32

    저희가 아두이노 초보이지만 더 배워보고 이걸 만들어볼려고 하는데 필요 준비물과 회로도를 구할 수 없을까요?