라즈베리파이 360도 서보모터 제어 - lajeubelipai 360do seobomoteo jeeo

서보모터 소개하기

  • 축을 원하는 각도로 회전할 수 있는 액추에이터
  • 아두이노에 연결해 사용하는 서보모터는 9g 서보모터라고 해서 무게가 9g 밖에 안 되는 것을 많이 사용
  • 책에서도 9g 서보모터를 사용

  • 0에서 180도 사이에 원하는 각도로 축을 돌릴 수 있음
  • 180도로 완벽히 안 돌아가는 제품도 있기 때문에 가급적
    120 ~ 130도까지 사용하는 것이 좋음
  • 좋은 서보모터의 경우 360도로 완전히 회전할 수도 있음
  • 서보모터를 제어할 때는 Servo라는 라이브러리를 사용

자동으로 움직이기

  • 서보모터의 축이 자동으로 돌아가도록 만들어본다.

준비물

  • 부품 제조사마다 색이 다르지만 선이 3개인 것은 동일
  • 구성
    • 아두이노 보드의 디지털 핀에 연결하는 선 : 주황 또는 노랑
    • 그라운드에 연결하는 선 :
      갈색 또는 검정
    • 전원에 연결하는 선 : 빨강

  • 서보모터의 검은 선 또는 갈색 선을 아두이노 보드의 그라운드 핀에 연결한다.

  • 서보모터의 빨간 선을 아두이노 보드의 전원 핀에 연결한다.

  • 서보모터의 노란 선 또는 주황 선을 아두이노 보드의 9번 핀에 연결한다.

  • Servo라는 라이브러리를 사용하겠다는 뜻

#include <Servo.h>

  • [스케치]-[Include Library]-[Servo] 메뉴 선택

Servo.attach()
서보모터를 연결한 디지털 핀 번호를 설정한다.

구조
Servo.attach(핀 번호)

매개변수
핀 번호 : 서보모터가 연결된 디지털 핀 번호를 뜻함

반환 값
없음

사용 예
myservo.attach(9);
// 서보모터를 연결한 디지털 핀 번호가 9번 핀이라고 설정한다.

Servo.write()
서보모터의 각도를 설정한다.

구조
Servo.write(각도)

매개변수
각도 : 서보모터에 설정할 각도를 뜻함

반환 값
없음

사용 예
myservo.write(90);
// 서보모터의 각도를 90도로 설정한다.

  • Servo 라이브러리의 write 명령어를 사용한 뒤 delay 함수로 일정시간 꼭 멈춰줘야한다.
  • 서보모터가 회전하는 것을 기다려줘야 하기 때문
  • 만약 멈추는 시간이 짧다면 원하는 각도까지 회전할 수 없음

가변저항 소개하기

  • 저항 값을 바꿀 수 있는 저항
  • 대부분 돌려서 조절할 수 있도록 되어있음

  • 다리가 3개로 되어있음
  • 양쪽에 있는 다리 2개 : 전원 또는 그라운드와 연결
  • 가운데 다리 : 저항 값에 따라 전압 값이 변하는 곳
  • 안에 둥글게 생긴 저항이 들어있음
  • 책에서는 10k 옴 가변저항 사용

가변저항으로 각도 조절하기

  • 가변저항의 값을 이용해 서보모터의 각도를
    설정하는 것을 해본다.

준비물

  • 아두이노 보드의 그라운드 핀을 브레드보드 긴 파란색 세로줄에, 전원 핀을 긴 빨간색 세로줄에 연결한다.

  • 가변저항을 방향에 맞춰 브레드보드에 꽂는다.

  • 가변저항의 위쪽 다리와 그라운드 핀이 연결된 세로줄을 연결한다.

  • 가변저항의 가운데 다리를 아두이노 보드의 A0 핀에 연결한다.

  • 가변저항의 아래쪽 다리와
    전원 핀이 연결된 세로줄을 연결한다.

  • 서보모터의 검은 선 또는 갈색 선을 그라운드 핀이 꽂힌 세로줄과 연결한다.
  • 빨간 선을 전원 핀이 꽂힌 세로줄에 연결한다.
  • 노란 선 또는 주황 선을 아두이노 보드의 9번 핀에 연결한다.

  • 비글보드의 최신 모델로 미국에 있는 비글보드 재단이 개발
  • 가로, 세로 크기가 5.3×8.6 cm로 일반 명함 크기
  • 크기가 작지만 성능은 라즈베리 파이만큼 강력
  • 라즈베리 파이처럼 아주 작은 리눅스 컴퓨터
  • 로봇과 관련된 프로젝트에서 비글본 블랙을 많이 사용

OpenROV

  • http://www.openrov.com
  • 아두이노와 비글본 블랙을 이용해 DIY 수중탐사로봇을 만드는 프로젝트
  • 원하는 사람은 홈페이지에 판매하는 키트를 사서 만들 수 있고 필요한 재료와 만드는 방법이 전부 공개되어 있기 때문에 그것을 보고 직접 만들어 볼 수도 있음

BeagleBrew

  • youtu.be/eUFf-EAVWZ4
  • 집에서 직접 맥주를 만드는 프로젝트
  • 자동으로 온도를 조절하고 자신의 홈페이지에 현재 맥주 상태 표시
  • 비글본 블랙은 이렇게 센서와 액추에이터를 제어하는 것뿐만 아니라 홈페이지를 만들어 인터넷을 쉽게 사용할 수도 있음

beagleSNES

  • goo.gl/WVCQQC
  • 비글본 블랙을 슈퍼 패미콤으로 만들어주는 프로젝트
  • 그냥 홈페이지에 있는 비글 SNES 이미지를 그대로 설치만 하면 됨
  • 최신 버전부터 2인용도 지원하기 때문에 USB 허브를 연결해 둘이서 게임을 할 수도 있음

감사합니다!

category 라즈베리파이 2020. 5. 21. 10:41

sg90 서보모터는 다음과 같이 생겼습니다

라즈베리파이 360도 서보모터 제어 - lajeubelipai 360do seobomoteo jeeo
서보모터 sg-90

이를 제어하기 위해서는 pwm을 이용합니다

pwm 값을 주어 서보모터를 회전시킬 수 있습니다

하지만 이는 스텝모터와 다르게 5를 준다고 5만큼 도는것이 아닙니다

5의 위치로 돌게 됩니다

그리고 정밀하게 제어하기에 좋은 모터는 아닙니다

정밀한 제어가 필요하다면 스텝모터를 이용해야 합니다

그래서 저는 주로 이를 사용하기 전에 어떤 한 값으로 초기화

그 각도를 기준으로 각도를 맞춰 진행하였습니다

그리고 0~180도를 제어할 수 있다고 되어있지만

하드웨어의 한계로 보통 5~175정도 까지 회전가능하도 보면 됩니다

sg90 서보모터 특징

특징을 정리해보겠습니다

1. 가격이 저렴하다 보통 2000원이면 구매할 수 있다

2. 가볍다: 작고 가볍습니다

3. 회전을 구현하기 쉽다

4. 불량이 많다: 정말 많습니다.. 분명히 제대로 꽂은 것 같은데 안된다면 먼저 불량을 의심하세요!!

10개 중 절반 이상이 불량인 제품을 받은 친구도 있었습니다 ㅠㅠㅠ

간단하게 위의 특징이 있을 것 같습니다

softPwmCreate(핀번호, 시작 펄스 값, 주기)

주기는 1~1024 사이의 값을 가집니다

내부적으로는 *0.1ms가 됩니다

즉 위와 같이 200을 입력하면 주기는 20ms가 됩니다

sg90 서보모터 라즈베리 파이에 연결 방법

서보모터를 보시면 선이 3개가 있습니다

하나는 +, 하나는 GND, 하나는 데이터 핀입니다

뭐가 뭐일까요??

빨강은 전원선(+)

갈색은 GND(-)

오렌지색은 데이터 선 입니다

여기 중요합니다!!!

즉 빨강은 5V에 연결, 갈색은 GND에 연결, 오렌지색은 PWM이 되는 GPIO에 연결합니다

(저는 wpi 1번을 사용하겠습니다)

라즈베리파이 360도 서보모터 제어 - lajeubelipai 360do seobomoteo jeeo
서보모터 라즈베리파이 연결

서보모터 테스트 코드

라즈베리파이 360도 서보모터 제어 - lajeubelipai 360do seobomoteo jeeo

위와 같이 연결하고 위의 코드를 실행했는데도 되지 않는다면 불량입니다!!

먼저 테스트를 해보세요

역시 컴파일을 해주고 실행시켜봅니다

$ gcc -o servotest servotest.c -lwiringPi
$ ./servotest
라즈베리파이 360도 서보모터 제어 - lajeubelipai 360do seobomoteo jeeo

모터가 정상이라면 위와 같이 동작합니다

서보모터 연속 회전하기

이번에는 조금 더 응용해봅시다!!

위에서는 한 각도로 돌고 끝이었지만 이번에는 연속회전하게 해보겠습니다

라즈베리파이 360도 서보모터 제어 - lajeubelipai 360do seobomoteo jeeo

위 코드를 통해 5에서 25의 각도를 왔다갔다 하는걸 볼 수 있습니다

pos를 1씩 증가하면서 계속 값을 주어 연속적으로 움직이게 만든 것입니다

라즈베리파이 360도 서보모터 제어 - lajeubelipai 360do seobomoteo jeeo

정말 깨방정 맞게 움직이네요 ㅋㅋㅋㅋㅋㅋ

이렇게 서보모터를 다루는 방법을 알아봤습니다!!