Giới thiệu cảm biến GY-511 đo gia tốc góc
Cảm biến GY-511 là một cảm biến gia tốc 3 trục nhỏ gọn, mỏng, công suất thấp hoàn chỉnh với các đầu ra điện áp được điều chỉnh tín hiệu. Nó có thể đo gia tốc tĩnh của trọng lực trong các ứng dụng cảm biến độ nghiêng, cũng như gia tốc động do chuyển động, sốc hoặc rung. Cảm biến này đi kèm với một bộ điều chỉnh điện áp trên bo mạch và hoạt động ở cả 3.3V và 5V.
Cảm biến gia tốc này được ứng dụng trong nhiều lĩnh vực khác nhau như: hệ thống FPV, RC và Robot, hệ thống định vị GPS, thiết bị đầu vào trò chơi và thực tế ảo, giám sát và bù rung, phát hiện rơi tự do, phát hiện định hướng 6D,… thường được dùng để xác định hướng chuyển động và hướng từ trường của trái đất nhằm xác định phương hướng với độ chính xác cao.
Chức năng các chân
- 3V3: chân nguồn dương 3.3V
- Vcc : chân nguồn dương 5V
- GND: Chân cấp nguồn 0V
- DRDY : Chân sẵn sàng dữ liệu
- L1 : Chân ngắt 1
- L2 : Chân ngắt 2
- SDA: Chân dữ liệu I2C
- SCL : Chân tạo xung I2C
Thông số kỹ thuật cảm biến GY-511 đo gia tốc góc
- Điện áp sử dụng: 3~5VDC
- Điện áp giao tiếp: 3~5VDC
- Chuẩn giao tiếp: I2C
- Số trục : 3 trường và 3 trục gia tốc
- Phạm vi của trường: ± 1.3 to ±8.1
- Phạm vi tăng tốc: ±2g/±4g/±8g/±16g
- Số bit output: 16 bit data output.
- Tính năng: Chế độ chờ
- Cảm biến tích hợp: Nhiệt độ nhúng
- Góc phát hiện: 6DOF
- Kích thước: 14.5 x 20.5mm
Một số ứng dụng
- Trò chơi cảm biến chuyển động
- Thực tế tăng cường
- Ổn định hình ảnh điện tử (EIS: Ổn định hình ảnh điện tử)
- Ổn định hình ảnh quang học (OIS: Ổn định hình ảnh quang học)
- Định hướng cho người đi bộ
- Giao diện người dùng cử chỉ “không chạm”
- Phím tắt tư thế
- Chứng nhận
- Điện thoại thông minh
- Thiết bị máy tính bảng
- Sản phẩm chơi game cầm tay
- Điều khiển từ xa 3D
- Thiết bị định vị di động
Sơ đồ nguyên lý
Chương trình Test sản phẩm
Nguyên lý kết nối
Chương trình
- Thư viện: Adafruit_Sensor.h hoặc tải trực tiếp trên Arduino IDE với tên Adafruit_Sensor
- Thư viện: Adafruit_LSM303_U.h hoặc tải trực tiếp trên Arduino IDE với tên Adafruit_LSM303_U
#include <Wire.h> #include <Adafruit_Sensor.h> #include <Adafruit_LSM303_U.h> /* Assign a unique ID to this sensor at the same time */ Adafruit_LSM303_Mag_Unified mag = Adafruit_LSM303_Mag_Unified(12345); // OUTPUT: Use digital pins 9-11, the Pulse-width Modulation (PWM) pins // LED's cathodes should be connected to digital GND int redPin = 9; // Red LED, connected to digital pin 9 int grnPin = 10; // Green LED, connected to digital pin 10 int bluPin = 11; // Blue LED, connected to digital pin 11 // Program variables int redVal = 0; // Variables to store the values to send to the pins int grnVal = 0; int bluVal = 0; int magnetometer = 0; int magVal = 0; //Variable to store the input from the magnetometer // Pi for calculations - not the raspberry type const float Pi = 3.14159; // This is the desired direction of travel // expressed as a 0-360 degree compass heading // 0.0 = North // 90.0 = East // 180.0 = South // 270 = West const float targetHeading = 0.0; void setup() { Serial.begin(9600); Serial.println("Magnetometer Test"); Serial.println(""); /* Initialise the sensor */ if(!mag.begin()) { /* There was a problem detecting the LSM303 ... check your connections */ Serial.println("Ooops, no LSM303 detected ... Check your wiring!"); while(1); } pinMode(redPin, OUTPUT); // sets the pins as output pinMode(grnPin, OUTPUT); pinMode(bluPin, OUTPUT); } void loop(void) { /* Get a new sensor event */ sensors_event_t event; mag.getEvent(&event); // Calculate the angle of the vector y,x float heading = (atan2(event.magnetic.y,event.magnetic.x) * 180) / Pi; // Normalize to 0-360 if (heading < 0) { heading = 360 + heading; } magVal = heading; // read the magnetometer Serial.print("mag: "); Serial.print(magVal); Serial.print(" # "); if (magVal < 91) // Lowest fourth of the magnetometer's range (0-90) { magVal = (magVal * 3) / 4; // Normalize to 0-68 redVal = 69 - magVal; // Red from full to off grnVal = magVal; // Green from off to full bluVal = 1; // Blue off Serial.print("1: "); Serial.print(redVal); Serial.print(":");Serial.print(grnVal); Serial.print(":"); Serial.println(bluVal); } else if (magVal < 181) // Lower middle fourth of magnetometer's range (91-180) { magVal = ( (magVal-91) * 3) / 4; // Normalize to 0-68 redVal = 1; // Red off grnVal = 69 - magVal; // Green from full to off bluVal = magVal; // Blue from off to full Serial.print("2: "); Serial.print(redVal); Serial.print(":");Serial.print(grnVal); Serial.print(":"); Serial.println(bluVal); } else if (magVal < 271)// Upper middle fourth of magnetometer"s range (181-270) { magVal = ( (magVal-182) * 3) / 4; // Normalize to 0-68 redVal = 1; // Red off grnVal = 1; // Green off bluVal = 69 - magVal; // Blue from full to off Serial.print("3: "); Serial.print(redVal); Serial.print(":");Serial.print(grnVal); Serial.print(":"); Serial.println(bluVal); } else // Upper fourth of magnetometer"s range (271-360) { magVal = ( (magVal-272) * 3) / 4; // Normalize to 0-68 redVal = 1; // Red of grnVal = 1; // Green off bluVal = 1; // Blue off Serial.print("4: "); Serial.print(redVal); Serial.print(":");Serial.print(grnVal); Serial.print(":"); Serial.println(bluVal); } analogWrite(redPin, redVal); // Write values to LED pins analogWrite(grnPin, grnVal); analogWrite(bluPin, bluVal); }
Liên hệ làm mạch
- Phone: 0967.551.477
- Zalo: 0967.551.477
- Email: dientunhattung@gmail.com
- Chi tiết : Nhận làm mạch và hướng dẫn đồ án sinh viên
Tham khảo chương trình mẫu và thông tin linh kiện chi tiết tại:
Đánh giá
Chưa có đánh giá nào.