Mục lục:
Video: ĐÈN KHÔNG DÂY MẶT TRỜI CÓ CÁNH TAY LINH HOẠT TỪ TỪ: 8 bước (có hình ảnh)
2025 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2025-01-13 06:58
Dự án này được làm từ một chiếc đèn hỏng & nodeMCU. Đèn trang trí này có thể điều chỉnh theo mọi hướng & gắn trên vật liệu từ tính hoặc đặt trên bàn. Nó có thể được điều khiển ở hai chế độ như sau:
- Chế độ điều khiển không dây, như liên kết YouTube bên dưới:
- Chế độ điều khiển tương tác, như liên kết YouTube bên dưới:
Bước 1: HÓA ĐƠN VẬT LIỆU
Danh sách B. O. M:
Đối với chế độ tương tác, tôi sử dụng MPU6050 để lấy dữ liệu con quay hồi chuyển từ NodeMCU để điều khiển màu của đèn.
Hình ảnh tư liệu cho dự án này:
Bước 2: MẠCH
Đây là mạch rất đơn giản, như sơ đồ Fritzing ở trên, với loại cực dương chung 1 Led RGB, ba điện trở dòng giới hạn R100 & MPU6050.
Chóa phản xạ được sử dụng từ bất kỳ đèn hỏng nào và được kết nối với đế nodeMCU bằng 2 bu lông hoặc dán chúng bằng keo chắc chắn.
Công việc lắp ráp:
Sơ đồ bên dưới:
Bước 3: CƠ SỞ THUẬT NGỮ - ARM LINH HOẠT
Cánh tay mềm có thể được tái sử dụng từ vòi nước mềm bị hỏng. Một cái gì đó như thế:
Bằng một số mẹo, chúng tôi cố gắng kết nối chúng với đế nam châm vĩnh cửu ở dưới cùng của cánh tay linh hoạt. Trên cùng, chúng tôi đã tạo một lỗ khoan để kết nối với bảng mạch và bộ sạc pin / năng lượng mặt trời, với phần đế này, chúng tôi có thể đặt đèn trên các bề mặt như bàn, sàn nhà….; hoặc nó có thể được gắn trên các vật liệu từ tính như cột thép, kết cấu thép.
Bước 4: MẶT TRỜI - BỘ SẠC PIN
Nó đến từ một chiếc đèn sạc bị hỏng. Tôi đã thêm một công tắc bật / tắt và dây nguồn cung cấp cho nodeMCU. Nó cũng có một ổ cắm cổng USB và một đầu cắm để sạc pin.
Bước 5: KẾT NỐI TẤT CẢ CÙNG NHAU
Kết nối tất cả các bộ phận: NodeMCU & gương phản xạ, pin mặt trời & pin, cánh tay linh hoạt với nhau.
KẾT THÚC
CHẾ ĐỘ SẠC
Bước 6: CHƯƠNG TRÌNH ĐIỀU KHIỂN TƯƠNG TÁC
Màu sắc sẽ được thay đổi khi chúng ta điều chỉnh cánh tay linh hoạt hoặc xoay đèn.
ĐÈN TƯƠNG TÁC
#bao gồm |
// Địa chỉ thiết bị MPU6050 Slave |
const uint8_t MPU6050SlaveAddress = 0x68; |
// Chọn chân SDA và SCL cho giao tiếp I2C - Chân mặc định trong WIRE LIBRARY: SCL - D1 & SDA - D2 trên NODEMCU |
// const uint8_t SCL = D1; |
// const uint8_t SDA = D2; |
const int R = 14; |
const int G = 12; |
const int B = 13; |
// MPU6050 vài địa chỉ đăng ký cấu hình |
const uint8_t MPU6050_REGISTER_SMPLRT_DIV = 0x19; |
const uint8_t MPU6050_REGISTER_USER_CTRL = 0x6A; |
const uint8_t MPU6050_REGISTER_PWR_MGMT_1 = 0x6B; |
const uint8_t MPU6050_REGISTER_PWR_MGMT_2 = 0x6C; |
const uint8_t MPU6050_REGISTER_CONFIG = 0x1A; |
const uint8_t MPU6050_REGISTER_GYRO_CONFIG = 0x1B; |
const uint8_t MPU6050_REGISTER_ACCEL_CONFIG = 0x1C; |
const uint8_t MPU6050_REGISTER_FIFO_EN = 0x23; |
const uint8_t MPU6050_REGISTER_INT_ENABLE = 0x38; |
const uint8_t MPU6050_REGISTER_ACCEL_XOUT_H = 0x3B; |
const uint8_t MPU6050_REGISTER_SIGNAL_PATH_RESET = 0x68; |
int16_t AccelX, AccelY, AccelZ, Nhiệt độ, GyroX, GyroY, GyroZ; |
void setup () { |
pinMode (R, OUTPUT); |
pinMode (G, OUTPUT); |
pinMode (B, OUTPUT); |
//Serial.begin(9600); |
Wire.begin (SDA, SCL); |
MPU6050_Init (); |
} |
void loop () { |
uint16_t Ax, Ay, Az, T, Gx, Gy, Gz; |
uint16_t Red, Green, Blue; |
Read_RawValue (MPU6050SlaveAddress, MPU6050_REGISTER_ACCEL_XOUT_H); |
// Lấy giá trị tuyệt đối |
Ax = myAbs (AccelX); |
Ay = myAbs (AccelY); |
Az = myAbs (AccelZ); |
// Chia tỷ lệ trong phạm vi |
Red = bản đồ (Ax, 0, 16384, 0, 1023); |
Green = bản đồ (Ay, 0, 16384, 0, 1023); |
Blue = bản đồ (Az, 0, 16384, 0, 1023); |
// In nối tiếp để kiểm tra |
//Serial.print("Red: "); Serial.print (Màu đỏ); |
//Serial.print("Green: "); Serial.print (Màu xanh lá cây); |
//Serial.print("Blue: "); Serial.print (Xanh lam); |
// Ghi analog sang LED |
analogWrite (R, Đỏ); // NS |
analogWrite (G, Xanh lục); // NS |
analogWrite (B, Xanh lam); // NS |
chậm trễ (200); |
} |
void I2C_Write (uint8_t deviceAddress, uint8_t regAddress, uint8_t data) { |
Wire.beginTransmission (deviceAddress); |
Wire.write (regAddress); |
Wire.write (dữ liệu); |
Wire.endTransmission (); |
} |
// Đọc tất cả 14 thanh ghi |
void Read_RawValue (uint8_t deviceAddress, uint8_t regAddress) { |
Wire.beginTransmission (deviceAddress); |
Wire.write (regAddress); |
Wire.endTransmission (); |
Wire.requestFrom (deviceAddress, (uint8_t) 14); |
AccelX = (((int16_t) Wire.read () << 8) | Wire.read ()); |
AccelY = (((int16_t) Wire.read () << 8) | Wire.read ()); |
AccelZ = (((int16_t) Wire.read () << 8) | Wire.read ()); |
Nhiệt độ = (((int16_t) Wire.read () << 8) | Wire.read ()); |
GyroX = (((int16_t) Wire.read () << 8) | Wire.read ()); |
GyroY = (((int16_t) Wire.read () << 8) | Wire.read ()); |
GyroZ = (((int16_t) Wire.read () << 8) | Wire.read ()); |
} |
// Định cấu hình MPU6050 |
void MPU6050_Init () { |
chậm trễ (150); |
I2C_Write (MPU6050SlaveAddress, MPU6050_REGISTER_SMPLRT_DIV, 0x07); |
I2C_Write (MPU6050SlaveAddress, MPU6050_REGISTER_PWR_MGMT_1, 0x01); |
I2C_Write (MPU6050SlaveAddress, MPU6050_REGISTER_PWR_MGMT_2, 0x00); |
I2C_Write (MPU6050SlaveAddress, MPU6050_REGISTER_CONFIG, 0x00); |
I2C_Write (MPU6050SlaveAddress, MPU6050_REGISTER_GYRO_CONFIG, 0x00); // đặt +/- 250 độ / giây đầy đủ thang đo |
I2C_Write (MPU6050SlaveAddress, MPU6050_REGISTER_ACCEL_CONFIG, 0x00); // đặt +/- 2g toàn quy mô |
I2C_Write (MPU6050SlaveAddress, MPU6050_REGISTER_FIFO_EN, 0x00); |
I2C_Write (MPU6050SlaveAddress, MPU6050_REGISTER_INT_ENABLE, 0x01); |
I2C_Write (MPU6050SlaveAddress, MPU6050_REGISTER_SIGNAL_PATH_RESET, 0x00); |
I2C_Write (MPU6050SlaveAddress, MPU6050_REGISTER_USER_CTRL, 0x00); |
} |
// Giá trị tuyệt đối |
float myAbs (float in) { |
return (in)> 0? (in):-(in); |
} |
xem raw CHƯƠNG TRÌNH ĐÈN TÁC ĐỘNG ĐƯỢC lưu trữ với ❤ bởi GitHub
Bước 7: CHƯƠNG TRÌNH ĐIỀU KHIỂN KHÔNG DÂY VÀ ỨNG DỤNG ANDROID
Một cách khác, chúng ta có thể sử dụng Ứng dụng Android để điều khiển đèn LED RGB với Android trong Mạng WiFi. Liên kết ứng dụng Android: Ứng dụng LED RGB điều khiển NODEMCU
Đối với chương trình Arduino, bạn có thể tham khảo:
microcontrollerkits.blogspot.com/2016/05/es…
Sau khi tải chương trình lên NodeMCU, lần chạy đầu tiên sẽ cung cấp cho chúng ta địa chỉ IP của NodeMCU trên bản in nối tiếp. Trong trường hợp của tôi, đó là: 192.164.1.39 tại cổng 80.
Giờ đây, chúng ta có thể điều khiển đèn không dây bằng máy tính xách tay / máy tính bảng / điện thoại di động bằng cách nhập địa chỉ ở trên vào Internet explorer.
Hoặc sử dụng ứng dụng Android: