جدول المحتويات:

نمط نقطة الضوء: 6 خطوات
نمط نقطة الضوء: 6 خطوات

فيديو: نمط نقطة الضوء: 6 خطوات

فيديو: نمط نقطة الضوء: 6 خطوات
فيديو: ٦ نقاط مهمه الحصول على صور نقيه وحاده 2024, شهر نوفمبر
Anonim
Image
Image
نمط الضوء النقطي
نمط الضوء النقطي
نمط الضوء النقطي
نمط الضوء النقطي

بدأت بفكرة "هل يمكنني التحكم في الضوء بيدي والتعبير عن إرادتي؟"

إنه "نمط Dot Light" الذي يسمح لك بإنشاء الألوان الخاصة بك بنفسك ، وتصميم أنماطك الخاصة بهذه الألوان ، وتجربة تأثيرات الرسوم المتحركة المختلفة.

الخطوة 1: المواد

المواد
المواد
المواد
المواد
المواد
المواد
المواد
المواد
  1. Arduino UNO × 13
  2. WS2901 أو WS2811 بكسل لشريط LED (130 LEDS)
  3. زر التبديل × 1
  4. التقط التبديل x 65
  5. مقياس الجهد × 65
  6. كابل قوس قزح
  7. قوة كافية SMPS
  8. كابل موصل
  9. شريط دائري أكريليك شفاف (قطر 30 مم)
  10. لوح أكريليك أسود اللون (5T) (500 مم * 790 مم) × 2 ، (500 مم * 35 مم) × 2 ، (790 مم * 35 مم) × 2

الخطوة الثانية: خطة البناء

خطة البناء
خطة البناء
خطة البناء
خطة البناء
خطة البناء
خطة البناء
خطة البناء
خطة البناء

الخطوة 3: الأجهزة: تصميم الدوائر

الأجهزة: تصميم الدوائر
الأجهزة: تصميم الدوائر
الأجهزة: تصميم الدوائر
الأجهزة: تصميم الدوائر
الأجهزة: تصميم الدوائر
الأجهزة: تصميم الدوائر
  1. قطع لوحة الاكريليك مثل الهيكل أعلاه. (انظر الخطوة 2)

  2. يتم وضع قطعة واحدة من LED ذات البكسل الجديد في الجزء العلوي والسفلي من فتحة مقياس الجهد ، ويتم إرفاق ما مجموعه 65 زوجًا من مصابيح LED ذات البكسل الجديد.
  3. تم توصيل زوج من مصابيح LED ذات البكسل الجديد معًا لتشكيل دبوس Arduino واحد.
  4. قم بملاءمة 65 مقياس جهد في فتحات مقياس الجهد. (ضعها على الجانب المقابل لسطح جديد البكسل).
  5. قم بتوصيل 65 مفتاحًا سريعًا لتتناسب مع فتحات المفتاح.
  6. يتم إرفاق ما مجموعه ثلاثة عشر Arduino UNO بكل منطقة من المناطق الثلاثة عشر من أجل ربط خمس قطع من 65 قطعة من الأجهزة في Arduino UNO واحد.
  7. كما هو موضح في الصورة المرفقة ، قم بتوصيل مقاييس الجهد والمفاتيح المفاجئة ومصابيح LED ذات البكسل الجديد بمسامير Arduino UNO عن طريق السلك. (انظر الخطوة 2)
  8. يتم تجميع دبابيس GND و 5 V للعديد من Arduino UNOs على أسلاك كبلية ، ثم توصيلها بالطاقة الخارجية. (انظر الخطوة 2)
  9. إزالة الغبار عن طريق ضغط الهواء.

الخطوة 4: الأجهزة: قطع الأكريليك

الأجهزة: قطع أكريليك
الأجهزة: قطع أكريليك
الأجهزة: قطع أكريليك
الأجهزة: قطع أكريليك
الأجهزة: قطع أكريليك
الأجهزة: قطع أكريليك
  1. قطع قضيب الاكريليك بطول 50 مم.

  2. يتم حفر جانب واحد من قضيب الأكريليك بالحجم والعمق لمطابقة جزء التحكم في مقياس الجهد.
  3. يتم قطع قضيب الأكريليك بشكل أوسع قليلاً من الفتحة للحصول على خلوص يمكن أن يتناسب جيدًا مع مقياس الجهد.
  4. يوفر الجانب الآخر القليل من ورق الصنفرة بحيث يمكن نقل الضوء بدقة.

الخطوة 5: كود برمجة اردوينو

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

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

#يشمل

// 'adafruit_neopixel' 헤더 파일 라는 외부 라이브러리 를 포함

// 네오 픽셀 연결 핀 번호 선언

#define PIN1 2 #define PIN2 3 #define PIN3 4 #define PIN4 5 #define PIN5 6

#define NUMPIXELS 2 // 네오 픽셀 LED 갯수

#define NUM_LIGHTS 5 // 작동 모듈 갯수 (네오 픽셀 오브젝트 갯수)

// 네오 픽셀 오브젝트 Array 선언

Adafruit_NeoPixel pixels = {Adafruit_NeoPixel (NUMPIXELS، PIN1، NEO_GRB + NEO_KHZ800)، Adafruit_NeoPixel (NUMPIXELS، PIN2، NEO_GRB + NEO_KHZ800)، Adafruit_Neo_Gixel (NUMPIXELS، PIN3 + NEOPixel Adafruit_NeoPixel (NUMPIXELS، PIN5، NEO_GRB + NEO_KHZ800)} ؛ //// 네오 픽셀 을 사용 하기 위해 객체 하나 를 생성 한다. // 첫번째 인자 값 은 네오 픽셀 의 LED 의 개수 // 두번째 인자 값 은 네오 픽셀 이 연결된 아두 이노 의 핀 번호 // 세번째 인자 값 은 네오 픽셀 의 타입 에 따라 바뀌는 علم

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

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

const بايت 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, }; //

getRGB باطل (تدرج الألوان ، int sat ، int val ، int colours [5] [3] ، int index) {

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

// 색조، 채도 및 밝기 (HSB / HSV) 를 RGB 로 변환

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

الباحث ص

الباحث ز الباحث ب ؛ قاعدة كثافة العمليات

إذا (جلس == 0) {

الألوان [الفهرس] [0] = val ؛ الألوان [الفهرس] [1] = val ؛ الألوان [الفهرس] [2] = val ؛ } آخر {

القاعدة = ((255 - جلس) * فال) >> 8 ؛

التبديل (هوى / 60) {

الحالة 0: r = val ؛ g = (((val - base) * hue) / 60) + قاعدة ؛ ب = قاعدة ؛ استراحة؛

حالة 1:

r = (((val - base) * (60 - (hue٪ 60))) / 60) + قاعدة ؛ ز = فال ؛ ب = قاعدة ؛ استراحة؛

الحالة 2:

ص = قاعدة ؛ ز = فال ؛ ب = (((val - Base) * (hue٪ 60)) / 60) + قاعدة ؛ استراحة؛

الحالة 3:

ص = قاعدة ؛ g = (((val - base) * (60 - (hue٪ 60))) / 60) + قاعدة ؛ ب = فال ؛ استراحة؛

الحالة 4:

r = (((val - base) * (hue٪ 60)) / 60) + قاعدة ؛ ز = قاعدة ؛ ب = فال ؛ استراحة؛

الحالة 5:

ص = فال ؛ ز = قاعدة ؛ ب = (((val - Base) * (60 - (hue٪ 60))) / 60) + قاعدة ؛ استراحة؛ }

الألوان [الفهرس] [0] = r ؛

الألوان [الفهرس] [1] = ز ؛ الألوان [الفهرس] [2] = ب ؛ }

}

int rgb_colors [NUM_LIGHTS] [3] ؛ // 네오 픽셀 오브젝트 갯수 마다 لون RGB 선언

درجة اللون [NUM_LIGHTS] ، // 네오 픽셀 오브젝트 갯수 마다 hue 선언 int sat [NUM_LIGHTS] ؛ // 네오 픽셀 오브젝트 갯수 마다 명도 선언 int brignt [NUM_LIGHTS] ؛ // 네오 픽셀 오브젝트 갯수 마다 밝기 서언

// 일반 변수 선언

int startSwitch = {8، 9، 10، 11، 12} ؛ // on / off 버튼 핀 번호 boolean startState = {false، false، false، false، false} ؛ // تشغيل / إيقاف 상태 변수

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

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

زر الرسوم المتحركة int = 7 ؛ // 애니메이션 모드 변환 버튼 핀 번호

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

// 애니메이션 모든 변환 을 위한 버튼 디 바운싱 변수 선언 // 디 바운싱؟ 시간 내 많은 이벤트 가 발생 에 대한 문제 에 대해서 지정된 시간 간격 으로 함수 를 호출 하여 int buttonState ؛ // 입력 핀 으로부터 의 현재 판독 값 int lastButtonState = HIGH ؛ // 이전 의 판독 값 은 켜진 상태 بدون توقيع long lastDebounceTime = 0 ؛ // 출력 핀 이 마지막 으로 전환 된 시간 은 0 debounceDelay الطويل غير الموقعة = 50 ؛ // 디 바운싱 타임 설정 ؛ 출력 이 깜빡 이면 증가 한다 int MODE = 0 ؛ // 애니메이션 모드 변수

int B_Interval [5] ؛ // 블 링킹 을 위한 각 모듈 의 랜덤 속도 변수

كثافة B_Min = 100 ؛ // 블 링킹 최단 속도 ؛ كثافة العمليات B_Max = 500 ؛ // 블 링킹 최장 속도 ؛ int R_Interval = 50 ؛ // 레인보우 애니메이션 속도 변수 int D_Interval = 10 ؛ // 디밍 속도 변수

منطقية B_state [5] ؛ // 블 링킹 을 위한 각 모듈 의 상태 변수

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

// 멀티 테스 킹 애니메이션 을 위한 시간 변수 선언

تيار طويل غير موقع // 현재 시간 변수

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

أول قوس قزح منطقي = صحيح ؛ // 레인보우 색상 초기화 상태 변수

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

int برايت = 100 ؛ // 디밍 초기 값 int BrightnessFactor = 1 ؛ // 디밍 증감 값 ///////////////////////////////////////////////// //////////////////////////////////////////

الإعداد باطل() {

لـ (int i = 0 ؛ i <NUM_LIGHTS ؛ i ++) {بكسل .begin () ؛ // 네오 픽셀 오브젝트 초기화}

// 버튼 인풋 설정

لـ (int i = 0 ؛ i <NUM_LIGHTS ؛ i ++) {pinMode (StartSwitch ، INPUT_PULLUP) ؛ // on / off 버튼 인풋 설정} pinMode (زر الرسوم المتحركة ، INPUT_PULLUP) ؛ // 애니메이션 버튼 인풋 설정

لـ (int i = 0؛ i <NUM_LIGHTS؛ i ++) {B_Interval = int (random (B_Min، B_Max)) ؛ // 모듈 별 블 링킹 랜덤 속도 (인터발) 변수 생성}

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

}

حلقة فارغة() {

الوضع = CheckAnimMode () ، // 모드 에 애니메이션 체크 모드 함수 를 넣는다

// 버튼 과 가변 저항 을 값 을 각각 읽어 변수 에 지정 한다.

لـ (int i = 0؛ i <NUM_LIGHTS؛ i ++) {startState =! digitalRead (beginSwitch ) ؛ // on / off 버튼 에서 읽은 값 의 반대 값 을 startState 에 넣어 준다 // startState = digitalRead (StartSwitch ) ؛ colorVal = analogRead (colorPin ) ؛ // 가변 저항 에서 읽은 값 을 가변 저항 초기 값 에 넣는다}

التبديل (الوضع) {// 애니메이션 함수 스위치 문

الحالة 0: في () ؛ // على 함수 실행 استراحة ؛ // 조건문 에서 빠져 나가라

حالة 1:

قوس المطر()؛ // قوس قزح 함수 실행 استراحة ؛

الحالة 2:

يعتم () ؛ // يعتم 함수 실행 استراحة ؛

الحالة 3:

رمش العين()؛ // وامض 함수 실행 استراحة ؛ }

لـ (int i = 0 ؛ i <NUM_LIGHTS ؛ i ++) {بكسل .show () ؛ // 네오 픽셀 오브젝트 배열 켜라}

}

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

int CheckAnimMode () {

// 애니메이션 선택 버튼 을 읽어 모드 를 결정 한다.

////////////////////////////////////////////////////// /// currentMillis = millis () ؛ // 시간 측정 int القراءة = digitalRead (زر الرسوم المتحركة) ؛ إذا (read! = lastButtonState) {// 입력 핀 으로부터 이전 의 버튼 의 상태 와 판독 값 비교 lastDebounceTime = millis () ؛ // 현재 시간 을 출력 핀 이 마지막 으로 전환 된 시간 에 넣음}

إذا ((currentMillis - lastDebounceTime)> debounceDelay) {

إذا (read! = buttonState) {// 입력 핀 으로부터 받은 현재 값 과 판독 값 과 비교

buttonState = قراءة ؛ // 판독 값 을 buttonState 에 대입

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

الوضع ++ ؛ // 버튼 모드 1 씩 증가 إذا (MODE> 3) {MODE = 0 ؛ firstRainbow = صحيح ؛ // 레인보우 색상 초기화 상태 켜짐 عامل السطوع = 1 ؛ // 디밍 증감 값 ساطع = 15 ؛ // 밝기 는 15}}}

lastButtonState = قراءة ؛ // 판독 값 을 이전 의 버튼 상태 에 대입

وضع الإرجاع ؛ 함수 를 종료 하고 الوضع 함수 로 값 을 리턴 하라}

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

// وظيفة وضع الرسوم المتحركة

//تشغيل

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

//قوس المطر

قوس قزح فارغ () {Serial.println ("مطر") ؛ // 시리얼 모니터 에 rain 을 써라 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) ؛ // 레인보우 컬러 셋팅}

}

// يعتم

تعتيم باطل () {Serial.println ("dimm") ؛ // 시리얼 모니터 에 dimm 을 Serial.println (برايت) ؛ // 시리얼 모니터 에 Bright 를 써라 if (currentMillis - D_previousMillis> D_Interval) {// 흐른 시간 값 이 디밍 인터벌 값 보다 크면 D_previousMillis = currentMillis ؛ // 현재 시간 을 이전 의 디밍 시간 에 넣어 라 Bright + = BrightnessFactor ؛ // 밝기 에 디밍 증감 값 1 씩 올려라} إذا (Bright 254) {BrightnessFactor = -1 * BrightnessFactor؛ } ساطع = قيد (ساطع ، 99 ، 254) ؛ // 변수 밝기 값 을 최소값 99 ~ 최대 값 254 사이 의 값 으로 한정 한다

لـ (int i = 0 ؛ i <NUM_LIGHTS ؛ i ++) {dim_color_set (i، Bright) ؛ // 디밍 컬러 셋팅}}

//رمش العين

وامض باطل () {Serial.println ("وميض") ؛ // 시리얼 모니터 에 وميض 를 써라

لـ (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 ) ؛ // 가변 저항 값 에 따라 컬러 셋팅} else {noColor_set (i) ؛ // 읽히지 않으면 컬러 셋팅 하지 않음}}

}

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

// الوظيفة الأساسية

// مجموعة اللون

مجموعة ألوان باطلة (مؤشر كثافة العمليات ، كثافة الألوان كثافة العمليات) {

if (startState [index]) {hue [index] = map (colorSenser، 0، 1023، 0، 359) ؛ // 0 ~ 1023 값 을 0 ~ 359 값 으로 매핑 한 값 을 가지고 색상 값 으로 지정 (colorSenser 에) getRGB (hue [index] ، 255 ، 255 ، rgb_colors ، index) ؛ لـ (int i = 0؛ i <NUMPIXELS؛ i ++) {pixels [index].setPixelColor (i، pixels [index]. color (rgb_colors [index] [0]، rgb_colors [index] [1]، rgb_colors [index] [2])) ؛ } // 픽셀 컬러 셋팅 을 rgb_colors 의 r، g، b 으로 설정} else noColor_set (index) ؛ // 컬러 셋팅 하지 않음}

////// noColor set

void noColor_set (فهرس int) {// 컬러 셋팅 하지 않는 함수 설정

لـ (int i = 0؛ i <NUMPIXELS؛ i ++) {pixels [index].setPixelColor (i، pixels [index]. Color (0، 0، 0)) ؛ } // 픽셀 컬러 세팅 을 0، 0، 0 으로 설정}

//// تعيين اللون الخافت

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

if (startState [index]) {hue [index] = map (colorVal [index]، 0، 1023، 0، 359) ؛ // 0 ~ 1023 값 을 0 ~ 359 값 으로 매핑 한 값 을 가지고 색상 값 으로 지정 (colorVal 에) getRGB (hue [index] ، 255 ، BC ، rgb_colors ، index) ؛ لـ (int i = 0؛ i <NUMPIXELS؛ i ++) {pixels [index].setPixelColor (i، pixels [index]. color (rgb_colors [index] [0]، rgb_colors [index] [1]، rgb_colors [index] [2])) ؛ } /// 픽셀 컬러 셋팅 을 rgb_colors 의 r، g، b 으로 설정} else noColor_set (index) ؛ // 컬러 셋팅 하지 않음}

الخطوة 6: نظرة نهائية

موصى به: