디지털 라이프 電子的生活 My Digital Life/아두이노 (Arduino)

[자작] 아두이노 서보 테스터

미친도사 2020. 7. 29. 22:06

아두이노로 RC카, RC 탱크 등을 하려다 보니, 서보를 다루는 경우가 많습니다.

그렇게 되면 센터에 맞춰놓고 조립을 해야 하는 경우가 있는데, 그 때마다 아두이노 프로그램을 해서 맞추곤 했습니다. 꽤 번거롭습니다.

 

서보 테스터를 알아보다 보니, 구미에 딱 맞는 게 없습니다.

그래서, 하나 만들었습니다.

 

LCD를 빼고 구성품 배치를 보면, 다음과 같습니다.

 

외부 전원은 흔한 Micro USB 커넥터를 통해 공급받고요

아두이노는 제가 제일 애용하는 Pro Mini입니다. 크기도 작고 저렴하기도 하고요.

별로 쓸 일은 없겠지만, 아두이노 리셋 버튼도 하나 달았고요.

1602 캐릭터 LCD는 밝기 조정을 위해 가변 저항을 하나 쓰면 선명하게 세팅할 수 있어요.

서보 각도 조정을 위한 좀 큼직한 가변 저항을 하나 썼습니다.

서보는 5V에서 동작하는 것과 저전압용을 위한 커넥터를 각각 마련했습니다. 저전압용은 3.3V에서 동작합니다.

 

저전압용 서보 장착 모습

 

회로도는 다음과 같습니다. 엄청 간단합니다. ㅋ

5V는 microUSB 커넥터를 통해 공급받고, 서버용 3.3V는 AMS-1117-3.3이란 작은 레귤레이터를 하나 썼습니다.

서보 조향을 위한 가변 저항을 A0 아날로그 입력으로 설정하고, 코드에서 그걸 서보 출력을 위한 각도로 변환하게 해서 PWM 출력 중 하나인 D3 단자를 통해 출력하게 했습니다. 진짜 엄청 간단함. 

 

소스도 간단합니다.

// Servo Tester by Crazy Doctor 2020.07.29.

#include <LiquidCrystal.h>
#include <Servo.h>

const int rs = 12, en = 10, d4 = 6, d5 = 7, d6 = 8, d7 = 9;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

int inputPin = A0;
float ANGLE;
float AINPUT;

Servo servo;
int servoPin = 3;

int ANGLE_i;
int AINPUT_i;

void setup() {
  lcd.begin(16, 2);
  servo.attach(servoPin);
  
  lcd.setCursor(2,0); lcd.print("SERVO Tester");
  lcd.setCursor(1,1); lcd.print("by CrazyDoctor");
  delay(2000);
  lcd.clear();
}

void loop() {
  AINPUT=analogRead(inputPin);
  ANGLE=(AINPUT/1023)*180;
  AINPUT_i=AINPUT;
  ANGLE_i=ANGLE;

  lcd.setCursor(0, 0); lcd.print("Dial:");
  lcd.setCursor(6, 0); lcd.print(AINPUT_i);
  lcd.setCursor(0, 1); lcd.print("Angle:");
  lcd.setCursor(6, 1); lcd.print(ANGLE_i);

  servo.write(ANGLE_i);
  delay(100);
  lcd.clear();
}

 

이렇게 해서 동작하는 모습을 영상으로도 찍어 봤습니다.

이렇게 해서 간단하게 서보 테스터를 하나 만들었습니다.

나중에 시간 좀 나면 케이스도 하나 만들어줄까 싶기도 합니다. ㅋㅋ

 

이렇게 해서 간단한 아두이노 프로젝트 소개글 마칩니다.

 

 

반응형