Picproje Elektronik Sitesi

DİJİTAL & ANALOG ELEKTRONİK => Malzeme Bilgisi => Konuyu başlatan: görkem - 07 Şubat 2018, 11:47:57

Başlık: Açı Sensörleri hakkında
Gönderen: görkem - 07 Şubat 2018, 11:47:57
Arkadaşlar Merhaba,

IMU sensörlerinden gelen verileri hesaplama yerine uğraşmadan direk açı bilgisini spi, usart,i2c protokolleri ile  x,y,z açılarını alabileceğim bir sensör var mı ?
Başlık: Ynt: Açı Sensörleri hakkında
Gönderen: fide - 07 Şubat 2018, 15:35:21
Merhaba.
Bosch BNO55 sensorünü inceleyin.
Bunda sensör+mcu var. Birçok hesabı kendi yapıyor. Biraz tuzlu ama incelemeye değer.
Başlık: Ynt: Açı Sensörleri hakkında
Gönderen: saintcook1987 - 08 Şubat 2018, 07:24:53
Merhaba
Makersan firmasının da çeşitli sensörleri var açı, eğim ivme onlara da bir göz atabilirsiniz..
http://www.makersan.com/

Başlık: Ynt: Açı Sensörleri hakkında
Gönderen: görkem - 08 Şubat 2018, 22:17:48
Yanıtlar için teşekkür ederim bosch bno55 sensörünü almaya karar verdim.
Başlık: Ynt: Açı Sensörleri hakkında
Gönderen: tekosis - 08 Şubat 2018, 22:55:17
Adxl345
Başlık: Ynt: Açı Sensörleri hakkında
Gönderen: görkem - 09 Şubat 2018, 00:34:18
@tekosis Bana direk hesaplanmış veri lazımdı pitch roll yaw açıları bosch un sensörü verebiliyor
Başlık: Ynt: Açı Sensörleri hakkında
Gönderen: ladybird - 09 Şubat 2018, 00:46:56
Ustam fiyatta sınırlama yoksa bu ürün daha performanslı.

https://www.pololu.com/product/2764
https://www.youtube.com/watch?v=2-9HoadK76M
Başlık: Ynt: Açı Sensörleri hakkında
Gönderen: görkem - 09 Şubat 2018, 11:08:14
@ladybird bosch sensörünü deneme şansınız olmuşmuydu siparişi verdim artık ama stabil bir bilgi alamazmıyım
Başlık: Ynt: Açı Sensörleri hakkında
Gönderen: ladybird - 12 Şubat 2018, 01:52:57
@görkem Hocam bosch kullanmadım. Nerede kullanacaksınız ? Biraz detay vere bilirseniz ,yardımcı olmaya çalışırım.
Başlık: Ynt: Açı Sensörleri hakkında
Gönderen: görkem - 13 Şubat 2018, 11:57:29
şuan elime ulaştı modül.hareket halinde elde tutulan bir nesnenin sürekli yeryüzüne göre açısını belirtecek.Benim için sapma yapmaması önemli prototip için bunu deneyeceğim daha sonra sizin önerdiğiniz sensöre geçebilirim.Bosch hiç kullanmadığım bir modül fakat videolarda çok stabil kullanmışlar.
Başlık: Ynt: Açı Sensörleri hakkında
Gönderen: ladybird - 13 Şubat 2018, 12:50:23
@görkem Kolay gelsin Ustam sonucu bizimle de paylaşırsanız çok mutlu oluruz. :) Gimball tarzı bir şey yapacaksanız  Bosch BNO55 fazlası ile yetecektir.
Başlık: Ynt: Açı Sensörleri hakkında
Gönderen: fide - 13 Şubat 2018, 13:14:16
Deneyimlerinizi paylaşırsanız sevinirim.
Ben de tubitak sergisi için elektronik denge düzlemi projesi hazırlamayı planlıyorum.
Başlık: Ynt: Açı Sensörleri hakkında
Gönderen: görkem - 13 Şubat 2018, 14:46:40
@ladybird
@fide

teşekkür ederim.
proje gimball dan ziyade askeri bir proje o yüzden fazla bilgi veremiyorum sadece hızlanma olduğunda açı bilgisinin bozulmaması lazım.   Deneyimlerimi ve haberleşme kodlarını paylaşmaktan onur duyarım.
Başlık: Ynt: Açı Sensörleri hakkında
Gönderen: görkem - 17 Şubat 2018, 00:27:18
Yeni konu açmak yerine burdan devam etmek istedim.
Sensörle haberleşip komut gönderip okuyabiliyorum fakat bir türlü açı datasını okuyamadım kiliti var sanırım datasheet de unit_sel registerindan unit seçip daha sonra  opr_mode  seçip data okuyabilirsin diyor fakat unit_sel e 0x04 veriyorum opr_mode u imu seçiyorum data yinede data okuyamıyorum sebebi nedir registerlere veri yazabildiğimi görüyorum
Başlık: Ynt: Açı Sensörleri hakkında
Gönderen: görkem - 17 Şubat 2018, 15:22:55
haberleştirmeyi başardım çok stabil çalışıyor tavsiye ederim kodları yakında yayınlarım.
Başlık: Ynt: Açı Sensörleri hakkında
Gönderen: ghistmanzero - 17 Şubat 2018, 18:11:49
Alıntı yapılan: görkem - 17 Şubat 2018, 15:22:55
haberleştirmeyi başardım çok stabil çalışıyor tavsiye ederim kodları yakında yayınlarım.
takipteyim :) sonuçlar mpu9250 den daha iyi galiba .mpu9250 yi de denediniz mi  ? açıyı kendiniz hesaplayarak bulunca sorun mu oluyor ? bosch un sensörünü merak ettim baya.
Başlık: Ynt: Açı Sensörleri hakkında
Gönderen: görkem - 08 Mart 2018, 19:54:06
Alıntı yapılan: ghistmanzero - 17 Şubat 2018, 18:11:49
takipteyim :) sonuçlar mpu9250 den daha iyi galiba .mpu9250 yi de denediniz mi  ? açıyı kendiniz hesaplayarak bulunca sorun mu oluyor ? bosch un sensörünü merak ettim baya.
mpu9250 hiç kullanmadım fakat mpu6050 kullanmıştım kat kat iyi çok stabil çalışıyor.çok fazla işlemyaptığım için hazır veri almak daha kolaylık sağladı.
Başlık: Ynt: Açı Sensörleri hakkında
Gönderen: ghistmanzero - 08 Mart 2018, 20:07:41
Alıntı yapılan: görkem - 08 Mart 2018, 19:54:06
mpu9250 hiç kullanmadım fakat mpu6050 kullanmıştım kat kat iyi çok stabil çalışıyor.çok fazla işlemyaptığım için hazır veri almak daha kolaylık sağladı.
6050 yi ben de 877a da kullandım bir hazır kütüphane ile ama sadece acılar var. 9250 de acı, pusula ve ivme var galiba. Hepsini bir arada deneme şansım olmadı hiç.
Başlık: Ynt: Açı Sensörleri hakkında
Gönderen: görkem - 05 Mayıs 2018, 16:08:36
 @ladybird @fide uzun bir aradan sonra dönebildim sensör çok stabil çalışıyor hareket halindeyken sapma yok denecek kadar az beni tatmin etti.
aşağıda hazırlamış olduğum kütüphanelerini yayınlıyorum herkeze kolay gelsin.

header
#ifndef _BNO055_H
#define _BNO055_H

#include "stm32f1xx.h"                  // Device header
#include "stm32f1xx_hal_gpio.h"
#include "stm32f1xx_hal_i2c.h"
#include "stdio.h"
#include "string.h"

extern I2C_HandleTypeDef hi2c2;





#define BNO055_ADDRESS_W 0x50
#define BNO055_ADDRESS_R 0x51
#define BNO055_ID        0xA0




      /* Page id register definition */
     

      /* PAGE0 REGISTER DEFINITION START*/
#define       BNO055_CHIP_ID_ADDR                                      0x00
#define       BNO055_ACCEL_REV_ID_ADDR                                 0x01
#define       BNO055_MAG_REV_ID_ADDR                                   0x02
#define       BNO055_GYRO_REV_ID_ADDR                                  0x03
#define       BNO055_SW_REV_ID_LSB_ADDR                                0x04
#define       BNO055_SW_REV_ID_MSB_ADDR                                0x05
#define       BNO055_BL_REV_ID_ADDR                                    0x06
#define       BNO055_PAGE_ID_ADDR                                      0x07

#define       BNO055_ACCEL_DATA_X_LSB_ADDR                             0x08
#define       BNO055_ACCEL_DATA_X_MSB_ADDR                             0x09
#define       BNO055_ACCEL_DATA_Y_LSB_ADDR                             0x0A
#define       BNO055_ACCEL_DATA_Y_MSB_ADDR                             0x0B
#define       BNO055_ACCEL_DATA_Z_LSB_ADDR                             0x0C
#define       BNO055_ACCEL_DATA_Z_MSB_ADDR                             0x0D

#define       BNO055_MAG_DATA_X_LSB_ADDR                               0x0E
#define       BNO055_MAG_DATA_X_MSB_ADDR                               0x0F
#define       BNO055_MAG_DATA_Y_LSB_ADDR                               0x10
#define       BNO055_MAG_DATA_Y_MSB_ADDR                               0x11
#define       BNO055_MAG_DATA_Z_LSB_ADDR                               0x12
#define       BNO055_MAG_DATA_Z_MSB_ADDR                               0x13

#define       BNO055_GYRO_DATA_X_LSB_ADDR                              0x14
#define       BNO055_GYRO_DATA_X_MSB_ADDR                              0x15
#define       BNO055_GYRO_DATA_Y_LSB_ADDR                              0x16
#define       BNO055_GYRO_DATA_Y_MSB_ADDR                              0x17
#define       BNO055_GYRO_DATA_Z_LSB_ADDR                              0x18
#define       BNO055_GYRO_DATA_Z_MSB_ADDR                              0x19

#define       BNO055_EULER_H_LSB_ADDR                                  0x1A
#define       BNO055_EULER_H_MSB_ADDR                                  0x1B
#define       BNO055_EULER_R_LSB_ADDR                                  0x1C
#define       BNO055_EULER_R_MSB_ADDR                                  0x1D
#define       BNO055_EULER_P_LSB_ADDR                                  0x1E
#define       BNO055_EULER_P_MSB_ADDR                                  0x1F

#define       BNO055_QUATERNION_DATA_W_LSB_ADDR                        0x20
#define       BNO055_QUATERNION_DATA_W_MSB_ADDR                        0x21
#define       BNO055_QUATERNION_DATA_X_LSB_ADDR                        0x22
#define       BNO055_QUATERNION_DATA_X_MSB_ADDR                        0x23
#define       BNO055_QUATERNION_DATA_Y_LSB_ADDR                        0x24
#define       BNO055_QUATERNION_DATA_Y_MSB_ADDR                        0x25
#define       BNO055_QUATERNION_DATA_Z_LSB_ADDR                        0x26
#define       BNO055_QUATERNION_DATA_Z_MSB_ADDR                        0x27

#define       BNO055_LINEAR_ACCEL_DATA_X_LSB_ADDR                      0x28
#define       BNO055_LINEAR_ACCEL_DATA_X_MSB_ADDR                      0x29
#define       BNO055_LINEAR_ACCEL_DATA_Y_LSB_ADDR                      0x2A
#define       BNO055_LINEAR_ACCEL_DATA_Y_MSB_ADDR                      0x2B
#define       BNO055_LINEAR_ACCEL_DATA_Z_LSB_ADDR                      0x2C
#define       BNO055_LINEAR_ACCEL_DATA_Z_MSB_ADDR                      0x2D

#define       BNO055_GRAVITY_DATA_X_LSB_ADDR                           0x2E
#define       BNO055_GRAVITY_DATA_X_MSB_ADDR                           0x2F
#define       BNO055_GRAVITY_DATA_Y_LSB_ADDR                           0x30
#define       BNO055_GRAVITY_DATA_Y_MSB_ADDR                           0x31
#define       BNO055_GRAVITY_DATA_Z_LSB_ADDR                           0x32
#define       BNO055_GRAVITY_DATA_Z_MSB_ADDR                           0x33

#define       BNO055_TEMP_ADDR                                         0x34

#define       BNO055_CALIB_STAT_ADDR                                   0x35
#define       BNO055_SELFTEST_RESULT_ADDR                              0x36
#define       BNO055_INTR_STAT_ADDR                                    0x37
#define       BNO055_SYS_CLK_STAT_ADDR                                 0x38
#define       BNO055_SYS_STAT_ADDR                                     0x39
#define       BNO055_SYS_ERR_ADDR                                      0x3A

#define       BNO055_UNIT_SEL_ADDR                                     0x3B
#define       BNO055_DATA_SELECT_ADDR                                  0x3C

#define       BNO055_OPR_MODE_ADDR                                     0x3D
#define       BNO055_PWR_MODE_ADDR                                     0x3E
#define       BNO055_SYS_TRIGGER_ADDR                                  0x3F
#define       BNO055_TEMP_SOURCE_ADDR                                  0x40
#define       BNO055_AxIS_MAP_CONFIG_ADDR                              0x41
#define       BNO055_AxIS_MAP_SIGN_ADDR                                0x42

#define       BNO055_SIC_MATRIX_0_LSB_ADDR                             0x43
#define       BNO055_SIC_MATRIX_0_MSB_ADDR                             0x44
#define       BNO055_SIC_MATRIX_1_LSB_ADDR                             0x45
#define       BNO055_SIC_MATRIX_1_MSB_ADDR                             0x46
#define       BNO055_SIC_MATRIX_2_LSB_ADDR                             0x47
#define       BNO055_SIC_MATRIX_2_MSB_ADDR                             0x48
#define       BNO055_SIC_MATRIX_3_LSB_ADDR                             0x49
#define       BNO055_SIC_MATRIX_3_MSB_ADDR                             0x4A
#define       BNO055_SIC_MATRIX_4_LSB_ADDR                             0x4B
#define       BNO055_SIC_MATRIX_4_MSB_ADDR                             0x4C
#define       BNO055_SIC_MATRIX_5_LSB_ADDR                             0x4D
#define       BNO055_SIC_MATRIX_5_MSB_ADDR                             0x4E
#define       BNO055_SIC_MATRIX_6_LSB_ADDR                             0x4F
#define       BNO055_SIC_MATRIX_6_MSB_ADDR                             0x50
#define       BNO055_SIC_MATRIX_7_LSB_ADDR                             0x51
#define       BNO055_SIC_MATRIX_7_MSB_ADDR                             0x52
#define       BNO055_SIC_MATRIX_8_LSB_ADDR                             0x53
#define       BNO055_SIC_MATRIX_8_MSB_ADDR                             0x54

#define       ACCEL_OFFSET_X_LSB_ADDR                                  0x55
#define       ACCEL_OFFSET_X_MSB_ADDR                                  0x56
#define       ACCEL_OFFSET_Y_LSB_ADDR                                  0x57
#define       ACCEL_OFFSET_Y_MSB_ADDR                                  0x58
#define       ACCEL_OFFSET_Z_LSB_ADDR                                  0x59
#define       ACCEL_OFFSET_Z_MSB_ADDR                                  0x5A

#define       MAG_OFFSET_X_LSB_ADDR                                    0x5B
#define       MAG_OFFSET_X_MSB_ADDR                                    0x5C
#define       MAG_OFFSET_Y_LSB_ADDR                                    0x5D
#define       MAG_OFFSET_Y_MSB_ADDR                                    0x5E
#define       MAG_OFFSET_Z_LSB_ADDR                                    0x5F
#define       MAG_OFFSET_Z_MSB_ADDR                                    0x60

#define       GYRO_OFFSET_X_LSB_ADDR                                   0x61
#define       GYRO_OFFSET_X_MSB_ADDR                                   0x62
#define       GYRO_OFFSET_Y_LSB_ADDR                                   0x63
#define       GYRO_OFFSET_Y_MSB_ADDR                                   0x64
#define       GYRO_OFFSET_Z_LSB_ADDR                                   0x65
#define       GYRO_OFFSET_Z_MSB_ADDR                                   0x66

#define       ACCEL_RADIUS_LSB_ADDR                                    0x67
#define       ACCEL_RADIUS_MSB_ADDR                                    0x68

#define       MAG_RADIUS_LSB_ADDR                                      0x69
#define       MAG_RADIUS_MSB_ADDR                                      0x6A


 

#define       POWER_MODE_NORMAL                                        0x00
#define       POWER_MODE_LOWPOWER                                      0x01
#define       POWER_MODE_SUSPEND                                       0x02



#define       OPERATION_MODE_CONFIG                                    0x00
#define       OPERATION_MODE_ACCONLY                                   0x01
#define       OPERATION_MODE_MAGONLY                                   0x02
#define       OPERATION_MODE_GYRONLY                                   0x03
#define       OPERATION_MODE_ACCMAG                                    0x04
#define       OPERATION_MODE_ACCGYRO                                   0x05
#define       OPERATION_MODE_MAGGYRO                                   0x06
#define       OPERATION_MODE_AMG                                       0x07
#define       OPERATION_MODE_IMUPLUS                                   0x08
#define       OPERATION_MODE_COMPASS                                   0x09
#define       OPERATION_MODE_M4G                                       0x0A
#define       OPERATION_MODE_NDOF_FMC_OFF                              0x0B
#define       OPERATION_MODE_NDOF                                      0x0C

#define       REMAP_CONFIG_P0                                          0x21
#define       REMAP_CONFIG_P1                                          0x24
#define       REMAP_CONFIG_P2                                          0x24
#define       REMAP_CONFIG_P3                                          0x21
#define       REMAP_CONFIG_P4                                          0x24
#define       REMAP_CONFIG_P5                                          0x21
#define       REMAP_CONFIG_P6                                          0x21
#define       REMAP_CONFIG_P7                                          0x24

#define       REMAP_SIGN_P0                                            0x04
#define       REMAP_SIGN_P1                                            0x00
#define       REMAP_SIGN_P2                                            0x06
#define       REMAP_SIGN_P3                                            0x02
#define       REMAP_SIGN_P4                                            0x03
#define       REMAP_SIGN_P5                                            0x01
#define       REMAP_SIGN_P6                                            0x07
#define       REMAP_SIGN_P7                                            0x05



    typedef struct
    {
      uint8_t  accel_rev;
      uint8_t  mag_rev;
      uint8_t  gyro_rev;
      uint16_t sw_rev;
      uint8_t  bl_rev;
    } adafruit_bno055_rev_info_t;

    typedef enum
    {
      VECTOR_ACCELEROMETER = BNO055_ACCEL_DATA_X_LSB_ADDR,
      VECTOR_MAGNETOMETER  = BNO055_MAG_DATA_X_LSB_ADDR,
      VECTOR_GYROSCOPE     = BNO055_GYRO_DATA_X_LSB_ADDR,
      VECTOR_EULER         = BNO055_EULER_H_LSB_ADDR,
      VECTOR_LINEARACCEL   = BNO055_LINEAR_ACCEL_DATA_X_LSB_ADDR,
      VECTOR_GRAVITY       = BNO055_GRAVITY_DATA_X_LSB_ADDR
    } adafruit_vector_type_t;




extern uint8_t bno055_init(uint8_t reg);
extern void set_mode(uint8_t mode);
extern uint8_t i2c_read(uint8_t adress,uint8_t len);
extern void i2c_write(uint8_t reg,uint8_t value);
extern void i2c_read_multi(uint8_t adress);
extern void euler_oku(void);



#endif



 

source

#include "bno055.h"





extern uint8_t j,k,g,h;
extern uint8_t buffer[6];
extern uint8_t id;
extern uint8_t data;
extern uint8_t veri[6];
extern uint8_t operasyon;
extern int16_t Heading,Roll,Pitch;
extern int32_t date[3];
extern uint8_t opr,sys;

void i2c_write(uint8_t reg,uint8_t value)    // 1 byte yazma yapar
{

HAL_I2C_Mem_Write(&hi2c2,BNO055_ADDRESS_W,reg,I2C_MEMADD_SIZE_8BIT,&value,1,50);


}






uint8_t i2c_read(uint8_t adress,uint8_t len)    //1 byte okuma yapar
{

HAL_I2C_Mem_Read(&hi2c2,BNO055_ADDRESS_R,adress,I2C_MEMADD_SIZE_8BIT,&data,len,50);

return data;
}







void i2c_read_multi(uint8_t adress)      //6 byte okuma yapar.
{

i2c_write(BNO055_PAGE_ID_ADDR,0x00);

HAL_I2C_Mem_Read(&hi2c2,BNO055_ADDRESS_R,adress,I2C_MEMADD_SIZE_8BIT,veri,6,50);


}


uint8_t bno055_init(uint8_t reg)   // bno055 init eder.
{


HAL_I2C_Mem_Read(&hi2c2,BNO055_ADDRESS_R,reg,I2C_MEMADD_SIZE_8BIT,&id,1,50);


i2c_write(BNO055_PAGE_ID_ADDR,0x00);   //
HAL_Delay(10);
set_mode(OPERATION_MODE_CONFIG);     //config seçiliyor
i2c_write(BNO055_UNIT_SEL_ADDR,0x00);    // euler birimi seçiliyor
HAL_Delay(10);
set_mode(OPERATION_MODE_NDOF);     // fusion modu ndof olarak seçiliyor
HAL_Delay(10);
opr=i2c_read(BNO055_OPR_MODE_ADDR,1);     // çalisma modu okunuyor


g=i2c_read(BNO055_UNIT_SEL_ADDR,1);
h=i2c_read(BNO055_SYS_ERR_ADDR ,1);

sys=i2c_read(BNO055_SYS_TRIGGER_ADDR,1);  



//HAL_I2C_Mem_Write(&hi2c2,BNO055_ADDRESS_W,BNO055_PWR_MODE_ADDR,I2C_MEMADD_SIZE_8BIT,POWER_MODE_NORMAL,1,50);

k=id;

if(id==BNO055_ID)
{
return 1;
}
else
{
return 0;
}

}




void set_mode(uint8_t mode)
{


i2c_write(BNO055_OPR_MODE_ADDR,mode);
HAL_Delay(30);

}




void euler_oku()
{

i2c_read_multi(BNO055_EULER_H_LSB_ADDR);

Heading=veri[1];
Heading=Heading<<8|veri[0];
Roll=veri[3];
Roll=Roll<<8|veri[2];
Pitch=veri[5];
Pitch=Pitch<<8|veri[4];

date[0]=((int32_t)Heading)/16.0f;
date[1]=((int32_t)Roll)/16.0f;
date[2]=((int32_t)Pitch)/16.0f;


}


Başlık: Ynt: Açı Sensörleri hakkında
Gönderen: apsis - 06 Mayıs 2018, 00:06:00
Alıntı Yap6050 yi ben de 877a da kullandım bir hazır kütüphane ile ama sadece acılar var. 9250 de acı, pusula ve ivme var galiba. Hepsini bir arada deneme şansım olmadı hiç.

MPU6050'den de ivme ölçülebilir. 6050 ivme+gyro'dur. Registerlarına bakarsanız ivme ve gyro için ayrı ayrı adresler var.