Мазмұны:

Нүктелік жарық үлгісі: 6 қадам
Нүктелік жарық үлгісі: 6 қадам

Бейне: Нүктелік жарық үлгісі: 6 қадам

Бейне: Нүктелік жарық үлгісі: 6 қадам
Бейне: ЧУПАКАБРА ма, әлде ЖЫН ба?#тылсымдүние #td #төреденбірвидео 2024, Қараша
Anonim
Image
Image
Нүктелік жарық үлгісі
Нүктелік жарық үлгісі
Нүктелік жарық үлгісі
Нүктелік жарық үлгісі

Мен «Жарықты өз қолыммен басқара аламын ба және өз еркімді білдіре аламын ба?» Деген идеядан бастадым.

Бұл өзіңіздің жеке түстеріңізді жасауға, сол түстермен өз үлгілеріңізді жасауға және әр түрлі анимациялық эффектілерді көруге мүмкіндік беретін 'нүктелік жарық үлгісі'.

1 -қадам: материалдар

Материалдар
Материалдар
Материалдар
Материалдар
Материалдар
Материалдар
Материалдар
Материалдар
  1. Arduino UNO x 13
  2. WS2901 немесе WS2811 пиксельді жарықдиодты жолақ (130 жарықдиодты)
  3. Түймешік x 1
  4. Қосқыш x 65
  5. Потенциалды өлшегіш x 65
  6. Радуга кабелі
  7. SMPS қуаты жеткілікті
  8. Өткізгіш кабель
  9. Акрил мөлдір дөңгелек жолақ (диаметрі 30 мм)
  10. Қара түсті акрил тақтасы (5T) (500мм*790мм) х 2, (500мм*35мм) х 2, (790мм*35мм) х 2

2 -қадам: Құрылыс жоспары

Құрылыс жоспары
Құрылыс жоспары
Құрылыс жоспары
Құрылыс жоспары
Құрылыс жоспары
Құрылыс жоспары
Құрылыс жоспары
Құрылыс жоспары

3 -қадам: Аппараттық құралдар: схеманы жобалау

Аппараттық құралдар: контур дизайны
Аппараттық құралдар: контур дизайны
Аппараттық құралдар: контур дизайны
Аппараттық құралдар: контур дизайны
Аппараттық құралдар: контур дизайны
Аппараттық құралдар: контур дизайны
  1. Акрил пластинасын жоғарыдағы құрылым сияқты кесіңіз. (2 -қадамды қараңыз)

  2. Нео-пиксельді жарықдиодтың бір бөлігі потенциалометр саңылауының үстіңгі және астыңғы жағына қойылады және барлығы 65 жұп нео-пиксельді жарықдиодты бекітілген.
  3. Нео-пиксельді светодиодтар бір Arduino түйреуішін қалыптастыру үшін сымға қосылады.
  4. Потенциалды өлшеуіш тесіктерге 65 потенциалды өлшегішті салыңыз. (Неопиксельденген беттің қарама-қарсы жағына қойыңыз.)
  5. Ажыратқыш саңылауларына сәйкес келу үшін 65 қосқышты бекітіңіз.
  6. Барлығы он үш зонаға Arduino БҰҰ -ның бір бөлігі Arduino UNO -ға 65 аппараттық құралдың бес бөлігін қосу үшін бекітілген.
  7. Қосымша фотода көрсетілгендей, потенциалды өлшегіштерді, қосқыштарды және нео-пиксельді жарық диодтарын Arduino UNO түйреуіштеріне сым арқылы қосыңыз. (2 -қадамды қараңыз)
  8. Бірнеше Arduino UNO -ның GND және 5V түйреуіштері кабельдік сымдарға жиналады, содан кейін сыртқы қуатқа қосылады. (2 -қадамды қараңыз)
  9. Ауа қысымымен шаңды кетіріңіз.

4 -қадам: Жабдық: акрилмен кесу

Жабдық: акрилмен кесу
Жабдық: акрилмен кесу
Жабдық: акрилмен кесу
Жабдық: акрилмен кесу
Жабдық: акрилмен кесу
Жабдық: акрилмен кесу
  1. Акрил таяқшасын ұзындығы 50 мм етіп кесіңіз.
  2. Акрил шыбықтың бір жағы потенциалометрдің реттегіш бөлігіне сәйкес келу үшін өлшемі мен тереңдігіне дейін бұрғыланады.
  3. Акрил таяқшасы саңылаудан сәл кеңірек, ол потенциалометрге жақсы сыяды.
  4. Екінші жағы жарықты ұқыпты беру үшін кішкене зімпара береді.

5 -қадам: Arduino бағдарламалау коды

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

'hsb to rgb' коды 를 참고 한 사이트

#қосу

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

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

#PIN1 анықтау 2 #PIN2 анықтау 3 #PIN3 анықтау 4 #PIN4 анықтау 5 5 #PIN5 анықтау 6

#depine NUMPIXELS 2 // жарықдиодты шам

#анықтау 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 байт 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 = dim_curve [val]; sat = 255 - dim_curve [255 - отырды];

// 색조, 채도 및 밝기 (HSB /HSV) және RGB 변환

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

int r;

int g; int b; int базасы;

егер (отырды == 0) {

түстер [индекс] [0] = val; түстер [индекс] [1] = вал; түстер [индекс] [2] = val; } басқа {

base = ((255 - sat) * val) >> 8;

ауыстырғыш (реңк / 60) {

0 жағдай: r = val; g = (((val - негіз) * реңк) / 60) + негіз; b = негіз; үзіліс;

1 -жағдай:

r = (((val - базалық) * (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 = (((val - базалық) * (60 - (реңк % 60))) / 60) + негіз; үзіліс; }

түстер [индекс] [0] = r;

түстер [индекс] [1] = g; түстер [индекс] [2] = b; }

}

int rgb_colors [NUM_LIGHTS] [3]; // 네오 픽셀 오브젝트 갯수 마다 rgb түсі 선언

int реңкі [NUM_LIGHTS]; // 네오 픽셀 오브젝트 갯수 ue реңк 선언 int sat [NUM_LIGHTS]; // 네오 픽셀 오브젝트 갯수 마다 선언 선언 int brignt [NUM_LIGHTS]; // 네오 픽셀 오브젝트 갯수 마다 밝기 서언

// 일반 변수 선언

int startSwitch = {8, 9, 10, 11, 12}; // қосу/өшіру 번호 핀 번호 логикалық 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 int buttonState; // 입력 핀 으로부터 의 현재 판독 값 int lastButtonState = HIGH; // 이전 의 판독 값 은 로 로 로 белгісіз ұзақ lastDebounceTime = 0; // 출력 핀 이 마지막 으로 전환 된 시간 은 0 으로 unsigned long debounceDelay = 50; // 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 Bright = 100; // Br 초기 값 int BrightnessFactor = 1; // 디밍 증감 값 //////////////////////////////////////////// // ////////////////////////////////////////

жарамсыз орнату () {

for (int i = 0; i <NUM_LIGHTS; i ++) {пиксель .begin (); // 네오 픽셀 오브젝트 초기화}

// 버튼 인풋 설정

for (int i = 0; i <NUM_LIGHTS; i ++) {pinMode (startSwitch , INPUT_PULLUP); // қосу/өшіру pin 인풋 설정} pinMode (animationButton, INPUT_PULLUP); // 애니메이션 버튼 인풋 설정

for (int i = 0; i <NUM_LIGHTS; i ++) {B_Interval = int (кездейсоқ (B_Min, B_Max)); // 모듈 별 블 링킹 랜덤 속도 (인터발) 변수 생성}

Serial.begin (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 ); // 가변 저항 에서 읽은 값 을 가변 저항 초기 초기 에 에 넣는다}

қосқыш (РЕЖИМ) {// 애니메이션 함수 스위치 문

0 жағдай: бойынша (); // on 함수 실행 break; // 조건문 에서 빠져 나가라

1 -жағдай:

кемпірқосақ (); // кемпірқосақ 함수 실행 үзіліс;

2 -жағдай:

күңгірттеу (); // күңгірттеу 함수 실행 үзіліс;

3 -жағдай:

жыпылықтау (); // жыпылықтайды 함수 실행 үзіліс; }

for (int i = 0; i <NUM_LIGHTS; i ++) {пиксель .show (); // 네오 픽셀 오브젝트 배열 켜라}

}

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

int CheckAnimMode () {

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

/// /// currentMillis = миллис (); // reading reading int reading = digitalRead (animationButton); if (read! = 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 = оқу; // 판독 값 을 이전 의 버튼 상태 에 대입

MODE қайтару; 함수 를 종료 하고 режимі 함수 로 값 을 리턴 하라}

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

// анимация режимінің функциясы

// бойынша

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 («жыпылықтау»); // 시리얼 모니터 에 жыпылықтау 를 써라

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

}

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

// негізгі функция

// түс жиынтығы

жарамсыз color_set (int индексі, int colorSenser) {

if (startState [index]) {hue [index] = map (colorSenser, 0, 1023, 0, 359); // 0 ~ 1023 을 0 ~ 359 값 으로 한 한 값 color color color 값 color (colorSenser 에) getRGB (реңк [индекс], 255, 255, rgb_colors, индекс); 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 으로 설정} else noColor_set (индекс); // 컬러 셋팅 하지 않음}

////// noColor жиынтығы

жарамсыз noColor_set (int индексі) {// 컬러 셋팅 하지 않는 함수 설정

for (int i = 0; i <NUMPIXELS; i ++) {пиксель [индекс].setPixelColor (i, пиксельдер [индекс]. Түс (0, 0, 0)); } // 픽셀 컬러 세팅 을 0, 0, 0 으로 설정}

//// dimColor жиынтығы

жарамсыз dim_color_set (int индексі, BC BC) {// 디밍 컬러 셋팅 함수 설정

if (startState [index]) {hue [index] = map (colorVal [index], 0, 1023, 0, 359); // 0 ~ 1023 을 0 ~ 359 한 으로 한 한 값 을 color color 값 color (colorVal 에) getRGB (реңк [индекс], 255, BC, rgb_colors, индекс); 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 으로 설정} else noColor_set (индекс); // 컬러 셋팅 하지 않음}

6 -қадам: Аяқталған көрініс

Ұсынылған: