에듀이노-아두이노 전문 교육쇼핑몰 에듀이노-코딩교육 전문 쇼핑몰
뒤로가기

묻고답하기

제목

MPU6050 + LED 코딩 질문드립니다!!

작성자 CS / 배송(ip:)

작성일 2019-12-04

조회 703

평점 0점  

추천 추천하기

내용
안녕하세요 에듀이노입니다.
기재해주신 코드는 현재 X, Y, Z값을 한번에 받아오는 구조입니다.
X, Y, Z 각각의 변수를 지정해 X값을 따로받아올 수 있도록 수정하셔야 합니다.
그 다음, X값에 범위를  IF문을 이용해 지정하여 조건문을 작성해 사용하시기 바랍니다.
감사합니다.

[ Original Message ]



제가 MPU6050 자이로 센서에 대해 사이트에 올려주신 코딩을 사용해서 XYZ값이 시리얼 모니터에 출력이 되는 것 까지는 확인했습니다.

여기서 LED를 연결하여 X축의 값이 일정수준을 넘어가게되면  LED에 불이 켜지도록 하고 싶은데 'if'문을 사용 하는것이 맞나요? 또 그 활용 방법좀 알려주실수 있을까요??

아두이노 초보자입니다 회로도도 알려주시면 감사하겠습니다ㅜ.ㅡ 아래는 제가 사용한 라이브러리와 mpu6050 코딩입니다



----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

#include "I2Cdev.h"
#include "MPU6050_6Axis_MotionApps20.h"
#include "Wire.h"


MPU6050 mpu;

#define INTERRUPT_PIN 2  // use pin 2 on Arduino Uno & most boards

// 센서 상태들을 저장할 변수들
bool dmpReady = false; 
uint8_t mpuIntStatus;  
uint8_t devStatus;     
uint16_t packetSize;   
uint16_t fifoCount;    
uint8_t fifoBuffer[64];

Quaternion q;           // [w, x, y, z]         quaternion container
VectorFloat gravity;    // [x, y, z]            gravity vector
float ypr[3];           // [yaw, pitch, roll]   yaw/pitch/roll container and gravity vector

volatile bool mpuInterrupt = false; 

void dmpDataReady() {
    mpuInterrupt = true;
}


void setup() {
    //I2C 셋팅 및 시작  
    Wire.begin();
    Wire.setClock(400000); // 400kHz I2C clock. Comment this line if having compilation difficulties

    Serial.begin(115200);
   
    Serial.println(F("Initializing I2C devices..."));
   
    //MPU 6050 센서 초기화
    mpu.initialize();
   
    //인터럽트핀(2) 입력으로 설정
    pinMode(INTERRUPT_PIN, INPUT);

    //연결 확인
    Serial.println(F("Testing device connections..."));
    Serial.println(mpu.testConnection() ? F("MPU6050 connection successful") : F("MPU6050 connection failed"));

    Serial.println(F("Initializing DMP..."));
    devStatus = mpu.dmpInitialize();

    mpu.setXGyroOffset(220);
    mpu.setYGyroOffset(76);
    mpu.setZGyroOffset(-85);
    mpu.setZAccelOffset(1788);

    if (devStatus == 0) {
 
        //DMP 활성화
        Serial.println(F("Enabling DMP..."));
        mpu.setDMPEnabled(true);


        Serial.println(F("Enabling interrupt detection (Arduino external interrupt 0)..."));
        attachInterrupt(digitalPinToInterrupt(INTERRUPT_PIN), dmpDataReady, RISING);
        mpuIntStatus = mpu.getIntStatus();

        Serial.println(F("DMP ready! Waiting for first interrupt..."));
        dmpReady = true;

        packetSize = mpu.dmpGetFIFOPacketSize();
    } else {
        //에러 났을 때
        // ERROR!
        // 1 = 초기화 에러
        // 2 = DMP 업데이트 에러       
        Serial.print(F("DMP Initialization failed (code "));
        Serial.print(devStatus);
        Serial.println(F(")"));
    }
}

void loop() {
   if (!dmpReady) return;

   while (!mpuInterrupt && fifoCount < packetSize);

   mpuInterrupt = false;
   mpuIntStatus = mpu.getIntStatus();


   fifoCount = mpu.getFIFOCount();
   
   if ((mpuIntStatus & 0x10) || fifoCount == 1024) {
       mpu.resetFIFO();
       Serial.println(F("FIFO overflow!"));   
   } else if (mpuIntStatus & 0x02) {            
       while (fifoCount < packetSize) fifoCount = mpu.getFIFOCount();

       // 데이터 받아 오기
       mpu.getFIFOBytes(fifoBuffer, packetSize);       
       fifoCount -= packetSize;

       //값 얻어오기
       mpu.dmpGetQuaternion(&q, fifoBuffer);
       mpu.dmpGetGravity(&gravity, &q);
       mpu.dmpGetYawPitchRoll(ypr, &q, &gravity);

       //출력
       Serial.print("ypr\t");
       Serial.print(ypr[0] * 180/M_PI);   //Yaw
       Serial.print("\t");
       Serial.print(ypr[1] * 180/M_PI);   //Pitch
       Serial.print("\t");
       Serial.println(ypr[2] * 180/M_PI); //Roll
    }
}

------------------------------------------------------------------------------------------------------------------------------------------------------

첨부파일

비밀번호
수정

비밀번호 입력후 수정 혹은 삭제해주세요.

댓글목록

등록된 댓글이 없습니다.

댓글 수정

이름

비밀번호

내용

/ byte

수정 취소

비밀번호 :

확인 취소

댓글 입력

이름

비밀번호

내용

/ byte

평점

왼쪽의 문자를 공백없이 입력하세요.

에게만 댓글 작성 권한이 있습니다.

댓글 입력

이름

비밀번호

내용

/ byte

왼쪽의 문자를 공백없이 입력하세요.

에게만 댓글 작성 권한이 있습니다.

고객센터

    1670-9626

  • 팩스.063-902-6678
  • 이메일.eduino@robodyne.co.kr
  • Kakao. 에듀이노
  • 운영시간 : AM 10:00 ~ PM 16:30
  • 점심시간 : PM 12:00 - PM 13:00 토/일/공휴일 휴무
  • 고객센터 연결하기
입금계좌
  • 예금주: (주)로보다인시스템
  • 국민. 754801-01-760296
  • 농협. 301-0234-1423-01
  • IBK기업은행. 506-080015-01-016
배송 안내
  • 배송 방법 : 택배
  • 배송 지역 : 전국지역
  • 배송 비용 : 조건부 무료 : 주문 금액 100,000원 미만일 때 배송비 3,000원을 추가합니다.
  • 배송 기간 : 1일 ~ 2일
  • 배송 안내 :
    - 제주도, 산간벽지나 도서지방은 별도의 추가금액을 지불하셔야 하는 경우가 있습니다.
    고객님께서 주문하신 상품은 입금 확인후 배송해 드립니다. 다만, 상품종류에 따라서 상품의 배송이 다소 지연될 수 있습니다.
교환/반품 안내
교환 및 반품이 가능한 경우
- 상품을 공급 받으신 날로부터 7일이내 단, 가전제품의
  경우 포장을 개봉하였거나 포장이 훼손되어 상품가치가 상실된 경우에는 교환/반품이 불가능합니다.
- 공급받으신 상품 및 용역의 내용이 표시.광고 내용과
  다르거나 다르게 이행된 경우에는 공급받은 날로부터 3월이내, 그사실을 알게 된 날로부터 30일이내

교환 및 반품이 불가능한 경우
- 고객님의 책임 있는 사유로 상품등이 멸실 또는 훼손된 경우. 단, 상품의 내용을 확인하기 위하여
  포장 등을 훼손한 경우는 제외
- 포장을 개봉하였거나 포장이 훼손되어 상품가치가 상실된 경우
  (예 : 가전제품, 식품, 음반 등, 단 액정화면이 부착된 노트북, LCD모니터, 디지털 카메라 등의 불량화소에
  따른 반품/교환은 제조사 기준에 따릅니다.)
- 고객님의 사용 또는 일부 소비에 의하여 상품의 가치가 현저히 감소한 경우 단, 화장품등의 경우 시용제품을
  제공한 경우에 한 합니다.
- 시간의 경과에 의하여 재판매가 곤란할 정도로 상품등의 가치가 현저히 감소한 경우
- 복제가 가능한 상품등의 포장을 훼손한 경우
  (자세한 내용은 고객만족센터 1:1 E-MAIL상담을 이용해 주시기 바랍니다.)

※ 고객님의 마음이 바뀌어 교환, 반품을 하실 경우 상품반송 비용은 고객님께서 부담하셔야 합니다.
  (색상 교환, 사이즈 교환 등 포함)
«
»