에듀이노-코딩교육 전문 쇼핑몰 에듀이노-코딩교육 전문 쇼핑몰

학교, 공공기관이라면 후불결제하세요!

 
현재 위치
  1. 게시판
  2. 묻고답하기

묻고답하기

기술문의 게시판입니다.

게시판 상세
제목 MPU6050 + LED 코딩 질문드립니다!!
작성자 CS / 배송 (ip:)
  • 작성일 2019-12-04
  • 추천 추천하기
  • 조회수 708
안녕하세요 에듀이노입니다.
기재해주신 코드는 현재 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
    }
}

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

게시글 신고하기

신고사유

신고해주신 내용은 쇼핑몰 운영자의 검토 후 내부 운영 정책에 의해 처리가 진행됩니다.

평점 0점
첨부파일
비밀번호 수정 및 삭제하려면 비밀번호를 입력하세요.
댓글 수정

비밀번호 :

수정 취소

/ byte

비밀번호 : 확인 취소

댓글 입력

댓글달기이름 :비밀번호 : 관리자답변보기

확인

/ byte

왼쪽의 문자를 공백없이 입력하세요.(대소문자구분)

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

댓글 입력

댓글달기이름 :비밀번호 :

확인

/ byte

왼쪽의 문자를 공백없이 입력하세요.(대소문자구분)

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

«
»