티스토리 뷰

Processing

[Arduino with Processing] Serial-Controlled LEDs

생각많은 소심남 2012. 8. 15. 01:39

시리얼통신이란 매우 흥미롭습니다. 프로세싱과 아두이노를 연결해주는 건 단순히 USB선 하나일 뿐인데 마우스를 제어하면 아두이노가 움직인다는 거죠. 만약 아두이노에 모터라도 달면 그걸로도 제어가 가능하겠지요? 최종적인 목적은 키넥트가 움직이는 대로 아두이노에 달린 모터를 제어할 수 있도록 하는 것이지요. 그런 날이 올겁니다.

 우선 지난 포스트에서 analogWrite를 통해서 불의 밝기를 부드럽게 조절하는 방법을 해봤는데 그건 단순히 달려있는게 LED 하나였기 때문에 간단했었지요. 이번에는 LED 두개를 달고 마우스의 x좌표뿐만 아니라 y좌표를 통해서 LED의 밝기를 조절할 수 있게끔 해볼 예정입니다. 앞에서 언급했었지만 PWM 이 되는 포트는 9,10,11번 포트였지요. 이번에는 10번과 11번 포트를 지난번과 똑같이 배열합니다. 아마 다음과 같이 되겠지요.



fritzing으로 표현하면,



이제 아두이노에 프로그램을 넣을 차례입니다. 우선은 setup에서 10번과 11번 포트를 출력으로 만들고 시리얼통신을 위한 설정을 해줍니다. 그리고 추가적으로 마우스의 x와 y값 그리고 또다른 변수를 하나 집어넣습니다. 그 변수의 역할은 조금 있다가 설명드리겠습니다.



이제 루프를 작성해야 되는데 여기서 이벤트 핸들러라는 개념을 적용해야 합니다. 지난 프로그램에서는 단순히 Serial.Available()을 통해서 값을 받았었습니다. 하지만 이번에는 특정 문자가 들어왔을 때 읽어오게끔 하려고 합니다. 일단 다음과 같이 해봅시다.



시리얼통신을 통해서는 데이터가 계속 왔다갔다 거립니다. 이 데이터가 2개이상 들어왔을 때 그 값을 읽게다는 것이지요. 그래서 이 값이 어떤 문자와 같다면 다른 조건으로 넘어갈 겁니다. 이게 바로 val의 역할이자 이벤트 핸들러의 개념이 될겁니다. 그 문자를 S 라고 하고 그 안의 데이터를 앞에서 선언한 변수에 집어넣겠습니다.



그렇게 해서 받은 값을 analogWrite를 통해서 넘겨주면 지난번과 똑같은 동작을 할 수 있겠지요. 다음은 프로세싱 구성입니다. 지난 프로젝트와 똑같습니다. 라이브러리를 불러오고 시리얼통신을 위한 설정을 해줍니다.



그리고 지난번에는 단순히 수평적인 line만 형성해줬는데 이번에는 구역을 나눠서 색상을 칠해보도록 합니다.


마지막으로 이벤트 핸들러의 활성화를 위한 문자를 집어넣어야겠지요. 시리얼 통신을 통해서 S를 보내주면 될겁니다. 그 후에 mouse의 위치를 각각 넘겨주면 끝나게 됩니다.


결과를 봅시다.

잘 보면 아시겠지만 위아래로 마우스 커서가 바뀌면 붉은색 불의 밝기가 조절되고 좌우로 움직이면 노란색불의 밝기가 조절됩니다. 물론 대각선으로 움직이면 그에 해당하는 밝기가 나오겠지요.


 다음 포스트에서는 키넥트의 제스처인식 기능을 활용해서 불의 밝기를 조절하는 프로젝트를 해보고자 합니다.

https://dl.dropbox.com/u/96808368/processing/SerialCommLEDs.zip

댓글