فهرست مطالب:

الگوی نور نقطه: 6 مرحله
الگوی نور نقطه: 6 مرحله

تصویری: الگوی نور نقطه: 6 مرحله

تصویری: الگوی نور نقطه: 6 مرحله
تصویری: لزبازی لیلا اوتادی چه لبی میگیره (نبینی از دستت رفته) 2024, نوامبر
Anonim
Image
Image
الگوی نور نقطه ای
الگوی نور نقطه ای
الگوی نور نقطه ای
الگوی نور نقطه ای

من با ایده "آیا می توانم نور را با دستان خود کنترل کنم و اراده خود را بیان کنم؟"

این یک "الگوی نور نقطه ای" است که به شما امکان می دهد رنگ های دلخواه خود را ایجاد کنید ، الگوهای خود را با آن رنگ ها طراحی کنید و جلوه های مختلف انیمیشن را تجربه کنید.

مرحله 1: مواد

مواد
مواد
مواد
مواد
مواد
مواد
مواد
مواد
  1. آردوینو UNO x 13
  2. نوار LED WS2901 یا WS2811 پیکسل (130 LEDS)
  3. کلید دکمه x 1
  4. سوئیچ Snap x 65
  5. اندازه گیری اندازه گیری x 65
  6. کابل رنگین کمان
  7. SMPS قدرتمند
  8. کابل هادی
  9. نوار گرد اکریلیک شفاف (قطر 30 میلی متر)
  10. رنگ مشکی اکریلیک تخته (5T) (500mm*790mm) x 2 ، (500mm*35mm) x 2 ، (790mm*35mm) x 2

مرحله 2: برنامه ساخت و ساز

نقشه ساخت
نقشه ساخت
نقشه ساخت
نقشه ساخت
نقشه ساخت
نقشه ساخت
نقشه ساخت
نقشه ساخت

مرحله 3: سخت افزار: طراحی مدار

سخت افزار: طراحی مدار
سخت افزار: طراحی مدار
سخت افزار: طراحی مدار
سخت افزار: طراحی مدار
سخت افزار: طراحی مدار
سخت افزار: طراحی مدار
  1. صفحه اکریلیک را مانند ساختار بالا برش دهید. (مرحله 2 را ببینید)

  2. یک قطعه LED نئو پیکسل در بالا و پایین سوراخ اندازه گیری قرار داده شده و در مجموع 65 جفت LED نئو پیکسل به آن متصل شده است.
  3. یک جفت LED نئو پیکسل به هم متصل شده و یک پین آردوینو را تشکیل می دهند.
  4. 65 حفره سنج را در سوراخ های پتانسیومتر قرار دهید. (آن را در طرف مقابل سطح نئو پیکسلی قرار دهید.)
  5. 65 سوئیچ فشاری را برای مطابقت با سوراخ های سوئیچ وصل کنید.
  6. در مجموع سیزده UNO آردوینو به هر یک از سیزده ناحیه متصل شده اند تا پنج قطعه از 65 قطعه سخت افزار را در یک UNO آردوینو متصل کنند.
  7. همانطور که در عکس پیوست نشان داده شده است ، پتانسیومترها ، کلیدهای فشاری و LED های نئو پیکسلی را با سیم به پین های Arduino UNO وصل کنید. (مرحله 2 را ببینید)
  8. پینهای GND و 5V چندین UNO Arduino روی سیمهای کابل جمع آوری شده و سپس به برق خارجی متصل می شوند. (مرحله 2 را ببینید)
  9. گرد و غبار را با فشار هوا از بین ببرید.

مرحله 4: سخت افزار: برش اکریلیک

سخت افزار: برش اکریلیک
سخت افزار: برش اکریلیک
سخت افزار: برش اکریلیک
سخت افزار: برش اکریلیک
سخت افزار: برش اکریلیک
سخت افزار: برش اکریلیک
  1. میله اکریلیک را به طول 50 میلی متر برش دهید.

  2. یک طرف میله اکریلیک به اندازه و عمق حفر می شود تا با قسمت کنترل کننده پتانسیومتر مطابقت داشته باشد.
  3. میله اکریلیک کمی بزرگتر از سوراخ تراش خورده است تا فاصله ای که بتواند به خوبی در پتانسیومتر قرار گیرد ، انجام شود.
  4. طرف دیگر کمی کاغذ سنباده می دهد تا نور به طور منظم منتقل شود.

مرحله 5: کد برنامه نویسی آردوینو

www.kasperkamperman.com/blog/arduino/ardui…

کد 'hsb to rgb' 를 참고 한 사이트

#عبارتند از

// 'adafruit_neopixel' 헤더 파일 라는 외부 를 를

// 네오 픽셀 연결 핀 번호

#تعریف PIN1 2 #تعریف PIN2 3 #تعریف PIN3 4 #تعریف PIN4 5 #تعریف PIN5 6

#تعریف NUMPIXELS 2 // 네오 픽셀 LED

#تعریف NUM_LIGHTS 5 // 작동 모듈 갯수 (네오 픽셀 갯수 갯수)

// 네오 픽셀 오브젝트 آرایه

پیکسل Adafruit_NeoPixel = {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)} ؛ //// 네오 픽셀 을 사용 하기 위해. // پرچم // 의 인자 값 은 네오 의 의 의 의 개수 개수 두번째 두번째

//////////////////////////////////////////////////////////////

////// HSV 를 RGB 함수 변환 하는 함수 getRGB () 위한 변수 와 함수

const byte 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, }; //

void getRGB (int hue، int sat، int val، int colors [5] [3] ، int index) {

val = dim_curve [val]؛ sat = 255 - dim_curve [255 - sat] ؛

// 색조 ، 및 H (HSB /HSV) 를 RGB

// dim_curve 는 밝기 값 및 채도 (반전) 에서만 사용 됩니다. // 이것은 가장 자연스럽게 보입니다.

int r؛

int g؛ int b؛ int int؛

if (sat == 0) {

رنگها [index] [0] = val؛ رنگها [index] [1] = val؛ رنگها [index] [2] = val؛ } دیگری {

base = ((255 - سات) * val) >> 8؛

تغییر (رنگ / 60) {

مورد 0: r = val؛ g = (((val - base) * hue) / 60) + base؛ b = پایه ؛ زنگ تفريح؛

مورد 1:

r = (((val - base) * (60 - (hue٪ 60))) / 60) + base؛ g = val ؛ b = پایه ؛ زنگ تفريح؛

مورد 2:

r = پایه ؛ g = val ؛ b = (((val - base) * (hue٪ 60)) / 60) + base؛ زنگ تفريح؛

مورد 3:

r = پایه ؛ g = (((val - base) * (60 - (hue٪ 60))) / 60) + base؛ b = val ؛ زنگ تفريح؛

مورد 4:

r = (((val - base) * (hue٪ 60)) / 60) + base؛ g = پایه ؛ b = val ؛ زنگ تفريح؛

مورد 5:

r = val ؛ g = پایه ؛ b = (((val - base) * (60 - (hue٪ 60))) / 60) + base؛ زنگ تفريح؛ }

رنگها [index] [0] = r ؛

رنگها [index] [1] = g ؛ رنگها [index] [2] = b ؛ }

}

int rgb_colors [NUM_LIGHTS] [3] ؛ // 네오 픽셀 오브젝트 갯수 마다 رنگ rgb

رنگ داخلی [NUM_LIGHTS] ؛ // 네오 픽셀 오브젝트 갯수 ue hue 선언 int sat [NUM_LIGHTS] ؛ // 네오 픽셀 오브젝트 갯수 마다 명도 선언 int brignt [NUM_LIGHTS] ؛ // 네오 픽셀 오브젝트 갯수 마다 밝기

// 일반 변수 선언

int beginSwitch = {8 ، 9 ، 10 ، 11 ، 12} ؛ // روشن/خاموش start 핀 St startState بولی = {نادرست ، غلط ، غلط ، غلط ، نادرست} ؛ // روشن/خاموش

const int colorPin = {A0، A1، A2، A3، A4}؛ // 가변 저항 핀 번호

int colorVal = {0 ، 0 ، 0 ، 0 ، 0} ؛ // 가변 저항 초기 값

int animationButton = 7؛ // 애니메이션 모드 변환 버튼 핀

/////////////////////////////////////////////////

// 애니메이션 모든 변환 위한 버튼 선언 선언 선언 선언 // 디 바운싱؟ button button 내 이벤트 가 가 발생 button button button button button button button 해결 해결 해결 해결 해결 해결 해결 دکمه intState؛ // 입력 핀 으로부터 의 현재 판독 값 int lastButtonState = HIGH؛ // 이전 의 판독 값 은 켜진 로 igned unsigned long lastDebounceTime = 0؛ // 출력 핀 이 마지막 으로 전환 된 은 은 0 deb debounce طولانی بدون علامت تاخیر = 50؛ // 디 바운싱 타임 설정 ؛ 출력 이 깜빡 한다 한다 int MODE = 0 ؛ // 애니메이션 모드 변수

int B_Interval [5]؛ // 블 링킹 을 위한 각 모듈

int B_Min = 100 ؛ // 블 링킹 최단 속도؛ int B_Max = 500 ؛ // 블 링킹 최장 속도؛ int R_Interval = 50 ؛ // 레인보우 애니메이션 속도 변수 int D_Interval = 10 ؛ // 디밍 속도 변수

دولت بولین [5]؛ // 블 링킹 을 위한 각 모듈 모듈

///////////////////////////////////////////////////////

// 멀티 테스 킹 애니메이션 을 위한 위한

جریان طولانی بدون امضا // 현재 시간 변수

بی علامت بلند B_previousMillis [5]؛ // 각 모듈 의 블 링킹 타이머 DR_Millis طولانی بدون علامت [5] ؛ // 각 모듈 의 디밍 랜덤 예비 (예비) بدون علامت بلند R_previousMillis؛ // 레인보우 타이머 بدون امضاء طولانی D_previousMillis؛ // 디밍 타이머

boolean firstRainbow = true؛ // 레인보우 색상 초기화 상태 변수

int RainbowSpeed؛ // 레인보우 변환 변수

int روشن = 100 ؛ // 디밍 초기 값 int BrightnessFactor = 1 ؛ // 디밍 증감 값 /////////////////////////////////////// /////////////////////////////////////

void setup () {

برای (int i = 0؛ i <NUM_LIGHTS؛ i ++) {پیکسل . شروع ()؛ // 네오 픽셀 오브젝트 초기화}

// 버튼 인풋 설정

برای (int i = 0 ؛ i <NUM_LIGHTS ؛ i ++) {pinMode (شروع به کار ، INPUT_PULLUP) ؛ // روشن/خاموش 버튼 인풋 설정} pinMode (animationButton ، INPUT_PULLUP) ؛ // 애니메이션 버튼 인풋 설정

برای (int i = 0 ؛ i <NUM_LIGHTS ؛ i ++) {B_Interval = int (تصادفی (B_Min ، B_Max)) ؛ // 모듈 별 블 링킹 랜덤 인터발 (인터발) 생성 생성}

Serial.begin (9600)؛ // 통신 설정

}

حلقه خالی () {

MODE = CheckAnimMode ()؛ // 모드 에 애니메이션 체크 모드 함수

// 과 가변 저항 을 값.

برای (int i = 0 ؛ i <NUM_LIGHTS ؛ i ++) {startState =! digitalRead (beginSwitch ) ؛ // روشن/خاموش 을 에서 읽은 값 의 값 St startState 에 넣어 준다 // startState = digitalRead (startSwitch ) ؛ colorVal = analogRead (colorPin ) ؛ // 가변 저항 에서 읽은 값 을 가변 가변 값 값 넣는다 넣는다 넣는다 넣는다}

سوئیچ (MODE) {// 애니메이션 함수 스위치 문

مورد 0: در () ؛ // در 실행 실행 وقفه ؛ // 조건문 에서 빠져 나가라

مورد 1:

رنگين كمان()؛ // رنگین کمان 실행 실행 شکستن ؛

مورد 2:

کم نور شدن ()؛ // کم نور شدن 실행 실행 شکستن ؛

مورد 3:

پلک زدن () ؛ // چشمک زدن 실행 실행 شکستن ؛ }

برای (int i = 0 ؛ i <NUM_LIGHTS ؛ i ++) {پیکسل . نمایش () ؛ // 네오 픽셀 오브젝트 배열 켜라 켜라}

}

/////////////////////////////////////////////////////////////

int CheckAnimMode () {

// 애니메이션 선택 버튼 을 읽어 모드 모드.

//////////////////////////////////////////////// /// currentMillis = millis ()؛ // reading 측정 int reading = digitalRead (animationButton) ؛ if (خواندن! = lastButtonState) {// 입력 핀 으로부터 이전 의 버튼 의 비교 비교 비교 비교 lastDebounceTime = millis ()؛ // 시간 을 출력 핀 이 마지막 으로 전환 넣음 넣음 넣음 넣음 넣음 넣음 넣음

if ((currentMillis - lastDebounceTime)> debounceDelay) {

if (خواندن! = buttonState) {// 입력 핀 으로부터 받은 현재 값 과 판독

buttonState = خواندن ؛ // 판독 값 을 buttonState ate

if (buttonState == LOW) {// 버튼 상태 가 꺼져 있다면

MODE ++ ؛ // 버튼 모드 1 증가 증가 if (MODE> 3) {MODE = 0؛ firstRainbow = true؛ // 레인보우 색상 초기화 상태 ight BrightnessFactor = 1 ؛ // 디밍 증감 ight روشن = 15 ؛ // 밝기 는 15}}}}

lastButtonState = خواندن ؛ // 판독 값 을 이전 의 버튼 버튼

بازگشت حالت؛ حالت 함수 종료 종료 함수 로 로 값 리턴 하라 하라}

////////////////////////////////////////////////////////////////////

// عملکرد حالت انیمیشن

//بر

void در () {Serial.println ("on")؛ // 시리얼 모니터 에 در 을 써라 برای (int i = 0 ؛ i <NUM_LIGHTS ؛ i ++) {color_set (i ، colorVal ) ؛ // 가변 저항 값 에 따라 컬러 셋팅}}}

//رنگين كمان

void rainbow () {Serial.println ("باران")؛ // 시리얼 모니터 에 باران 써라 써라 if (firstRainbow) {RainbowSpeed = 0؛ // 레인보우 속도 초기화 firstRainbow = false؛ // 레인보우 색상 초기화 상태 꺼짐} if (millis () - R_previousMillis> R_Interval) {// 흐른 시간 값 이 레인보우 인터벌 값 _ R_previousMillis = currentMillis؛ // 현재 시간 을 이전 의 레인보우 시간 넣어 라 RainbowSpeed += 10 ؛ // 레인보우 변환 변수 에 10 을 더해라}

برای (int i = 0 ؛ i <NUM_LIGHTS ؛ i ++) {color_set (i ، (colorVal +RainbowSpeed)٪ 1023) ؛ // 레인보우 컬러 셋팅}

}

// کم نور شدن

void dimming () {Serial.println ("dimm")؛ // 시리얼 모니터 에 dimm 을 ial Serial.println (روشن) ؛ // 시리얼 모니터 에 Bright 써라 써라 if (currentMillis - D_previousMillis> D_Interval) {// 흐른 시간 값 이 디밍 인터벌 _ _ D_previousMillis = currentMillis؛ // 현재 시간 을 이전 의 디밍 시간 넣어 ight Bright += BrightnessFactor؛ // 밝기 에 디밍 증감 값 1 씩 올려라} اگر (روشن 254) {BrightnessFactor = -1 * BrightnessFactor ؛ } روشن = محدود (روشن ، 99 ، 254) ؛ // 변수 밝기 값 을 최소값 99 ~ 최대 값 254 사이 의 값 으로 한정

برای (int i = 0 ؛ i <NUM_LIGHTS ؛ i ++) {dim_color_set (i ، Bright) ؛ // 디밍 컬러 셋팅}}

// پلک زدن

چشمک زدن خالی () {Serial.println ("پلک زدن")؛ // ink 모니터 에 پلک زدن 를

برای (int i = 0؛ i B_Interval ) {// 흐른 시간 값 이 이 인터벌 값 보다

B_previousMillis = currentMillis؛ // 현재 시간 을 이전 의 블링크 라 _ B_state =! B_state ؛ // 각 모듈 의 블 링킹 상태 의 의 반대 값 을 을 대입}}} برای (int i = 0؛ i <NUM_LIGHTS؛ i ++) {if (B_state ) {// 모듈 의 링킹 상태 읽 히면 color_set (i ، colorVal ) ؛ // 가변 저항 값 에 따라 컬러 셋팅} دیگر {noColor_set (i)؛ // 읽히지 않으면 컬러 셋팅 하지 않음}}}

}

////////////////////////////////////////////////////////////////////////////////////////

// عملکرد اصلی

// مجموعه رنگ

void color_set (int index، int colorSenser) {

if (startState [index]) {hue [index] = map (colorSenser، 0، 1023، 0، 359)؛ // 0 ~ 1023 을 0 ~ 359 값 으로 매핑 한 값 을 가지고 값 color (colorSenser) getRGB (رنگ [شاخص] ، 255 ، 255 ، rgb_colors ، index) ؛ برای (int i = 0 ؛ i <NUMPIXELS ؛ i ++) {پیکسل [index].setPixelColor (i ، پیکسل [index]. رنگ (rgb_colors [index] [0] ، rgb_colors [index] [1] ، rgb_colors [index] [2])) ؛ } // 픽셀 컬러 셋팅 을 rgb_colors 의 r، g، b 으로 설정} دیگر noColor_set (index)؛ // 컬러 셋팅 하지 않음}

////// مجموعه noColor

void noColor_set (int index) {// 컬러 셋팅 하지 함수 함수

برای (int i = 0 ؛ i <NUMPIXELS ؛ i ++) {پیکسل [index].setPixelColor (i ، پیکسل [index]. رنگ (0 ، 0 ، 0)) ؛ } // 픽셀 컬러 세팅 을 0 ، 0 ، 0 으로 설정}

//// مجموعه dimColor

void dim_color_set (int index، int BC) {// 디밍 컬러 셋팅 함수

if (startState [index]) {hue [index] = map (colorVal [index]، 0، 1023، 0، 359)؛ // 0 ~ 1023 값 을 0 ~ 359 값 으로 매핑 한 값 을 color color color (colorVal) getRGB (رنگ [شاخص] ، 255 ، قبل از میلاد ، rgb_colors ، index) ؛ برای (int i = 0 ؛ i <NUMPIXELS ؛ i ++) {پیکسل [index].setPixelColor (i ، پیکسل [index]. رنگ (rgb_colors [index] [0] ، rgb_colors [index] [1] ، rgb_colors [index] [2])) ؛ } /// 픽셀 컬러 셋팅 을 rgb_colors 의 r، g، b 으로 설정} دیگر noColor_set (index)؛ // 컬러 셋팅 하지 않음}

مرحله 6: یک نگاه تمام شده

توصیه شده: