Բովանդակություն:
- Քայլ 1: Նյութեր
- Քայլ 2: Շինարարության ծրագիր
- Քայլ 3. Սարքաշար. Շղթայի ձևավորում
- Քայլ 4: Սարքաշար. Ակրիլային կտրում
- Քայլ 5. Arduino ծրագրավորման կոդ
- Քայլ 6: Ավարտված հայացք
Video: Dot Light օրինակը `6 քայլ
2024 Հեղինակ: John Day | [email protected]. Վերջին փոփոխված: 2024-01-30 09:49
Ես սկսեցի «Կարո՞ղ եմ իմ ձեռքերով կառավարել լույսը և արտահայտել իմ կամքը» գաղափարը:
Դա «Dot Light Pattern» է, որը թույլ է տալիս ինքներդ ստեղծել ձեր սեփական գույները, ձևավորել ձեր սեփական նախշերը այդ գույներով և զգալ տարբեր անիմացիոն էֆեկտներ:
Քայլ 1: Նյութեր
- Arduino UNO x 13
- WS2901 կամ WS2811 պիքսելային LED շերտ (130 LEDS)
- Կոճակի անջատիչ x 1
- Կոտրիչ անջատիչ x 65
- Ուժի չափիչ x 65
- Ainիածան մալուխ
- Հզոր հոսանք SMPS
- Հաղորդիչ մալուխ
- Ակրիլային թափանցիկ կլոր ձող (30 մմ տրամագծով)
- Սև գույնի ակրիլային տախտակ (5T) (500 մմ*790 մմ) x 2, (500 մմ*35 մմ) x 2, (790 մմ*35 մմ) x 2
Քայլ 2: Շինարարության ծրագիր
Քայլ 3. Սարքաշար. Շղթայի ձևավորում
-
Կտրեք ակրիլային ափսեը, ինչպես վերը նշված կառուցվածքը: (տես քայլ 2)
- Նեո-պիքսելային լուսադիոդի մեկ կտոր դրված է պոտենցիաչափաչափի անցքի վերևում և ներքևում, և ընդհանուր առմամբ ամրացված է 65 զույգ նեո-պիքսելային LED:
- Մի զույգ նեոպիքսելային լուսադիոդային լուսադիոդներ միացված են միասին ՝ կազմելով մեկ Arduino- ի քորոց:
- Տեղադրեք 65 հզորության չափիչ հզորության չափիչ անցքերին: (Դրեք այն նեոպիքսելավորված մակերեսի հակառակ կողմում):
- Կցեք 65 սեղմիչ անջատիչներ, որոնք կհամապատասխանեն անջատիչի անցքերին:
- Ընդհանուր առմամբ տասներեք Arduino UNO- ներ կցված են տասներեք գոտիներից յուրաքանչյուրին, որպեսզի միացնեն հինգ կտոր 65 միավոր սարքավորում մեկ Arduino UNO- ի մեջ:
- Ինչպես ցույց է տրված կցված լուսանկարում, միացրեք հզորության չափիչները, անջատիչներն ու նոր պիքսելային LED- ները Arduino UNO- ի կապումներին մետաղալարով: (տես քայլ 2)
- Մի քանի Arduino UNO- ների GND և 5V կապանքները հավաքվում են մալուխային լարերի վրա, այնուհետև միացված են արտաքին հոսանքին: (տես քայլ 2)
- Հեռացրեք փոշին օդի ճնշման միջոցով:
Քայլ 4: Սարքաշար. Ակրիլային կտրում
- Կտրեք ակրիլային ձողը 50 մմ երկարությամբ:
- Ակրիլային գավազանի մի կողմը փորված է չափի և խորության վրա, որպեսզի համապատասխանի հզորության չափիչի վերահսկիչ մասին:
- Ակրիլային գավազանը կտրված է անցքից մի փոքր ավելի լայն բացվածքի համար, որը կարող է լավ տեղավորվել հզորության չափիչի մեջ:
-
Մյուս կողմը մի փոքր հղկաթուղթ է տալիս, որպեսզի լույսը կոկիկ փոխանցվի:
Քայլ 5. Arduino ծրագրավորման կոդ
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 // 작동 모듈 갯수 (네오 픽셀 갯수)
// 네오 픽셀 오브젝트 rayանգված 선언
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)}; //// 네오 픽셀 을 사용 하기 위해 위해. // 첫번째 인자 값 은 네오 픽셀 의 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, }; //
void getRGB (int hue, int sat, int val, int colors [5] [3], int index) {
val = dim_curve [val]; նստել = 255 - dim_curve [255 - նստել];
// 색조, 및 밝기 (HSB /HSV) 를 RGB 로
// dim_curve 밝기 값 및 채도 (반전) 에서만 사용 됩니다: // 이것은 가장 자연스럽게 보입니다.
int r;
int g; int բ; int բազա;
եթե (նստեց == 0) {
գույներ [ինդեքս] [0] = val; գույներ [ինդեքս] [1] = val; գույներ [ինդեքս] [2] = val; } ուրիշ {
հիմք = ((255 - նստած) * val) >> 8;
անջատիչ (երանգ / 60) {
գործ 0: r = val; g = (((val - բազա) * երանգ) / 60) + հիմք; b = հիմք; ընդմիջում;
դեպք 1:
r = (((val - բազա) * (60 - (երանգ % 60))) / 60) + հիմք; g = val; b = հիմք; ընդմիջում;
դեպք 2:
r = հիմք; g = val; b = (((val - բազա) * (երանգ % 60)) / 60) + հիմք; ընդմիջում;
դեպք 3:
r = հիմք; g = (((val - բազա) * (60 - (երանգ % 60))) / 60) + հիմք; b = val; ընդմիջում;
դեպք 4:
r = (((val - բազա) * (երանգ % 60)) / 60) + հիմք; g = հիմք; b = val; ընդմիջում;
դեպք 5:
r = val; g = հիմք; b = (((val - բազա) * (60 - (երանգ % 60))) / 60) + հիմք; ընդմիջում; }
գույներ [ինդեքս] [0] = r;
գույներ [ինդեքս] [1] = գ; գույներ [ինդեքս] [2] = բ; }
}
int rgb_colors [NUM_LIGHTS] [3]; // 네오 픽셀 오브젝트 갯수 마다 rgb գույն
int երանգ [NUM_LIGHTS]; // 네오 픽셀 오브젝트 갯수 ue երանգ 선언 int նստել [NUM_LIGHTS]; // 네오 픽셀 오브젝트 갯수 마다 명도 선언 int brignt [NUM_LIGHTS]; // 네오 픽셀 오브젝트 갯수 마다 밝기
// 일반 변수 선언
int startSwitch = {8, 9, 10, 11, 12}; // միացնել/անջատել 핀 ole բուլյան startState = {կեղծ, կեղծ, կեղծ, կեղծ, կեղծ}; // միացնել/անջատել 변수
const int colorPin = {A0, A1, A2, A3, A4}; // 가변 저항 핀 번호
int colorVal = {0, 0, 0, 0, 0}; // 가변 저항 초기 값
int animationButton = 7; // 애니메이션 모드 변환 버튼 핀
/////////////////////////////////////////////////
// 애니메이션 모든 변환 을 위한 버튼 디 선언 선언 // 디 바운싱? Button 시간 내 가 발생 발생 에 대한 에 대해서 지정된 시간 간격 으로 해결 해결 호출 해결 해결 button int buttonState; // 핀 으로부터 의 현재 판독 값 int lastButtonState = HIGH; // igned 의 판독 값 은 켜진 로 igned անստորագիր long lastDebounceTime = 0; // 출력 핀 이 마지막 으로 전환 된 시간 은 0 으로 անստորագիր երկար դեբունս Հետաձգում = 50; // 디 바운싱 타임 설정; 출력 이 깜빡 이면 증가 한다 int MODE = 0; // 애니메이션 모드 변수
int B_Interval [5]; // 블 링킹 을 위한 각 모듈 의 의
int B_Min = 100; // 블 링킹 최단 속도; int B_Max = 500; // 블 링킹 최장 속도; int R_Interval = 50; // 레인보우 애니메이션 속도 변수 int D_Interval = 10; // 디밍 속도 변수
բուլյան B_state [5]; // 블 링킹 을 위한 각 모듈 의 상태
///////////////////////////////////////////////////////
// 멀티 테스 킹 애니메이션 을 위한 시간 변수
անստորագիր երկար ընթացիկ Միլիս; // 현재 시간 변수
անստորագիր երկար B_previousMillis [5]; // 각 모듈 의 블 링킹 타이머 անստորագիր երկար DR_Millis [5]; // 각 모듈 의 디밍 랜덤 예비 (예비) անստորագիր երկար R_previousMillis; // 레인보우 타이머 անստորագիր երկար D_previousMillis; // 디밍 타이머
բուլյան firstRainbow = ճշմարիտ; // 레인보우 색상 초기화 상태
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); // միացնել/անջատել pin 인풋 설정} pinMode (animationButton, INPUT_PULLUP); // 애니메이션 버튼 인풋 설정
համար (int i = 0; i <NUM_LIGHTS; i ++) {B_Interval = int (պատահական (B_Min, B_Max)); // 모듈 별 블 링킹 랜덤 인터발 (인터발) 생성 생성}
Serial.begin (9600); // 통신 설정
}
դատարկ շրջան () {
ՌԵԴ = CheckAnimMode (); // 모드 에 애니메이션 체크 모드 함수 를
// 버튼 과 가변 저항 을 값 을 각각.
for (int i = 0; i <NUM_LIGHTS; i ++) {startState =! digitalRead (սկսում է անցնել ); // on/off 버튼 에서 읽은 값 의 반대 을 St startState 에 넣어 준다 // startState = digitalRead (սկսում է անցնել ); colorVal = analogRead (colorPin ); // 가변 저항 에서 읽은 값 을 가변 저항 초기 값 넣는다 넣는다}
անջատիչ (MODE) {// 애니메이션 함수 스위치 문
գործ 0: միացված (); // 함수 on ընդմիջման վրա; // 조건문 에서 빠져 나가라
դեպք 1:
ծիածան (); // ծիածան 함수 실행 ընդմիջում;
դեպք 2:
dimming (); // թուլացում 실행 실행 ընդմիջում;
դեպք 3:
թարթում (); // թարթում 실행 실행 ընդմիջում; }
(int i = 0; i <NUM_LIGHTS; i ++) {պիքսել . ցուցադրում (); // 네오 픽셀 오브젝트 배열 켜라}
}
/////////////////////////////////////////////////////////////
int CheckAnimMode () {
// 애니메이션 선택 버튼 을 읽어 모드 를 결정.
/////////////////////////////////////////////////// /// currentMillis = millis (); // 시간 측정 int ընթերցում = digitalRead (animationButton); եթե (կարդում! = lastButtonState) {// 입력 핀 으로부터 이전 의 버튼 의 상태 비교 비교 비교 비교 lastDebounceTime = millis (); // 현재 시간 을 출력 핀 이 마지막 으로 으로 된 시간 넣음 넣음 넣음}
if ((currentMillis - lastDebounceTime)> debounceDelay) {
եթե (կարդում! = buttonState) {// 입력 핀 으로부터 받은 현재 값 과 판독
buttonState = ընթերցում; // 판독 값 을 buttonState 대입
if (buttonState == LOW) {// 버튼 상태 가 꺼져
ՌԵԴ ++; // 버튼 모드 1 증가 증가 եթե (ՊԵՏ> 3) {ԿԱՐD = 0; firstRainbow = ճշմարիտ; // ight 색상 초기화 상태 ight BrightnessFactor = 1; // 디밍 증감 ight Պայծառ = 15; // 는 는 15}}}}
lastButtonState = ընթերցում; // 판독 값 을 이전 의 버튼 상태 에
վերադարձի ռեժիմ; 함수 를 종료 하고 ռեժիմ 함수 로 값 을 리턴 하라}
////////////////////////////////////////////////////////////////////
// անիմացիոն ռեժիմի գործառույթ
//վրա
void on () {Serial.println ("on"); // 시리얼 모니터 에 on 을 써라 for (int i = 0; i <NUM_LIGHTS; i ++) {color_set (i, colorVal ); // 가변 저항 값 에 따라 컬러 셋팅}}}
// Rիածան
դատարկ ծիածան () {Serial.println («անձրև»); // 시리얼 모니터 에 անձրև 을 써라 եթե (firstRainbow) {RainbowSpeed = 0; // 레인보우 속도 초기화 firstRainbow = կեղծ; // 레인보우 색상 초기화 상태 꺼짐} 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 을 써라 Serial.println (Պայծառ); // 시리얼 모니터 에 Պայծառ 써라 써라 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 = ընթացիկ Միլիս; // 현재 시간 을 이전 의 블링크 시간 _ _ B_state =! B_state ; // 각 모듈 의 블 링킹 상태 변수 값 반대 값 을 대입 하라}}} (int i = 0; i <NUM_LIGHTS; i ++) {if (B_state ) {// 모듈 의 블 링킹 for 히면 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 color (colorSenser) getRGB (երանգ [ինդեքս], 255, 255, rgb_colors, index); (int i = 0; i <NUMPIXELS; i ++) {պիքսել [ինդեքս].setPixelColor (i, պիքսել [ինդեքս]: Գույն [2])); } // 픽셀 컬러 셋팅 을 rgb_colors 의 r, g, b 으로 설정} այլապես noColor_set (ցուցիչ); // 컬러 셋팅 하지 않음}
////// noColor հավաքածու
անվավեր noColor_set (int index) {// 컬러 셋팅 하지 함수 함수
(int i = 0; i <NUMPIXELS; i ++) {պիքսել [ինդեքս].setPixelColor (i, պիքսել [ինդեքս]. Գույն (0, 0, 0)); } // 픽셀 컬러 세팅 을 0, 0, 0 으로 설정}
//// dimColor հավաքածու
դատարկ 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 (colorVal 에) getRGB (երանգ [ինդեքս], 255, մ.թ.ա., rgb_colors, index); (int i = 0; i <NUMPIXELS; i ++) {պիքսել [ինդեքս].setPixelColor (i, պիքսել [ինդեքս]: Գույն [2])); } /// 픽셀 컬러 셋팅 을 rgb_colors 의 r, g, b 으로 설정} այլապես noColor_set (ինդեքս); // 컬러 셋팅 하지 않음}
Քայլ 6: Ավարտված հայացք
Խորհուրդ ենք տալիս:
Թվային ժամացույց LED Dot Matrix - ESP Matrix Android հավելված ՝ 14 քայլ
Թվային ժամացույց LED Dot Matrix - ESP Matrix Android հավելված. Այս հոդվածը հպարտորեն հովանավորվում է PCBWAY- ի կողմից: Փորձեք այն ինքներդ ձեզ համար և ստացեք 10 հատ PCB ընդամենը $ 5 -ով PCBWAY- ում ՝ շատ մեծ որակով: Շնորհակալություն PCBWAY: ESP Matrix Board- ը, որը ես պատրաստում եմ
Kid's Toy Light Light Switch Box + Խաղերի ռեմիքս. 19 քայլ (նկարներով)
Kid's Toy Light Light Switch Box + Games Remix. Սա ռեմիքս է, որը ես պարզապես պետք է անեի, քանի որ տեսա երկու հիանալի հրահանգներ և չկարողացա դադարել մտածել երկուսը համատեղելու մասին: Այս խառնուրդը հիմնականում համատեղում է Light Switch Box- ի ինտերֆեյսը պարզ խաղերով (Simon, Whack-a-Mole և այլն …) t
Ինչպես անել Singleton- ի ձևավորման օրինակը C ++ - ում. 9 քայլ
Ինչպե՞ս անել Singleton- ի ձևավորման օրինակը C ++ - ում: Ներածություն. Այս հրահանգի նպատակն է սովորեցնել օգտվողին, թե ինչպես պետք է իրականացնել միայնակ ձևավորման օրինակը իրենց C ++ ծրագրում: Դրանով այս հրահանգների հավաքածուն նաև կբացատրի ընթերցողին, թե ինչու են միայնակի տարրերը ճանապարհ
Light Light Sequencer Using Assembly & Microchip PIC16F690: 3 քայլ
Light Sequencer Using Assembly & Microchip PIC16F690. Այս նախագծի նպատակն է կառուցել լուսային հաջորդականություն `խաղացողի արձագանքման արագությունը ստուգելու համար: Այս լուսային հաջորդականիչի ինտերֆեյսը բաղկացած է 8 LED- ից և կոճակից: Տեխնիկական առումով մենք մտադիր ենք ուղարկել հավաքագրման լեզվով գրված ծածկագիր wi
Ikea Light Hack (flexin Your Light) ՝ 5 քայլ
Ikea Light Hack (flexin Your Light). Երբ որոշեցի բարելավել իմ գրասեղանի լուսավորությունը, ես դիմեցի Ikea- ին: Ես ձեռք բերեցի Ikea Jansjo- ն (http://www.ikea.com/us/en/catalog/products/10128748) և Ikea Lack- ը (http://www.ikea.com/us/en/catalog/products/60124272 ) և սխալմամբ գցեց անդորրագիրը