Mục lục:

Thay đổi màu sắc ánh sáng ban đêm bằng Ardruino 101: 4 bước (có hình ảnh)
Thay đổi màu sắc ánh sáng ban đêm bằng Ardruino 101: 4 bước (có hình ảnh)

Video: Thay đổi màu sắc ánh sáng ban đêm bằng Ardruino 101: 4 bước (có hình ảnh)

Video: Thay đổi màu sắc ánh sáng ban đêm bằng Ardruino 101: 4 bước (có hình ảnh)
Video: Arduino | CẢM BIẾN MÀU SẮC TCS34725 2024, Tháng mười một
Anonim
Image
Image
Thay đổi màu sắc ánh sáng ban đêm bằng Ardruino 101
Thay đổi màu sắc ánh sáng ban đêm bằng Ardruino 101

Trong dự án này, bạn sẽ làm một chiếc đèn ngủ bằng ardruino, Adafruit neo rgb Strips và một máy in 3D.

Lưu ý rằng intructable này hoàn toàn dành cho dự án trường học của tôi. Mã cho dự án này dựa trên một dự án khác. Với điều đó đã nói, tôi không phải là một chuyên gia khi nói đến Ardruino.

Bước 1: Yêu cầu

Yêu cầu
Yêu cầu
Yêu cầu
Yêu cầu
Yêu cầu
Yêu cầu

Đối với dự án này, bạn sẽ cần phần cứng và công cụ sau

Phần cứng:

1 - ardruino101 (ở Hoa Kỳ) hoặc Genuino101 (bên ngoài Hoa Kỳ).

2 - Dải đèn led NeoPixel rgb từ adafruit (5 volt).

3 - Một đầu nối usb ardruino (đầu nối loại B đến A).

4 - Một phần mềm từ Ardruino, Ardruino IDE Trong hướng dẫn này, chúng tôi sẽ sử dụng phiên bản 1.8.5. Yêu cầu thư viện phần mềm là: 101, Adafruit NeoPixel và Madgwick.

5 -Và một đối tượng để chứa phần cứng của bạn. Trong trường hợp này, tôi sẽ sử dụng máy in 3D. Tệp cho bản in 3D này nằm trong phần mô tả được gọi là "Đầu đèn". Lưu ý rằng định dạng tệp này chưa sẵn sàng để in 3D. Tùy thuộc vào máy in 3D của bạn, trước tiên bạn phải chạy phần mềm in 3d được chỉ định trên đối tượng 3D trước. Đôi khi tỷ lệ của bản in 3D sẽ được đặt lại. vì vậy hãy đảm bảo đường kính được đặt thành 11 cm x 11 cm.

6 - Bộ dụng cụ hàn cơ bản.

Bước 2: Tìm hiểu phần cứng và phần mềm

Ardruin / Genuino101

Chỉ cần làm rõ Ardruino101 và genuino101 hoàn toàn giống nhau bên cạnh tên. Cả hai đều có thông số kỹ thuật giống nhau và sử dụng cùng một phần mềm.

Ardruino101 sở hữu các thông số kỹ thuật cơ bản như ardruino UNO và hơn thế nữa. Tính năng chính của ardruino101 là gia tốc kế và con quay hồi chuyển mà chúng tôi sẽ sử dụng trong dự án của mình. Ngoài ra, loại ardruino này có thư viện mã duy nhất được gọi là CurrieIMU (Đơn vị đo lường nội bộ) được bao gồm trong phần mở rộng thư viện 101.

Với điều đó, chúng ta hãy nói về phần mềm.

Phần mềm và thư viện

Ardruino IDE sử dụng python làm mã nguồn chính của nó. nó cũng là bản mã chính nơi hầu hết ardruino chạy. Có rất nhiều hướng dẫn trực tuyến về cách sử dụng phần mềm này, vì vậy tôi khuyên bạn nên nghiên cứu những hướng dẫn đó trước nếu bạn chưa quen với chương trình này.

Như đã nói, các thư viện chúng tôi đang sử dụng như sau:

Từ menu Phác thảo,> Bao gồm Thư viện> Quản lý Thư viện… Trong hộp nhập văn bản, hãy nhập

- 101 Khi khởi động, ardruino 101 không được tự động đưa vào ardruino IDE. Chúng tôi cần phần mở rộng thư viện này để viết mã loại ardruino của chúng tôi.

-Adafruit NeoPixel để mã các dải pixel Neo của chúng tôi.

-Madgwick Để đọc dữ liệu thô và tính toán dữ liệu này thành thô, cao độ và cuộn.

Dải RGB -eo RGB

Loại tôi sẽ sử dụng là điện áp 5 hoặc loại 5v. Với 5v này, tôi không cần một nguồn điện mở rộng để điều khiển các dải của mình. Thay vào đó, tôi sẽ sử dụng ardruino của mình làm nguồn điện để điều khiển và thắp sáng các dải.

Dưới đây là một số mẹo bạn cần biết trước khi bắt đầu sử dụng dải này.

Đầu tiên, bạn cần một dải đèn LED Neodigital RGB từ quả adafruit. Loại dải này có thể kiểm soát được bằng cách sử dụng mã. Tiếp theo bạn cần biết là có một mặt sau và một mặt trước trên dải này. Mặt sau và mặt trước này rất quan trọng đối với quá trình hàn. Đảm bảo rằng bạn đã hàn mặt trước nơi phím mũi tên hướng ra khỏi đầu.

Đây là hướng dẫn về cách sử dụng chúng.

Có 3 điểm hàn bạn cần lưu ý Kết nối đất (GND), Kết nối điện áp (V) và Kết nối chân (DIN).

Bước 3: Thiết lập các thành phần

Thiết lập các thành phần
Thiết lập các thành phần
Thiết lập các thành phần
Thiết lập các thành phần
Thiết lập các thành phần
Thiết lập các thành phần

Đầu tiên, bạn cần in 3d thành phần mà bạn có thể tìm thấy trong các yêu cầu. Trong trường hợp này, tôi sẽ sử dụng PLA. Đảm bảo đường kính của vật thể là 11cm x 11cm. Wil này đảm bảo rằng ardruino và các dải sẽ phù hợp với shpere. Lưu ý rằng mỗi máy in 3D sử dụng phần mềm khác nhau để tính toán quá trình in của nó. Như đã nói, tệp bạn sử dụng có thể được chia tỷ lệ khác nhau, vì vậy hãy ghi nhớ điều đó.

Thứ hai sau khi in, hãy đảm bảo rằng các thành phần có thể đóng lại. Các bản in 3D cùng nhau tạo thành một hình cầu. Chúng phải vừa vặn. Nếu nắp đậy bị mất thì hãy dán một số băng dính vào mặt trong để nắp được lấp đầy. Và nếu nó là dày, hãy sử dụng giấy nhám.

Thứ ba, xiên cho ardruino và các dải khá dễ dàng. Bạn sẽ sử dụng 3 dây để kết nối các dải với ardruino. Lưu ý rằng những vị trí duy nhất tôi hàn là trên các dải. không phải trên chính Ardruino.

GND chuyển đến GND

DIN đi đến một Ghim (trong trường hợp của chúng tôi là pin6 trên ardruino)

5V chuyển sang 5V

Đảm bảo rằng số lượng dải đèn led bạn sử dụng là giới hạn ở mức 30. Sau đó, nó sẽ không thực thi đúng mã. Bạn có thể chỉ cần cắt bất kỳ dải nào chưa được cắt hiển thị với một dấu hiệu cắt kéo.

Evrything thứ tư phải vừa vặn trong hình cầu. Bạn có thể giống như tôi đã tạo một giao điểm giữa 1 trong các bản in 3d để nhìn thấy máng và đặt một miếng nhựa có rãnh nhìn thấy ở trên cùng.

Bước 4: Mã hóa

Vì vậy, bây giờ bạn sẽ có tất cả các thành phần cần thiết trong thư viện của mình.

Đây là mã bạn cần để chạy dự án. Kết quả sẽ giống như liên kết video tôi gửi trong trang này.

Nguồn của mã này có thể được tìm thấy ở đây. Dự án này cũng bao gồm các bước cần thiết để hiểu rõ hơn về mã và mật số đằng sau việc sử dụng.

#include #include #include #include

#define PIN 6 // 11 pixel NeoPixel Strip

#define PIN1 7 // 1 pixel NeoPixel Strip #define NUMPIXELS 30 // Numer of píxels #define SAMPLE_RATE 25 // Tốc độ lấy mẫu cho gia tốc kế và con quay hồi chuyển

// Cấu hình Madgwick

Bộ lọc Madgwick; dài không dấu microsPerReading, microsPrevious; float accelScale, gyroScale;

// Cấu hình NeoPixel

Adafruit_NeoPixel pixel = Adafruit_NeoPixel (NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); Adafruit_NeoPixel pixelStatus = Adafruit_NeoPixel (1, 7, NEO_GRB + NEO_KHZ800);

// Không gian màu

RGBConverter rgbConverter; nhân đôi h = 1; đôi s = 1; gấp đôi v = 1; byte rgb [3];

// Đèn chuyển động trạng thái

// Trạng thái 0 -> Chọn Hue - Pitch // Trạng thái 1 -> Chọn Bão hòa - Cuộn // Trạng thái 2 -> Chọn Giá trị - Yaw // Trạng thái 3 -> Sửa lỗi biến màu int statusLamp = 0;

void setup () {

Serial.begin (9600);

// khởi động IMU và bộ lọc

CurieIMU.begin (); CurieIMU.setGyroRate (SAMPLE_RATE); CurieIMU.setAccelerometerRate (SAMPLE_RATE); filter.begin (SAMPLE_RATE);

// Đặt phạm vi gia tốc kế thành 2G

CurieIMU.setAccelerometerRange (2); // Đặt phạm vi con quay hồi chuyển thành 250 độ / giây CurieIMU.setGyroRange (250);

CurieIMU.autoCalibrateAccelerometerOffset (X_AXIS, 0);

CurieIMU.autoCalibrateAccelerometerOffset (Y_AXIS, 0); CurieIMU.autoCalibrateAccelerometerOffset (Z_AXIS, 1); CurieIMU.autoCalibrateGyroOffset ();

CurieIMU.attachInterrupt (eventCallback);

CurieIMU.setDetectionThreshold (CURIE_IMU_TAP, 950); CurieIMU.interrupts (CURIE_IMU_TAP);

// khởi tạo các biến để tăng tốc độ cập nhật nhằm điều chỉnh tốc độ

microsPerReading = 1000000 / SAMPLE_RATE; microsPrevious = micros ();

// Init NeoPixel 11

pixel.begin (); pixel.show ();

// Init NeoPixel 1

pixelStatus.begin (); pixel.show ();

// Hiển thị trạng thái bằng px

setStatusPixel (statusLamp); }

void loop () {

int aix, aiy, aiz; // gia tốc kế int gix, giy, giz; rìu phao, ay, az; float gx, gy, gz; cuộn phao, cao độ, yaw; static unsigned long microsNow;

// kiểm tra xem đã đến lúc đọc dữ liệu và cập nhật bộ lọc chưa

microsNow = micros (); if (microsNow - microsPrevious> = microsPerReading) {

// đọc dữ liệu thô từ CurieIMU

CurieIMU.readMotionSensor (aix, aiy, aiz, gix, giy, giz);

// chuyển đổi từ dữ liệu thô sang đơn vị trọng lực và độ / giây

ax = convertRawAcceleration (aix); ay = convertRawAcceleration (aiy); az = convertRawAcceleration (aiz); gx = convertRawGyro (gix); gy = convertRawGyro (giy); gz = convertRawGyro (giz);

// cập nhật bộ lọc, tính toán hướng

filter.updateIMU (gx, gy, gz, ax, ay, az);

// in tiêu đề, cao độ và cuộn

roll = filter.getRoll (); pitch = filter.getPitch (); yaw = filter.getYaw ();

// tăng thời gian trước, vì vậy chúng tôi giữ tốc độ phù hợp

microsPrevious = microsPrevious + microsPerReading;

// Chỉ khi thay đổi Hue, Saturation hoặc Value

if (statusLamp chọn Hue if (pitch> = -90 && pitch <= 90 && statusLamp == 0) {// Biến đổi angle pitch = pitch + 90; // Lấy dây màu từ các góc h = pitch / 180.0;}

// Hạn chế góc

// chỉ cuộn -90º thành 90º = 180º // Trạng thái 1 -> chọn Độ bão hòa if (cuộn> = -90 && cuộn <= 90 && statusLamp == 1) {// Biến đổi góc cuộn = roll + 90; // Lấy dây màu từ các góc s = roll / 180.0; }

// Trạng thái 2 -> chọn Giá trị

if (statusLamp == 2) {// yaw 0º đến 360º v = yaw / 360.0; }

// Chuyển đổi thành rgb

rgbConverter.hsvToRgb (h, s, v, rgb); / * Serial.print ("Màu:"); Serial.print (h); Serial.print ("-"); Serial.print (các); Serial.print ("-"); Serial.print (v); Serial.println ("");

Serial.print ("Hướng:");

Serial.print (yaw); Serial.print (""); Serial.print (cao độ); Serial.print (""); Serial.println (cuộn); * /

// Thay đổi màu của các pixel

for (int px = 0; px <NUMPIXELS; px ++) {pixel.setPixelColor (px, pixel. Color (rgb [0], rgb [1], rgb [2])); pixel.show (); }}

// Hiển thị trạng thái bằng px

setStatusPixel (statusLamp); }}

float convertRawAcceleration (int aRaw) {

// vì chúng ta đang sử dụng phạm vi 2G // -2g ánh xạ tới giá trị thô là -32768 // + 2g ánh xạ tới giá trị thô là 32767

float a = (aRaw * 2.0) / 32768.0;

trả lại a; }

float convertRawGyro (int gRaw) {

// vì chúng tôi đang sử dụng phạm vi 250 độ / giây // -250 ánh xạ tới giá trị thô là -32768 // +250 ánh xạ tới giá trị thô là 32767

float g = (gRaw * 250.0) / 32768.0;

trả lại g; }

static void eventCallback ()

{// Phát hiện chạm trong tất cả các trục if (CurieIMU.getInterruptStatus (CURIE_IMU_TAP)) {Serial.print ("Tap phát hiện statusLamp:"); Serial.println (statusLamp);

// Thay đổi trạng thái

statusLamp ++;

// Trạng thái Init

if (statusLamp> 3) {statusLamp = 0; }}}

void setStatusPixel (int statusPx)

{switch (statusPx) {case 0: pixelStatus.setPixelColor (0, pixelStatus. Color (150, 0, 0)); pixelStatus.show (); nghỉ; trường hợp 1: pixelStatus.setPixelColor (0, pixelStatus. Color (0, 150, 0)); pixelStatus.show (); nghỉ; trường hợp 2: pixelStatus.setPixelColor (0, pixelStatus. Color (0, 0, 150)); pixelStatus.show (); nghỉ; trường hợp 3: pixelStatus.setPixelColor (0, pixelStatus. Color (0, 0, 0)); pixelStatus.show (); nghỉ;

}

}

Đề xuất: