Código base

Dependencies:   mbed BNO055

Committer:
diogonac
Date:
Tue Jul 06 19:55:14 2021 +0000
Revision:
0:54d4bcb1c653
1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
diogonac 0:54d4bcb1c653 1 #include "mbed.h"
diogonac 0:54d4bcb1c653 2 #include "BNO055.h"
diogonac 0:54d4bcb1c653 3
diogonac 0:54d4bcb1c653 4 #define taxa_de_amostragem 10 //100 Hz (10ms)
diogonac 0:54d4bcb1c653 5
diogonac 0:54d4bcb1c653 6 Serial pc (D1, D0); //Comunicação com USB TX, RX
diogonac 0:54d4bcb1c653 7
diogonac 0:54d4bcb1c653 8
diogonac 0:54d4bcb1c653 9 BNO055 BNO055(D14, D15); //Define as portas SDA/SCL do BNO055
diogonac 0:54d4bcb1c653 10 float aceleracao_linear[3];
diogonac 0:54d4bcb1c653 11
diogonac 0:54d4bcb1c653 12 Timer t_dados; // timer para taxa de aquisicao dos dados
diogonac 0:54d4bcb1c653 13 int tx_aquisicao; //quantos pontos serao plotados em um segundo
diogonac 0:54d4bcb1c653 14 int t_amostragem; //valor do timer do Main
diogonac 0:54d4bcb1c653 15
diogonac 0:54d4bcb1c653 16 Timer check_status;
diogonac 0:54d4bcb1c653 17
diogonac 0:54d4bcb1c653 18 void configuracao_BNO055(void);
diogonac 0:54d4bcb1c653 19 void calibracao_BNO055(void);
diogonac 0:54d4bcb1c653 20
diogonac 0:54d4bcb1c653 21 int main()
diogonac 0:54d4bcb1c653 22 {
diogonac 0:54d4bcb1c653 23
diogonac 0:54d4bcb1c653 24 pc.baud(115200); //Define a velocidade da porta USB
diogonac 0:54d4bcb1c653 25 t_dados.start();
diogonac 0:54d4bcb1c653 26 tx_aquisicao = 100;
diogonac 0:54d4bcb1c653 27 configuracao_BNO055();
diogonac 0:54d4bcb1c653 28 calibracao_BNO055();
diogonac 0:54d4bcb1c653 29
diogonac 0:54d4bcb1c653 30
diogonac 0:54d4bcb1c653 31 while(1) {
diogonac 0:54d4bcb1c653 32
diogonac 0:54d4bcb1c653 33 check_status.start();
diogonac 0:54d4bcb1c653 34
diogonac 0:54d4bcb1c653 35 if (t_amostragem >= 1000000/tx_aquisicao % BNO055.check() == true) {
diogonac 0:54d4bcb1c653 36 t_dados.reset();
diogonac 0:54d4bcb1c653 37 BNO055.SetExternalCrystal(true); //Indica a existencia de um cristal externo
diogonac 0:54d4bcb1c653 38 BNO055.get_angles();
diogonac 0:54d4bcb1c653 39 BNO055.get_accel();
diogonac 0:54d4bcb1c653 40 aceleracao_linear[0] = BNO055.lia.x;
diogonac 0:54d4bcb1c653 41 aceleracao_linear[1] = BNO055.lia.y;
diogonac 0:54d4bcb1c653 42 aceleracao_linear[2] = BNO055.lia.z;
diogonac 0:54d4bcb1c653 43 // pc.printf("YAW= %f, ROLL= %f, PITCH= %f \r\n", BNO055.euler.yaw, BNO055.euler.roll, BNO055.euler.pitch);
diogonac 0:54d4bcb1c653 44 //pc.printf("%f,%f,%f \r\n", BNO055.euler.yaw, BNO055.euler.roll, BNO055.euler.pitch);
diogonac 0:54d4bcb1c653 45
diogonac 0:54d4bcb1c653 46 //pc.printf("%f,%f,%f\n", aceleracao_linear[0], aceleracao_linear[1], aceleracao_linear[2]);
diogonac 0:54d4bcb1c653 47 pc.printf("AX= %f, AY= %f, AZ= %f \r\n", BNO055.accel.x, BNO055.accel.y, BNO055.accel.z);
diogonac 0:54d4bcb1c653 48
diogonac 0:54d4bcb1c653 49 //pc.printf("Tempo= %d", check_status.read_ms());
diogonac 0:54d4bcb1c653 50 check_status.reset();
diogonac 0:54d4bcb1c653 51
diogonac 0:54d4bcb1c653 52 } else {
diogonac 0:54d4bcb1c653 53
diogonac 0:54d4bcb1c653 54 pc.printf("Status BNO055: %d\r\n", BNO055.check()); //Verifica se tem comunicação com o BNO055
diogonac 0:54d4bcb1c653 55
diogonac 0:54d4bcb1c653 56 configuracao_BNO055();
diogonac 0:54d4bcb1c653 57 calibracao_BNO055();
diogonac 0:54d4bcb1c653 58
diogonac 0:54d4bcb1c653 59 }
diogonac 0:54d4bcb1c653 60
diogonac 0:54d4bcb1c653 61
diogonac 0:54d4bcb1c653 62 //wait_ms(taxa_de_amostragem);
diogonac 0:54d4bcb1c653 63
diogonac 0:54d4bcb1c653 64 }
diogonac 0:54d4bcb1c653 65 }
diogonac 0:54d4bcb1c653 66
diogonac 0:54d4bcb1c653 67 void configuracao_BNO055()
diogonac 0:54d4bcb1c653 68 {
diogonac 0:54d4bcb1c653 69
diogonac 0:54d4bcb1c653 70 //============= Configurações iniciais no BNO055 ================
diogonac 0:54d4bcb1c653 71 BNO055.reset(); //Reseta o BNO055
diogonac 0:54d4bcb1c653 72 //pc.printf("Status BNO055: %d\r\n", BNO055.check()); //Verifica se tem comunicação com o BNO055
diogonac 0:54d4bcb1c653 73 wait_ms(650);
diogonac 0:54d4bcb1c653 74 BNO055.setpowermode(POWER_MODE_NORMAL); //Define o modo de alimentação do BNO055
diogonac 0:54d4bcb1c653 75 wait_ms(25); //Aguarda a troca de modo de alimentação
diogonac 0:54d4bcb1c653 76 BNO055.setmode(OPERATION_MODE_IMUPLUS); //Configura o modo padrão para iniciar a calibração
diogonac 0:54d4bcb1c653 77 wait_ms(25); //Aguarda o BNO055 trocar de modo de operação
diogonac 0:54d4bcb1c653 78
diogonac 0:54d4bcb1c653 79
diogonac 0:54d4bcb1c653 80 //============= Unidade das variáveis do BNO055 ================
diogonac 0:54d4bcb1c653 81 BNO055.set_accel_units(MPERSPERS); // m/s2
diogonac 0:54d4bcb1c653 82 BNO055.set_anglerate_units(DEG_PER_SEC); // graus°/s
diogonac 0:54d4bcb1c653 83 BNO055.set_angle_units(DEGREES); // graus°
diogonac 0:54d4bcb1c653 84 BNO055.set_temp_units(CENTIGRADE); // °C
diogonac 0:54d4bcb1c653 85 BNO055.set_orientation(ANDROID); // Sentido de rotação ANDROID = Regra da mão direita
diogonac 0:54d4bcb1c653 86
diogonac 0:54d4bcb1c653 87 }
diogonac 0:54d4bcb1c653 88
diogonac 0:54d4bcb1c653 89 void calibracao_BNO055()
diogonac 0:54d4bcb1c653 90 {
diogonac 0:54d4bcb1c653 91
diogonac 0:54d4bcb1c653 92 //=================== Calibração do BNO055 =====================
diogonac 0:54d4bcb1c653 93 BNO055.read_calibration_data(); //Calibração dos sensores
diogonac 0:54d4bcb1c653 94 wait_ms(10);
diogonac 0:54d4bcb1c653 95 BNO055.write_calibration_data(); //Calibração dos sensores
diogonac 0:54d4bcb1c653 96 wait_ms(10);
diogonac 0:54d4bcb1c653 97 BNO055.setmode(OPERATION_MODE_IMUPLUS); //Configura o mode de fusão entre acelerômetro e giroscópio taxa de atualização máxima: 100Hz
diogonac 0:54d4bcb1c653 98 wait_ms(25); //Aguarda o BNO055 trocar de modo de operação
diogonac 0:54d4bcb1c653 99
diogonac 0:54d4bcb1c653 100 }
diogonac 0:54d4bcb1c653 101
diogonac 0:54d4bcb1c653 102
diogonac 0:54d4bcb1c653 103