Πίνακας περιεχομένων:

Dot Light Pattern: 6 βήματα
Dot Light Pattern: 6 βήματα

Βίντεο: Dot Light Pattern: 6 βήματα

Βίντεο: Dot Light Pattern: 6 βήματα
Βίντεο: МАСТЕР КЛАСС! Вяжем крючком. Влюблённые Райские птички! 2024, Ιούλιος
Anonim
Image
Image
Dot Light Pattern
Dot Light Pattern
Dot Light Pattern
Dot Light Pattern

Ξεκίνησα με την ιδέα "Μπορώ να ελέγξω το φως με τα χέρια μου και να εκφράσω τη δική μου θέληση;"

Πρόκειται για ένα «Dot Light Pattern» που σας επιτρέπει να δημιουργήσετε μόνοι σας τα δικά σας χρώματα, να σχεδιάσετε τα δικά σας σχέδια με αυτά τα χρώματα και να ζήσετε διάφορα εφέ κινούμενων σχεδίων.

Βήμα 1: Υλικά

Υλικά
Υλικά
Υλικά
Υλικά
Υλικά
Υλικά
Υλικά
Υλικά
  1. Arduino UNO x 13
  2. Λωρίδα LED WS2901 ή WS2811 pixel (130 LEDS)
  3. Διακόπτης κουμπιού x 1
  4. Διακόπτης snap x 65
  5. Δυνατόμετρο x 65
  6. Καλώδιο ουράνιου τόξου
  7. Ισχυρό SMPS
  8. Καλώδιο αγωγού
  9. Ακρυλική διαφανής στρογγυλή ράβδος (διάμετρος 30 mm)
  10. Μαύρο χρώμα Ακρυλική σανίδα (5T) (500mm*790mm) x 2, (500mm*35mm) x 2, (790mm*35mm) x 2

Βήμα 2: Σχέδιο κατασκευής

Κατασκευαστικό Σχέδιο
Κατασκευαστικό Σχέδιο
Κατασκευαστικό Σχέδιο
Κατασκευαστικό Σχέδιο
Κατασκευαστικό Σχέδιο
Κατασκευαστικό Σχέδιο
Σχέδιο Κατασκευής
Σχέδιο Κατασκευής

Βήμα 3: Υλικό: Σχεδιασμός κυκλωμάτων

Υλικό: Σχεδιασμός κυκλωμάτων
Υλικό: Σχεδιασμός κυκλωμάτων
Υλικό: Σχεδιασμός κυκλωμάτων
Υλικό: Σχεδιασμός κυκλωμάτων
Υλικό: Σχεδιασμός κυκλωμάτων
Υλικό: Σχεδιασμός κυκλωμάτων
  1. Κόψτε την ακρυλική πλάκα όπως η παραπάνω δομή. (δείτε βήμα 2)

  2. Ένα κομμάτι LED νεο-εικονοστοιχείων τοποθετείται στο επάνω και κάτω μέρος της οπής του μετρητή δυναμικότητας και συνολικά 65 ζεύγη LED νεο-εικονοστοιχείων είναι προσαρτημένα.
  3. Ένα ζευγάρι LED neo-pixel συνδέεται μεταξύ τους για να σχηματίσει ένα μόνο pin Arduino.
  4. Τοποθετήστε 65 μετρητές ισχύος στις οπές του μετρητή ισχύος. (Τοποθετήστε το στην αντίθετη πλευρά μιας νεο-εικονοστοιχείης επιφάνειας.)
  5. Συνδέστε 65 διακόπτες για να ταιριάζουν με τις οπές του διακόπτη.
  6. Συνολικά δεκατρείς UNO Arduino είναι προσαρτημένες σε καθεμία από τις δεκατρείς ζώνες, προκειμένου να δέσουν πέντε κομμάτια από 65 κομμάτια υλικού σε ένα Arduino UNO.
  7. Όπως φαίνεται στη συνημμένη φωτογραφία, συνδέστε τα καλώδια μέτρησης, τους διακόπτες και τα LED neo-pixel στις ακίδες του Arduino UNO με σύρμα. (δείτε βήμα 2)
  8. Οι ακίδες GND και 5V πολλών UNO του Arduino συλλέγονται σε καλώδια καλωδίων και στη συνέχεια συνδέονται με εξωτερική τροφοδοσία. (δείτε βήμα 2)

  9. Αφαιρέστε τη σκόνη με πίεση αέρα.

Βήμα 4: Υλικό: Ακρυλική κοπή

Υλικό: Ακρυλική κοπή
Υλικό: Ακρυλική κοπή
Υλικό: Ακρυλική κοπή
Υλικό: Ακρυλική κοπή
Υλικό: Ακρυλική κοπή
Υλικό: Ακρυλική κοπή
  1. Κόψτε την ακρυλική ράβδο σε μήκος 50mm.
  2. Η μία πλευρά της ακρυλικής ράβδου τρυπιέται στο μέγεθος και το βάθος για να ταιριάζει με το τμήμα ελεγκτή του μετρητή ισχύος.
  3. Η ακρυλική ράβδος κόβεται ελαφρώς ευρύτερα από την τρύπα για ένα διάκενο που μπορεί να χωρέσει καλά στο μετρητή δύναμης.
  4. Η άλλη πλευρά δίνει λίγο γυαλόχαρτο έτσι ώστε το φως να μεταδίδεται τακτοποιημένα.

Βήμα 5: Κώδικας προγραμματισμού Arduino

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 = {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 byte 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]; sat = 255 - dim_curve [255 - sat];

// 색조, 및 밝기 (HSB /HSV) 를 RGB 로 변환

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

int r?

int g? int β? int βάση?

αν (κάθισε == 0) {

χρώματα [δείκτης] [0] = val; χρώματα [δείκτης] [1] = val; χρώματα [δείκτης] [2] = val; } αλλο {

βάση = ((255 - sat) * 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] = g; χρώματα [δείκτης] [2] = b; }

}

int rgb_colors [NUM_LIGHTS] [3]; // 네오 픽셀 오브젝트 갯수 마다 rgb χρώμα

int hue [NUM_LIGHTS]; // 네오 픽셀 오브젝트 갯수 ue απόχρωση 선언 int sat [NUM_LIGHTS]; // 네오 픽셀 오브젝트 갯수 마다 명도 선언 int brignt [NUM_LIGHTS]; // 네오 픽셀 오브젝트 갯수 마다 밝기

// 일반 변수 선언

int fillonSwitch = {8, 9, 10, 11, 12}; // on/off 버튼 핀 ole boolean startState = {false, false, false, false, false, false}; // ενεργοποίηση/απενεργοποίηση 변수

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

int colorVal = {0, 0, 0, 0, 0}; // 가변 저항 초기 값

int animationButton = 7; // 애니메이션 모드 변환 버튼 핀

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

// 애니메이션 모든 변환 을 위한 버튼 디 선언 선언 디 // 디 바운싱; Button 시간 내 많은 이벤트 가 발생 대한 대해서 button 해결 해결 해결 해결 해결 해결 button int buttonState; // 입력 핀 으로부터 의 현재 판독 값 int lastButtonState = HIGH; // 이전 의 판독 값 은 켜진 로 로 χωρίς υπογραφή long lastDebounceTime = 0; // 출력 핀 이 마지막 으로 전환 된 은 은 0 으로 ανυπόγραφο μακρύ debounceDelay = 50; // 디 바운싱 타임 설정; 출력 이 깜빡 한다 한다 MO 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]; // 블 링킹 을 위한 각 모듈 모듈 의

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

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

ανυπόγραφο μακρύ ρεύμαMillis; // 현재 시간 변수

ανυπόγραφο μακρύ B_previousMillis [5]; // 각 모듈 의 블 링킹 타이머 ανυπόγραφο μακρύ DR_Millis [5]; // 각 모듈 의 디밍 랜덤 예비 (예비) ανυπόγραφο μακρύ R_previousMillis; // 레인보우 타이머 ανυπόγραφο μακρύ D_previousMillis; // 디밍 타이머

boolean firstRainbow = true; // 레인보우 색상 초기화 상태 변수

int RainbowSpeed; // 레인보우 변환 변수

int Bright = 100; // 디밍 초기 값 int BrightnessFactor = 1; // 디밍 증감 값 ////////////////////////////////////////// ///////////////////////////////////////

void setup () {

για (int i = 0; i <NUM_LIGHTS; i ++) {pixels .begin (); // 네오 픽셀 오브젝트 초기화}

// 버튼 인풋 설정

για (int i = 0; i <NUM_LIGHTS; i ++) {pinMode (startSwitch , INPUT_PULLUP); // ενεργοποίηση/απενεργοποίηση pin 인풋 설정} pinMode (animationButton, INPUT_PULLUP); // 애니메이션 버튼 인풋 설정

για (int i = 0; i <NUM_LIGHTS; i ++) {B_Interval = int (τυχαία (B_Min, B_Max)); // 모듈 별 블 링킹 랜덤 인터발 (인터발) 생성 생성}

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

}

void loop () {

MODE = CheckAnimMode (); // 모드 에 애니메이션 체크 모드 함수 를

// 버튼 과 가변 저항 을 값 을 각각.

για (int i = 0; i <NUM_LIGHTS; i ++) {startState =! digitalRead (startSwitch ); // ενεργοποίηση/απενεργοποίηση 을 에서 읽은 값 의 반대 을 startState 에 넣어 준다 // startState = digitalRead (startSwitch ); colorVal = analogRead (colorPin ); // 가변 저항 에서 읽은 값 을 가변 저항 초기 값 에 넣는다 넣는다}

διακόπτης (MODE) {// 애니메이션 함수 스위치 문

περίπτωση 0: on (); // στο 실행 실행 διάλειμμα; // 조건문 에서 빠져 나가라

περίπτωση 1:

ΟΥΡΑΝΙΟ ΤΟΞΟ(); // ουράνιο τόξο 실행 실행 διάλειμμα;

περίπτωση 2:

dimming ()? // εξασθένιση 실행 실행 διάλειμμα;

περίπτωση 3:

αναβοσβήνει (); // αναβοσβήνει 실행 실행 διάλειμμα; }

για (int i = 0; i <NUM_LIGHTS; i ++) {pixels . show (); // 네오 픽셀 오브젝트 배열 켜라}

}

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

int CheckAnimMode () {

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

///////////////////////////////////////////////////////// /// currentMillis = millis (); // 시간 측정 int ανάγνωση = digitalRead (animationButton); εάν (ανάγνωση! = lastButtonState) {// 입력 핀 으로부터 이전 의 버튼 의 상태 비교 비교 비교 lastDebounceTime = millis (); // 현재 시간 을 출력 핀 이 마지막 으로 전환 된 시간 넣음 넣음 넣음}

if ((currentMillis - lastDebounceTime)> debounceDelay) {

εάν (ανάγνωση! = buttonState) {// 입력 핀 으로부터 받은 현재 값 과 판독

buttonState = ανάγνωση; // 판독 값 을 buttonState 에

εάν (buttonState == LOW) {// 버튼 상태 가 꺼져 있다면

MODE ++; // 버튼 모드 1 씩 증가 if (MODE> 3) {MODE = 0; firstRainbow = true; // 레인보우 색상 초기화 상태 켜짐 BrightnessFactor = 1; // 디밍 증감 값 Φωτεινό = 15; // 밝기 는 15}}}}

lastButtonState = ανάγνωση; // 판독 값 을 이전 의 버튼 상태 상태

επιστροφή MODE? Λειτουργία 함수 를 종료 하고 함수 로 값 을 하라 하라}

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

// λειτουργία λειτουργίας animation

//επί

void on () {Serial.println ("on"); // 시리얼 모니터 에 σε 을 써라 για (int i = 0; i <NUM_LIGHTS; i ++) {color_set (i, colorVal ); // 가변 저항 값 에 따라 컬러 셋팅}}}

//ΟΥΡΑΝΙΟ ΤΟΞΟ

void rainbow () {Serial.println ("βροχή"); // 시리얼 모니터 에 βροχή 을 써라 αν (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); // 레인보우 컬러 셋팅}

}

// Dimming

void dimming () {Serial.println ("dimm"); // 시리얼 모니터 에 dimm 을 써라 Serial.println (Bright); // 시리얼 모니터 에 Bright 를 써라 if (currentMillis - D_previousMillis> D_Interval) {// 흐른 시간 값 이 디밍 인터벌 값 _ D_previousMillis = currentMillis; // 현재 시간 을 이전 의 디밍 시간 에 ight Bright += BrightnessFactor; // 밝기 에 디밍 증감 값 1 씩 올려라} εάν (Bright 254) {BrightnessFactor = -1 * BrightnessFactor; } Bright = περιορισμός (Bright, 99, 254); // 변수 밝기 값 을 최소값 99 ~ 최대 값 254 사이 의 값 으로 한정

για (int i = 0; i <NUM_LIGHTS; i ++) {dim_color_set (i, Bright); // 디밍 컬러 셋팅}}

// Αναβοσβήνει

void blinking () {Serial.println ("blink"); // 시리얼 모니터 에 αναβοσβήνει 를 써라

για (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); // 읽히지 않으면 컬러 셋팅 하지 않음}}

}

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

// βασικός συντελεστής

// σύνολο χρωμάτων

void color_set (int index, int colorSenser) {

if (startState [index]) {hue [index] = map (colorSenser, 0, 1023, 0, 359); // 0 ~ 1023 을 0 ~ 359 값 으로 매핑 한 값 을 가지고 color color color (colorSenser) getRGB (απόχρωση [δείκτης], 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 index) {// 컬러 셋팅 하지 않는 함수

για (int i = 0; i <NUMPIXELS; i ++) {pixels [index].setPixelColor (i, pixels [index]. Color (0, 0, 0)); } // 픽셀 컬러 세팅 을 0, 0, 0 설정 설정}

//// σετ dimColor

void 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 color color color (colorVal 에) getRGB (απόχρωση [δείκτης], 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 으로 설정} αλλιώς noColor_set (ευρετήριο); // 컬러 셋팅 하지 않음}

Βήμα 6: Μια τελική ματιά

Συνιστάται: