Мазмуну:

Dot Light Pattern: 6 кадам
Dot Light Pattern: 6 кадам

Video: Dot Light Pattern: 6 кадам

Video: Dot Light Pattern: 6 кадам
Video: Sharpy Programming in mini pearl 1024 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. WS2901 же WS2811 пикселдик LED тилкеси (130 LEDS)
  3. Баскыч x 1
  4. Snap switch x 65
  5. Potencymeter 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 UNOs он бир зонанын ар бирине тиркелет, алар бир 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 #аныктоо 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 байт 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 colors [5] [3], int index) {

val = dim_curve [val]; отурду = 255 - dim_curve [255 - отурду];

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

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

int r;

int g; int b; int base;

эгер (отурган == 0) {

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

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

которуштуруу (өңү / 60) {

case 0: r = val; g = (((вал - базалык) * өң) / 60) + база; b = база; тыныгуу;

иши 1:

r = (((вал - базалык) * (60 - (реңк % 60))) / 60) + база; g = val; b = база; тыныгуу;

2 -жагдай:

r = база; g = val; 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}; // күйгүзүү/өчүрүү 번호 핀 번호 логикалык startState = {жалган, жалган, жалган, жалган, жалган}; // on/off 상태 변수

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

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

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

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

// 애니메이션 모든 변환 위 위한 버튼 디 바운싱 변수 변수 선언 디 디 디? Button 시간 내 이벤트 이벤트 가 발생 대 문제 문제 문제 에 대해서 지정된 시간 간격 button button button button int buttonState; // 입력 핀 으로부터 의 현재 판독 값 int lastButtonState = HIGH; // 이전 의 값 값 은 로 로 로 unsigned long lastDebounceTime = 0; // 출력 핀 이 마지막 으로 전환 된 은 0 으로 unsigned long 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; // 디밍 속도 변수

логикалык B_state [5]; // 블 링킹 위 각한 각 모듈 의 상태 상태

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

// 멀티 테스 킹 을 위 위한 시간 변수 선언

кол коюлбаган узак currentMillis; // 현재 시간 변수

белгисиз узун B_previousMillis [5]; // 각 모듈 의 블 링킹 타이머 белгисиз узак DR_Millis [5]; // 각 모듈 의 디밍 랜덤 타이머 (예비) unsigned long R_previousMillis; // 레인보우 타이머 unsigned long D_previousMillis; // 디밍 타이머

логикалык firstRainbow = true; // 레인보우 색상 초기화 상태 변수

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

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

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

үчүн (int i = 0; i <NUM_LIGHTS; i ++) {пиксел .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 (random (B_Min, B_Max)); // 모듈 별 블 링킹 랜덤 속도 (인터발) 변수 생성}

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

}

void loop () {

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

// 버튼 과 가변 저항 을 값 읽 읽 읽 읽 다 다 한다.

for (int i = 0; i <NUM_LIGHTS; i ++) {startState =! digitalRead (startSwitch ); // күйгүзүү/өчүрүү 을 에서 읽은 값 반대 St startState 에 넣어 준다 // startState = digitalRead (startSwitch ); colorVal = analogRead (colorPin ); // 가변 저항 에서 읽은 값 을 가변 저항 초기 초기 값 넣는다 넣는다}

которуу (MODE) {// 애니메이션 함수 스위치 문

case 0: on (); // on 함수 실행 break; // 조건문 에서 빠져 나가라

иши 1:

асан -үсөн (); // асан -үсөн 함수 실행 тыныгуу;

2 -жагдай:

караңгылатуу (); // караңгылатуу 함수 실행 тыныгуу;

3 -жагдай:

жаркылдоо (); // көз ирмем 함수 실행 тыныгуу; }

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

}

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

int CheckAnimMode () {

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

//////////////////////////////////////////////////// /// currentMillis = millis (); // 시간 reading int reading = digitalRead (animationButton); if (reading! = lastButtonState) {// 입력 으로부터 으로부터 이전 의 버튼 의 상태 비교 비교 D lastDebounceTime = millis (); // 현재 시간 을 출력 핀 핀 마지막 으로 전환 전환 된 시간 넣음 넣음}

эгер ((currentMillis - lastDebounceTime)> debounceDelay) {

if (reading! = buttonState) {// 입력 핀 으로부터 받은 현재 값 과 판독 값 과 비교

buttonState = окуу; // 판독 값 을 buttonState 에 대입

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

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

lastButtonState = окуу; // 판독 값 을 이전 의 의 버튼 상태 에

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

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

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

// боюнча

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

// Радуга

void rainbow () {Serial.println ("жамгыр"); // 시리얼 모니터 에 жамгыр 을 써라 if (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); // 레인보우 컬러 셋팅}

}

// Караңгылатуу

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 사이 의 값 정 한정 한다

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

}

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

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

// түстөр топтому

жараксыз 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, индекс); үчүн (int i = 0; i <NUMPIXELS; i ++) {пиксел [индекс].setPixelColor (i, пикселдер [индекс]. Түс (rgb_colors [индекс] [0], rgb_colors [индекс] [1], rgb_colors [индекс] [2])); } // 픽셀 컬러 셋팅 을 rgb_colors 의 r, g, b 으로 설정} else noColor_set (index); // 컬러 셋팅 하지 않음}

////// noColor set

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

үчүн (int i = 0; i <NUMPIXELS; i ++) {пиксел [индекс].setPixelColor (i, пиксел [индекс]. Түс (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 (colorVal 에) getRGB (реңк [индекс], 255, BC, rgb_colors, индекс); үчүн (int i = 0; i <NUMPIXELS; i ++) {пиксел [индекс].setPixelColor (i, пиксел [индекс]. Түс (rgb_colors [индекс] [0], rgb_colors [индекс] [1], rgb_colors [индекс] [2])); } /// 픽셀 컬러 셋팅 을 rgb_colors 의 r, g, b 으로 설정} else noColor_set (index); // 컬러 셋팅 하지 않음}

6 -кадам: Бүткөн көрүнүш

Сунушталууда: