Minggu, 29 Januari 2017

GY-88 : Altimeter ,Accelerometer ,Tilt meter, Barometer, Temperature and Compass sensor With GY-88 + Oled LCD

 

 

 Altimeter ,Accelerometer ,Tilt meter, Barometer, Temperature and Compass sensor With GY-87 + Oled LCD




Project ini adalah kelanjutan dari materi sebelumnya :
http://www.belajarduino.com/2017/01/gy-88-imu-10dof-mpu6050hmc5883lbmp085.html

Sensor GY-88 sebuah device i2C gabungan dari 3 buah Sensor, yaitu :

MPU6050    : Accelerometer Sensor                   (Address is 0x68)  
HMC5883L : Digital Compass Sensor                 (Address is 0x1E)
BMP085      : Barometer & Temperature Sensor (Address is 0x77)


MPU6050 adalah Sensor pendeteksi gerakan 6-axis yaitu 3-axis gyroscope dan 3-axis accelerometer dengan Digital Motion Processor™ (DMP).

HMC5883L aalah Sensor Digital Compass dengan 3-axis
BMP085 adalah Sensor tekanan udara (barometric pressure) dan temperatur udara dengan akurasi tinggi.

Module Sensor GY-88 mirip dengan rivalnya GY-87, yang membedakanya adalah jenis sensor barometric yang ditanamkan.GY-87 menggunakan barometric sensor BMP180 sedangkan sensor GY-88 menggunakan barometric sensor BMP085.

Dari sebuah sensor GY-88 kita dapat memperoleh Out data berupa :

*3 Axis Accelerometer  and rotation (x,y,z) -> from MPU6050 device
*Compass Data/Dirrection (angle) -> from HMC5883L device
*Air Pressure, Altimeter and Temperature -> from BMP180 device

Beli Sensor GY-88 di Tokopedia Rajacell Beli 
Beli LCD Oled 0.96" Putih di Tokopedia Rajacell Beli 
Beli LCD Oled 0.96" Biru di Tokopedia Rajacell Beli
Beli LCD Oled 0.96" Biru-Kuning di Tokopedia Rajacell Beli 
Beli LCD Push Button di Tokopedia Rajacell Beli 

Kita akan menggunakan 2 buah Device i2C/TWI menggunakan 1 koneksi SDA SCL

Berikut adalah Wiring Sensor GY-88 dengan Arduino

Untuk power pada GY-88 silahkan pilih salah satu (pin Vin atau pin 3.3v)
sesuai ketersediaan pin pada arduino/mikrokontroller yg dipakai.

GY-88  <--->  Arduino
----------------------------------------------------
  Vin     <--->  pin 5V
  3.3V   <--->  pin 3.3V
  GDN  <--->  pin GND
  SCL   <--->  pin A5(Uno/Nano), pin 21 (Mega)
  SDA   <--->  pin A4(Uno/Nano), pin 20 (Mega)

untuk 3 pin lainya (M_DRDY,G_ADO,G_INT) tidak kita gunakan untuk kebutuhan standar.

Wiring Pin LCD Oled 0.96 inch ke Arduino :

Pin GND LCD  --> ke Pin GND Arduino
Pin VCC LCD  --> ke Pin 5V Arduino
Pin SCL LCD --> ke Pin SCL(A5) Arduino
Pin SDA LCD --> ke Pin SDA (A4) Arduino

Untuk Arduino Uno / Nano / Pro mini Pin SDA adalah pin A4 dan SCL adalah A5
Untuk Arduino Mega2560 Pin SDA adalah pin 20(D20) dan SCL adalah 21 (D21)

Wiring Push button ke Arduino :
Hubungkan 1 sisi push button (Momentary Normally Open) dengan D3 dan sisi lainya dengan Pin GND Arduino.
Anda bisa menggunakan tombol push button jenis apapun asal tidak mengunci (hanya momentary saja).

Berikut adalah Library yang dibutuhkan Sensor GY-88 pada project ini :

Library "I2Cdev.h" Download  
Library "MPU6050.h" Download  
Library BMP085.h Download
Library Adafruit_SSD1306.h Download
Library Button.h Download   
Library "Wire.h" -> Sudah include di Arduino IDE

Lihat video cara memasukan Library baru ke dalam sistem arduino berikut ini  Lihat Video   

Setelah semua library sudah di download dan dimasukan ke dalam folder libraries..silahkan copy paste coding berikut ke dalam Arduino IDE anda.Saya menyarankan anda menggunakan Arduino IDE versi diatas 1.6.7 (jangan gunakan 1.6.10 dan 1.6.11).

Berikut adalah Contoh Source Code untuk Altimeter ,Accelerometer ,Tilt meter, Barometer, Temperature and Compass sensor dengan Oled LCD 0.96"i2C

 

Source Code:

//Sketch Coding ini dibuat Oleh Dani Ardianto untuk www.belajarduino.com
//Anda bisa menggunakan source code ini secara gratis untuk tujuan Non-Komersial
//Semua module yang dibutuhkan untuk Module ini dapat anda peroleh di Toko kami
//Melalui portal Tokopedia www.tokopedia.com/rajacell
//Apabila ada kendala dalam pembuatan project ini bisa didiskusikan melalui
//Facebook Group Belajar Arduino : https://www.facebook.com/groups/255324164886376

#include "I2Cdev.h"
#include "MPU6050.h"
#include "Wire.h"
#include "BMP085.h"
#include <Adafruit_SSD1306.h>
#include <Button.h>

#define BUTTON_PIN 3 
#define PULLUP true   
#define INVERT true    
#define DEBOUNCE_MS 20
#define LONG_PRESS 1000 
Button myBtn(BUTTON_PIN, PULLUP, INVERT, DEBOUNCE_MS);

#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);

//MPU6050 Accelerometer 
MPU6050 accelgyro;

int16_t ax, ay, az;
int16_t gx, gy, gz;
uint8_t mode;

//HMC5883L Digital Compass
const int  hmc5883Address = 0x1E;
const byte hmc5883ModeRegister = 0x02;
const byte hmcContinuousMode = 0x00;
const byte hmcDataOutputXMSBAddress = 0x03;

//The BMP180 Digital Barometer
BMP085 pressure_m;
// Store the current sea level pressure at your location in Pascals.
float seaLevelPressure = 101325;
int x,y,z; //triple axis data from HMC5883L.

void setup() {
  Wire.begin();
  //Serial.begin(9600);   
    
  display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
  display.clearDisplay();
  display.display();
  display.setTextSize(2);
  display.setTextColor(WHITE);
  display.setCursor(0,0);
  display.println(F("GY-88 Sens"));
  display.display();
  // initialize device
  //Serial.print("Initializing I2C devices...");
  accelgyro.initialize();
  // verify connection
  //Serial.println("Testing device connections...");
  //Serial.println(accelgyro.testConnection() ? "MPU6050 connection successful" : "MPU6050 connection failed");
  accelgyro.setI2CBypassEnabled(true);  //This sets the bypass so the HMC5883L gets a look in. 
  
  display.setTextSize(1);
  display.setCursor(0,20);
  display.print(F("MPU6050 Starting"));
  display.display();
  delay(250);
  for(int i=0; i<4; i++){
  display.print(F("."));
  display.display();
  delay(250); 
  }
      
  //Initialise the Digital Compass
  Wire.beginTransmission(hmc5883Address);
  Wire.write(hmc5883ModeRegister);
  Wire.write(hmcContinuousMode);
  Wire.endTransmission();
  
  display.setCursor(0,32);
  display.print(F("HMC5883 Starting"));
  display.display();
  delay(250);
  for(int i=0; i<4; i++){
  display.print(F("."));
  display.display();
  delay(250); 
  }  
    //Initialise the BMP180 Barometer (and Temperature Sensor)
  pressure_m.bmp085Calibration();

  display.setCursor(0,44);
  display.print(F("BMP085  Starting"));
  display.display();
  delay(250);
  for(int i=0; i<4; i++){
  display.print(F("."));
  display.display();
  delay(250); 
  }
   
  display.setCursor(0,56);
  display.print(F("-Initialize Success-"));
  display.display();
  delay(2000);
  display.clearDisplay();

}
//Kunjungi Toko kami di www.tokopedia.com/rajacell
void loop() {
  display.setTextSize(1);
  display.setCursor(0,60);
  display.print(F("/ / / / / / / / / / / "));
  display.display();
  
  myBtn.read(); 
  if (myBtn.wasReleased()) {
    mode++;
    display.clearDisplay();
    Serial.print(mode);
    if (mode==6)mode=0;
  }

 if(mode==0){accel();}
 if(mode==1){gyro();}
 if(mode==2){compass();}
 if(mode==3){baro();}     
 if(mode==4){alti();}
 if(mode==5){temp();}   

  display.setTextSize(1);
  display.setCursor(0,60);
  display.print(F(" / / / / / / / / / / /"));
  display.display();
}
//Kunjungi Toko kami di www.tokopedia.com/rajacell
void accel() {
  // Display Acceleration
  accelgyro.getAcceleration(&ax, &ay, &az);
  display.setTextColor(WHITE,BLACK);
  display.setTextSize(2);
  display.setCursor(5,0);
  display.print(F("Accelerat"));
  display.display();
  display.setTextSize(1);
  display.setCursor(0,20);
  display.print(F("Accel X : ")); display.print(ax);
  display.setCursor(0,32);
  display.print(F("Accel Y : ")); display.print(ay);
  display.setCursor(0,44);
  display.print(F("Accel Z : ")); display.print(az);
  display.display();
}
//Kunjungi Toko kami di www.tokopedia.com/rajacell
void gyro() {
// Display Rotation
  accelgyro.getRotation(&gx, &gy, &gz);
  display.setTextColor(WHITE,BLACK);
  display.setTextSize(2);
  display.setCursor(10,0);
  display.print(F("Rotation"));
  display.display();
  display.setTextSize(1);
  display.setCursor(0,20);
  display.print(F("Gyro X : ")); display.print(gx);
  display.setCursor(0,32);
  display.print(F("Gyro Y : ")); display.print(gy);
  display.setCursor(0,44);
  display.print(F("Gyro Z : ")); display.print(gz);
  display.display();
}
//Kunjungi Toko kami di www.tokopedia.com/rajacell
void compass() {
   //Accessing the HMC5883L Digital Compass  
    Wire.beginTransmission(hmc5883Address);
    Wire.write(hmcDataOutputXMSBAddress);
    Wire.endTransmission();
    Wire.requestFrom(hmc5883Address,6);
    if(6<=Wire.available())
    {
      x = Wire.read()<<8; //X msb
      x |= Wire.read();   //X lsb
      z = Wire.read()<<8; //Z msb
      z |= Wire.read();   //Z lsb
      y = Wire.read()<<8; //Y msb
      y |= Wire.read();   //Y lsb    
    }
  
    int angle = atan2(-y,x)/M_PI*180;
    if (angle < 0)
    {angle = angle + 360;}

  display.setTextColor(WHITE,BLACK);
  display.setTextSize(2);
  display.setCursor(10,0);
  display.print(F(" Compass "));
  display.setCursor(70,30);
  display.print(angle); display.print(F("'"));
  display.display();
  display.setTextSize(1);
  display.setCursor(0,20);
  display.print(F("X : ")); display.print(x);
  display.setCursor(0,32);
  display.print(F("Y : ")); display.print(y);
  display.setCursor(0,44);
  display.print(F("Z : ")); display.print(z);
  display.display();
}
//Kunjungi Toko kami di www.tokopedia.com/rajacell
void baro() {
  float pressure = pressure_m.bmp085GetPressure();              
  display.setTextColor(WHITE,BLACK);
  display.setTextSize(2);
  display.setCursor(10,0);
  display.print(F("Barometer"));
  display.setCursor(10,30);
  display.print(pressure,0); display.print(F(" Pa"));
  display.display();  
}
//Kunjungi Toko kami di www.tokopedia.com/rajacell
void alti() {
  float pressure = pressure_m.bmp085GetPressure();   
  float altitude = pressure_m.calcAltitude(pressure);               
  display.setTextColor(WHITE,BLACK);
  display.setTextSize(2);
  display.setCursor(10,0);
  display.print(F("Altimeter"));
  display.setCursor(20,30);
  display.print(altitude); display.print(F("m"));
  display.setCursor(17,50);
  display.setTextSize(1);
  display.print(F("above sea-Level"));
  display.display();
       
}
//Kunjungi Toko kami di www.tokopedia.com/rajacell
void temp() {
float temperature = pressure_m.bmp085GetTemperature();                 
  display.setTextColor(WHITE,BLACK);
  display.setTextSize(2);
  display.setCursor(5,0);
  display.print(F("Temperatur"));
  display.setCursor(20,30);
  display.print(temperature); display.println(F("'C"));
  display.display();
     
}

//Sketch Coding ini dibuat Oleh Dani Ardianto untuk www.belajarduino.com
//Anda bisa menggunakan source code ini secara gratis untuk tujuan Non-Komersial
//Semua module yang dibutuhkan untuk Module ini dapat anda peroleh di Toko kami
//Melalui portal Tokopedia www.tokopedia.com/rajacell
//Apabila ada kendala dalam pembuatan project ini bisa didiskusikan melalui
//Facebook Group Belajar Arduino : https://www.facebook.com/groups/255324164886376



1 komentar:

Copyright © 2014 Belajar Arduino | Designed With By Blogger Templates | Distributed By Gooyaabi Templates
Scroll To Top