Controle de 2 eixos com acelerômetro e Arduino UNO
Nesse tutorial vamos demostrar o controle de dois eixos simulados por servo motores que vão simular o X e Y.
A novidade nessa postagem é que vamos fazer uso de um acelerômetro com giroscópio MPU - 6050, que é facilmente encontrado para compra em sites da internet e casas especializadas em eletrônicos.
MPU - 6050
Essa placa contém um conversor analógico de 16 bits por canal, estabelecendo alta precisão na captura dos eixos X, Y e Z, mesmo quando acionados ao mesmo tempo. As características de um acelerômetro e giroscópio, proporciona ao usuário trabalhar com projetos que incluem 6 eixos de liberdade (3 para acelerômetro e 3
para giroscópio). Além do mais o sensor MPU - 6050 conta com um sensor de temperatura que variam medições em torno de -40°C até +85°C.
fonte: https://www.invensense.com/wp-content/uploads/2015/02/MPU-6000-Datasheet1.pdf
Pinagem do MPU - 6050
De uma maneira geral, as funções dos pinos do MPU - 6050 pode ser dada conforme abaixo:
- Vcc: Alimentação (3,3V à 5V);
- GND: 0V;
- SCL: I2C Serial Clock (SCL);
- SDA (Slave_Data): I2C Serial Data (SDA);
- XDA: I2C Master Serial Data, para conexão de sensor auxiliar;
- XCL: I2C Master Serial Clock, para conexão de sensor auxiliar;
- AD0: Define o endereço da I2C;
- INT: pino para interrupção.
fonte: próprio autor
O pino ADO (endereço) define como endereço 12C do sensor como 0x68, conectando-o à tensão de 3,3v da placa o endereço é alterado para 0x69, permitindo o uso de dois módulos acelerômetro/ giroscópio MPU - 6050 em um mesmo circuito.
Servo motores
Os servos motores já foram abordados anteriormente aqui no site, pra quem ainda tem dúvidas, acesse o link e leia sobre o assunto.
Esquema de ligação
Para o projeto pode-se começar realizando a ligação do circuito conforme o esquema abaixo com os componentes:
Arduino UNO (ou similar)
Acelerômetro/giroscópio GY521 MPU - 6050
Servos motores
Servos motores
Protoboard (matriz de contatos)
Cabos jumpers
Fonte externa 5v 1A
Fonte externa 5v 1A
fonte: próprio autor
O código fonte
Copie e cole o código fonte na IDE do seu Arduino para o funcionamento correto do seu projeto.
/*
/** Código **/
// Elaborado por Tony Emerson Marim em 10/02/2017.
/** mecatronizando@gmail.com **/
/*www.mecatronizando.com.br */
/** Controle de eixo X e Y com acelerometro/giroscopio**/
/*Baseado no original de www.giuseppecaccavale.it
*/
#include <Wire.h>
#include <Servo.h>
const int MPU=0x68; // I2C endereço do MPU-6050
int16_t GyX, GyY; //Variavel int a 16bit
Servo ServoMot_X;
Servo ServoMot_Y;
void setup(){
Wire.begin();
Wire.beginTransmission(MPU);
Wire.write(0x6B); // PWR_MGMT_1 register
Wire.write(0); // set to zero (wakes up the MPU-6050)
Wire.endTransmission(true);
ServoMot_X.attach(8);
ServoMot_Y.attach(9);
Serial.begin(9600);
}
void loop(){
Wire.beginTransmission(MPU);
Wire.write(0x3B); // starting with register 0x3B (ACCEL_XOUT_H)
Wire.endTransmission(false);
Wire.requestFrom(MPU,14,true); // request a total of 14 registers
GyX=Wire.read()<<8|Wire.read(); // 0x43 (GYRO_XOUT_H) & 0x44 (GYRO_XOUT_L)
GyY=Wire.read()<<8|Wire.read(); // 0x45 (GYRO_YOUT_H) & 0x46 (GYRO_YOUT_L)
int PosServo_X = map(GyX, -16000, 16000, 0, 179);
int PosServo_Y = map(GyY, -16000, 16000, 0, 179);
ServoMot_X.write(PosServo_X);
ServoMot_Y.write(PosServo_Y);
Serial.println("Giroscopio");
Serial.print("Acelerometro X : "); Serial.println(PosServo_X);
Serial.print("Acelerometro Y : "); Serial.println(PosServo_Y);
Serial.println(" ");
delay(100);
}
No vídeo abaixo é possível ver o funcionamento do circuito.
Caso seja necessário o material do tutorial pode ser baixado por meio desse LINK!
Gostou? Curta nossa FanPage!
Assine o nosso canal!
Não deixe de acompanhar a nova Seção <<<NOTAS DE AULA>>>
Bons Estudos!
desculpa mas nao ta mexendoo meus servos
ResponderExcluirConectou o GND do motor junto com o GND da placa Arduino?
Excluir