Mundarija:

Nuqta nurli naqsh: 6 qadam
Nuqta nurli naqsh: 6 qadam

Video: Nuqta nurli naqsh: 6 qadam

Video: Nuqta nurli naqsh: 6 qadam
Video: Ko'zingiz nuri qanchalik darajada o'tkirligini aniqlashni xohlaysizmi? 2024, Iyul
Anonim
Image
Image
Nuqtali yorug'lik namunasi
Nuqtali yorug'lik namunasi
Nuqtali yorug'lik namunasi
Nuqtali yorug'lik namunasi

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

Materiallar
Materiallar
Materiallar
Materiallar
Materiallar
Materiallar
Materiallar
Materiallar
  1. Arduino UNO x 13
  2. WS2901 yoki WS2811 pikselli LED tasmasi (130 LED)
  3. X 1 tugmachasi
  4. O'rnatish kaliti x 65
  5. Potentsial o'lchagich x 65
  6. Kamalak kabeli
  7. SMPS uchun etarli quvvat
  8. Supero'tkazuvchilar kabel
  9. Akril shaffof dumaloq novda (diametri 30 mm)
  10. 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

Qurilish rejasi
Qurilish rejasi
Qurilish rejasi
Qurilish rejasi
Qurilish rejasi
Qurilish rejasi
Qurilish rejasi
Qurilish rejasi

3 -qadam: Uskuna: O'chirish dizayni

Uskuna: O'chirish dizayni
Uskuna: O'chirish dizayni
Uskuna: O'chirish dizayni
Uskuna: O'chirish dizayni
Uskuna: O'chirish dizayni
Uskuna: O'chirish dizayni
  1. Akril plastinkani yuqoridagi tuzilishga o'xshab kesib oling. (2 -qadamga qarang)

  2. Potentsial o'lchagich teshigining yuqori va pastki qismiga bir bo'lak neo-pikselli LED qo'yilgan va jami 65 juft neo-pikselli LED ulangan.
  3. Bir juft neo-pikselli LEDlar bitta Arduino pinini yaratish uchun birlashtirilgan.
  4. Potentsial o'lchagich teshiklariga 65 ta potentsial o'lchagichni joylashtiring. (Uni neo-pikselli yuzaning qarama-qarshi tomoniga qo'ying.)
  5. O'chirish teshiklariga mos keladigan 65 ta kalitni ulang.
  6. 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.
  7. Qo'shilgan rasmda ko'rsatilgandek, potentsial o'lchagichlarni, kalitlarni va neo-pikselli LEDlarni Arduino UNO pinlariga sim orqali ulang. (2 -qadamga qarang)
  8. Bir nechta Arduino UNO ning GND va 5V pinlari kabel simlariga yig'iladi, so'ngra tashqi quvvatga ulanadi. (2 -qadamga qarang)
  9. Havo bosimi yordamida changni olib tashlang.

4 -qadam: Uskuna: akril kesish

Uskuna: akril kesish
Uskuna: akril kesish
Uskuna: akril kesish
Uskuna: akril kesish
Uskuna: akril kesish
Uskuna: akril kesish
  1. Akril tayoqchani 50 mm uzunlikda kesib oling.
  2. Akril tayoqchaning bir tomoni o'lchash va o'lchash moslamasining nazorat qismiga mos keladigan chuqurlikka buriladi.
  3. Akril novda teshikdan bir oz kengroq kesilgan bo'lib, u potentsial o'lchagichga yaxshi joylashadi.
  4. 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: