비글본블랙(이하 BBB)를 아두이노 모터쉴드(이하 모터쉴드)와 연결해서 모터제어 실험하면서 알게 된 시행착오를 본 포스트에 기록하고자 한다.

 아두이노 모터쉴드는 L298P 칩을 사용하는데 전원이 디지털 블록에 공급되는 핀 (Vss) 와 모터 제어용 전원 핀 (Vs) 두 개가 있다. 쉴드의 5V 헤더가 바로 이 Vss 핀에 연결되어 있으므로 5V핀에 5V 전원을 반드시 연결해야 L298P가 정상동작한다. Vin 헤더핀은 Vs에 연결되어 있으므로 이 핀에는 모터제어용 전원 (datasheet 상으로는 50V 까지 가능) 을 인가하면 된다. 나는 Vin에 적당한 전원을 연결하면 Vss에는 변압되어 들어가는 줄 알았는데 회로도를 보니 그게 아니었다.

<아두이노 모터쉴드 rev C 회로도>

따라서 모터쉴드의 5V 헤더에는 BBB의 5V핀과 연결하여 L298P 의 로직부에 전원을 인가해야 정상동작한다. 문제는 BBB는 3.3V 로 동작한다는 것인데 다행히 L298N이 2.3V 이상이면 HIGH로 간주하므로 문제가 없다.  (실제로 모터쉴드와 3.3V로 동작하는 아두이노Due 와의 연결법도 소개되어 잇다.)

 

 그런데 datasheet상에는 Vss의 최소전압은 4.5V인데 혹시나해서 3.3V를 연결했는데도 정상적으로 동작했다. 하지만 이 방법은 바람직하지는 않은 것 같다.  그리고 모터쉴드의 IOREF 핀은 별다른 역할을 하지 않는다. 여기에 BBB의 동작전압인 3,3V를 연결하면 이것이  L298에 인가되는 것이 아니니 주의해야 한다.

 아래 간략한 회로도를 첨부하였다.

아래는 pyBBIO 모듈을 이용한 파이썬 제어프로그램 예이다. 1초마다 회전 방향을 바꿔준다.


from bbio import *
import time
bbio_init()

pwm = GPIO1_16
brk = GPIO0_5
dir = GPIO0_13

pinMode(pwm, OUTPUT)
pinMode(brk, OUTPUT)
pinMode(dir, OUTPUT)

digitalWrite(pwm, HIGH)
digitalWrite(brk, LOW)
digitalWrite(dir, LOW)

while True:
   digitalWrite(dir, HIGH)
   print(str('dir 1')
   time.sleep(1)
   digitalWrite(dir, LOW)
   print('dir2')
   time.sleep(1)

bbio_cleanup()







Posted by 살레시오
,

 파이썬을 공부해 나가면서 한 동안 파이썬으로 GPIO를 제어하는 방법을 찾고 있었다. 라즈베리파이에서 RPIO나 WiringPi 와 같은 파이썬 모듈을 쓸 수 있으나 라즈베리파이의 GPIO기능 자체가 너무 빈약하다는게 문제다. 아두이노 계열은 파이썬이 되지를 않고 라즈베리파이에 연결할 수 있는 아두이노 (혹은 유사 보드)들이 몇몇 검색되었는데 파이썬으로 제어를 하기에는 제약이 많다. 그나마 아두이노에 standard firmata 를 올리고 라즈베리파에에서 pyFirmata 로 제어하는 방법이 있기는 한데 직접 해 보니 이상하게 잘 동작이 되지 않았다.

 비글본블랙(이하 BBB) 이라는 보드는 (마데 인 America 이다.) 리눅스 머신이면서 GPIO가 라즈베리파이와는 비교도 안 되게 많이 마련되어 있다.  하드웨어를 제어하는데 자바스크립트를 이용하며 이것을 잘 몰랐기 때문에 한 번 살펴보기만 하고 서랍에 넣어두었었다.

그런데 구글링해보니 여기에도 파이썬으로 GPIO를 제어할 수 있는 모듈들이 있었다. 그 중 PyBBIO 와 adafruit 에서 배포하는 Adafruit_BBIO 라는 파이썬 모듈이 활발하게 개발 중인 것 같다. 이것을 이용하면 포트, PWM, ADC 와 같은 주변기기들을 파이썬으로 제어할 수 있다. 그래서 한 번 시도해보기로 했다.

 먼저 BBB 를 모니터에 연결하려면 마이크로HDMI 케이블(없으면 젠더라도)이 있어야 해서 주문을 했다. 다른 방법으로 BBB는 USB만 PC와 연결하면 ssh로 PC상에서 터미널 창을 띄울 수 있고 구글링해보면 방법도 잘 나와 있다. 그래서 putty 라는 프로그램을 이용하여 원격 터미널 창에서 파이썬 모듈을 설치한 후 실험을 몇 개 해 보았는데 잘 되었다. 포트로 LED를 깜박이고 cds셀을 이용한 ADC 실험도 해 보았는데 매우 간단하게 잘 되었다.

 다음은 원격 터미널 상에서 nano를 이용하여 LED를 깜박이는 프로그램을 작성하는 화면이다.


 PyBBIO는 아두이노의 API와 유사하게 작성되어 있으며, 반면 Adafruit_BBIO는 라즈베리파의 RPIO 를 많이 참고한 것 같다. 취향에 따라 선택하면 되겠다.




Posted by 살레시오
,