[Arduino] SBOT1 아두이노 세그웨이 밸런싱로봇 제작(Feat. MPU6050, PID제어) - (1)

ZEDY·2023년 4월 30일

http://scipia.co.kr/cms/blog/227
이 키트를 조립하기 전, 공부를 하려 합니다.
(해당 포스팅의 모든 출처는 싸이피아 임을 명시합니다.)


[소개]

무엇을 만들려는 것인가?
두 바퀴로 균형을 유지하여 넘어지지 않는 로봇
즉, "Self-Balacing Robot" 또는 밸런싱 로봇이라 합니다.

왜 하는 것인가?
최소한의 부품으로 밸런싱 로봇을 구현해보고 원리를 이해하기 위함입니다.

다음 STEP은?
완전히 넘어지지 않는 좀더 완벽한 밸런싱 로봇을 구현하고자 합니다.
그러기 위해서는 DC모터, 배터리, 고난이도의 프로그래밍이 필요하다고 합니다.

필요한 알고리즘
두 바퀴로 균형을 잡기 위해서는 지속적으로 로봇의 기울어짐 정도를 알아내고 이를 토대로 두 개의 모터와 바퀴로 힘을 전달함으로서 로봇을 바로 세우게 하는 알고리즘이 필요합니다.
"Inverted Pendulum Algorithm" 을 공부하는 포스팅도 추후에 작성하겠습니다.

기본 동작원리
로봇의 기울어진 정도를 알아내기 -> MPU6050 자이로 가속도 센서 사용
로봇이 평행을 유지하게 하는 것 -> PID 제어 알고리즘


[일단, 공부]

아두이노

  • 아두이노 보드
  • L298N 모터 드라이버보드
  • 비행센서모듈(MPU6050)
    비행센서모듈은 12C 인터페이스를 통해 아두이노 우노 보드와 통신하고 아두이노의 SPI 통신핀 A4와 A5를 사용함.
  • 바퀴 제어 : L298N 모터드라이버 보드의 1N1~IN4와 아두이노의 PWM핀인 D6, D9, D10, D11를 각각 연결
  • 모터 속도 제어 : PWM 신호의 듀티비를 사용

기자재 공부

  1. 비행센서모듈(MPU6050)
    • 드론 구성에 있어 필수적인 모듈
    • 회전, 기울기 등을 측정하여 모터를 정확하게 제어할 수 있음 -> 올바르게 균형 잡을 수 있게 함
    • MPU6050 모듈 : 가속도 3축, 자이로 3축, 온도센서의 7가지 센서 포함
    • 이러한 값을 출력 : 센서 레지스터와의 중간 인터페이스로 각 채널에 대해 16비트 크기의 값을 출력해주는 ADC 모듈 가지고 있음
    • 아두이노 프로 마이크로와 12C 버스 인터페이스를 통해 연결 됨
    • ADC -> 센서 레지스터로 데이터 저장
    • FIFO -> 12C의 SDA핀 이용해 데이터 전달
    • 12C : 저속의 주변 기기를 연결하기 위해 사용됨
      * 통신 시 필요한 핀 : SDA -> 데이터 주고 받는 역할, SCL -> 동기화를 위한 Clock 역할
  2. L298N 모터드라이버 보드
    • 사용 이유 : 아두이노의 디지털핀에서 출력할 수 있는 최대 전류 : 40mA -> 모터는 이 이상의 전류를 필요로 함
    • 그래서 모터 드라이버 모듈로 모터를 제어함
    • 모터 출력 여부 제어
    • 모터 속도 제어
    • 모터 방향 제어

[SBOT1 구동 방법 및 프로그램 설명]

  • 로봇의 기울어짐 정도 알아냄 : MPU6050 자이로+가속도 센서 사용

  • 로봇의 평행 유지 : PID 제어 알고리즘을 사용

  • 두 바퀴로 균형 유지 : 지속적인 로봇의 기울어짐 정도를 알아내 -> 두 개의 모터와 바퀴로 힘을 전달 -> "로봇을 바로 세우게" 하는 알고리즘이 필요함

  • MPU6050 : I2C 인터페이스를 통해 아두이노 우노 보드와 통신
    아두이노의 SPI 통신핀 A4와 A5를 사용

  • 바퀴 제어 : L298N 모터드라이버 보드의 1N1~IN4와 아두이노의 PWM핀인 D6, D9, D10, D11를 각각 연결

  • 모터 속도 제어 :PWM 신호의 듀티비 사용

로봇의 기울기 확인 (MPU6050 센서) -> 기울기에 따른 회전 및 이동 + 바퀴 회전 속도 제어
로봇이 중앙에서 벗어난 정도에 따라 바퀴의 회전속도가 달라지며 중앙에서 많이 벗어날수록 속도가 빨라짐.

구현 : PID 제어 알고리즘 사용, MPU6050 센서에서 전달받은 기울어짐 정도와 크기를 바탕으로 바퀴의 방향과 속도를 결정


참고
https://m.blog.naver.com/scw0531/221276680031
https://playground.arduino.cc/Main/MPU-6050/
https://m.blog.naver.com/emperonics/221834467735

profile
IT기획/운영

0개의 댓글