Hướng dẫn kết nối và sử dụng Cảm biến La Bàn HMC5883 GY-271 với Arduino Uno

 

Hướng dẫn cài đặt và sử dụng Arduino IDE

Mời các bạn xem tại đây :

Cảm Biến La Bàn Số GY-271 HMC5883L có kích thước nhỏ gọn sử dụng giao tiếp I2C, được dùng để đo từ trường của trái đất nhằm xác định phương hướng với độ chính xác lên đến 1 hoặc 2 độ, cảm biến có cách đo riêng biệt cho từng trục và có thể kết hợp lại để tính toán 3D.

Cảm Biến La Bàn Số GY-271 HMC5883L còn có thể dùng để đo từ trường thô hoặc các nguồn từ trường mạnh hơn gần nó, cảm biến có thể cảm nhận được nguồn từ trường xung quanh nó như của nam châm hoặc điện trường, khi phát hiện được từ trường từ bên ngoài, nó có thể xác định được khoảng cách tương đối hoặc chiều đến vật phát ra từ trường đó.

Thông Số Kĩ Thuật

– Cảm biến la bàn số: HMC5883L

– Điện áp hoạt động: 3 ~ 5VDC

– Chuẩn giao tiếp: I2C

– Phạm vi đo: ± 1.3-8 Gauss

– Kích thước: 14mm x 13mm

Sơ Đồ Ra Chân

VCC: Ngõ vào điện áp dương 3 ~ 5VDC

GND: Ngõ vào điện áp âm 0VDC

SCL: Chân xung I2C

SDA: Chân dữ liệu I2C

Tài Liệu Tham Khảo:

Datasheet

Sample code, library

Các bạn kết nối Module với Kit Arduino theo sơ đồ sau :

 

Ở đây mình Hiển thị lên LCD OLED 0.9 SSD1306  các bạn xem bài viết hướng dẫn Tại đây :

các bạn download và add  thư viện  Gy-271-hmc5883l.zip này vào trình Arduino IDE.

Hướng dẫn add thư viện vào Arduino IDE các ban tham khảo Tại đây :

 //    Code test GY-271 -HMC5883L ///  

#include “U8glib.h”
#include
#include “compass.h”

//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0);

/* Create an instance for the SSD1306 OLED display in SPI mode
* connection scheme:
* D0=sck=Pin 12
* D1=mosi=Pin 11
* CS=Pin 8
* DC=A0=Pin 9
* Reset=Pin 10
*/

U8GLIB_SSD1306_128X64 u8g(12, 11, 8, 9, 10);

#define Task_t 10 // Task Time in milli seconds

int dt=0;
unsigned long t;
// Main code —————————————————————–
void setup(){
Serial.begin(9600);
// Serial.print(“Setting up I2C ……..n”);
Wire.begin();
compass_x_offset = -48.23; //122.17;
compass_y_offset = 284.69; //230.08;
compass_z_offset = 59.87; //389.85;
compass_x_gainError = 1.07; //1.12;
compass_y_gainError = 1.09; //1.13;
compass_z_gainError = 1.01; //1.03;

compass_init(2);
//compass_debug = 1;
//compass_offset_calibration(3);

}

void loop(){

t = millis();

float load;

compass_scalled_reading();

Serial.print(“x = “);
Serial.println(compass_x_scalled);
Serial.print(“y = “);
Serial.println(compass_y_scalled);
Serial.print(“z = “);
Serial.println(compass_z_scalled);

compass_heading();
Serial.print (“Heading angle = “);
Serial.print (bearing);
Serial.println(” Degree”);

dt = millis()-t;
load = (float)dt/(Task_t/100);
Serial.print (“Load on processor = “);
Serial.print(load);
Serial.println(“%”);

u8g.firstPage();
do {
draw();
} while( u8g.nextPage() );

delay(100);
}

void draw(void) {
static int armLength = 20;
static int cx = 64;
static int cy = 20;
int armX, armY;

//convert degree to radian
float bearingRad = bearing/57.2957795;
armX = armLength*cos(bearingRad);
armY = -armLength*sin(bearingRad);

u8g.setFont(u8g_font_unifont);

u8g.setPrintPos(0, 60);
u8g.print(“bearing: “);
u8g.setPrintPos(70, 60);
u8g.print(bearing);

u8g.drawLine(cx, cy, cx-armX, cy-armY);
u8g.drawCircle(cx, cy, armLength, U8G_DRAW_ALL);

}

// kết thúc chương trình .

LEAVE A REPLY

Please enter your comment!
Please enter your name here