Агуулгын хүснэгт:
- Алхам 1: Материал
- Алхам 2: Барилгын төлөвлөгөө
- Алхам 3: Тоног төхөөрөмж: хэлхээний дизайн
- Алхам 4: Тоног төхөөрөмж: нийлэг хайчлах
- Алхам 5: Arduino програмчлалын код
- Алхам 6: Дууссан харагдац
Видео: Цэгийн гэрэл хэв маяг: 6 алхам
2024 Зохиолч: John Day | [email protected]. Хамгийн сүүлд өөрчлөгдсөн: 2024-01-30 11:04
Би "Гэрлийг өөрийн гараар удирдаж, өөрийн хүслээ илэрхийлж чадах уу?" Гэсэн санаагаар эхэлсэн.
Энэ бол 'Dot Light Pattern' бөгөөд та өөрийн өнгийг өөрийн гараар бүтээх, эдгээр өнгөөр өөрийн загварыг зохиох, янз бүрийн хөдөлгөөнт эффектийг мэдрэх боломжийг олгодог.
Алхам 1: Материал
- Arduino UNO x 13
- WS2901 эсвэл WS2811 пикселийн LED зурвас (130 LED)
- Товчлуур x 1
- Шилжүүлэгч х 65
- Чадвар хэмжигч x 65
- Солонго кабель
- SMPS -ийн хүч чадал хангалттай
- Дамжуулагч кабель
- Нийлэг тунгалаг дугуй баар (30мм диаметртэй)
- Хар өнгийн нийлэг хавтан (5T) (500мм*790мм) х 2, (500мм*35мм) х 2, (790мм*35мм) х 2
Алхам 2: Барилгын төлөвлөгөө
Алхам 3: Тоног төхөөрөмж: хэлхээний дизайн
-
Нийлэг хавтанг дээрх бүтэц шиг хайчилж ав. (2 -р алхамыг үзнэ үү)
- Потенциометрийн нүхний дээд ба доод хэсэгт нэг ширхэг нео пикселийн LED байрлуулсан бөгөөд нийт 65 хос нео пикселийн LED холбосон байна.
- Хос нео пикселийн LED-ийг хооронд нь холбож нэг Arduino зүү үүсгэдэг.
- 65 потенциал хэмжигчийг нүхний нүхэнд суулгана. (Нео пикселжүүлсэн гадаргуугийн эсрэг талд байрлуулна уу.)
- Шилжүүлэгчийн нүхэнд тааруулахын тулд 65 товчлуурыг холбоно уу.
- Нийт арван гурван Ардуино НҮБ -ыг арван гурван бүс бүрт холбож, таван ширхэг 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 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)}; //// 네오 픽셀 을 사용 하기 위해 객체 하나 하나 다 한 다. // 첫번째 인자 값 은 네오 픽셀 의 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 hue, int sat, int val, int өнгө [5] [3], int индекс) {
val = бүдэг_ муруй [val]; sat = 255 - dim_curve [255 - суусан];
// 색조, 채도 및 밝기 (HSB /HSV), RGB 로 변환
// dim_curve 는 밝기 값 및 채도 (반전) 에서만 사용 됩니다. // 이것은 가장 자연스럽게 보입니다.
int r;
int g; int b; int суурь;
хэрэв (суусан == 0) {
өнгө [индекс] [0] = үнэ; өнгө [индекс] [1] = үнэ; өнгө [индекс] [2] = үнэ; } өөр {
суурь = ((255 - суусан) * вал) >> 8;
солих (өнгө / 60) {
тохиолдол 0: r = val; g = (((вал - суурь) * өнгө) / 60) + суурь; b = суурь; завсарлага;
тохиолдол 1:
r = (((вал - суурь) * (60 - (өнгө % 60))) / 60) + суурь; g = үнэ; b = суурь; завсарлага;
тохиолдол 2:
r = суурь; g = үнэ; b = (((val - суурь) * (өнгө % 60)) / 60) + суурь; завсарлага;
тохиолдол 3:
r = суурь; g = (((вал - суурь) * (60 - (өнгө % 60))) / 60) + суурь; b = val; завсарлага;
тохиолдол 4:
r = (((val - суурь) * (өнгө % 60)) / 60) + суурь; g = суурь; b = val; завсарлага;
тохиолдол 5:
r = val; g = суурь; b = (((вал - суурь) * (60 - (өнгө % 60))) / 60) + суурь; завсарлага; }
өнгө [индекс] [0] = r;
өнгө [индекс] [1] = g; өнгө [индекс] [2] = b; }
}
int rgb_colors [NUM_LIGHTS] [3]; // 네오 픽셀 오브젝트 갯수 마다 rgb өнгө 선언
int hue [NUM_LIGHTS]; // 네오 픽셀 오브젝트 갯수 마다 hue 선언 int sat [NUM_LIGHTS]; // 네오 픽셀 오브젝트 갯수 마다 명도 선언 int brignt [NUM_LIGHTS]; // 네오 픽셀 오브젝트 갯수 마다 밝기 서언
// 일반 변수 선언
int startSwitch = {8, 9, 10, 11, 12}; // асаах/унтраах 버튼 핀 번호 boolean 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; // 이전 의 판독 값 은 켜진 상태 로 гарын үсэг зураагүй long lastDebounceTime = 0; // 출력 핀 이 마지막 으로 전환 된 시간 은 0 으로 гарын үсэг зураагүй урт 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; // 디밍 속도 변수
boolean B_state [5]; // 블 링킹 을 위한 각 모듈 의 상태 변수
///////////////////////////////////////////////////////
// 멀티 테스 킹 애니메이션 을 위한 시간 변수 선언
гарын үсэг зураагүй урт гүйдэл Миллис; // 현재 시간 변수
гарын үсэг зураагүй урт B_previousMillis [5]; // 각 모듈 의 블 링킹 타이머 гарын үсэггүй урт DR_Millis [5]; // 각 모듈 의 디밍 랜덤 타이머 (예비) гарын үсэг зураагүй урт R_previousMillis; // 레인보우 타이머 гарын үсэг зураагүй урт D_previousMillis; // 디밍 타이머
boolean firstRainbow = үнэн; // 레인보우 색상 초기화 상태 변수
int RainbowSpeed; // 레인보우 변환 변수
int Bright = 100; // 디밍 초기 값 int BrightnessFactor = 1; // 디밍 증감 값 ////////////////////////////////////////////// /////////////////////////////////////////
хүчингүй тохиргоо () {
for (int i = 0; i <NUM_LIGHTS; i ++) {пиксел .begin (); // 네오 픽셀 오브젝트 초기화}
// 버튼 인풋 설정
for (int i = 0; i <NUM_LIGHTS; i ++) {pinMode (startSwitch , INPUT_PULLUP); // асаах/унтраах 버튼 인풋 설정} pinMode (animationButton, INPUT_PULLUP); // 애니메이션 버튼 인풋 설정
for (int i = 0; i <NUM_LIGHTS; i ++) {B_Interval = int (санамсаргүй (B_Min, B_Max)); // 모듈 별 블 링킹 랜덤 속도 (인터발) 변수 생성}
Цуваа эхлэх (9600); // 통신 설정
}
void loop () {
MODE = CheckAnimMode (); // 모드 에 애니메이션 체크 모드 함수 를 를
// 버튼 과 가변 저항 을 값 을 읽 읽어 변수 에 다 한다.
for (int i = 0; i <NUM_LIGHTS; i ++) {startState =! digitalRead (startSwitch ); // асаах/унтраах St 에서 읽은 값 의 반대 값 St startState 에 넣어 준다 // startState = digitalRead (startSwitch ); colorVal = analogRead (colorPin ); // 가변 저항 에서 읽은 값 을 가변 저항 초기 값 에 넣는다}
унтраалга (MODE) {// 애니메이션 함수 스위치 문
тохиолдол 0: дээр (); // дээр 함수 실행 завсарлага; // 조건문 에서 빠져 나가라
тохиолдол 1:
солонго (); // солонго 함수 실행 завсарлага;
тохиолдол 2:
бүдэгрүүлэх (); // бүдэгрүүлэх 함수 실행 завсарлага;
тохиолдол 3:
анивчих (); // анивчих 함수 실행 завсарлага; }
for (int i = 0; i <NUM_LIGHTS; i ++) {пиксел .show (); // 네오 픽셀 오브젝트 배열 켜라}
}
/////////////////////////////////////////////////////////////
int CheckAnimMode () {
// 애니메이션 선택 버튼 을 읽어 모드 를 결정 한다.
///////////////////////////////////////////////////// /// currentMillis = millis (); // 시간 측정 int унших = digitalRead (animationButton); if (унших! = lastButtonState) {// 입력 핀 으로부터 이전 의 버튼 의 상태 와 판독 값 비교 lastDebounceTime = millis (); // 현재 시간 을 출력 핀 이 마지막 으로 전환 된 시간 에 넣음}
if ((currentMillis - lastDebounceTime)> debounceDelay) {
хэрэв (уншиж байна! = товч Төрийн) {// 입력 핀 으로부터 받은 현재 값 과 판독 값 과 비교
buttonState = унших; // 판독 값 을 товч Төрийн төлөв 에 대입
if (buttonState == LOW) {// 버튼 상태 가 꺼져 있다면
MODE ++; // 버튼 모드 1 씩 증가 if (MODE> 3) {MODE = 0; firstRainbow = үнэн; // 레인보우 색상 초기화 상태 켜짐 BrightnessFactor = 1; // 디밍 증감 값 Bright = 15; // 밝기 는 15}}}}
lastButtonState = унших; // 판독 값 을 이전 의 버튼 상태 에 대입
буцах горим; 함수 를 종료 하고 горим 함수 로 값 을 리턴 하라}
////////////////////////////////////////////////////////////////////
// анимацийн горимын функц
// дээр
void on () {Serial.println ("on"); // 시리얼 모니터 에 дээр int 써라 (int i = 0; i <NUM_LIGHTS; i ++) {color_set (i, colorVal ); // 가변 저항 값 에 따라 컬러 셋팅}}
// Солонго
хоосон солонго () {Serial.println ("бороо"); // 시리얼 모니터 에 бороо 을 써라 if (firstRainbow) {RainbowSpeed = 0; // 레인보우 속도 초기화 firstRainbow = худал; // 레인보우 색상 초기화 상태 꺼짐} if (millis () - R_previousMillis> R_Interval) {// 흐른 시간 값 이 레인보우 인터벌 값 보다 크면 R_previousMillis = currentMillis; // 현재 시간 을 이전 의 레인보우 시간 에 넣어 라 RainbowSpeed += 10; // 레인보우 변환 변수 에 10 을 더해라}
for (int i = 0; i <NUM_LIGHTS; i ++) {color_set (i, (colorVal +RainbowSpeed) % 1023); // 레인보우 컬러 셋팅}
}
// Бүдгэрүүлэх
void dimming () {Serial.println ("dimm"); // 시리얼 모니터 에 dimm 을 써라 Serial.println (Bright); // 시리얼 모니터 에 Bright 를 써라 if (currentMillis - D_previousMillis> D_Interval) {// 흐른 시간 값 이 디밍 인터벌 값 보다 크면 D_previousMillis = currentMillis; // 현재 시간 을 이전 의 디밍 시간 에 넣어 Bright += BrightnessFactor; // 밝기 에 디밍 증감 값 1 씩 올려라} if (Bright 254) {BrightnessFactor = -1 * BrightnessFactor; } Bright = хязгаарлах (Bright, 99, 254); // 변수 밝기 값 을 최소값 99 ~ 최대 254 사이 의 값 으로 한정 한다
for (int i = 0; i <NUM_LIGHTS; i ++) {dim_color_set (i, Bright); // 디밍 컬러 셋팅}}
// Нүдээ анивчдаг
void blinking () {Serial.println ("анивчих"); // 시리얼 모니터 에 анивчих 를 써라
for (int i = 0; i B_Interval ) {// 흐른 시간 값 이 블링크 인터벌 값 보다 크면
B_previousMillis = currentMillis; // 현재 시간 을 이전 의 블링크 시간 에 넣어 라 B_state =! B_state ; // 각 모듈 의 블 링킹 상태 변수 의 값 의 반대 값 을 하라}} for (int i = 0; i <NUM_LIGHTS; i ++) {if (B_state ) {// 모듈 의 블 링킹 상태 가 읽 히면 color_set (i, colorVal ); // 가변 저항 값 에 따라 컬러 셋팅} өөр {noColor_set (i); // 읽히지 않으면 컬러 셋팅 하지 않음}}
}
////////////////////////////////////////////////////////////////////////////////////////
// үндсэн чиг үүрэг
// өнгөний багц
хүчингүй color_set (int index, int colorSenser) {
if (startState [index]) {hue [index] = map (colorSenser, 0, 1023, 0, 359); // 0 ~ 1023 값 ~ 0 ~ 359 값 으로 매핑 한 값 을 가지고 색상 값 으로 color (colorSenser 에) getRGB (hue [index], 255, 255, rgb_colors, index); for (int i = 0; i <NUMPIXELS; i ++) {пиксел [индекс].setPixelColor (i, пиксел [индекс]. Өнгө (rgb_colors [index] [0], rgb_colors [index] [1], rgb_colors [index] [2])); } // 픽셀 컬러 셋팅 을 rgb_colors 의 r, g, b 으로 설정} өөр noColor_set (индекс); // 컬러 셋팅 하지 않음}
////// noColor set
хүчингүй noColor_set (int index) {// 컬러 셋팅 하지 않는 함수 설정
for (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 (colorVal 에) getRGB (hue [index], 255, BC, rgb_colors, index); for (int i = 0; i <NUMPIXELS; i ++) {пиксел [индекс].setPixelColor (i, пиксел [индекс]. Өнгө (rgb_colors [index] [0], rgb_colors [index] [1], rgb_colors [index] [2])); } /// 픽셀 컬러 셋팅 을 rgb_colors 의 r, g, b 으로 설정} өөр noColor_set (индекс); // 컬러 셋팅 하지 않음}
Алхам 6: Дууссан харагдац
Зөвлөмж болгож буй:
Эхлэгчдэд зориулсан DJ -ийн тохиргоог хэрхэн яаж хийх вэ - Винил хэв маяг! 7 алхам
Эхлэгчдэд зориулсан DJ -ийн тохиргоог хэрхэн яаж хийх вэ - Винил хэв маяг! Энэхүү зааварчилгаанд би винил ашиглан сонгодог эргэдэг ширээний хэв маягаар DJ -ийн тохиргоог хэрхэн хийхийг танд үзүүлэх болно. Та хобби сонирхогч эсвэл мэргэжлийн хүн болж, орлого олохын тулд дэлхийн өнцөг булан бүрт аялахыг хүсч байгаа эсэхээс үл хамааран эдгээр алхамуудыг хийх болно
Memory Stick модон гуулин хөнгөн цагаан хэв маяг: 6 алхам
Санах ойн зөөгч Модон гуулин Хөнгөн цагаан хэв маяг: Би үүнийг яаж хийснийг хүлээн зөвшөөрдөггүй. Би зөв хэмжээтэй, нарийн утсаар үхсэн байсан тул би үүнийг ашигласан. Би тэдгээрийг бага зэрэг шулуун байдлаар хайчилж авсан тул үүнийг шийдэхийн тулд бага зэрэг ажиллах шаардлагатай болсон. Хэрэв та үүнийг өөр аргаар хийвэл үүнийг хийх хэрэгтэй … би үүнийг хүсч байсан
Термохромын хэв маяг: 7 алхам (зурагтай)
Thermochromic Patterns: Хэрэв та дизайн хийх шинэ материал хайж байгаа бол термохромын будаг нь таны хүссэн зүйл байж магадгүй юм. Энэхүү гарын авлагыг дагаж интерактив термохромын загварыг хэрхэн бүтээх талаар олж мэдээрэй
Модон LED цаг - Аналог хэв маяг: 11 алхам (зурагтай)
Модон LED цаг - Аналог хэв маяг: Энэ бол аналог загварын модон LED цаг юм. Яагаад эдгээрийн нэгийг нь өмнө нь харж байгаагүй юм бол бүү мэд .. хэдийгээр дижитал хэлбэрүүд маш түгээмэл байдаг. Ямар ч байсан, бид явцгаая
Нүдэнд тусах дэлгэцийг хэрхэн яаж үүсгэх вэ (LED хэв маяг): 9 алхам (зурагтай)
Нүдэнд тусах дэлгэцийг хэрхэн яаж бүтээх вэ (LED Style): Энэ бол миний сургуулийн төсөл хэрхэн хийсэн тухай бичлэг шиг сургамжтай зүйл биш юм. Яг миний хийсэн зүйлийг давтах нь танд тус болохгүй байж магадгүй ч энэ төслийг бараг бүх дэлгэцийг илүү анхаарал татахуйц болгож өөрчлөх боломжтой