Mục lục:
- Bước 1: Những điều cần thiết
- Bước 2: Lắp ráp
- Bước 3: Mã và hiệu chuẩn
- Bước 4: Cách thức hoạt động (tùy chọn)
Video: Con quay hồi chuyển Vui vẻ với Neopixel Ring: 4 Bước (có Hình ảnh)
2024 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2024-01-30 13:32
Trong hướng dẫn này, chúng ta sẽ sử dụng con quay hồi chuyển MPU6050, một vòng neopixel và một arduino để chế tạo một thiết bị chiếu sáng đèn led tương ứng với góc nghiêng.
Đây là một dự án đơn giản và thú vị và nó sẽ được lắp ráp trên một breadboard. Nếu bạn làm theo các bước, bạn sẽ xây dựng những gì bạn đã thấy trong video. Đó là một hướng dẫn tốt để tìm hiểu về con quay hồi chuyển và vòng neopixel.
Tôi đang xây dựng hướng dẫn này vì tôi thích thú với tài liệu hướng dẫn đầu tiên của tôi ở đây (Điều khiển đèn quay con quay hồi chuyển Với Arduino). Trong hướng dẫn này, tôi đã thay thế đèn led đơn giản bằng một vòng neopixel. Chiếc nhẫn này đơn giản hơn để sử dụng thông qua thư viện Adafruit và nó chắc chắn ngoạn mục hơn.
Vì vậy, nếu bạn có những thành phần này nằm xung quanh đây là một cách tuyệt vời để sử dụng chúng, tôi sẽ cố gắng hướng dẫn bạn từng bước xây dựng thiết bị và cũng giải thích cách hoạt động của nó trong bước cuối cùng.
Bước 1: Những điều cần thiết
Các bộ phận
1. Arduino pro mini 328p (eBay) 2 $
2. Breadboard
3. Con quay hồi chuyển MPU6050 (eBay) 1,2 đô la
4. 24 vòng led neopixel (Adafruit) 17 $
5. Bộ pin 4 x AA với 4 pin
6. Cáp jumper hình chữ U (tùy chọn). Tôi đã sử dụng các loại cáp jumper này vì chúng trông đẹp hơn trên breadboard và các đèn led có thể nhìn thấy rõ hơn theo cách này. Bạn có thể tìm thấy một hộp 140 chiếc trên ebay với giá khoảng 4 đô la. Nếu bạn không có những loại cáp này, bạn có thể thay thế chúng bằng dây dupont.
Công cụ:
1. Bộ chuyển đổi USB sang FTDI nối tiếp FT232RL để lập trình arduino pro mini
2. Arduino IDE
Kỹ năng: 1. Hàn, kiểm tra hướng dẫn này
3. Lập trình arduino cơ bản, hướng dẫn này có thể hữu ích
Bước 2: Lắp ráp
Tôi đã đính kèm sơ đồ fritzing ở định dạng fzz và một bức ảnh về nó để dễ hình dung về các kết nối
1. Bạn cần hàn 3 chốt nam vào mặt sau của nhẫn neopixel như trong hình.
- hàn chân dương
- hàn mặt đất
- hàn chân đầu vào dữ liệu
2. Sau đó, giá đỡ pin 4x phải có một cách kết nối với breadboard, một giải pháp dễ dàng là hàn hai dây dupont đực vào các đầu cuối của nó.
3. Chuẩn bị breadboard.
- đặt vòng neopixel, bộ vi điều khiển và con quay hồi chuyển trên bảng mạch như trong hình
- đặt tất cả các dây âm: đến bộ vi điều khiển, vòng neopixel, con quay hồi chuyển
- đặt tất cả các dây dương: đến bộ vi điều khiển, vòng neopixel, con quay hồi chuyển
- đặt tất cả các dây dữ liệu:
* SDA và SCL từ bộ vi điều khiển đến con quay hồi chuyển
* chân D6 từ bộ vi điều khiển đến vòng neopixel
- kiểm tra kỹ tất cả các kết nối trước khi cấp nguồn
- tùy chọn sử dụng băng keo, dán bộ pin vào mặt sau của bảng bradboard để giữ cố định và làm cho nó dễ di động hơn
Bước 3: Mã và hiệu chuẩn
Trước tiên, bạn cần tải xuống và cài đặt hai thư viện:
1. Adafruit neopixel thư viện linh sam điều khiển neopixel
2. Thư viện MPU6050 cho con quay hồi chuyển
3. Nguồn thư viện I2CDev
Chúng là hai thư viện tuyệt vời sẽ thực hiện công việc nặng nhọc!
Thêm chi tiết về neopixels tại đây
Sau đó tải xuống và cài đặt thư viện của tôi từ đây hoặc sao chép nó từ bên dưới:
#include "I2Cdev.h"
#include #include "MPU6050_6Axis_MotionApps20.h" #include "Wire.h" #define NEOPIXED_CONTROL_PIN 6 #define NUM_LEDS 24 const int MAX_ANGLE = 45; const int LED_OFFSET = 12; MPU6050 mpu; Dải Adafruit_NeoPixel = Adafruit_NeoPixel (NUM_LEDS, NEOPIXED_CONTROL_PIN, NEO_RBG + NEO_KHZ800); unsigned long lastPrintTime = 0; khởi tạo bool = false; // đặt true nếu DMP init thành công uint8_t mpuIntStatus; // giữ byte trạng thái ngắt thực tế từ MPU uint8_t devStatus; // trả về trạng thái sau mỗi hoạt động của thiết bị (0 = thành công,! 0 = lỗi) uint16_t packetSize; // kích thước gói tin DMP dự kiến (mặc định là 42 byte) uint16_t FifoCount; // đếm tất cả các byte hiện có trong FIFO uint8_t FifoBuffer [64]; // Bộ đệm lưu trữ FIFO Quaternion q; // [w, x, y, z] thùng chứa quaternion Trọng lực VectorFloat; // [x, y, z] vector trọng lực float ypr [3]; // [yaw, pitch, roll] thùng chứa yaw / pitch / roll và véc tơ trọng lực dễ bay hơi bool mpuInterrupt = false; // cho biết chân ngắt MPU có tăng cao hay không
void setup ()
{Serial.begin (9600); Serial.println ("Chương trình đã bắt đầu"); khởi tạo = khởi tạoGyroscope (); dải.begin (); } void loop () {if (! khởi tạo) {return; } mpuInterrupt = false; mpuIntStatus = mpu.getIntStatus (); FifoCount = mpu.getFIFOCount (); if (hasFifoOverflown (mpuIntStatus, FifoCount)) {mpu.resetFIFO (); trở lại; } if (mpuIntStatus & 0x02) {while (FifoCount <packetSize) {FifoCount = mpu.getFIFOCount (); } mpu.getFIFOBytes (FifoBuffer, packetSize); FifoCount - = packetSize; mpu.dmpGetQuaternion (& q, FifoBuffer); mpu.dmpGetGravity (& trọng lực, & q); mpu.dmpGetYawPitchRoll (năm, & q, & trọng lực); redrawLeds (ypr [0] * 180 / M_PI, ypr [1] * 180 / M_PI, ypr [2] * 180 / M_PI); }} boolean hasFifoOverflown (int mpuIntStatus, int FifoCount) {return mpuIntStatus & 0x10 || số lượng năm mươi == 1024; } void redrawLeds (int x, int y, int z) {x = bindin (x, -1 * MAX_ANGLE, MAX_ANGLE); y = ràng buộc (y, -1 * MAX_ANGLE, MAX_ANGLE); if (y 0) {lightLeds (y, z, 0, 5, 0, 89); } else if (y <0 và z 0 và z 0 và z> 0) {lightLeds (y, z, 20, 24, 89, 0); }} void lightLeds (int x, int y, int fromLedPosition, int toLedPosition, int fromAngle, int toAngle) {double angle = (atan ((double) abs (x) / (double) abs (y)) * 4068) / 71; int ledNr = map (angle, fromAngle, toAngle, fromLedPosition, toLedPosition); printDebug (x, y, ledNr, angle); uint32_t màu; for (int i = 0; i position + LED_OFFSET) {trả về vị trí + LED_OFFSET; } trả về vị trí + LED_OFFSET - NUM_LEDS; } void printDebug (int y, int z, int lightLed, int angle) {if (millis () - lastPrintTime <500) {return; } Serial.print ("a ="); Serial.print (angle); Serial.print (";"); Serial.print ("ll ="); Serial.print (lightLed); Serial.print (";"); Serial.print ("y ="); Serial.print (y); Serial.print (";"); Serial.print ("z ="); Serial.print (z); Serial.println (";"); lastPrintTime = millis (); } bool khởi tạoGyroscope () {Wire.begin (); TWBR = 24; mpu.initialize (); Serial.println (mpu.testConnection ()? F ("Kết nối MPU6050 thành công"): F ("Kết nối MPU6050 không thành công")); Serial.println (F ("Đang khởi tạo DMP…")); devStatus = mpu.dmpInitialize (); mpu.setXGyroOffset (220); mpu.setYGyroOffset (76); mpu.setZGyroOffset (-85); mpu.setZAccelOffset (1788); if (devStatus! = 0) {Serial.print (F ("Khởi tạo DMP không thành công (mã")); Serial.println (devStatus); return false;} mpu.setDMPEnabled (true); Serial.println (F ("Đang bật phát hiện ngắt (ngắt ngoài Arduino 0)… ")); attachmentInterrupt (0, dmpDataReady, RISING); mpuIntStatus = mpu.getIntStatus (); Serial.println (F (" DMP đã sẵn sàng! Đang chờ ngắt đầu tiên… ")); packSize = mpu.dmpGetFIFOPacketSize (); return true;} void dmpDataReady () {mpuInterrupt = true;}
Tải lên mã:
Sử dụng bộ điều hợp FTDI tải mã lên arduino.
Kết nối nguồn điện (pin)
Sự định cỡ:
Điều quan trọng nhất để hiệu chỉnh ở đây là hằng số "LED_OFFSET". Trong ví dụ của tôi là 12. Bạn cần điều chỉnh điều này từ 0 đến 23 để sau khi cấp nguồn cho bảng, đèn led sẽ sáng theo hướng bạn nghiêng bảng.
Nếu bạn muốn tìm hiểu thêm chi tiết về cách nó hoạt động, hãy xem bước cuối cùng
Bước 4: Cách thức hoạt động (tùy chọn)
Đầu tiên là một chút thông tin về con quay hồi chuyển MPU6050. Đây là một con quay hồi chuyển MEMS (MEMS là viết tắt của Microelectromechanical systems).
Mỗi loại con quay hồi chuyển MEMs có một số dạng thành phần dao động mà từ đó có thể phát hiện ra sự tích tụ và do đó thay đổi hướng. Điều này là do, theo định luật bảo toàn chuyển động, một vật dao động thích tiếp tục dao động trong cùng một mặt phẳng, và bất kỳ độ lệch dao động nào cũng có thể được sử dụng để suy ra sự thay đổi hướng.
Con quay hồi chuyển cũng chứa một bộ vi điều khiển của riêng nó để tính toán cuộn, cao độ và ngáp thông qua một số phép toán ưa thích.
Nhưng dữ liệu thô của con quay hồi chuyển bị nhiễu và trôi dạt, vì vậy chúng tôi đã sử dụng một thư viện bên ngoài để làm phẳng mọi thứ và cung cấp cho chúng tôi dữ liệu sạch có thể sử dụng được.
Neopixel là các đèn LED RGB có thể định địa chỉ riêng và được xâu chuỗi thành các dải và vòng. Chúng hoạt động trên nguồn 5V và chúng chứa mạch riêng của chúng, vì vậy bạn chỉ cần cấp nguồn cho các neopixel và giao tiếp với chúng bằng đường dữ liệu. Giao tiếp được thực hiện với một dòng dữ liệu duy nhất chứa đồng hồ và dữ liệu (chi tiết hơn tại đây). Adafruit cung cấp một thư viện sạch để tương tác với các vòng neopixel.
Mật mã
Bên trong hàm l oop (), thư viện MPU6050_6Axis_MotionApps20 được gọi. Khi thư viện có dữ liệu mới từ con quay hồi chuyển, nó gọi là redrawLeds (x, y, z) với 3 đối số đại diện cho yaw, pitch và roll
Inside redrawLeds ():
- chúng tôi đang tập trung vào hai trục: y, z
- chúng tôi đang hạn chế cả hai trục từ -MAX_ANGLE đến + MAX_ANGLE, chúng tôi đã xác định góc tối đa là 45 và nó có thể thay đổi
- chúng tôi đang chia 360 độ thành 4 góc phần tư và gọi các hàm lightLeds () cho mỗi góc như sau:
* y âm, z dương góc phần tư đầu tiên sẽ điều khiển led từ 0 đến 5, góc sẽ từ 0 đến 89
* y âm, z âm điều khiển góc phần tư thứ hai của led từ 6 đến 12, góc sẽ từ 89 đến 0
* …Vân vân
- bên trong chức năng lightLeds
* Tôi đang tính toán một góc dựa trên hai trục bằng cách sử dụng arctangent (kiểm tra hình ảnh đính kèm)
* Tôi đang tính toán những gì dẫn đến hiển thị bằng cách sử dụng chức năng bản đồ arduino
* Tôi đang đặt lại tất cả dải đèn LED trừ hai đèn LED, một dải tương ứng với vị trí dẫn mà tôi đã tính toán trước đó và một vị trí dẫn trước đó (để hiển thị hiệu ứng mờ dần)
* Tôi đang sử dụng một hàm có tên normalizeLedPosition () để tính đến hiệu chuẩn neopixel. Việc hiệu chuẩn rất hữu ích vì vòng neopixel có thể xoay theo ý muốn và phải được căn chỉnh với con quay hồi chuyển
* mình cũng đang in trục kéo, led gì có ánh sáng và góc
Toán học
Tôi đã đính kèm một bức ảnh có vòng đèn led và hàm lượng giác dùng để xác định góc.
Đề xuất:
Nền tảng con quay hồi chuyển / Gimbal máy ảnh: 5 bước (có hình ảnh)
Nền tảng con quay hồi chuyển / Gimbal máy ảnh: Hướng dẫn này được tạo ra để đáp ứng yêu cầu dự án của Makecourse tại Đại học Nam Florida (www.makecourse.com)
Xúc xắc LED PCB sáu mặt có WIFI & Con quay hồi chuyển - PIKOCUBE: 7 bước (có hình ảnh)
Xúc xắc LED PCB sáu mặt có WIFI & Con quay hồi chuyển - PIKOCUBE: Xin chào các nhà sản xuất, đó là nhà sản xuất moekoe! Hôm nay tôi muốn hướng dẫn các bạn cách chế tạo một con xúc xắc LED thực sự dựa trên tổng số sáu PCB và 54 đèn LED. Bên cạnh cảm biến con quay hồi chuyển bên trong có thể phát hiện chuyển động và vị trí xúc xắc, khối lập phương đi kèm với một ESP8285-01F
Arduino Nano và Visuino: Chuyển đổi gia tốc thành góc từ cảm biến gia tốc và con quay hồi chuyển MPU6050 I2C: 8 bước (có hình ảnh)
Arduino Nano và Visuino: Chuyển đổi gia tốc thành góc từ cảm biến gia tốc kế và con quay hồi chuyển MPU6050 I2C: Một thời gian trước, tôi đã đăng một hướng dẫn về cách bạn có thể kết nối Cảm biến gia tốc, con quay hồi chuyển và la bàn MPU9250 với Arduino Nano và lập trình nó với Visuino để gửi dữ liệu gói và hiển thị nó trên Phạm vi và Dụng cụ trực quan. Gia tốc kế gửi X, Y,
Hình dung chuyển động con quay hồi chuyển L3G4200D với máy xay sinh tố: 5 bước
Hình dung Chuyển động con quay hồi chuyển L3G4200D Với Máy xay sinh tố: Tôi đã mua một cảm biến con quay hồi chuyển L3G4200D khá rẻ từ eBay có thể phát hiện xoay 3 trục và phân phối nó thông qua giao diện I2C hoặc SPI. Tôi đã cố gắng sử dụng nó để phát hiện xoay ngang và xoay dọc trong thời gian thực. Điều này hóa ra khá khó
Universal, 2 Bộ ổn định hình ảnh con quay hồi chuyển: 6 bước (với Hình ảnh)
Universal, 2 Gyro Image Stabilizer: Bộ ổn định hình ảnh này có thể được sử dụng với bất kỳ ống kính và máy ảnh nào. Nó hoạt động theo cách giống như kính thiên văn Hubble luôn hướng vào cùng một vật thể trong thời gian phơi sáng nhiều ngày