Სარჩევი:

წერტილოვანი შუქის ნიმუში: 6 ნაბიჯი
წერტილოვანი შუქის ნიმუში: 6 ნაბიჯი

ვიდეო: წერტილოვანი შუქის ნიმუში: 6 ნაბიჯი

ვიდეო: წერტილოვანი შუქის ნიმუში: 6 ნაბიჯი
ვიდეო: ძმამ დას iphone 6 უყიდა 2024, ივლისი
Anonim
Image
Image
წერტილოვანი შუქის ნიმუში
წერტილოვანი შუქის ნიმუში
წერტილოვანი შუქის ნიმუში
წერტილოვანი შუქის ნიმუში

დავიწყე იდეით "შემიძლია გავაკონტროლო სინათლე საკუთარი ხელით და გამოვხატო ჩემი ნება?"

ეს არის "წერტილოვანი შაბლონი", რომელიც საშუალებას გაძლევთ შექმნათ თქვენი საკუთარი ფერები, შეიმუშაოთ თქვენი შაბლონები ამ ფერებით და განიცადოთ სხვადასხვა ანიმაციური ეფექტები.

ნაბიჯი 1: მასალები

მასალები
მასალები
მასალები
მასალები
მასალები
მასალები
მასალები
მასალები
  1. Arduino UNO x 13
  2. WS2901 ან WS2811 პიქსელიანი LED ზოლები (130 LEDS)
  3. ღილაკის გადამრთველი x 1
  4. ვადამდელი გადამრთველი x 65
  5. პოტენციმეტრი x 65
  6. ცისარტყელას კაბელი
  7. სიმძლავრე SMPS
  8. გამტარი კაბელი
  9. აკრილის გამჭვირვალე მრგვალი ბარი (დიამეტრი 30 მმ)
  10. შავი ფერის აკრილის დაფა (5T) (500 მმ*790 მმ) x 2, (500 მმ*35 მმ) x 2, (790 მმ*35 მმ) x 2

ნაბიჯი 2: მშენებლობის გეგმა

მშენებლობის გეგმა
მშენებლობის გეგმა
მშენებლობის გეგმა
მშენებლობის გეგმა
მშენებლობის გეგმა
მშენებლობის გეგმა
მშენებლობის გეგმა
მშენებლობის გეგმა

ნაბიჯი 3: აპარატურა: სქემის დიზაინი

აპარატურა: სქემის დიზაინი
აპარატურა: სქემის დიზაინი
აპარატურა: სქემის დიზაინი
აპარატურა: სქემის დიზაინი
აპარატურა: სქემის დიზაინი
აპარატურა: სქემის დიზაინი
  1. დავჭრათ აკრილის ფირფიტა, როგორც ზემოთ აღწერილი სტრუქტურა. (იხ. ნაბიჯი 2)

  2. ნეოპიქსელიანი LED ერთი ნაჭერი მოთავსებულია პოტენციმეტრის ხვრელის ზედა და ქვედა ნაწილში და სულ 65 წყვილი ნეოპიქსელიანი LED ნათურაა მიმაგრებული.
  3. წყვილი ნეო-პიქსელიანი LED- ები გაერთიანებულია ერთმანეთთან, რათა შექმნან ერთი არდუინოს პინი.
  4. მიამაგრეთ 65 პოტენციური მეტრი პოტენციმეტრის ხვრელებზე. (განათავსეთ იგი ნეო-პიქსელირებული ზედაპირის მოპირდაპირე მხარეს.)
  5. მიამაგრეთ 65 ჩამკეტი, რომელიც ემთხვევა გადართვის ხვრელებს.
  6. სულ ცამეტი Arduino UNO მიმაგრებულია თითოეულ ცამეტ ზონაში, რათა დააკავშიროთ ხუთი ცალი 65 ცალი ტექნიკა ერთ Arduino UNO– ში.
  7. როგორც ნაჩვენებია თანდართულ ფოტოში, შეაერთეთ პოტენციური მრიცხველები, ჩამრთველი ჩამრთველები და ნეოპიქსელიანი LED- ები 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 #განსაზღვრეთ PIN5 6

#განსაზღვრეთ NUMPIXELS 2 // 픽셀 픽셀 LED 갯수

#განსაზღვრეთ NUM_LIGHTS 5 // 작동 모듈 갯수 (네오 픽셀 갯수 갯수)

// 네오 픽셀 오브젝트 მასივი

Adafruit_NeoPixel pixels = {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]; დაჯდა = 255 - dim_curve [255 - დაჯდა];

// 색조, H (HSB /HSV) 를 RGB 변환

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

int r;

int გ; int ბ; int ბაზა;

თუ (დაჯდა == 0) {

ფერები [ინდექსი] [0] = ვალ; ფერები [ინდექსი] [1] = ვალ; ფერები [ინდექსი] [2] = ვალ; } სხვა {

ბაზა = ((255 - იჯდა) * ვალ) >> 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] = რ;

ფერები [ინდექსი] [1] = გ; ფერები [ინდექსი] [2] = ბ; }

}

int rgb_colors [NUM_LIGHTS] [3]; // 네오 픽셀 오브젝트 갯수 마다 rgb ფერი

int ტონი [NUM_LIGHTS]; // 네오 픽셀 오브젝트 갯수 ue შეფერილობა int იჯდა [NUM_LIGHTS]; // 네오 픽셀 오브젝트 갯수 명도 명도 선언 int brignt [NUM_LIGHTS]; // 네오 픽셀 오브젝트 갯수 마다 밝기

// 변수 선언

int იწყებს გადართვას = {8, 9, 10, 11, 12}; // ჩართვა/გამორთვა ole 핀 ole ლოგიკური startState = {ყალბი, ყალბი, ყალბი, ყალბი, ყალბი}; // ჩართვა/გამორთვა

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

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

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

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

// 애니메이션 모든 변환 위한 버튼 버튼 디 선언 선언 디 디 // 디 바운싱? Button 시간 내 가 발생 발생 하는것 시간 해결 해결 해결 해결 해결 해결 해결 해결 int ღილაკი // 핀 으로부터 의 현재 판독 값 int lastButtonState = HIGH; // 이전 의 판독 값 은 켜진 로 로 ხელმოუწერელი long lastDebounceTime = 0; // 출력 핀 이 마지막 으로 전환 된 은 은 0 으로 ხელმოუწერელი გრძელი დებიუანსიგვიანება = 50; // 디 바운싱 타임 설정; MO 이 깜빡 증가 증가 int MODE = 0; // 모드 변수

int B_ ინტერვალი [5]; // 블 링킹 을 위한 각 모듈 모듈 의

int B_Min = 100; // 블 링킹 최단 속도; int B_Max = 500; // 블 링킹 최장 속도; int R_ ინტერვალი = 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 () {

for (int i = 0; i <NUM_LIGHTS; i ++) {pixels . დავიწყო (); // 픽셀 오브젝트 초기화}

// 인풋 설정

for (int i = 0; i <NUM_LIGHTS; i ++) {pinMode (იწყება გადართვა , INPUT_PULLUP); // ჩართვა/გამორთვა pin 인풋 설정} pinMode (ანიმაციის ღილაკი, INPUT_PULLUP); // 애니메이션 버튼 인풋

for (int i = 0; i <NUM_LIGHTS; i ++) {B_Interval = int (შემთხვევითი (B_Min, B_Max)); // 모듈 별 블 링킹 속도 인터발 (인터발) 생성 생성}

სერიული.დაწყება (9600); // 설정

}

ბათილი მარყუჟი () {

რეჟიმი = CheckAnimMode (); // 모드 에 애니메이션 체크 모드 함수 를

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

for (int i = 0; i <NUM_LIGHTS; i ++) {startState =! digitalRead (beginSwitch ); // ჩართვა/გამორთვა 을 에서 읽은 값 의 값 을 startState 에 넣어 준다 // startState = digitalRead (იწყებს გადართვა ); colorVal = analogRead (colorPin ); // 가변 저항 에서 읽은 값 을 가변 가변 저항 값 에 넣는다 넣는다 넣는다 넣는다}

გადართვა (რეჟიმი) {// 애니메이션 함수 스위치 문

შემთხვევა 0: on (); // 함수 실행 შესვენებაზე; // 조건문 에서 빠져

შემთხვევა 1:

ცისარტყელა(); // ცისარტყელა 실행 실행 შესვენება;

შემთხვევა 2:

დაბინდვა (); // დაბინდვა 실행 실행 შესვენება;

შემთხვევა 3:

მოციმციმე (); // მოციმციმე 실행 실행 შესვენება; }

for (int i = 0; i <NUM_LIGHTS; i ++) {pixels . ჩვენება (); // 네오 픽셀 오브젝트 배열 켜라}

}

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

int CheckAnimMode () {

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

///////////////////////////////////////////////////////////////// /// currentMillis = millis (); // reading 측정 int კითხვა = digitalRead (ანიმაციის ღილაკი); თუ (კითხულობს! = lastButtonState) {// 입력 핀 으로부터 이전 의 버튼 의 비교 비교 비교 비교 비교 비교 비교 lastDebounceTime = millis (); // 현재 시간 을 출력 핀 이 마지막 마지막 으로 시간 에 넣음 넣음 넣음 넣음 넣음

if ((currentMillis - lastDebounceTime)> debounceDelay) {

თუ (კითხულობს! = buttonState) {// 입력 핀 으로부터 받은 현재 값 과 판독

buttonState = კითხვა; // 값 을 buttonState 에

if (buttonState == LOW) {// 버튼 상태 가 있다면 있다면

რეჟიმი ++; // 버튼 모드 1 증가 증가 თუ (რეჟიმი> 3) {რეჟიმი = 0; firstRainbow = ჭეშმარიტი; // ight 색상 초기화 상태 ight BrightnessFactor = 1; // 증감 ight ნათელი = 15; // 는 는 15}}}}

lastButtonState = კითხვა; // 판독 값 을 이전 의 버튼 버튼 상태

MODE დაბრუნება; 함수 를 종료 하고 რეჟიმი 함수 로 값 을 하라 하라}

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

// ანიმაციის რეჟიმის ფუნქცია

// ჩართულია

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

//Ცისარტყელა

void rainbow () {Serial.println ("წვიმა"); // 시리얼 모니터 에 წვიმა 을 써라 if (firstRainbow) {RainbowSpeed = 0; // 속도 초기화 firstRainbow = ყალბი; // 레인보우 색상 초기화 상태 꺼짐} if (millis () - R_previousMillis> R_Interval) {// 흐른 시간 값 이 레인보우 인터벌 값 _ R_previousMillis = currentMillis; // ain 시간 을 이전 의 레인보우 시간 넣어 ain ain 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 써라 써라 if (currentMillis - D_previousMillis> D_Interval) {// 흐른 시간 값 이 디밍 인터벌 _ _ _ D_previousMillis = currentMillis; // 시간 을 이전 의 디밍 시간 넣어 ight 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); // 컬러 셋팅}}

// მოციმციმე

ბათილად მოციმციმე () {Serial.println ("დახუჭე"); // ink 모니터 에 მოციმციმე 를

for (int i = 0; i B_Interval ) {// 흐른 시간 값 이 이 블링크 값 보다

B_previousMillis = მიმდინარე მილი; // 현재 시간 을 이전 의 블링크 _ _ _ B_state =! B_state ; // 각 모듈 블 링킹 상태 반대 값 을 대입 하라 하라}}} for (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] = რუკა (colorSenser, 0, 1023, 0, 359); // 0 ~ 1023 을 0 ~ 359 값 으로 매핑 한 값 을 가지고 color color color (colorSenser) getRGB (ელფერი [ინდექსი], 255, 255, rgb_colors, ინდექსი); for (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 (ინდექსი); // 셋팅 하지 않음}

////// noColor კომპლექტი

void noColor_set (int index) {// 컬러 셋팅 하지 함수 설정

for (int i = 0; i <NUMPIXELS; i ++) {pixels [index].setPixelColor (i, pixels [index]. ფერი (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, ინდექსი); for (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: დასრულებული სახე

გირჩევთ: