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:
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 .