Top 22 아두 이노 자이로 센서 서보 모터 5598 Good Rating This Answer

You are looking for information, articles, knowledge about the topic nail salons open on sunday near me 아두 이노 자이로 센서 서보 모터 on Google, you do not find the information you need! Here are the best content compiled and compiled by the Toplist.aseanseafoodexpo.com team, along with other related topics such as: 아두 이노 자이로 센서 서보 모터 아두이노 자이로센서 dc 모터, 아두이노 수평 유지, 아두이노 자이로센서 코드, 아두이노 서보모터 브레이크, 아두이노 자이로센서 각도, MPU6050 모터, 아두이노 기울기센서, 아두이노 짐벌


Arduino Uno 로 MPU6050 자이로센서를 사용해 SG90 서보모터 제어하기
Arduino Uno 로 MPU6050 자이로센서를 사용해 SG90 서보모터 제어하기


아두이노 – 자이로센서를 이용한 서보모터 제어 : 네이버 블로그

  • Article author: m.blog.naver.com
  • Reviews from users: 15541 ⭐ Ratings
  • Top rated: 4.7 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about 아두이노 – 자이로센서를 이용한 서보모터 제어 : 네이버 블로그 가만히 있을 때 센서에 작용하는 중력 가속도를 X, Y, Z 축으로 벡터 3개로 나누어 크기를 측정하고 가속도센서의 값들은 정지된 상태에서도 특정한 … …
  • Most searched keywords: Whether you are looking for 아두이노 – 자이로센서를 이용한 서보모터 제어 : 네이버 블로그 가만히 있을 때 센서에 작용하는 중력 가속도를 X, Y, Z 축으로 벡터 3개로 나누어 크기를 측정하고 가속도센서의 값들은 정지된 상태에서도 특정한 …
  • Table of Contents:

카테고리 이동

No1 전자엔지니어 전문몰 아이씨뱅큐

이 블로그 
아두이노
 카테고리 글

카테고리

이 블로그 
아두이노
 카테고리 글

아두이노 - 자이로센서를 이용한 서보모터 제어 : 네이버 블로그
아두이노 – 자이로센서를 이용한 서보모터 제어 : 네이버 블로그

Read More

[아두이노]mpu6050 을 이용하여 2축 서보모터 제어하기

  • Article author: diy-dev-design.tistory.com
  • Reviews from users: 32540 ⭐ Ratings
  • Top rated: 4.0 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about [아두이노]mpu6050 을 이용하여 2축 서보모터 제어하기 오늘 소개해 드릴 내용은 RC Headtracking FPV 만들기의 두번째 스탭인 6축 자이로 센서를 이용한 움직임 신호 받기와 해당 신호를 이용 하여 2축 서보 … …
  • Most searched keywords: Whether you are looking for [아두이노]mpu6050 을 이용하여 2축 서보모터 제어하기 오늘 소개해 드릴 내용은 RC Headtracking FPV 만들기의 두번째 스탭인 6축 자이로 센서를 이용한 움직임 신호 받기와 해당 신호를 이용 하여 2축 서보 … 아두이노와 같은 마이크로 칩을 이용하여 무엇인가를 해보다 보면 정말 놀라운 경험들을 많이 하게 됩니다. 그 중 하나가 바로 mpu6050 같은 센서가 될 수 있겠습니다. 요 조그만 칩을 이용하여 기울어진 정도나..
  • Table of Contents:

태그

관련글

댓글0

공지사항

최근글

인기글

최근댓글

태그

티스토리툴바

[아두이노]mpu6050 을 이용하여 2축 서보모터 제어하기
[아두이노]mpu6050 을 이용하여 2축 서보모터 제어하기

Read More

Aduino Uno 로 MPU-6050 자이로센서를 사용해 SG90 서보모터 제어하기

  • Article author: rockjjy.tistory.com
  • Reviews from users: 44384 ⭐ Ratings
  • Top rated: 4.0 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about Aduino Uno 로 MPU-6050 자이로센서를 사용해 SG90 서보모터 제어하기 SG90 마이크로 서보모터에 대해서 알아보기. MPU-6050 은 3축 자이로 센서와 3축 가속도 센서의 기능이 결합된 센서 모듈 입니다. AVR 또는 Arduino … …
  • Most searched keywords: Whether you are looking for Aduino Uno 로 MPU-6050 자이로센서를 사용해 SG90 서보모터 제어하기 SG90 마이크로 서보모터에 대해서 알아보기. MPU-6050 은 3축 자이로 센서와 3축 가속도 센서의 기능이 결합된 센서 모듈 입니다. AVR 또는 Arduino … Aduino Uno 로 MPU-6050 자이로센서를 사용해 SG90 서보모터를 회전시켜 보는 프로젝트 입니다 SG90 마이크로 서보모터에 대해서 알아보기 MPU-6050 은 3축 자이로 센서와 3축 가속도 센서의 기능이 결합된 센서..
  • Table of Contents:

태그

관련글

댓글0

공지사항

최근글

인기글

최근댓글

태그

전체 방문자

티스토리툴바

Aduino Uno 로 MPU-6050 자이로센서를 사용해 SG90 서보모터 제어하기
Aduino Uno 로 MPU-6050 자이로센서를 사용해 SG90 서보모터 제어하기

Read More

SSHS_CS_7반_4조_흔들림 방지 식판 – Arduino Project Hub

  • Article author: create.arduino.cc
  • Reviews from users: 2786 ⭐ Ratings
  • Top rated: 3.2 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about SSHS_CS_7반_4조_흔들림 방지 식판 – Arduino Project Hub 아두이노 프로젝트 : 흔들림 방지 식판. … 자이로센서는 xyz 축을 기준으로 회전하는 각속도를 계산해 이를 적분해서 현재 각도를 측정하는 센서 … …
  • Most searched keywords: Whether you are looking for SSHS_CS_7반_4조_흔들림 방지 식판 – Arduino Project Hub 아두이노 프로젝트 : 흔들림 방지 식판. … 자이로센서는 xyz 축을 기준으로 회전하는 각속도를 계산해 이를 적분해서 현재 각도를 측정하는 센서 … 아두이노 프로젝트 : 흔들림 방지 식판.arduino
  • Table of Contents:

Components and supplies

Necessary tools and machines

Apps and online services

About this project

Code

Schematics

Comments

SSHS_CS_7반_4조_흔들림 방지 식판 - Arduino Project Hub
SSHS_CS_7반_4조_흔들림 방지 식판 – Arduino Project Hub

Read More

[아두이노] 가속도센서를 이용한 서보모터 제어

  • Article author: embejied.tistory.com
  • Reviews from users: 49628 ⭐ Ratings
  • Top rated: 3.2 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about [아두이노] 가속도센서를 이용한 서보모터 제어 교생실습 중에 해본것인데 가속도센서를 이용하여 서보모터를 제어해 보았다. 3축 가속도센서로 사용한 모듈은 마이센이라는 회사에서 만든 … …
  • Most searched keywords: Whether you are looking for [아두이노] 가속도센서를 이용한 서보모터 제어 교생실습 중에 해본것인데 가속도센서를 이용하여 서보모터를 제어해 보았다. 3축 가속도센서로 사용한 모듈은 마이센이라는 회사에서 만든 … 교생실습 중에 해본것인데 가속도센서를 이용하여 서보모터를 제어해 보았다. 3축 가속도센서로 사용한 모듈은 마이센이라는 회사에서 만든 [P0-AXA-12-01] 3축 아날로그 가속도 센서모듈이다. 서보모터는 국민[email protected]
  • Table of Contents:
See also  Top 42 생명 과학 실험 키트 The 8 Correct Answer
[아두이노] 가속도센서를 이용한 서보모터 제어

티스토리툴바

[아두이노] 가속도센서를 이용한 서보모터 제어
[아두이노] 가속도센서를 이용한 서보모터 제어

Read More

3축 짐벌 프로젝트 – 3D설계와 자이로 센서(MPU6050) 각도 읽어오기

  • Article author: ilovemecha.tistory.com
  • Reviews from users: 21498 ⭐ Ratings
  • Top rated: 4.5 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about 3축 짐벌 프로젝트 – 3D설계와 자이로 센서(MPU6050) 각도 읽어오기 유튜브에서 아두이노 3축 짐벌을 봤는데 상당히 재밌어 보였다! … 가져온 데이터를 통해서 내가 짐벌을 제어할 수도 있으며, 서보모터를 돌린다던지 … …
  • Most searched keywords: Whether you are looking for 3축 짐벌 프로젝트 – 3D설계와 자이로 센서(MPU6050) 각도 읽어오기 유튜브에서 아두이노 3축 짐벌을 봤는데 상당히 재밌어 보였다! … 가져온 데이터를 통해서 내가 짐벌을 제어할 수도 있으며, 서보모터를 돌린다던지 … 이 프로젝트를 시작하게 된 계기가는 이거다! 유튜브에서 아두이노 3축 짐벌을 봤는데 상당히 재밌어 보였다! https://www.youtube.com/watch?v=UxABxSADZ6U 이 프로젝트를 비슷하게? 따라 해보려고 한다. 메이킹..
  • Table of Contents:

IT를 품은 기계공학도

3축 짐벌 프로젝트 – 3D설계와 자이로 센서(MPU6050) 각도 읽어오기 본문

3축 짐벌 프로젝트 - 3D설계와 자이로 센서(MPU6050) 각도 읽어오기
3축 짐벌 프로젝트 – 3D설계와 자이로 센서(MPU6050) 각도 읽어오기

Read More

파워 유튜버 :: [아두이노#245] (#6/6축자이로센서/MPU6050) nRF24L01을 이용한 1:1 단방향 무선통신 원격제어 시리즈!(녹칸다/포로리야공대가자)

  • Article author: bota.tistory.com
  • Reviews from users: 48101 ⭐ Ratings
  • Top rated: 4.2 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about 파워 유튜버 :: [아두이노#245] (#6/6축자이로센서/MPU6050) nRF24L01을 이용한 1:1 단방향 무선통신 원격제어 시리즈!(녹칸다/포로리야공대가자) 아두이노에 서보모터 2개를 D2,D3에 연결했다! 트랜스미터에서 날라오는 2개의 각도값을 이용해서 서보모터를 제어하라! …
  • Most searched keywords: Whether you are looking for 파워 유튜버 :: [아두이노#245] (#6/6축자이로센서/MPU6050) nRF24L01을 이용한 1:1 단방향 무선통신 원격제어 시리즈!(녹칸다/포로리야공대가자) 아두이노에 서보모터 2개를 D2,D3에 연결했다! 트랜스미터에서 날라오는 2개의 각도값을 이용해서 서보모터를 제어하라! (#6/6축자이로센서/MPU6050) nRF24L01을 이용한 1:1 단방향 무선통신 원격제어 시리즈!(녹칸다/포로리야공대가자) -RF무선통신 모듈중 가장 저렴한 nRF24L01을 이용한 원격제어 시리즈로 구성한다..
  • Table of Contents:
[아두이노#245] (#66축자이로센서MPU6050) nRF24L01을 이용한 11 단방향 무선통신 원격제어 시리즈!(녹칸다포로리야공대가자)

티스토리툴바

파워 유튜버 :: [아두이노#245] (#6/6축자이로센서/MPU6050) nRF24L01을 이용한 1:1 단방향 무선통신 원격제어 시리즈!(녹칸다/포로리야공대가자)
파워 유튜버 :: [아두이노#245] (#6/6축자이로센서/MPU6050) nRF24L01을 이용한 1:1 단방향 무선통신 원격제어 시리즈!(녹칸다/포로리야공대가자)

Read More

질문게시판 > 아두이노 모터+자이로센서+서보모터+led 제어 질문입니다. | Basic4MCU.com

  • Article author: www.basic4mcu.com
  • Reviews from users: 41155 ⭐ Ratings
  • Top rated: 3.1 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about 질문게시판 > 아두이노 모터+자이로센서+서보모터+led 제어 질문입니다. | Basic4MCU.com 아두이노 모터+자이로센서+서보모터+led 제어 질문입니다. 페이지 정보. 작성자 Mobile 작성일22-04-21 16:40 조회1,252회 … …
  • Most searched keywords: Whether you are looking for 질문게시판 > 아두이노 모터+자이로센서+서보모터+led 제어 질문입니다. | Basic4MCU.com 아두이노 모터+자이로센서+서보모터+led 제어 질문입니다. 페이지 정보. 작성자 Mobile 작성일22-04-21 16:40 조회1,252회 … 2022.04.21, #include #include #include #include MPU6050 mpu;int16_t ax, ay, az;int16_t gx, gy, gz;int en1 = 9;int in1 = 8;int in2 = 7;char ch;boolean dir;Servo myservo;int val;int prevVal;void setup(){ pinMode(en1, OUTPUT); pinMode(in1, OUTPUT); pinMode(in2, OUTPUT); pinMode(10, OUTPUT); pinMode(11, OUTPUT); pinMode(12..,website
  • Table of Contents:

메인메뉴

페이지 정보

본문

댓글 3

댓글쓰기

질문게시판HOME 질문게시판 목록

질문게시판 > 아두이노 모터+자이로센서+서보모터+led 제어 질문입니다. | Basic4MCU.com” style=”width:100%”><figcaption>질문게시판 > 아두이노 모터+자이로센서+서보모터+led 제어 질문입니다. | Basic4MCU.com</figcaption></figure>
<p style=Read More

코드다 :: [아두이노] MPU-6050 + Stepper Motor 제어

  • Article author: codeda.tistory.com
  • Reviews from users: 27550 ⭐ Ratings
  • Top rated: 3.4 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about 코드다 :: [아두이노] MPU-6050 + Stepper Motor 제어 MPU-6050 가속도/자이로 센서를 그냥 끝내기가 아쉬워서 간단히 실제 뭔가를 움직이게 하는 실험을 하면 좋을 것 같아서 오늘 Post 주제로 결정했습니다. …
  • Most searched keywords: Whether you are looking for 코드다 :: [아두이노] MPU-6050 + Stepper Motor 제어 MPU-6050 가속도/자이로 센서를 그냥 끝내기가 아쉬워서 간단히 실제 뭔가를 움직이게 하는 실험을 하면 좋을 것 같아서 오늘 Post 주제로 결정했습니다. [아두이노] MPU-6050 + Stepper Motor 제어 온라인 가상시뮬레이터 : https://www.tinkercad.com 참고 post : [아두이노] MPU-6050 가속도/자이로 센서 제어 [아두이노] MPU-6050 센서 + processing 연결 제어 [..https://steemit.com/@codingman

    Steemit 활동 글들을 Tistory로 정리했습니다.

  • Table of Contents:
[아두이노] MPU-6050 + Stepper Motor 제어

1 MPU-6050 + Stepper Motor 회로도

2 코딩

3 실험 결과

마무리

코드다 :: [아두이노] MPU-6050 + Stepper Motor 제어
코드다 :: [아두이노] MPU-6050 + Stepper Motor 제어

Read More


See more articles in the same category here: https://toplist.aseanseafoodexpo.com/blog.

[아두이노]mpu6050 을 이용하여 2축 서보모터 제어하기

아두이노와 같은 마이크로 칩을 이용하여 무엇인가를 해보다 보면 정말 놀라운 경험들을 많이 하게 됩니다. 그 중 하나가 바로 mpu6050 같은 센서가 될 수 있겠습니다.

요 조그만 칩을 이용하여 기울어진 정도나 각도, 나침반과 같은 방향 등을 알아낼 수 있다니 놀랍지 않으신가요?

요 조그만 칩이라고 했는데 이미지는 엄청 큰 mpu6050

오늘 소개해 드릴 내용은 RC Headtracking FPV 만들기의 두번째 스탭인 6축 자이로 센서를 이용한 움직임 신호 받기와 해당 신호를 이용 하여 2축 서보모터를 제어하는 내용 입니다.

헤드트래킹 무선 FPV 를 만들기 위하여 지난 포스트에서 2축 서보모터 마운트를 아주~ 아~~~주 간단하게 만드는 방법을 소개해 드렸었는데요, 해당 프레임에 부착한 서보모터를 이번 시간에 자이로 센서를 이용하여 제어를 해보도록 하겠습니다.

2022.01.31 – [DIY/Arduino] – 2축 서보모터 초간단 제어하기, 간단한 프레임 제작까지

먼저 라이브러리를 받아야 할텐데요, 아래 첨부된 라이브러리를 다운 받으셔서 바로 내문서- Arduino-libraries 폴더에 압축을 해제하여 넣으시면 됩니다.

MPU6050.zip 0.10MB I2Cdev.zip 0.01MB

요렇게 넣으면 됩니다.

혹시 Wire.h 라이브러리가 없으시면 아래 파일도 다운 받으시면 됩니다.

Wire.zip 0.01MB

mpu6050 라이브러리를 받으시면 예제 소스코드가 들어있을 텐데요, 저는 여기서 시작 이후 실제 회전하는 값, 즉 상대 회전 값만을 이용할 계획이고 아래의 코드를 이용하여 회전 값을 추출할 계획입니다. 본 포스트에서 소개해 드리는 예제 외에도 라이브러리가 제공하는 예제 코드를 실행해보시면 다른 창작품 제작에도 도움이 될 수 있을 것 같습니다. ^^

기존 조이스틱 대신 이번에는 mpu6050 보드를 연결해야 하는데요. I2C 방식으로 연결할 것이므로 선은 4가닥만 있으면 되며 vcc 는 3.3v 에 연결해 주시고, GND 는 아두이노의 GND 에 연결, SDA 는 아두이노의 A4 번에 SCL 은 아두이노의 A5에 연결하시면 됩니다. (다른 핀은 안됩니다. 정확히 A4, A5에 연결해 주셔야 합니다)

코딩을 해보자

mpu6050 에 대한 자세한 내용은 이미 여러분들께서 다루어 주시고 있으므로 저는 실제 이번 프로젝트에 사용한 코드만 보여드리도록 하겠습니다.

#include #include “I2Cdev.h” #include “MPU6050_6Axis_MotionApps_V6_12.h” #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE #include “Wire.h” #endif MPU6050 mpu; #define OUTPUT_READABLE_YAWPITCHROLL #define INTERRUPT_PIN 2 // use pin 2 on Arduino Uno & most boards #define LED_PIN 13 // (Arduino is 13, Teensy is 11, Teensy++ is 6) bool blinkState = false; // MPU control/status vars bool dmpReady = false; // set true if DMP init was successful uint8_t mpuIntStatus; // holds actual interrupt status byte from MPU uint8_t devStatus; // return status after each device operation (0 = success, !0 = error) uint16_t packetSize; // expected DMP packet size (default is 42 bytes) uint16_t fifoCount; // count of all bytes currently in FIFO uint8_t fifoBuffer[64]; // FIFO storage buffer // orientation/motion vars Quaternion q; // [w, x, y, z] quaternion container VectorInt16 aa; // [x, y, z] accel sensor measurements VectorInt16 gy; // [x, y, z] gyro sensor measurements VectorInt16 aaReal; // [x, y, z] gravity-free accel sensor measurements VectorInt16 aaWorld; // [x, y, z] world-frame accel sensor measurements VectorFloat gravity; // [x, y, z] gravity vector float euler[3]; // [psi, theta, phi] Euler angle container float ypr[3]; // [yaw, pitch, roll] yaw/pitch/roll container and gravity vector volatile bool mpuInterrupt = false; // indicates whether MPU interrupt pin has gone high void dmpDataReady() { mpuInterrupt = true; } Servo myservo_LR; // streering servo Servo myservo_UD; // 2speed gear box servo int pin_servo_LR = 9; int pin_servo_UD = 10; int pin_x = A3; int pin_y = A4; int angle_x = 512 ; int angle_y = 512 ; void setup() { // join I2C bus (I2Cdev library doesn’t do this automatically) #if I2CDEV_IMPLEMENTATION == I2CDEV_ARDUINO_WIRE Wire.begin(); Wire.setClock(400000); // 400kHz I2C clock. Comment this line if having compilation difficulties #elif I2CDEV_IMPLEMENTATION == I2CDEV_BUILTIN_FASTWIRE Fastwire::setup(400, true); #endif Serial.begin(115200); while (!Serial); // wait for Leonardo enumeration, others continue immediately // initialize device Serial.println(F(“Initializing I2C devices…”)); mpu.initialize(); pinMode(INTERRUPT_PIN, INPUT); // verify connection Serial.println(F(“Testing device connections…”)); Serial.println(mpu.testConnection() ? F(“MPU6050 connection successful”) : F(“MPU6050 connection failed”)); // wait for ready Serial.println(F(”

Send any character to begin DMP programming and demo: “)); //while (Serial.available() && Serial.read()); // empty buffer //while (!Serial.available()); // wait for data //while (Serial.available() && Serial.read()); // empty buffer again // load and configure the DMP Serial.println(F(“Initializing DMP…”)); devStatus = mpu.dmpInitialize(); // supply your own gyro offsets here, scaled for min sensitivity mpu.setXGyroOffset(51); mpu.setYGyroOffset(8); mpu.setZGyroOffset(21); mpu.setXAccelOffset(1150); mpu.setYAccelOffset(-50); mpu.setZAccelOffset(1060); // make sure it worked (returns 0 if so) if (devStatus == 0) { // Calibration Time: generate offsets and calibrate our MPU6050 mpu.CalibrateAccel(6); mpu.CalibrateGyro(6); Serial.println(); mpu.PrintActiveOffsets(); // turn on the DMP, now that it’s ready Serial.println(F(“Enabling DMP…”)); mpu.setDMPEnabled(true); // enable Arduino interrupt detection Serial.print(F(“Enabling interrupt detection (Arduino external interrupt “)); Serial.print(digitalPinToInterrupt(INTERRUPT_PIN)); Serial.println(F(“)…”)); attachInterrupt(digitalPinToInterrupt(INTERRUPT_PIN), dmpDataReady, RISING); mpuIntStatus = mpu.getIntStatus(); // set our DMP Ready flag so the main loop() function knows it’s okay to use it Serial.println(F(“DMP ready! Waiting for first interrupt…”)); dmpReady = true; // get expected DMP packet size for later comparison packetSize = mpu.dmpGetFIFOPacketSize(); } else { // ERROR! // 1 = initial memory load failed // 2 = DMP configuration updates failed // (if it’s going to break, usually the code will be 1) Serial.print(F(“DMP Initialization failed (code “)); Serial.print(devStatus); Serial.println(F(“)”)); } myservo_LR.attach(pin_servo_LR); myservo_LR.write (90); myservo_UD.attach(pin_servo_UD); myservo_UD.write (90); } void loop() { // if programming failed, don’t try to do anything if (!dmpReady) return; // read a packet from FIFO if (mpu.dmpGetCurrentFIFOPacket(fifoBuffer)) { // Get the Latest packet #ifdef OUTPUT_READABLE_YAWPITCHROLL // display Euler angles in degrees mpu.dmpGetQuaternion(&q, fifoBuffer); mpu.dmpGetGravity(&gravity, &q); mpu.dmpGetYawPitchRoll(ypr, &q, &gravity); float angle_x = (ypr[0] * 180 / M_PI) * -1 + 90 ; //* -1 + 90; float angle_y = (ypr[1] * 180 / M_PI) + 90 ; //* -1 + 30; if (angle_y < 60) angle_y = 60; if (angle_y > 120) angle_y = 120; if (angle_x < 30) angle_x = 30; if (angle_x > 150) angle_x = 150; myservo_LR.write (angle_x); myservo_UD.write (angle_y); Serial.print(“ypr\tx:”); Serial.print(int(angle_x)); Serial.print(“\ty:”); Serial.print(int(angle_y)); Serial.print(“\t”); #endif } Serial.println(“.”); delay(10); }

코드가 조금 길어졌기는 하지만 기존 첫번째 과정에 mpu6050 관련 코드가 추가되었고 크게 달라진것은 없습니다. mpu6050 관련된 상세한 코드는 저도 잘 모르고요. 그냥 예제에서 긁어온 코드입니다. ^^;; (불필요한 내용이 들어 있을 수도 있고요… 어쨌든 위의 코드면 잘 실행됩니다.)

위 코드에서 아래 부분이 실제 회전 값을 받아서 내가 원하는 각도로 세팅하는 부분인데요. 입력 값이 최초 실행된 위치로부터의 상대 값이므로 가만히 있으면 0 이 들어오게 됩니다. 그러므로 기준이 되는 앵글을 더해주면 기준이 되는 앵글에 + – 로 각도가 변경되게 되며 저의 x 위치에 -1 이 들어있는 것은 서보 모터의 설치 방향 때문에 방향을 뒤집어 주기 위함입니다. Y 값 역시 서보모터의 방향이 저와 다른 방향으로 설치되어 반대로 움직인다면 센서의 값에 -1 을 곱해 주시면 됩니다.

float angle_x = (ypr[0] * 180 / M_PI) * -1 + 90 ; //* -1 + 90; float angle_y = (ypr[1] * 180 / M_PI) + 90 ; //* -1 + 30; if (angle_y < 60) angle_y = 60; if (angle_y > 120) angle_y = 120; if (angle_x < 30) angle_x = 30; if (angle_x > 150) angle_x = 150;

어쨌든 서보모터 제어를 위한 부분은 이전에 소개해 드린 코드 그대로 가져왔고요, 회전 정보를 받아 서보모터로 전달하는 과정에서 축의 기준위치, 방향 등을 변경해주기 위하여 위와 같이 약간의 코드가 추가되었습니다. if 구문을 이용하여 입력된 값 + 기준값이 모터의 최대 회전 범위 보다 크다면 최대 회전 범위의 값으로 설정을 해주면 됩니다.

저는 기준위치를 서보의 상하, 좌우 90도를 기준으로 설정하였고 상하로는 ±30도씩, 좌우로는 ±60도씩 움직일 수 있도록 하였습니다.

참 쉽죠?

이것은 동영상은 아닙니다. 

과연 잘 동작할런지??

자 구동 되는 모습은 아래와 같습니다.

아주 잘 되죠?

기존 조이스틱이 움직이는 범위에 비하여 출력되는 범위가 리니어 하지 않은지 휙휙 움직이던것에 비하면 아주 아주 잘 동작하는 것을 확인할 수 있습니다.

이렇게 mpu6050 6축 지자기센서를 이용하여 2축 서보모터를 제어하는 것까지 마쳤습니다.

생각보다 어렵지 않죠?

다음은 이제 대망의 무선 입니다.

다음 포스트를 기대해 주세요.

2022.01.31 – [DIY/Arduino] – [아두이노]NRF24L01을 이용하여 무선으로 mpu6050 신호 전달하기

2022.01.25 – [DIY/RC] – 20년된 엔진 RC 카 전동화 해보자 [kyosho inferno]

2022.01.31 – [DIY/Arduino] – 2축 서보모터 초간단 제어하기, 간단한 프레임 제작까지

2020.11.29 – [DIY/RC] – 1/24 완벽한 RC 카 RGT ADVENTURE

Aduino Uno 로 MPU-6050 자이로센서를 사용해 SG90 서보모터 제어하기

반응형

Aduino Uno 로 MPU-6050 자이로센서를 사용해 SG90 서보모터를 회전시켜 보는 프로젝트 입니다

SG90 마이크로 서보모터에 대해서 알아보기

MPU-6050 은 3축 자이로 센서와 3축 가속도 센서의 기능이 결합된 센서 모듈 입니다

AVR 또는 Arduino 의 I2C bus 인터페이스를 사용하며 DMP(Digital Motion Processer) 기능은

센서 값과 복잡한 계산을 할수 있으며 펌웨어로 프로그래밍 가능하게 합니다

Robot 자동화 시스템, GPS, 게임 등 다양한 용도로 활용이 가능합니다

사용된 부품

Arduino Uno R3 (Italy)

MPU-6050 6 DOF 모듈

브래드 보드

SG90 마이크로 서보모터

점퍼케이블

사용된 키트

Arduino Starter kit (클릭) – MPU-6050은 미포함

구성 배선도

사용된 예제소스

MPU6050_SERVO.txt

사용된 라이브러리

twomey_MPU6050_DMP6.zip

주의사항

배선시 서보 모터의 핀맵에 주의 해야 합니다

빨간선이 VCC, 황색선이 GND, 노란선이 데이터 출력핀 입니다

MPU-6050 의 SCL 과 SDA 핀은 아두이노 우노의 SCL 과 SDA 핀에 연결 합니다

아두이노 우노의 핀헤더 측면 부분을 확인하면 표시가 되어 있습니다

아두이노 우노의 5V 전원은 MPU-6050 의 VCC 에 연결, 3.3V 전원은 서보모터의 VCC에 연결 합니다

(서보모터의 제어 최대각도는 180도 라는것을 확인하고 넘어갑시다)

(MPU-6050 을 회전해도 서보모터가 제대로 회전하지 않는다면 방향을 좌우 상하로 바꾸거나 각도를 바꿔서 테스트 합니다)

프로젝트 동영상

MPU-9250 으로도 위와 마찬가지로 동일하게 SG90 서보 모터를 제어할수 있습니다

MPU-9250 은 3축 가속도 센서 + 3축 자이로 센서 + 3축 지자계 센서 가 결합된 9축 IMU(Inertial Measurement Unit) 센서 모듈입니다

지자계 센서가 추가된것을 빼면 MPU-6050과 동일하기 때문에 위의 MPU-6050 라이브러리와 예제코드를 사용해 동일하게 제어할수 있습니다

*참고*

MPU-6050과 9250의 가장 큰 차이점은 지자기 센서의 포함 유무입니다

MPU-6050은 지자기 센서를 포함하지 않기때문에 지면과 수평인 Yaw 방향에 오차가 생깁니다

반면에, MPU-9250은 지자기 센서를 포함하고 있기때문에 Yaw 방향에 대해서도 정확한 각도를 추출합니다

Yaw 방향의 필요성에 따라 6050 혹은 9250을 선택해서 사용하면 됩니다

구성 배선도

프로젝트 동영상

SSHS_CS_7반_4조_흔들림 방지 식판

#include #include #define mpu_add 0x68 Servo servox1 ; Servo servox2 ; Servo servoy1 ; Servo servoy2 ; int servo_Pin_y1 = 5 ; int servo_Pin_y2 = 6 ; int servo_Pin_x1 = 9 ; int servo_Pin_x2 = 10 ; int min_value = 1 ; int max_value = 1 ; double Kp = 7 ; double Ki = 0 .02 ; double Kd = -0.08 ; double Kpy = 6 ; double Kiy = 0 .05 ; double Kdy = -0.010 ; double error_x ; double error_y ; double error_previous_x ; double error_previous_y ; double desired_angle_x = 0 ; double desired_angle_y = 1 .2 ; double current_angle_x ; double current_angle_y ; double P_control_x, I_control_x, D_control_x ; double PID_control_x ; double P_control_y, I_control_y, D_control_y ; double PID_control_y ; double Time = 0 .037 ; double ac_x ; double ac_y ; double ac_z ; double gy_x ; double gy_y ; double gy_z ; double deg_x ; double deg_y ; double dgy_x ; double dgy_y ; void setup () { // put your setup code here, to run once: Wire.begin () ; Wire.beginTransmission ( mpu_add ) ; Wire.write ( 0x6B ) ; Wire.write ( 0 ) ; //MPU6050 Wire.endTransmission ( true ) ; servox1.attach ( servo_Pin_x1 ) ; servox1.writeMicroseconds ( 1500 ) ; servox2.attach ( servo_Pin_x2 ) ; servox2.writeMicroseconds ( 1500 ) ; servoy1.attach ( servo_Pin_y1 ) ; servoy2.attach ( servo_Pin_y2 ) ; servoy1.write ( 90 ) ; servoy2.write ( 90 ) ; Serial.begin ( 9600 ) ; } void loop () { // put your main code here, to run repeatedly: // mpu6050 . getaccdata () ; getgyrdata () ; // current angle . curang () ; // servo . ( pid ) pidcontrol () ; String string = “Sensor value” ; //Serial.println ( string ) ; //Serial.println ( current_angle_x ) ; Serial.println (( unsigned long ) millis ()) ; Serial.println () ; Serial.println ( current_angle_x ) ; Serial.println ( current_angle_y ) ; Serial.println ( PID_control_x ) ; Serial.println ( PID_control_y ) ; // servo . servocome () ; delay ( 70 ) ; } void getaccdata () { Wire.beginTransmission ( mpu_add ) ; //get acc data Wire.write ( 0x3B ) ; Wire.endTransmission ( false ) ; Wire.requestFrom ( mpu_add, 6 , true ) ; ac_x = Wire.read () << 8 | Wire.read() ; ac_y = Wire.read() << 8 | Wire.read () ; ac_z = Wire.read () << 8 | Wire.read() ; } void getgyrdata() { Wire.beginTransmission(mpu_add) ; //get gyro data Wire.write(0x43) ; Wire.endTransmission(false) ; Wire.requestFrom(mpu_add, 6, true) ; gy_x = Wire.read() << 8 | Wire.read () ; gy_y = Wire.read () << 8 | Wire.read() ; gy_z = Wire.read() << 8 | Wire.read () ; } void curang () { deg_x = atan2 ( ac_x, ac_z ) * 180 / PI ; //rad to deg deg_y = atan2 ( ac_y, ac_z ) *180/PI ; dgy_x = gy_x / 131 . ; dgy_y = gy_y / 131 . ; current_angle_x = ( 0 .95 * ( current_angle_x + ( dgy_x * 0 .001 ))) + ( 0 .05 * deg_x ) ; current_angle_y = ( 0 .95 * ( current_angle_y + ( dgy_y * 0 .001 ))) + ( 0 .05 * deg_y ) ; } void pidcontrol () { //current_angle ; error_x = desired_angle_x-current_angle_x ; error_y = desired_angle_y-current_angle_y ; P_control_x = Kp*error_x ; I_control_x += Ki*error_x*Time ; D_control_x = Kd* ( error_x-error_previous_x ) /Time ; PID_control_x = constrain ( P_control_x+I_control_x+D_control_x, -90, 90 ) ; error_previous_x = error_x ; P_control_y = Kpy*error_y ; I_control_y += Kiy*error_y*Time ; D_control_y = Kdy* ( error_y-error_previous_y ) /Time ; PID_control_y = constrain ( P_control_y+I_control_y+D_control_y, -90, 90 ) ; error_previous_y = error_y ; //if ( PID_control_x> = 10 ) //PID_control_y = 0 ; } void servocome () { servoy1.write ( 90 – ( PID_control_y )) ; servoy2.write ( 90 + ( PID_control_y )) ; servox1.write ( 90 -PID_control_x ) ; servox2.write ( 90 +PID_control_x ) ; }

So you have finished reading the 아두 이노 자이로 센서 서보 모터 topic article, if you find this article useful, please share it. Thank you very much. See more: 아두이노 자이로센서 dc 모터, 아두이노 수평 유지, 아두이노 자이로센서 코드, 아두이노 서보모터 브레이크, 아두이노 자이로센서 각도, MPU6050 모터, 아두이노 기울기센서, 아두이노 짐벌

Leave a Comment