Çözüldü MPU6050 açı sürekli düşüyor

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

YAVUZKAGAN

Hectopat
Katılım
15 Ağustos 2021
Mesajlar
969
Makaleler
1
Çözümler
6
Daha fazla  
Cinsiyet
Erkek
Merahaba,Pictoblox ile MPU6050 sensörünü kullanmaya çalışıyorum.X ekseninde açı okumam gerek ancak sürekli düşüyor.Kütüphane MPU6050.h.yardım ederseniz sevinirim.
Kod:
//This c++ code is generated by PictoBlox

//Included Libraries
#include <Dabble.h>
#include <Servo.h>
#include <motor.h>
#include <MPU6050.h>

//MACROS are defined here
Motor Motor1(12, 11, 10);
Motor Motor2(8, 7, 9);
MPU6050 IMUSensor;

//Gloabl Variables are declared here
float angle;
float error;

void setup() {
    //put your setup code here, to run once:
    Dabble.begin(9600);
    IMUSensor.init();
  
  
    Motor1.moveMotor(2.55*0);
    Motor2.moveMotor(2.55*0);
}

void loop() {
    //put your main code here, to run repeatedly:
    Dabble.processInput();
    IMUSensor.readDataFromSensor(0.98);
  
  
    Dabble.processInput();
    if(GamePad.isPressed(7)) {
        Motor1.lockMotor();
        Motor2.lockMotor();
    }
    if(GamePad.isPressed(0)) {
        angle = float(IMUSensor.getData(1));
        Dabble.processInput();
        Motor1.moveMotor(2.55*100);
        Motor2.moveMotor(2.55*100);
        while(!(!(GamePad.isPressed(0)))) {
            Dabble.processInput();
            error = (angle - IMUSensor.getData(1));
            if((2 < error)) {
                Motor1.moveMotor(2.55*0);
                Motor2.moveMotor(2.55*100);
            }
            if((error < -2)) {
                Motor1.moveMotor(2.55*100);
                Motor2.moveMotor(2.55*0);
            }
        }
    }
    else {
        if(GamePad.isPressed(1)) {
            angle = float(IMUSensor.getData(1));
            Motor1.moveMotor(-2.55*100);
            Motor2.moveMotor(-2.55*100);
            Dabble.processInput();
            while(!(!(GamePad.isPressed(1)))) {
                Dabble.processInput();
                error = (angle - IMUSensor.getData(1));
                if((2 < error)) {
                    Motor1.moveMotor(-2.55*65);
                    Motor2.moveMotor(-2.55*100);
                }
                if((error < -2)) {
                    Motor1.moveMotor(-2.55*100);
                    Motor2.moveMotor(-2.55*65);
                }
            }
        }
        else {
            if(GamePad.isPressed(2)) {
                Motor1.moveMotor(2.55*50);
                Motor2.moveMotor(-2.55*50);
            }
            else {
                if(GamePad.isPressed(3)) {
                    Motor1.moveMotor(-2.55*50);
                    Motor2.moveMotor(2.55*50);
                }
                else {
                    Motor1.moveMotor(-2.55*0);
                    Motor2.moveMotor(2.55*0);
                }
            }
        }
    }
}
 
Son düzenleyen: Moderatör:
Çözüm
Bu kütüphane ile güzel çalışıyor. Değişitirmeyi deneyeyim dönüş yaparım. Teşekkürler.

Kütüphaneyi dahil ettim ve kodları böyle düzeledim. Ancak bu hatayı aldım. Sorun neden kaynaklı? Kütüphaneleri ekledim?
Ortada MPU6050 tanimlamasi yok. Example'a bakarsaniz:
MPU6050 mpu6050(Wire); seklinde tanimlama yapilmis. #include olan yerin hemen altina bunu eklerseniz (9. satir ornegin) hatalar duzelecektir.

Daha sonra acilari almak icin:
mpu6050.getAngleX()
mpu6050.getAngleY()
mpu6050.getAngleZ()
Kullanabilirsiniz.

Baslangicta cihazi bir sure hareket ettirmeyin, kalibre oluyor cunku. Seri portta yazar buyuk ihtimal kalibrasyonun bitip bitmedigi. 3 saniye bekleyip test edin.
Merahaba,Pictoblox ile MPU6050 sensörünü kullanmaya çalışıyorum.X ekseninde açı okumam gerek ancak sürekli düşüyor.Kütüphane MPU6050.h.yardım ederseniz sevinirim.
Kod:
//This c++ code is generated by PictoBlox

//Included Libraries
#include <Dabble.h>
#include <Servo.h>
#include <motor.h>
#include <MPU6050.h>

//MACROS are defined here
Motor Motor1(12, 11, 10);
Motor Motor2(8, 7, 9);
MPU6050 IMUSensor;

//Gloabl Variables are declared here
float angle;
float error;

void setup() {
    //put your setup code here, to run once:
    Dabble.begin(9600);
    IMUSensor.init();
 
 
    Motor1.moveMotor(2.55*0);
    Motor2.moveMotor(2.55*0);
}

void loop() {
    //put your main code here, to run repeatedly:
    Dabble.processInput();
    IMUSensor.readDataFromSensor(0.98);
 
 
    Dabble.processInput();
    if(GamePad.isPressed(7)) {
        Motor1.lockMotor();
        Motor2.lockMotor();
    }
    if(GamePad.isPressed(0)) {
        angle = float(IMUSensor.getData(1));
        Dabble.processInput();
        Motor1.moveMotor(2.55*100);
        Motor2.moveMotor(2.55*100);
        while(!(!(GamePad.isPressed(0)))) {
            Dabble.processInput();
            error = (angle - IMUSensor.getData(1));
            if((2 < error)) {
                Motor1.moveMotor(2.55*0);
                Motor2.moveMotor(2.55*100);
            }
            if((error < -2)) {
                Motor1.moveMotor(2.55*100);
                Motor2.moveMotor(2.55*0);
            }
        }
    }
    else {
        if(GamePad.isPressed(1)) {
            angle = float(IMUSensor.getData(1));
            Motor1.moveMotor(-2.55*100);
            Motor2.moveMotor(-2.55*100);
            Dabble.processInput();
            while(!(!(GamePad.isPressed(1)))) {
                Dabble.processInput();
                error = (angle - IMUSensor.getData(1));
                if((2 < error)) {
                    Motor1.moveMotor(-2.55*65);
                    Motor2.moveMotor(-2.55*100);
                }
                if((error < -2)) {
                    Motor1.moveMotor(-2.55*100);
                    Motor2.moveMotor(-2.55*65);
                }
            }
        }
        else {
            if(GamePad.isPressed(2)) {
                Motor1.moveMotor(2.55*50);
                Motor2.moveMotor(-2.55*50);
            }
            else {
                if(GamePad.isPressed(3)) {
                    Motor1.moveMotor(-2.55*50);
                    Motor2.moveMotor(2.55*50);
                }
                else {
                    Motor1.moveMotor(-2.55*0);
                    Motor2.moveMotor(2.55*0);
                }
            }
        }
    }
}
I2C baglantilari dogruysa, kalibrasyon esnasinda oynatmiyorsaniz boyle olmamasi gerek.

Farkli kutuphanelerle denediniz mi?
Bu kutuphane ile sorun yasamamistim aci olcumu sirasinda.

Pictoblox kullanmadim ama olusturulan kodda degisiklik yapiyor olabilmeniz gerek, olmadi Arduino IDE'den acip bu kutuphaneyi ZIP kitapligi ekle seklinde kurun ve ornek kodu calistirin. Seri monitorden takip edin sorun oluyor mu diye.
 
I2C baglantilari dogruysa, kalibrasyon esnasinda oynatmiyorsaniz boyle olmamasi gerek.

Farkli kutuphanelerle denediniz mi?
Bu kutuphane ile sorun yasamamistim aci olcumu sirasinda.

Pictoblox kullanmadim ama olusturulan kodda degisiklik yapiyor olabilmeniz gerek, olmadi Arduino IDE'den acip bu kutuphaneyi ZIP kitapligi ekle seklinde kurun ve ornek kodu calistirin. Seri monitorden takip edin sorun oluyor mu diye.

Bu kütüphane ile güzel çalışıyor. Değişitirmeyi deneyeyim dönüş yaparım. Teşekkürler.

Kütüphaneyi dahil ettim ve kodları böyle düzeledim. Ancak bu hatayı aldım. Sorun neden kaynaklı? Kütüphaneleri ekledim?
 

Dosya Ekleri

  • NM7QifvneU.png
    NM7QifvneU.png
    38,8 KB · Görüntüleme: 35
  • PictoBlox_6x60D3eOFv.png
    PictoBlox_6x60D3eOFv.png
    11,8 KB · Görüntüleme: 28
  • PictoBlox_At9izKscsL.png
    PictoBlox_At9izKscsL.png
    18,3 KB · Görüntüleme: 43
  • PictoBlox_Ioo07Q20cH.png
    PictoBlox_Ioo07Q20cH.png
    27,1 KB · Görüntüleme: 41
  • PictoBlox_s9GqXWST8x.png
    PictoBlox_s9GqXWST8x.png
    21,4 KB · Görüntüleme: 38
Son düzenleme:
Bu kütüphane ile güzel çalışıyor. Değişitirmeyi deneyeyim dönüş yaparım. Teşekkürler.

Kütüphaneyi dahil ettim ve kodları böyle düzeledim. Ancak bu hatayı aldım. Sorun neden kaynaklı? Kütüphaneleri ekledim?
Ortada MPU6050 tanimlamasi yok. Example'a bakarsaniz:
MPU6050 mpu6050(Wire); seklinde tanimlama yapilmis. #include olan yerin hemen altina bunu eklerseniz (9. satir ornegin) hatalar duzelecektir.

Daha sonra acilari almak icin:
mpu6050.getAngleX()
mpu6050.getAngleY()
mpu6050.getAngleZ()
Kullanabilirsiniz.

Baslangicta cihazi bir sure hareket ettirmeyin, kalibre oluyor cunku. Seri portta yazar buyuk ihtimal kalibrasyonun bitip bitmedigi. 3 saniye bekleyip test edin.
 
Çözüm
Ortada MPU6050 tanimlamasi yok. Example'a bakarsaniz:
MPU6050 mpu6050(Wire); seklinde tanimlama yapilmis. #include olan yerin hemen altina bunu eklerseniz (9. satir ornegin) hatalar duzelecektir.

Daha sonra acilari almak icin:
mpu6050.getAngleX()
mpu6050.getAngleY()
mpu6050.getAngleZ()
Kullanabilirsiniz.

Baslangicta cihazi bir sure hareket ettirmeyin, kalibre oluyor cunku. Seri portta yazar buyuk ihtimal kalibrasyonun bitip bitmedigi. 3 saniye bekleyip test edin.
Teşekkürler sorun çözüldü.
 

Bu konuyu görüntüleyen kullanıcılar

Technopat Haberler

Yeni konular

Geri
Yukarı