Mục lục:
2025 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2025-01-23 15:15
Chúng tôi đã tạo ra dự án cầu vồng này bằng cách sử dụng các kỹ thuật 'nhiễu' khác nhau, tạo ra các hiệu ứng ngẫu nhiên có kiểm soát. Bằng cách thêm một số màu, hiệu ứng cầu vồng có thể được tạo ra. Nó sử dụng Arduino Nano và màn hình OLED 128x128. Chúng tôi đã hiển thị các hiệu ứng bằng thư viện TFT. Chúng tôi cũng sử dụng một số thành phần linh tinh như bảng mạch bánh mì và một vài dây dẫn.
Bước 1: Đấu dây
Nhiệm vụ cơ bản nhất là đấu dây màn hình OLED với Arduino. Chúng tôi đã kết nối GND và VCC với các bus tương ứng trên bảng mạch bánh mì; SCL đến chân số 13; SDA đến chân số 11; RES đến chân số 8; DC đến chân số 9; CS đến chân số 10 và cuối cùng là BL thành 3.3V trên Arduino. Sử dụng các chân 5v và GND từ Arduino, chúng tôi đã có thể cấp nguồn cho toàn bộ bảng mạch bánh mì.
Bước 2: Làm mịn tiếng ồn
Sau khi khởi tạo các yêu cầu cho màn hình TFT. Để tạo ra hiệu ứng tiếng ồn mượt mà, trước tiên chúng tôi cần một chức năng tiếng ồn cơ bản. Điều này trả về một giá trị tương đối ngẫu nhiên giữa 0 và 1 dựa trên các giá trị x và y được chuyển vào. Điều quan trọng cần lưu ý là máy tính không bao giờ có thể tạo ra kết quả thực sự ngẫu nhiên và sự ngẫu nhiên này chỉ đạt được bằng cách thay đổi số càng nhiều càng tốt, do đó các số rất lớn trong phương trình.
nhiễu float (int x, int y) {int n; n = x + y * 57; n + = (n << 13) ^ n; return (1.0 - ((n * ((n * n * 15731) + 789221) + 1376312589) & 0x7fffffff) / 1073741824.0); }
Sau đó, chúng tôi 'làm dịu' tiếng ồn bằng một chức năng khác. Điều này đạt được bằng cách tạo ra một giá trị không chỉ dựa trên kết quả từ tọa độ được truyền vào hàm, mà còn cả các tọa độ xung quanh. Do đó, các tọa độ gần nhau tạo ra một giá trị tương tự.
float SmoothNoise (float x, float y) {float fractX = x - (int) x; float fractY = y - (int) y; int x1 = ((int) (x) + noiseWidth)% noiseWidth; int y1 = ((int) (y) + noiseHeight)% noiseHeight; int x2 = (x1 + noiseWidth - 1)% noiseWidth; int y2 = (y1 + noiseHeight - 1)% noiseHeight; giá trị float = 0.0f; giá trị + = fractX * fractY * nhiễu (x1, y1); giá trị + = (1 - fractX) * fractY * nhiễu (x2, y1); giá trị + = fractX * (1 - fractY) * nhiễu (x1, y2); giá trị + = (1 - fractX) * (1 - fractY) * nhiễu (x2, y2); giá trị trả về; }
Bước 3: Hiệu ứng sử dụng tiếng ồn mượt mà
Với điều này, chúng tôi tạo ra hai hiệu ứng. Để làm điều này, chúng tôi lặp lại từng pixel trên OLED và lấy một giá trị nhiễu ngẫu nhiên dựa trên tọa độ x và y của các pixel này. Hiệu ứng đầu tiên chúng tôi tạo ra bằng cách sử dụng giá trị đã tạo để chọn một màu và tô màu pixel đó bằng màu đã nói ở trên. Hiệu ứng thứ hai được tạo ra theo cách tương tự, nhưng chúng tôi cũng nhân màu sắc với giá trị nhiễu được tạo ra. Điều này đã làm cho mẫu có hiệu ứng bóng mờ hơn. Mã được sử dụng được hiển thị bên dưới:
void Noise2n3 (bool Noisy) {for (int y = 0; y <noiseHeight; y ++) {for (int x = 0; x 8) absNoise = 8; if (Noisy) setNoisyColour (Colors [absNoise], nhiễu); else setBlockColour (màu sắc [absNoise]); TFTscreen.point (x, y); }}} void setNoisyColour (Color color, float noise) {TFTscreen.stroke (colour.red * noise, colour.green * noise, colour.blue * noise); } void setBlockColour (Color color) {TFTscreen.stroke (colour.red, colour.green, colour.blue); }
Bước 4: Hiệu ứng Gradient ngẫu nhiên
Có hai hiệu ứng tạo ra một gradient ngẫu nhiên. Hiệu ứng đầu tiên đặt các pixel liên quan đến màu rgb của chúng, từ từ hiển thị một mẫu gradient lên màn hình. Thứ hai sử dụng các pixel có màu giống như thứ nhất, nhưng đặt chúng theo một thứ tự cố định, tạo ra một gradient đường chéo dọc theo màn hình.
Đây là cái đầu tiên (dựa trên màu sắc):
void Noise1 () {for (int z = 0; z <3; z ++) {TFTscreen.background (0, 0, 0); int CurrentColour [3] [3] = {{64, 35, 26}, {24, 64, 34}, {20, 18, 64}}; R = Màu hiện tại [z] [0]; G = Màu sắc hiện tại [z] [1]; B = Màu hiện tại [z] [2]; for (int x = 0; x <128; x ++) {for (int y = 0; y <128; y ++) {int R_Lower = R - ((x + y) / 4); if (R_Lower = 255) {R_Higher = 254; } int R_Offset = random (R_Lower, R_Higher); int G_Lower = G - ((x + y) / 4); if (G_Lower = 255) {G_Higher = 254; } int G_Offset = random (G_Lower, G_Higher); int B_Lower = B - ((x + y) / 4); if (B_Lower <1) {B_Lower = 0; } int B_Higher = B + ((x + y) / 4); if (B_Higher> = 255) {B_Higher = 254; } int B_Offset = random (B_Lower, B_Higher); int mult = 2; if (z == 1) mult = 1; TFTscreen.stroke (R_Offset * mult, G_Offset * mult, B_Offset * mult); TFTscreen.point ((R_Offset * (B_Offset / 32)), (G_Offset * (B_Offset / 32))); TFTscreen.point ((G_Offset * (B_Offset / 32)), (R_Offset * (B_Offset / 32))); TFTscreen.point ((B_Offset * (G_Offset / 32)), (R_Offset * (G_Offset / 32))); }}}}
Và thứ hai (hiệu ứng có trật tự hơn):
void Noise4 () {for (int z = 0; z <3; z ++) {TFTscreen.background (0, 0, 0); int CurrentColour [3] [3] = {{64, 35, 26}, {24, 64, 34}, {20, 18, 64}}; R = Màu hiện tại [z] [0]; G = Màu sắc hiện tại [z] [1]; B = Màu hiện tại [z] [2]; for (int x = 0; x <128; x ++) {for (int y = 0; y <128; y ++) {int R_Lower = R - ((x + y) / 4); if (R_Lower = 255) {R_Higher = 254; } int R_Offset = random (R_Lower, R_Higher); int G_Lower = G - ((x + y) / 4); if (G_Lower = 255) {G_Higher = 254; } int G_Offset = random (G_Lower, G_Higher); int B_Lower = B - ((x + y) / 4); if (B_Lower <1) {B_Lower = 0; } int B_Higher = B + ((x + y) / 4); if (B_Higher> = 255) {B_Higher = 254; } int B_Offset = random (B_Lower, B_Higher); int mult = 2; if (z == 1) mult = 1; TFTscreen.stroke (R_Offset * mult, G_Offset * mult, B_Offset * mult); TFTscreen.point (x, y); }}}}
Bước 5: Kết quả cuối cùng
Cuối cùng, chúng tôi kết hợp những hiệu ứng này thành một loại 'trình chiếu' cầu vồng. Để đạt được điều này, chúng tôi chỉ cần gọi từng hàm sau hàm kia trong vòng lặp while:
while (true) {Noise2n3 (false); Noise2n3 (true); TFTscreen.background (0, 0, 0); Tiếng ồn1 (); Tiếng ồn4 (); }
Đề xuất:
Arduino & Neopixel Coke Bottle Rainbow Party Light: 7 bước (có hình ảnh)
Arduino & Neopixel Coke Bottle Party Light: Vì vậy, con trai của tôi, Doon đã phát hiện ra một bữa tiệc ánh sáng cực kỳ thú vị được làm từ những chai coke cũ và phần nội bộ của Gậy phát sáng, và hỏi liệu chúng tôi có thể làm một chiếc cho kỳ thi học sắp tới của cậu ấy là Over Blowout PartAYYY !! ! Tôi nói chắc chắn, nhưng bạn không muốn có một số điều
Noise ~ Rompler / Cicada ~: 6 bước
Tiếng ồn ~ Rompler / Ve sầu ~:
Usare Un Display Grande a 4 Cifre 8886 Display Con Wemos ESP8266 Arduino NodeMCU: 6 bước
Usare Un Display Grande a 4 Cifre 8886 Display Con Wemos ESP8266 Arduino NodeMCU: Questo progetto è un semplice esempio che mostra come collegare un display del tipo 8886-Display e, per comodità nostra, un Wemos D1 - ma potrebbe essere un Arduino o un NodeMCU o qualsiasi altro vi điều khiển che bang usando per un progetto.Esi
Neopixel Ws2812 LED cầu vồng phát sáng với M5stick-C - Chạy Rainbow trên Neopixel Ws2812 bằng M5stack M5stick C Sử dụng Arduino IDE: 5 bước
Neopixel Ws2812 LED cầu vồng phát sáng với M5stick-C | Chạy Rainbow trên Neopixel Ws2812 Sử dụng M5stack M5stick C Sử dụng Arduino IDE: Xin chào các bạn trong phần hướng dẫn này, chúng tôi sẽ tìm hiểu cách sử dụng đèn LED neopixel ws2812 hoặc dải đèn LED hoặc ma trận dẫn hoặc vòng dẫn với bảng phát triển m5stack m5stick-C với Arduino IDE và chúng tôi sẽ thực hiện một mô hình cầu vồng với nó
Cách tạo đồng hồ thời gian thực bằng Arduino và màn hình TFT - Arduino Mega RTC với màn hình TFT 3,5 inch: 4 bước
Cách tạo đồng hồ thời gian thực bằng Arduino và màn hình TFT | Arduino Mega RTC với màn hình TFT 3,5 inch: Truy cập kênh Youtube của tôi. 2560 và mô-đun RTC DS3231… .Trước khi bắt đầu… hãy kiểm tra video từ kênh YouTube của tôi..Lưu ý: - Nếu bạn đang sử dụng Arduin