Mundarija:
2025 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2025-01-23 15:14
Biz bu kamalak loyihasini boshqariladigan tasodifiy effektlarni yaratadigan turli xil "shovqin" texnikasi yordamida yaratdik. Agar rang qo'shilsa, kamalak effekti paydo bo'lishi mumkin. Unda Arduino Nano va 128x128 OLED -displey ishlatiladi. Biz effektlarni TFT kutubxonasi yordamida ko'rsatdik. Biz, shuningdek, non paneli va bir nechta simlar kabi turli xil komponentlardan foydalanganmiz.
1 -qadam: simlarni ulash
Eng asosiy vazifa OLED -ni Arduino -ga ulash edi. Biz GND va VCC ni non taxtasidagi tegishli avtobuslarga uladik; SCL raqamli pin 13 ga; SDA raqamli pin 11gacha; RES raqamli pin 8 ga; DC to raqamli pin 9; CS raqamli pin 10 -ga va nihoyat Arduino -da BL -dan 3.3V gacha. Arduino -dan 5v va GND pinlari yordamida biz butun non taxtasini quvvat bilan ta'minladik.
2 -qadam: Yumshoq shovqin
TFT displeyiga qo'yiladigan talablarni ishga tushirgandan so'ng. Yumshoq shovqin effektini yaratish uchun bizga birinchi navbatda asosiy shovqin funktsiyasi kerak edi. Bu x va y qiymatlari asosida 0 dan 1 gacha bo'lgan tasodifiy qiymatni qaytaradi. Shuni ta'kidlash kerakki, kompyuter hech qachon chindan ham tasodifiy natija chiqara olmaydi va bu tasodifiylikka sonni iloji boricha o'zgartirish orqali erishiladi., shuning uchun tenglamadagi juda katta sonlar.
suzuvchi shovqin (int x, int y) {int n; n = x + y * 57; n += (n << 13) ^ n; qaytish (1.0 - ((n * ((n * n * 15731) + 789221) + 1376312589) & 0x7fffffff) / 1073741824.0); }
Biz shovqinni boshqa funktsiya bilan "silliqlaymiz". Bunga faqat funktsiyaga berilgan koordinataning natijasiga emas, balki uning atrofidagi koordinatalarga asoslangan qiymatni ishlab chiqarish orqali erishiladi. Natijada, bir -biriga yaqin joylashgan koordinatalar xuddi shunday qiymat hosil qiladi.
float smoothNoise (float x, float y) {float fractX = x - (int) x; float fractY = y - (int) y; int x1 = ((int) (x) + shovqin kengligi) % shovqin kengligi; int y1 = ((int) (y) + shovqin balandligi) % shovqin balandligi; int x2 = (x1 + noiseWidth - 1) % noiseWidth; int y2 = (y1 + shovqin balandligi - 1) % shovqin balandligi; float qiymati = 0,0f; qiymat += fractX * fractY * shovqin (x1, y1); qiymat += (1 - fractX) * fractY * shovqin (x2, y1); qiymat += fractX * (1 - fractY) * shovqin (x1, y2); qiymat += (1 - fractX) * (1 - fractY) * shovqin (x2, y2); qaytarish qiymati; }
3 -qadam: Yumshoq shovqin yordamida effektlar
Bu bilan biz ikkita effekt yaratdik. Buning uchun biz OLED -dagi har bir pikselni aylanib chiqdik va bu piksellarning x va y koordinatalariga asoslangan tasodifiy shovqin qiymatini oldik. Bu effektlarning birinchisi, biz hosil qilingan qiymatdan foydalanib, rangni tanladik va shu pikselni yuqorida aytib o'tilgan rangga bo'yadik. Ikkinchi effekt ham xuddi shunday ishlab chiqarilgan, lekin biz rangni shovqin qiymatiga ko'paytirdik. Bu naqshga yanada soyali effekt berdi. Amaldagi kod quyida ko'rsatilgan:
void Noise2n3 (bool Noisy) {for (int y = 0; y <noiseHeight; y ++) {for (int x = 0; x 8) absNoise = 8; if (Shovqinli) setNoisyColour (ranglar [absNoise], shovqin); else setBlockColour (ranglar [absNoise]); TFTscreen.point (x, y); }}} void setNoisyColour (Rang rangi, suzuvchi shovqin) {TFTscreen.stroke (colour.red * shovqin, colour.green * shovqin, colour.blue * shovqin); } bo'sh bo'sh setBlockColour (Rang rangi) {TFTscreen.stroke (colour.red, colour.green, colour.blue); }
4 -qadam: Tasodifiy gradyan effektlari
Tasodifiy gradyan hosil qiladigan ikkita effekt mavjud. Birinchi effekt piksellarni rgb rangiga nisbatan joylashtirib, asta -sekin ekranga gradient naqshini ko'rsatadi. Ikkinchisi birinchisi bilan bir xil rangdagi piksellardan foydalanadi, lekin ularni ekran bo'ylab diagonal gradyan hosil qilib, belgilangan tartibda joylashtiradi.
Mana birinchi (ranglarga qarab):
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 = CurrentColour [z] [0]; G = CurrentColour [z] [1]; B = CurrentColour [z] [2]; for (int x = 0; x <128; x ++) {for (int y = 0; y <128; y ++) {int R_Lower = R - ((x+y) / 4); agar (R_Lower = 255) {R_Higher = 254; } int R_Offset = tasodifiy (R_Lower, R_Higher); int G_Lower = G - ((x + y) / 4); agar (G_Lower = 255) {G_Higher = 254; } int G_Offset = tasodifiy (G_Lower, G_Higher); int B_Lower = B - ((x + y) / 4); agar (B_Lower <1) {B_Lower = 0; } int B_Higher = B + ((x + y) / 4); agar (B_Higher> = 255) {B_Higher = 254; } int B_Offset = tasodifiy (B_Lower, B_Higher); int mult = 2; agar (z == 1) mult = 1; TFTscreen.stroke (R_Offset * ko'p, G_Offset * ko'p, B_Offset * ko'p); 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))); }}}}
Va ikkinchisi (tartibli ta'sir):
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 = CurrentColour [z] [0]; G = CurrentColour [z] [1]; B = CurrentColour [z] [2]; for (int x = 0; x <128; x ++) {for (int y = 0; y <128; y ++) {int R_Lower = R - ((x+y) / 4); agar (R_Lower = 255) {R_Higher = 254; } int R_Offset = tasodifiy (R_Lower, R_Higher); int G_Lower = G - ((x + y) / 4); agar (G_Lower = 255) {G_Higher = 254; } int G_Offset = tasodifiy (G_Lower, G_Higher); int B_Lower = B - ((x + y) / 4); agar (B_Lower <1) {B_Lower = 0; } int B_Higher = B + ((x + y) / 4); agar (B_Higher> = 255) {B_Higher = 254; } int B_Offset = tasodifiy (B_Lower, B_Higher); int mult = 2; agar (z == 1) mult = 1; TFTscreen.stroke (R_Offset * ko'p, G_Offset * ko'p, B_Offset * ko'p); TFTscreen.point (x, y); }}}}
5 -qadam: Yakuniy natija
Oxir -oqibat, biz bu effektlarni kamalaklarning "slayd -shousi" ga birlashtirdik. Bunga erishish uchun biz har bir funktsiyani bir muncha vaqt ketma -ketlikda chaqirdik:
while (true) {Noise2n3 (false); Noise2n3 (haqiqiy); TFTscreen.background (0, 0, 0); Shovqin1 (); Shovqin4 (); }
Tavsiya:
Shovqinli budilnik: 3 qadam
Shovqinli budilnik: Men Tayvanda 13 yoshli talabaman, agar men bu ishni qanday yaxshilashni ayta olsang, iltimos, Arduino bilan bir narsa qilaman, iltimos, men uchun sharhlar qoldiring, shunda men yaxshiroq ishlay olaman. ) Bu soat siz uxlayotganingizda sizni uyg'otishi mumkin, lekin men
Micropython bilan TTGO (rangli) displey (TTGO T-displey): 6 qadam
Micropythonli TTGO (rangli) displey (TTGO T-displey): TTGO T-displeyi-ESP32 asosidagi, 1,14 dyuymli rangli displeyni o'z ichiga olgan taxta. Kengashni 7 dollardan kam bo'lgan mukofotga sotib olish mumkin (etkazib berish, banggoodda ko'rilgan mukofot). Bu ESP32 uchun ajoyib mukofot, shu jumladan displey
Shovqinli svetofor - DIY 3D bosilgan: 8 qadam (rasmlar bilan)
Shovqinli svetofor - DIY 3D bosilgan: Hamma jim ishlashni xohlaydi va yaxshi ish muhiti bo'lishi muhim. Biz bu loyihani ushbu taklifga erishish uchun qildik. Shovqinli svetofor JBni boshqaruvchi "svetofordan" iborat
Qanday qilib shovqinli asalarichilik qilish mumkin: 6 qadam
Qanday qilib shovqinli asalarichilik qilish mumkin: bu erda shovqinli ari qilishning oson va qiziqarli usuli. Uning pastki qismida tebranish dvigateli bor, bu esa asalarilarni shovqin va harakatga keltiradi. Kichik bolalar bilan (5-7) yoki katta bolalarga (8 va undan katta) kamroq nazorat bilan ishlash oson loyihadir. Bu yoritishni o'rgatadi
Arduino yordamida P10 LED displey modulidagi displey harorati: 3 qadam (rasmlar bilan)
Arduino yordamida P10 LED displey modulidagi displey harorati: Oldingi qo'llanmada Arduino va DMD ulagichi yordamida nuqta matritsali LED displeyli P10 modulida matnni qanday ko'rsatish kerakligi ko'rsatilgan. Ushbu qo'llanmada biz P10 modulini displey vositasi sifatida ishlatib, oddiy loyiha qo'llanmasini beramiz