جدول المحتويات:
- الخطوة 1: المواد
- الخطوة الثانية: خطة البناء
- الخطوة 3: الأجهزة: تصميم الدوائر
- الخطوة 4: الأجهزة: قطع الأكريليك
- الخطوة 5: كود برمجة اردوينو
- الخطوة 6: نظرة نهائية
فيديو: نمط نقطة الضوء: 6 خطوات
2024 مؤلف: John Day | [email protected]. آخر تعديل: 2024-01-30 07:40
بدأت بفكرة "هل يمكنني التحكم في الضوء بيدي والتعبير عن إرادتي؟"
إنه "نمط Dot Light" الذي يسمح لك بإنشاء الألوان الخاصة بك بنفسك ، وتصميم أنماطك الخاصة بهذه الألوان ، وتجربة تأثيرات الرسوم المتحركة المختلفة.
الخطوة 1: المواد
- Arduino UNO × 13
- WS2901 أو WS2811 بكسل لشريط LED (130 LEDS)
- زر التبديل × 1
- التقط التبديل x 65
- مقياس الجهد × 65
- كابل قوس قزح
- قوة كافية SMPS
- كابل موصل
- شريط دائري أكريليك شفاف (قطر 30 مم)
- لوح أكريليك أسود اللون (5T) (500 مم * 790 مم) × 2 ، (500 مم * 35 مم) × 2 ، (790 مم * 35 مم) × 2
الخطوة الثانية: خطة البناء
الخطوة 3: الأجهزة: تصميم الدوائر
-
قطع لوحة الاكريليك مثل الهيكل أعلاه. (انظر الخطوة 2)
- يتم وضع قطعة واحدة من LED ذات البكسل الجديد في الجزء العلوي والسفلي من فتحة مقياس الجهد ، ويتم إرفاق ما مجموعه 65 زوجًا من مصابيح LED ذات البكسل الجديد.
- تم توصيل زوج من مصابيح LED ذات البكسل الجديد معًا لتشكيل دبوس Arduino واحد.
- قم بملاءمة 65 مقياس جهد في فتحات مقياس الجهد. (ضعها على الجانب المقابل لسطح جديد البكسل).
- قم بتوصيل 65 مفتاحًا سريعًا لتتناسب مع فتحات المفتاح.
- يتم إرفاق ما مجموعه ثلاثة عشر Arduino UNO بكل منطقة من المناطق الثلاثة عشر من أجل ربط خمس قطع من 65 قطعة من الأجهزة في Arduino UNO واحد.
- كما هو موضح في الصورة المرفقة ، قم بتوصيل مقاييس الجهد والمفاتيح المفاجئة ومصابيح LED ذات البكسل الجديد بمسامير Arduino UNO عن طريق السلك. (انظر الخطوة 2)
- يتم تجميع دبابيس GND و 5 V للعديد من Arduino UNOs على أسلاك كبلية ، ثم توصيلها بالطاقة الخارجية. (انظر الخطوة 2)
- إزالة الغبار عن طريق ضغط الهواء.
الخطوة 4: الأجهزة: قطع الأكريليك
-
قطع قضيب الاكريليك بطول 50 مم.
- يتم حفر جانب واحد من قضيب الأكريليك بالحجم والعمق لمطابقة جزء التحكم في مقياس الجهد.
- يتم قطع قضيب الأكريليك بشكل أوسع قليلاً من الفتحة للحصول على خلوص يمكن أن يتناسب جيدًا مع مقياس الجهد.
- يوفر الجانب الآخر القليل من ورق الصنفرة بحيث يمكن نقل الضوء بدقة.
الخطوة 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: نظرة نهائية
موصى به:
خط سكة حديد آلي بسيط من نقطة إلى نقطة: 10 خطوات (بالصور)
خط سكة حديد بسيط آلي من نقطة إلى نقطة: المتحكمات الدقيقة من Arduino رائعة لأتمتة تخطيطات السكك الحديدية النموذجية. تعد أتمتة المخططات مفيدة للعديد من الأغراض مثل وضع التخطيط الخاص بك على شاشة عرض حيث يمكن برمجة عملية التخطيط لتشغيل القطارات في تسلسل آلي. ل
مذبذب التحكم في الجهد من نقطة إلى نقطة: 29 خطوة
مذبذب متحكم في الجهد من نقطة إلى نقطة: مرحبًا ، لقد عثرت على مشروع حيث نأخذ شريحة صغيرة رخيصة جدًا ، CD4069 (لطيفة) ، ونلصق بعض الأجزاء بها ، ونحصل على مذبذب متحكم في الفولتية مفيد للغاية! الإصدار الذي سنقوم ببنائه له فقط شكل موجة منشار أو منحدر ، وهو
حلبة Crossfader من نقطة إلى نقطة: 16 خطوة (بالصور)
حلبة Crossfader من نقطة إلى نقطة: هذه دائرة متقاطعة. يقبل مدخلين ويتلاشى بينهما ، مع كون الإخراج عبارة عن مزيج من المدخلين (أو أحد المدخلات فقط). إنها دائرة بسيطة ومفيدة للغاية وسهلة البناء! إنه يقلب الإشارة التي تمر عبره ،
حلبة Eurorack ثنائية الاضمحلال من نقطة إلى نقطة: 12 خطوة
حلبة Eurorack المزدوجة من نقطة إلى نقطة: الغرض من هذه التعليمات هو إظهار كيف يمكنك إنشاء دائرة DUAL DECAY لمركِّب تركيبي معياري. هذه دائرة من نقطة إلى نقطة خالية من أي ثنائي الفينيل متعدد الكلور وتوضح طريقة أخرى لبناء دوائر مركّبة وظيفية بأجزاء دنيا
خط سكة حديد آلي من نقطة إلى نقطة مع انحياز للفناء: 10 خطوات (بالصور)
خط سكة حديد من نقطة إلى نقطة آلي مع انحياز يارد: تفتح وحدات التحكم الدقيقة في Arduino إمكانيات كبيرة في نموذج السكك الحديدية ، خاصة عندما يتعلق الأمر بالأتمتة. هذا المشروع هو مثال على مثل هذا التطبيق. إنه استمرار لأحد المشاريع السابقة. يتكون هذا المشروع من نقطة