Mundarija:
- 1 -qadam: materiallar
- 2 -qadam: qurilish rejasi
- 3 -qadam: Uskuna: O'chirish dizayni
- 4 -qadam: Uskuna: akril kesish
- 5 -qadam: Arduino dasturlash kodi
- 6 -qadam: tugagan ko'rinish
Video: Nuqta nurli naqsh: 6 qadam
2024 Muallif: John Day | [email protected]. Oxirgi o'zgartirilgan: 2024-01-30 13:26
Men "o'z qo'llarim bilan yorug'likni nazorat qila olamanmi va o'z xohishimni bildira olamanmi" degan fikrdan boshladim.
Bu "nuqta nurli naqsh" bo'lib, sizga o'zingizning rangingizni o'zingiz yaratishingiz, o'zingizning naqshlaringizni shu ranglar bilan loyihalashingiz va har xil animatsion effektlarni boshdan kechirishingiz mumkin.
1 -qadam: materiallar
- Arduino UNO x 13
- WS2901 yoki WS2811 pikselli LED tasmasi (130 LED)
- X 1 tugmachasi
- O'rnatish kaliti x 65
- Potentsial o'lchagich x 65
- Kamalak kabeli
- SMPS uchun etarli quvvat
- Supero'tkazuvchilar kabel
- Akril shaffof dumaloq novda (diametri 30 mm)
- Qora rangli akril taxta (5T) (500 mm*790 mm) x 2, (500 mm*35 mm) x 2, (790 mm*35 mm) x 2
2 -qadam: qurilish rejasi
3 -qadam: Uskuna: O'chirish dizayni
-
Akril plastinkani yuqoridagi tuzilishga o'xshab kesib oling. (2 -qadamga qarang)
- Potentsial o'lchagich teshigining yuqori va pastki qismiga bir bo'lak neo-pikselli LED qo'yilgan va jami 65 juft neo-pikselli LED ulangan.
- Bir juft neo-pikselli LEDlar bitta Arduino pinini yaratish uchun birlashtirilgan.
- Potentsial o'lchagich teshiklariga 65 ta potentsial o'lchagichni joylashtiring. (Uni neo-pikselli yuzaning qarama-qarshi tomoniga qo'ying.)
- O'chirish teshiklariga mos keladigan 65 ta kalitni ulang.
- Har bir o'n uchta zonaga jami o'n uchta Arduino UNO biriktirilgan bo'lib, ular bitta Arduino UNOga beshta 65 dona apparatni ulash uchun mo'ljallangan.
- Qo'shilgan rasmda ko'rsatilgandek, potentsial o'lchagichlarni, kalitlarni va neo-pikselli LEDlarni Arduino UNO pinlariga sim orqali ulang. (2 -qadamga qarang)
- Bir nechta Arduino UNO ning GND va 5V pinlari kabel simlariga yig'iladi, so'ngra tashqi quvvatga ulanadi. (2 -qadamga qarang)
- Havo bosimi yordamida changni olib tashlang.
4 -qadam: Uskuna: akril kesish
- Akril tayoqchani 50 mm uzunlikda kesib oling.
- Akril tayoqchaning bir tomoni o'lchash va o'lchash moslamasining nazorat qismiga mos keladigan chuqurlikka buriladi.
- Akril novda teshikdan bir oz kengroq kesilgan bo'lib, u potentsial o'lchagichga yaxshi joylashadi.
- Boshqa tomondan, yorug'lik toza o'tishi uchun ozgina zımpara beradi.
5 -qadam: Arduino dasturlash kodi
www.kasperkamperman.com/blog/arduino/ardui…
'hsb to rgb' kodi 를 참고 한 사이트
#qo'shing
// "adafruit_neopixel" yoki boshqalar
// 네오 픽셀 연결 핀 번호 번호
#PIN1ni belgilang 2 #PIN2ni aniqlang 3 #PIN3ni aniqlang 4 #PIN4ni aniqlang 5 #PIN5ni aniqlang 6
#defiks NUMPIXELS 2 // svetodiod
#ta'rif NUM_LIGHTS 5 // 작동 모듈 갯수 (네오 픽셀 오브젝트 갯수)
// 네오 픽셀 오브젝트 오브젝트 qator
Adafruit_NeoPixel piksel = {Adafruit_NeoPixel (NUMPIXELS, PIN1, NEO_GRB + NEO_KHZ800), Adafruit_NeoPixel (NUMPIXELS, PIN2, NEO_GRB + NEO_KHZ800), Adafruit_NeoPixel (NUMPIXELS, PIN3, NEO_GRB + NEO_KHZ800), Adafruit_NeoPixel (NUMPIXELS, PIN4, NEO_GRB + NEO_KHZ800), Adafruit_NeoPixel (NUMPIXELS, PIN5, NEO_GRB + NEO_KHZ800)}; //// 네오 픽셀 을 을 사용 사용 위해 객체 하나 하나 다 다 다 다. // 첫번째 인자 값 은 네오 네오 의 의 LED 의 // 두번째 인자 값 은 네오 픽셀 번호 번호 // 세번째 바뀌는 바뀌는 바뀌는 바뀌는 bayroq
//////////////////////////////////////////////////////////////
////// HSV yoki RGB, yoki GetRGB () va boshqalar.
const bayt dim_curve = {
0, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 16, 16, 16, 16, 17, 17, 17, 18, 18, 18, 19, 19, 19, 20, 20, 20, 21, 21, 22, 22, 22, 23, 23, 24, 24, 25, 25, 25, 26, 26, 27, 27, 28, 28, 29, 29, 30, 30, 31, 32, 32, 33, 33, 34, 35, 35, 36, 36, 37, 38, 38, 39, 40, 40, 41, 42, 43, 43, 44, 45, 46, 47, 48, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 68, 69, 70, 71, 73, 74, 75, 76, 78, 79, 81, 82, 83, 85, 86, 88, 90, 91, 93, 94, 96, 98, 99, 101, 103, 105, 107, 109, 110, 112, 114, 116, 118, 121, 123, 125, 127, 129, 132, 134, 136, 139, 141, 144, 146, 149, 151, 154, 157, 159, 162, 165, 168, 171, 174, 177, 180, 183, 186, 190, 193, 196, 200, 203, 207, 211, 214, 218, 222, 226, 230, 234, 238, 242, 248, 255, }; //
bo'sh getRGB (int tus, int sat, int val, int ranglar [5] [3], int indeksi) {
val = dim_curve [val]; sat = 255 - dim_curve [255 - o'tirish];
// 색조, 채도 및 밝기 (HSB /HSV) va RGB va boshqalar
// dim_curve 는 밝기 값 값 채도 (반전) 에서만 사용 사용. // 이것은 가장 자연스럽게 보입니다.
int r;
int g; int b; int bazasi;
agar (o'tirgan == 0) {
ranglar [indeks] [0] = val; ranglar [indeks] [1] = val; ranglar [indeks] [2] = val; } boshqa {
tayanch = ((255 - sat) * val) >> 8;
almashtirish (rang / 60) {
0 holat: r = val; g = (((val - tayanch) * rang) / 60) + tayanch; b = tayanch; tanaffus;
1 -holat:
r = (((val - tayanch) * (60 - (tus % 60))) / 60) + tayanch; g = val; b = tayanch; tanaffus;
2 -holat:
r = tayanch; g = val; b = (((val - tayanch) * (tus % 60)) / 60) + tayanch; tanaffus;
3 -holat:
r = tayanch; g = (((val - tayanch) * (60 - (tus % 60))) / 60) + tayanch; b = val; tanaffus;
4 -holat:
r = (((val - tayanch) * (tus % 60)) / 60) + tayanch; g = tayanch; b = val; tanaffus;
5 -holat:
r = val; g = tayanch; b = (((val - tayanch) * (60 - (tus % 60))) / 60) + tayanch; tanaffus; }
ranglar [indeks] [0] = r;
ranglar [indeks] [1] = g; ranglar [indeks] [2] = b; }
}
int rgb_colors [NUM_LIGHTS] [3]; // 픽셀 픽셀 오브젝트 갯수 마다 rgb rangi 선언
int tus [NUM_LIGHTS]; // 네오 픽셀 오브젝트 갯수 갯수 마다 hue 선언 int sat [NUM_LIGHTS]; // 네오 픽셀 오브젝트 갯수 마다 마다 선언 int brignt [NUM_LIGHTS]; // 네오 픽셀 오브젝트 갯수 갯수 마다 밝기 밝기
// 일반 변수 선언
int startSwitch = {8, 9, 10, 11, 12}; // yoqish/o'chirish 버튼 핀 번호 boolean startState = {noto'g'ri, yolg'on, yolg'on, yolg'on, yolg'on}; // yoqish/o'chirish
const int colorPin = {A0, A1, A2, A3, A4}; // 가변 저항 핀 번호
int colorVal = {0, 0, 0, 0, 0}; // 가변 저항 초기 값
int animationButton = 7; // 애니메이션 모드 변환 버튼 핀 핀
/////////////////////////////////////////////////
// 애니메이션 모든 변환 을 위 위 위 디 바운싱 바운싱 변수 변수 선언 선언 디 디? 짧은 시간 내 많은 이벤트 가 가 하는것 에 대 대 대 대 대 대해서 시간 간격 간격 button int tugmasiState; // 입력 핀 으로부터 의 현재 현재 값 값 int lastButtonState = HIGH; // 이전 의 판독 값 값 은 로 로 로 로 imzosiz uzoq lastDebounceTime = 0; // 출력 핀 이 마지막 마지막 으로 전환 시간 은 은 0 으로 imzosiz uzoq debounceDelay = 50; // 디 바운싱 타임 설정; 출력 이 깜빡 이면 다 다 다 다 int MODE = 0; // 애니메이션 모드 변수
int B_Interval [5]; // 블 링킹 을 위 위 위 위 위 위 의 랜덤 랜덤
int B_Min = 100; // 블 링킹 최단 속도; int B_Max = 500; // 블 링킹 최장 속도; int R_Interval = 50; // 레인보우 애니메이션 속도 변수 int D_Interval = 10; // 디밍 속도 변수
mantiqiy B_state [5]; // 블 링킹 을 위 위 위 위 위 의 의 상태 변수
///////////////////////////////////////////////////////
// 멀티 테스 킹 애니메이션 을 위 위 위 위 변수 변수 변수
imzosiz uzoq oqimMillis; // 현재 시간 변수
imzosiz uzun B_previousMillis [5]; // 각 모듈 의 블 링킹 타이머 타이머 imzosiz uzun DR_Millis [5]; // 각 모듈 의 디밍 랜덤 랜덤 타이머 (예비) belgisiz uzun R_previousMillis; // 레인보우 타이머 imzosiz uzun D_previousMillis; // 디밍 타이머
boolean firstRainbow = rost; // 레인보우 색상 초기화 상태 변수
int RainbowSpeed; // 레인보우 변환 변수
int Yorqin = 100; // 디밍 초기 값 int BrightnessFactor = 1; // 디밍 증감 값 ////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////
bo'sh o'rnatish () {
uchun (int i = 0; i <NUM_LIGHTS; i ++) {piksel .begin (); // 네오 픽셀 오브젝트 초기화}
// 버튼 인풋 설정
uchun (int i = 0; i <NUM_LIGHTS; i ++) {pinMode (startSwitch , INPUT_PULLUP); // yoqish/o'chirish M 인풋 설정} pinMode (animatsiyaButton, INPUT_PULLUP); // 애니메이션 버튼 인풋 설정
uchun (int i = 0; i <NUM_LIGHTS; i ++) {B_Interval = int (tasodifiy (B_Min, B_Max)); // 모듈 별 블 링킹 랜덤 속도 속도 (인터발) 변수 생성}
Serial.begin (9600); // 통신 설정
}
void loop () {
MODE = CheckAnimMode (); // 모드 에 애니메이션 체크 체크 모드 모드 함수 를 넣는다
// 버튼 과 가변 저항 을 을 을 각각 읽 읽 읽 에 다 다 다 다.
for (int i = 0; i <NUM_LIGHTS; i ++) {startState =! digitalRead (startSwitch ); // yoqish/o'chirish 버튼 에서 읽은 값 값 반대 값 을 startState 에 넣어 준다 // startState = digitalRead (startSwitch ); colorVal = analogRead (colorPin ); // 가변 저항 에서 읽은 읽은 값 을 가변 저항 초기 초기 넣는다 넣는다 넣는다}
almashtirish (MODE) {// 애니메이션 함수 스위치 문
0 holat: yoqilgan (); // 함수 실행 tanaffusda; // 조건문 에서 빠져 나가라
1 -holat:
kamalak (); // kamalak 함수 실행 tanaffus;
2 -holat:
karartma (); // karartma 함수 실행 tanaffus;
3 -holat:
miltillovchi (); // miltillovchi 함수 실행 tanaffus; }
uchun (int i = 0; i <NUM_LIGHTS; i ++) {piksel .show (); // 네오 픽셀 오브젝트 배열 켜라}
}
/////////////////////////////////////////////////////////////
int CheckAnimMode () {
// 애니메이션 선택 버튼 을 읽 읽 읽 를 를 다 다 다 다.
/ /// currentMillis = millis (); // o'qish int o'qish = digitalRead (animationButton); if (o'qish! = lastButtonState) {// 입력 핀 으로부터 이전 의 버튼 의 상태 와 비교 비교 비교 lastDebounceTime = millis (); // 현재 시간 을 출력 출력 핀 이 마지막 으로 전환 전환 된 넣음 넣음 넣음}
agar ((currentMillis - lastDebounceTime)> debounceDelay) {
agar (o'qish! = tugmasiDavlat) {// 입력 핀 으로부터 받은 현재 현재 값 판독 판독 값 과 비교
buttonState = o'qish; // 판독 값 을 tugmasiDavlat 에 대입
agar (buttonState == LOW) {// 버튼 상태 가 꺼져 있다면
MODE ++; // 버튼 모드 1 씩 증가 if (MODE> 3) {MODE = 0; firstRainbow = rost; // 레인보우 색상 초기화 상태 켜짐 BrightnessFactor = 1; // 디밍 증감 값 Yorqin = 15; // 밝기 는 15}}}}
lastButtonState = o'qish; // 판독 값 을 이전 이전 의 의 버튼 상태 에
qaytish rejimi; 함수 를 종료 하고 rejimi 함수 로 값 을 리턴 하라}
////////////////////////////////////////////////////////////////////
// animatsiya rejimining funktsiyasi
// ustida
void on () {Serial.println ("yoqilgan"); // 시리얼 모니터 에 uchun 을 써라 uchun (int i = 0; i <NUM_LIGHTS; i ++) {color_set (i, colorVal ); // 가변 저항 값 에 따라 따라 컬러 셋팅}}
// Kamalak
bo'sh kamalak () {Serial.println ("yomg'ir"); // 시리얼 모니터 에 yomg'ir 을 써라 if (firstRainbow) {RainbowSpeed = 0; // 레인보우 속도 초기화 firstRainbow = false; // 레인보우 색상 초기화 상태 꺼짐} if (millis () - R_previousMillis> R_Interval) {// 흐른 시간 값 이 레인보우 인터벌 값 보다 크면 R_previousMillis = currentMillis; // 현재 시간 을 이전 이전 의 레인보우 시간 넣 넣 넣 RainbowSpeed += 10; // 레인보우 변환 변수 에 10 을 더해라}
uchun (int i = 0; i <NUM_LIGHTS; i ++) {color_set (i, (colorVal +RainbowSpeed) % 1023); // 레인보우 컬러 셋팅}
}
// Qorayish
bo'shliqni xiralashtirish () {Serial.println ("dimm"); // 시리얼 모니터 에 dimm 을 써라 Serial.println (Yorqin); // 시리얼 모니터 에 Yorqin 를 써라 if (currentMillis - D_previousMillis> D_Interval) {// 흐른 시간 값 이 디밍 인터벌 값 보다 크면 D_previousMillis = currentMillis; // 현재 시간 을 이전 의 의 디밍 에 넣 넣 넣 라 Bright += BrightnessFactor; // 밝기 에 디밍 증감 값 1 씩 올려라} if (Bright 254) {BrightnessFactor = -1 * BrightnessFactor; } Yorqin = cheklash (Yorqin, 99, 254); // 변수 밝기 값 을 최소값 99 ~ 값 254 의 정 정 정 정 정 다 다
uchun (int i = 0; i <NUM_LIGHTS; i ++) {dim_color_set (i, Bright); // 디밍 컬러 셋팅}}
// miltillovchi
void miltillovchi () {Serial.println ("miltillash"); // 시리얼 모니터 에 에 miltillash 를 써라
uchun (int i = 0; i B_Interval ) {// 흐른 시간 값 이 블링크 인터벌 인터벌 값 보다 크면
B_previousMillis = currentMillis; // 현재 시간 을 이전 의 의 블링크 에 넣 넣어 B라state =! B_state ; // 각 모듈 의 블 링킹 링킹 상태 변수 의 값 의 반대 값 을 대입}} uchun (int i = 0; i <NUM_LIGHTS; i ++) {if (B_state ) {// 모듈 의 블 링킹 상태 가 읽 히면 color_set (i, colorVal ); // 가변 저항 값 에 따라 컬러 셋팅} boshqa {noColor_set (i); // 읽히지 않으면 컬러 셋팅 하지 않음}}}
}
////////////////////////////////////////////////////////////////////////////////////////
// asosiy funktsiya
// ranglar to'plami
void color_set (int indeksi, int colorSenser) {
if (startState [index]) {hue [index] = map (colorSenser, 0, 1023, 0, 359); // 0 ~ 1023 값 0 ~ 359 값 으로 한 한 한 한 color color (colorSenser 에) getRGB (rang [indeks], 255, 255, rgb_colors, indeks); uchun (int i = 0; i <NUMPIXELS; i ++) {piksel [indeks].setPixelColor (i, piksel [indeks]. Rang (rgb_colors [indeks] [0], rgb_colors [indeks] [1], rgb_colors [indeks] [2])); } // 픽셀 컬러 셋팅 을 rgb_colors 의 r, g, b 으로 설정} boshqa noColor_set (indeks); // 컬러 셋팅 하지 않음}
////// noColor to'plami
noColor_set bekor (indeks indeksi) {// 컬러 셋팅 하지 않는 함수
uchun (int i = 0; i <NUMPIXELS; i ++) {piksel [indeks].setPixelColor (i, piksel [indeks]. Rang (0, 0, 0)); } // 픽셀 컬러 세팅 을 0, 0, 0 으로 설정}
//// dimColor to'plami
bo'sh dim_color_set (int indeksi, miloddan avvalgi int) {// 디밍 컬러 셋팅 함수 설정
if (startState [index]) {hue [index] = map (colorVal [index], 0, 1023, 0, 359); // 0 ~ 1023 값 0 ~ 359 값 으로 한 한 한 한 color color color color color (colorVal 에) getRGB (rang [indeks], 255, miloddan avvalgi, rgb_colors, indeks); uchun (int i = 0; i <NUMPIXELS; i ++) {piksel [indeks].setPixelColor (i, piksel [indeks]. Rang (rgb_colors [indeks] [0], rgb_colors [indeks] [1], rgb_colors [indeks] [2])); } /// 픽셀 컬러 셋팅 을 rgb_colors 의 r, g, b 으로 설정} else noColor_set (indeks); // 컬러 셋팅 하지 않음}
6 -qadam: tugagan ko'rinish
Tavsiya:
LEGO nuqta nurli kamari: 6 qadam (rasmlar bilan)
LEGO nuqtali yorug'lik kamari: LEGO #LetsBuildTegether LEGO ijodingizni o'rganing, yarating va baham ko'ring
Nuqta-nuqta kuchlanishli boshqariladigan osilator: 29 qadam
Nuqtadan-nuqtaga voltaj bilan boshqariladigan osilator: Salom! Siz loyihani topdingiz, u erda biz chindan ham arzon mikrochipni, CD4069 (yaxshi) olib, uning ba'zi qismlarini yopishtirib olamiz va kuchlanish nazorat qilinadigan juda foydali osilatorga ega bo'lamiz! Biz quradigan versiyada faqat arra yoki rampa to'lqin shakli mavjud, bu
Dual Decay Eurorack nuqta-nuqta sxemasi: 12 qadam
Dual Decay Eurorack nuqta-nuqta sxemasi: Ushbu ko'rsatmaning maqsadi modulli sintezatoringiz uchun DUAL DECAY sxemasini qanday qilish mumkinligini ko'rsatishdir. Bu har qanday pcb bo'lmagan nuqta-nuqta sxemasi va minimal qismlardan iborat funktsional sintezator zanjirlarini yaratishning boshqa usulini ko'rsatadi
ME 470 qo'llanmasi: naqsh xususiyatlari: 6 qadam
ME 470 qo'llanmasi: Naqsh xususiyatlari: Naqshlar takrorlanuvchi xususiyatlarga ega bo'laklarda vaqtni tejashga yordam beradi
Robo adyol: Ko'rgazmali naqsh yordamida adyol to'qish: 3 qadam (rasmlar bilan)
Robo adyol: Ko'rgazmali naqsh yordamida adyol to'qish. Men to'qishni yaxshi ko'raman. Men buni bolaligimdan beri qilaman. Ammo yaqinda men rasmlarni qanday to'qishni bilib oldim. Endi men sizga qanday qilib ko'rsataman. Sizga kerak bo'ladi: har xil rangdagi iplar. To'qilgan kanca. (Men H o'lchamidan foydalanardim) Siz cros olishingiz mumkin