ESP8266 (ESP-WROOM-02)으로 서보 제어

개요



ESP8266 (이하 WROOM02)으로 서보 제어


소개



이번에 사용한 서보는 SG90이라는 녀석. 아키즈키에서 400엔.
htp // 아키즈키덴시. 코 m/분 g/g/gM-08761/






PWM 사이클
20 밀리 초

제어 펄스
0.5~2.4 밀리초

제어각
±약 90°(180°)

배선
차 : GND 적색 : 전원 [+] 주황색 : 제어 신호 [JR 타입]

토크
1.8 kgf・cm

작동 속도
0.1초/60도

작동 전압
4.8V(~5V)

온도 범위
0℃ ~ 55℃

외형치수
22.2 x 11.8 x 31mm

무게
9g


4.8V 드라이브이지만 WROOM02 용 3.3V에서 어쨌든 작동했습니다.
(전원 5V, 제어 신호 3.3V에서는 동작하지 않습니다.)

데이터 시트는 이쪽
htp // 아키즈키덴시. 이 m/두 w응아 d/ds/토우 rp로/SG90_아. pdf



그 자체 즈바리의 「Servo」라이브러리가 있습니다만, 거동을 이해하고 싶기 때문에, 이번은 스스로 작성해 보겠습니다.

데이터 시트에 따르면, 20msec주기 (50Hz)에서 제어 펄스 (PWM)를 보내면 좋다.
여기는 바로 Ticker의 차례입니다.
"ESP8266 (ESP-WROOM-02)의 편리한 라이브러리 요약 (Ticker)"

스케치


// SG90
// http://akizukidenshi.com/download/ds/towerpro/SG90_a.pdf
// 
// Position "0" (  1.45 ms pulse) is middle,
//         "90" ( - 2.4 ms pulse) is all the way to the right,
//        "-90" ( - 0.5 ms pulse) is all the way left.

#include <Ticker.h>

const int deg000 =  500; // micro sec.
const int deg180 = 2400; // micro sec.

int microSec = deg000;

#define PWM_OUT 4

Ticker serv1;

void setup() {
  Serial.begin(115200);
  Serial.println();

  pinMode(PWM_OUT, OUTPUT);

  // 20 msec
  serv1.attach_ms(20, pwm);
}

void pwm() {
  digitalWrite(PWM_OUT, HIGH);
  delayMicroseconds(microSec);
  digitalWrite(PWM_OUT, LOW);
}

void loop() {
  if (0 < Serial.available()) {
    delay(10);
    int deg = serialReadAsInt();
    if (0 <= deg && deg <= 180) {
      microSec = deg000 + deg / 180.0 * (deg180 - deg000);
    }

    Serial.print(deg);
    Serial.print(" : ");
    Serial.println(microSec);
  }
}

int serialReadAsInt() {
  char c[9] = "0";
  for (int i = 0; i < 8; i++) {
    c[i] = Serial.read();
    if (c[i] == '\0') {
      break;
    }
  }
  return atoi( c );
}

동작 확인



도구 - 직렬 모니터를 열고 0 - 180 각도를 보냅니다.
서보가 지리지리 가고 있습니다만, 좋은 느낌으로 제어할 수 있는 것 같습니다.



요약


  • WROOM02로 서보를 제어했습니다.
  • Ticker 덕분에 쉽고 안정적인 PWM을 생성할 수 있습니다.
  • 반대로 loop( ) 로 PWM 을 생성한 경우라면, 다른 처리에 영향을 받아 PWM (서보 각도) 가 안정되지 않습니다. Ticker Banzai !!
  • 2개 이상 연결하는 경우는, PWM 를 직렬화 하는 것일까? ? ? 직렬화하여 20msec를 사수하려면 1핀에서 20/2.4 = 8.xx 최대 8개까지? ? ?
  • 제대로 5 V로 구동시키고 싶습니다만, 트랜지스터(소스 드라이버)를 사용하면 좋을까? ? ?

  • 참고 자료



  • 「건축 발명 공작 세미나 2008: Arduino 서보 제어」
  • 「Arduino편 그 9 Arduino로 서보 모터를 큐이 큐이 움직인다!」
  • 좋은 웹페이지 즐겨찾기