2016년 3월 21일 월요일

좀 더 빠르게 문열기

평균 6초 정도 걸리는 기어 S2 로 문여는 시간을 줄여보기 위해서  Profiling 을 해 봤다.

기어 S2 ------  http -----> 라즈베리파이 ----- bluetooth ---> 아두이노 ---> IR Transmitter

순으로 command 가 전송 되는데 각 단계를 뜯어 보다가 재미난 사실을 발견했다.

* wifi 가 불안하다. TP-Link 동글을 사용하는데 네트웍이 들쭉 날쭉한다.
 이 문제는 펌웨어를 update 하고 해결 되었다.
 출처 : (UPDATE) Drivers for TL-WN725N V2 - 3.6.11+ -> 4.1.xx+

* bluetooth rfcomm 통신 시간이 3~5 초 정도 소요 된다. (거의 다 먹는 다고 볼 수 있다.)

이 시간을 줄이면 2~3초 정도에 문을 열 수 있다.

문제를 해결하기 위한 방법은 라즈베리파이 에서 아두이노로 통신하는 방법을 바꾸는 것인데 후보로 wifi 또는 serial 통신이 있다. 지금 당장 아두이노 wifi 장비가 없으니 간단하게 serial 통신을 usb 케이블로 바꿔 봤다.

아두이노 소스는 원래 시리얼 통신(over bluetooth) 을 했기 때문에 변경 사항이 없고 라즈베리 파이에 있는 rest 서버에서 rfcomm 통신을 하던 코드를 /dev/ttyACM0 를 통한 시리얼 통신으로 변경 했다.
import serial
class open_door:
    def GET(self):
#os.system('/home/pi/autokey/robot-server door');
ser = serial.Serial(chip,
baud,
parity=serial.PARITY_NONE,
stopbits=serial.STOPBITS_ONE,
bytesize=serial.EIGHTBITS)
ser.open();
ser.write("door\r".encode());
ser.close();
output = "opened";
        return output
변화는 예상했던 대로 2~3초 내에 문이 열리는 결과를 가져왔다.

rfcomm 이 원래 이렇게 느린 것인지 좀 찾아 봐야 겠지만 우선 이 상태로 사용해야 겠다.
깔끔한 선정리를 위해 라즈베리파이와 아두이노를 연결할 usb 케이블을 좀 짧은 것으로 줘야 할 것 같다.

댓글 없음: