Translate

Membuat Alat monitor Getaran Menggunakan Arduino dan sensor IMU (ACCELERO, GYRO, SUHU / TEMPERATURE) MPU 6050 / GY-521

Membuat Alat monitor Getaran Menggunakan Arduino dan sensor IMU (ACCELERO, GYRO, SUHU / TEMPERATURE) MPU 6050 / GY-521


        Pada kesempatan kali ini saya akan menjelaskan mengenai bagaimana cara membuat sebuah alat yang dapat untuk mendeteksi getaran dan juga untuk mendeteksi kemiringan, sebenarnya sensor MPU6050 memiliki 3 buah sensor yaitu sensor accelero, gyroscope dan suhu, untuk pengujian kali ini hanya digunakan sensor accelero saja untuk mendeteksi getaran. untuk lebih jelasnya berikut adalah skema dan programnya.



a. Arduino Uno




b. Sensor IMU MPU 6050 / GY-521







c. Program Arduino Test MPU6050 / GY-521

#include<Wire.h>
const int MPU_addr=0x68;  // I2C address of the MPU-6050
int16_t AcX,AcY,AcZ,Tmp,GyX,GyY,GyZ;
void setup(){
  Wire.begin();
  Wire.beginTransmission(MPU_addr);
  Wire.write(0x6B);  // PWR_MGMT_1 register
  Wire.write(0);     // set to zero (wakes up the MPU-6050)
  Wire.endTransmission(true);
  Serial.begin(9600);    // 9600
}
void loop(){
  Wire.beginTransmission(MPU_addr);
  Wire.write(0x3B);  // starting with register 0x3B (ACCEL_XOUT_H)
  Wire.endTransmission(false);
  Wire.requestFrom(MPU_addr,14,true);  // request a total of 14 registers
  AcX=Wire.read()<<8|Wire.read();  // 0x3B (ACCEL_XOUT_H) & 0x3C (ACCEL_XOUT_L)    
  AcY=Wire.read()<<8|Wire.read();  // 0x3D (ACCEL_YOUT_H) & 0x3E (ACCEL_YOUT_L)
  AcZ=Wire.read()<<8|Wire.read();  // 0x3F (ACCEL_ZOUT_H) & 0x40 (ACCEL_ZOUT_L)
  Tmp=Wire.read()<<8|Wire.read();  // 0x41 (TEMP_OUT_H) & 0x42 (TEMP_OUT_L)
  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)
  GyZ=Wire.read()<<8|Wire.read();  // 0x47 (GYRO_ZOUT_H) & 0x48 (GYRO_ZOUT_L)
  Serial.print("AcX = "); Serial.print(AcX);
  Serial.print(" | AcY = "); Serial.print(AcY);
  Serial.print(" | AcZ = "); Serial.print(AcZ);
  Serial.print(" | Tmp = "); Serial.print(Tmp/340.00+36.53);  //equation for temperature in degrees C from datasheet
  Serial.print(" | GyX = "); Serial.print(GyX);
  Serial.print(" | GyY = "); Serial.print(GyY);
  Serial.print(" | GyZ = "); Serial.println(GyZ);
  delay(333);
   
}



d. Program Arduino Monitor Getaran

#include<Wire.h>
const int MPU_addr=0x68; 
int16_t AcX,AcY,AcZ,Tmp,GyX,GyY,GyZ;

int led1 = 13;
int led2 = 12;
int led3 = 11;
int led4 = 10;
int getaran;
int cacah;

void setup(){
  Wire.begin();
  Wire.beginTransmission(MPU_addr);
  Wire.write(0x6B); 
  Wire.write(0);   
  Wire.endTransmission(true);
  Serial.begin(9600);  
 
  pinMode(led1,OUTPUT);
  pinMode(led2,OUTPUT);
  pinMode(led3,OUTPUT);
  pinMode(led4,OUTPUT);
 
}

void loop(){
  Wire.beginTransmission(MPU_addr);
  Wire.write(0x3B); 
  Wire.endTransmission(false);
  Wire.requestFrom(MPU_addr,14,true); 
  AcX=Wire.read()<<8|Wire.read();    
  AcY=Wire.read()<<8|Wire.read(); 
  AcZ=Wire.read()<<8|Wire.read(); 
  Serial.print("AcX = "); Serial.print(AcX);
  Serial.print(" | AcY = "); Serial.print(AcY);
  Serial.print(" | AcZ = "); Serial.println(AcZ);
  delay(333);
 
  //30 derajat
  if((AcY > 15000)&&(AcY < 20000)){
  digitalWrite(led1,LOW); //MERAH
  digitalWrite(led2,HIGH); //BIRU
  digitalWrite(led3,LOW);
  digitalWrite(led4,LOW);
  }
 
  if((AcY > 13000)&&(AcY < 15000)){
  counter();
  }
 
  //60 derajat
  if((AcY > 10000)&&(AcY < 13000)) {
  digitalWrite(led1,LOW); //MERAH
  digitalWrite(led2,LOW); //BIRU
  digitalWrite(led3,LOW);
  digitalWrite(led4,HIGH);
  }
 
  if(AcY < 10000){
  counter();
  }
   
}

void counter(){
  Wire.beginTransmission(MPU_addr);
  Wire.write(0x3B); 
  Wire.endTransmission(false);
  Wire.requestFrom(MPU_addr,14,true); 
  AcX=Wire.read()<<8|Wire.read();    
  AcY=Wire.read()<<8|Wire.read(); 
  AcZ=Wire.read()<<8|Wire.read(); 
  Serial.print("AcX = "); Serial.print(AcX);
  Serial.print(" | AcY = "); Serial.print(AcY);
  Serial.print(" | AcZ = "); Serial.print(AcZ);
  Serial.print(" | getaran = "); Serial.println(getaran);

 if(AcY < 10000){
  delay(200);
  getaran++;
  }

  if((AcY > 13000)&&(AcY < 15000)){
  delay(200);
  getaran++;
  }
 
  if(getaran > 3){
  digitalWrite(led1,HIGH); //MERAH
  digitalWrite(led2,LOW); //BIRU
  digitalWrite(led3,HIGH);
  digitalWrite(led4,LOW);
  }
 
 
if(cacah > 50){
  cacah = 0;
  getaran = 0;
  return;
}
 
cacah++;
delay(100);
counter();
}




e. VIDEO HASILNYA











No comments:

Post a Comment