Turinys:

Taško šviesos modelis: 6 žingsniai
Taško šviesos modelis: 6 žingsniai

Video: Taško šviesos modelis: 6 žingsniai

Video: Taško šviesos modelis: 6 žingsniai
Video: Правила работы с микроскопом / Как настроить / Инструкция 2024, Liepa
Anonim
Image
Image
Taškinis šviesos raštas
Taškinis šviesos raštas
Taškinis šviesos raštas
Taškinis šviesos raštas

Pradėjau nuo minties „Ar galiu valdyti šviesą savo rankomis ir išreikšti savo valią?“.

Tai „taškinis šviesos raštas“, leidžiantis patiems kurti savo spalvas, kurti savo modelius tomis spalvomis ir patirti įvairius animacijos efektus.

1 žingsnis: medžiagos

Medžiagos
Medžiagos
Medžiagos
Medžiagos
Medžiagos
Medžiagos
Medžiagos
Medžiagos
  1. Arduino UNO x 13
  2. WS2901 arba WS2811 pikselių LED juostelė (130 LED)
  3. Mygtuko jungiklis x 1
  4. Fiksavimo jungiklis x 65
  5. Potencijos matuoklis x 65
  6. Vaivorykštinis kabelis
  7. Galia pakankamai SMPS
  8. Laidininko kabelis
  9. Akrilo skaidrus apvalus strypas (30 mm skersmens)
  10. Juodos spalvos akrilo plokštė (5T) (500 mm*790 mm) x 2, (500 mm*35 mm) x 2, (790 mm*35 mm) x 2

2 žingsnis: statybos planas

Statybos planas
Statybos planas
Statybos planas
Statybos planas
Statybos planas
Statybos planas
Statybos planas
Statybos planas

3 žingsnis: Aparatūra: grandinės dizainas

Techninė įranga: grandinės dizainas
Techninė įranga: grandinės dizainas
Techninė įranga: grandinės dizainas
Techninė įranga: grandinės dizainas
Techninė įranga: grandinės dizainas
Techninė įranga: grandinės dizainas
  1. Iškirpkite akrilo plokštę, kaip nurodyta aukščiau. (žr. 2 veiksmą)

  2. Vienas gabalas neo pikselių šviesos diodų dedamas ant stiprumo matuoklio angos viršaus ir apačios, o iš viso pritvirtintos 65 poros neo pikselių šviesos diodų.
  3. Pora neo pikselių šviesos diodų yra prijungti kartu, kad sudarytų vieną „Arduino“kaištį.
  4. Prie stiprumo matuoklio skylių įstatykite 65 stiprumo matuoklius. (Padėkite jį priešingoje neo-pikselių paviršiaus pusėje.)
  5. Pritvirtinkite 65 jungiklius, kad jie atitiktų jungiklio skyles.
  6. Iš viso prie kiekvienos iš trylikos zonų yra pritvirtinta trylika „Arduino UNO“, kad į vieną „Arduino UNO“būtų galima susieti penkias 65 aparatūros dalis.
  7. Kaip parodyta pridedamoje nuotraukoje, prijunkite stiprumo matuoklius, jungiklius ir neo pikselių šviesos diodus prie „Arduino UNO“kaiščių viela. (žr. 2 veiksmą)
  8. Kelių „Arduino UNO“GND ir 5 V kaiščiai surenkami prie kabelių laidų, tada prijungiami prie išorinio maitinimo šaltinio. (žr. 2 veiksmą)
  9. Pašalinkite dulkes oro slėgiu.

4 žingsnis: Aparatūra: akrilo pjovimas

Techninė įranga: akrilo pjovimas
Techninė įranga: akrilo pjovimas
Techninė įranga: akrilo pjovimas
Techninė įranga: akrilo pjovimas
Techninė įranga: akrilo pjovimas
Techninė įranga: akrilo pjovimas
  1. Nupjaukite akrilo strypą iki 50 mm ilgio.
  2. Viena akrilo strypo pusė yra išgręžta tokio dydžio ir gylio, kad atitiktų stiprumo matuoklio valdiklio dalį.
  3. Akrilo strypas yra apipjautas šiek tiek plačiau nei skylė, kad tarpas gerai tilptų į stiprumo matuoklį.
  4. Kitoje pusėje yra šiek tiek švitrinio popieriaus, kad šviesa būtų sklandžiai perduodama.

5 žingsnis: „Arduino“programavimo kodas

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

„hsb – rgb“kodas 를 참고 한 사이트

#įtraukti

// '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 // 작동 모듈 갯수 (네오 픽셀 오브젝트 갯수)

// 네오 픽셀 오브젝트 Masyvas 선언

Adafruit_NeoPixel pikselių = {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 baitas 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 atspalvis, int sat, int val, int spalvos [5] [3], int indeksas) {

val = dim_curve [val]; sat = 255 - dim_curve [255 - sat];

// 색조, 채도 및 밝기 (HSB /HSV) arba RGB

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

int r;

int g; int b; int bazė;

jei (šeštadienis == 0) {

spalvos [indeksas] [0] = val; spalvos [indeksas] [1] = val; spalvos [indeksas] [2] = val; } Kitas {

bazė = ((255 - sat) * val) >> 8;

jungiklis (atspalvis / 60) {

0 atvejis: r = val; g = ((((val - bazė) * atspalvis) / 60) + bazė; b = bazė; pertrauka;

1 atvejis:

r = ((((val - bazė) * (60 - (atspalvis % 60))) / 60) + bazė; g = val; b = bazė; pertrauka;

2 atvejis:

r = bazė; g = val; b = ((((val - bazė)) * (atspalvis % 60)) / 60) + bazė; pertrauka;

3 atvejis:

r = bazė; g = ((((val - bazė) * (60 - (atspalvis % 60))) / 60) + bazė; b = val; pertrauka;

4 atvejis:

r = (((val - bazė) * (atspalvis % 60)) / 60) + bazė; g = bazė; b = val; pertrauka;

5 atvejis:

r = val; g = bazė; b = ((((val - bazė) * (60 - (atspalvis % 60))) / 60) + bazė; pertrauka; }

spalvos [indeksas] [0] = r;

spalvos [indeksas] [1] = g; spalvos [indeksas] [2] = b; }

}

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

int atspalvis [NUM_LIGHTS]; // 네오 픽셀 오브젝트 갯수 마다 atspalvis 선언 int sat [NUM_LIGHTS]; // 네오 픽셀 오브젝트 갯수 마다 명도 선언 int brignt [NUM_LIGHTS]; // 네오 픽셀 오브젝트 갯수 마다 밝기 서언

// 일반 변수 선언

int startsSwitch = {8, 9, 10, 11, 12}; // įjungta/išjungta 버튼 핀 번호 loginė pradinė būsena = {false, false, false, false, false}; // įjungti/išjungti 상태 변수

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_Intervalas [5]; // 블 링킹 을 위한 각 모듈 의 랜덤 속도 변수

int B_Min = 100; // 블 링킹 최단 속도; int B_Max = 500; // 블 링킹 최장 속도; int R_Intervalas = 50; // 레인보우 애니메이션 속도 변수 int D_Interval = 10; // 디밍 속도 변수

loginis B_state [5]; // 블 링킹 을 위한 각 모듈 의 상태 변수

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

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

nepasirašyta ilga srovėMillis; // 현재 시간 변수

nepasirašytas ilgas B_previousMillis [5]; // 각 모듈 의 블 링킹 타이머 nepasirašytas ilgas DR_Millis [5]; // 각 모듈 의 디밍 랜덤 타이머 (예비) unsigned long R_previousMillis; // 레인보우 타이머 nepasirašytas ilgas D_previousMillis; // 디밍 타이머

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

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

int Ryškus = 100; // 디밍 초기 값 int BrightnessFactor = 1; // 디밍 증감 값 /////////////////////////////////////////////////////////// /////////////////////////////////////////////////////

void setup () {

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

// 버튼 인풋 설정

for (int i = 0; i <NUM_LIGHTS; i ++) {pinMode (startsSwitch , INPUT_PULLUP); // įjungti/išjungti 버튼 인풋 설정} pinMode (animationButton, INPUT_PULLUP); // 애니메이션 버튼 인풋 설정

už (int i = 0; i <NUM_LIGHTS; i ++) {B_Interval = int (atsitiktinis (B_Min, B_Max)); // 모듈 별 블 링킹 랜덤 (인터발) 변수 생성}

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

}

void loop () {

REŽIMAS = CheckAnimMode (); // 모드 에 애니메이션 체크 모드 함수 를 넣는다

// 버튼 과 가변 저항 을 값 을 각각 읽어 변수 에 지정 한다.

for (int i = 0; i <NUM_LIGHTS; i ++) {startState =! digitalRead (startsSwitch ); // įjungti/išjungti 버튼 에서 읽은 값 의 반대 값 을 startState 에 넣어 준다 // startState = digitalRead (startsSwitch ); colorVal = analogRead (colorPin ); // 가변 저항 에서 읽은 값 을 가변 저항 초기 값 에 넣는다}

jungiklis (REŽIMAS) {// 애니메이션 함수 스위치 문

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

1 atvejis:

vaivorykštė (); // vaivorykštė 함수 실행 pertrauka;

2 atvejis:

Pritemdymas(); // pritemdymas 함수 실행 pertrauka;

3 atvejis:

mirksi (); // mirksi 함수 실행 pertrauka; }

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

}

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

int CheckAnimMode () {

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

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

if ((currentMillis - lastDebounceTime)> debounceDelay) {

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

buttonState = skaitymas; // 판독 값 을 buttonState 에 대입

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

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

lastButtonState = skaitymas; // 판독 값 을 이전 의 버튼 상태 에 대입

grįžti MODE; 하고 를 종료 하고 režimas 함수 로 값 을 리턴 하라}

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

// animacijos režimo svyravimai

// toliau

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

// Vaivorykštė

void rainbow () {Serial.println ("lietus"); // 시리얼 모니터 에 lietus 을 써라 if (firstRainbow) {RainbowSpeed = 0; // 레인보우 속도 초기화 firstRainbow = false; // 레인보우 색상 초기화 상태 꺼짐} if (millis () - R_previousMillis> R_Interval) {// 흐른 시간 값 이 레인보우 인터벌 값 보다 크면 R_previousMillis = currentMillis; // 현재 시간 을 이전 의 레인보우 시간 에 넣어 라 RainbowSpeed += 10; // 레인보우 변환 변수 에 10 을 더해라}

už (int i = 0; i <NUM_LIGHTS; i ++) {color_set (i, (colorVal +RainbowSpeed) % 1023); // 레인보우 컬러 셋팅}

}

//Pritemdymas

void dimming () {Serial.println ("pritemdytas"); // 시리얼 모니터 에 dimm 을 써라 Serial.println (ryškus); // 시리얼 모니터 에 Ryškus 를 써라 if (currentMillis - D_previousMillis> D_Interval) {// 흐른 시간 값 이 디밍 인터벌 값 보다 크면 D_previousMillis = currentMillis; // 현재 시간 을 이전 의 디밍 시간 에 라 라 Bright += BrightnessFactor; // 밝기 에 디밍 증감 값 1 씩 올려라} if (Bright 254) {BrightnessFactor = -1 * BrightnessFactor; } Ryškus = suvaržyti (Ryškus, 99, 254); // 변수 밝기 값 을 최소값 99 ~ 최대 값 254 사이 의 값 으로 한정 한다

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

// Mirksi

void mirksi () {Serial.println ("mirksėti"); // mirksi mirksi 를 써라

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

B_previousMillis = dabartinisMillis; // 현재 시간 을 이전 의 블링크 시간 에 넣어 B_state =! B_state ; // 각 모듈 의 블 링킹 상태 변수 값 의 반대 값 을 대입 하라}} for (int i = 0; i <NUM_LIGHTS; i ++) {if (B_state ) {// 모듈 의 블 링킹 상태 읽 읽 히면 color_set (i, colorVal ); // 가변 저항 값 에 따라 컬러 셋팅} else {noColor_set (i); // 읽히지 않으면 컬러 셋팅 하지}}}

}

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

// pagrindinė funkcija

// spalvų rinkinys

void color_set (int indeksas, int colorSenser) {

if (startState [indeksas]) {atspalvis [indeksas] = žemėlapis (colorSenser, 0, 1023, 0, 359); // 0 ~ 1023 값 을 0 ~ 359 값 으로 매핑 한 값 을 가지고 색상 값 으로 color (colorSenser 에) getRGB (atspalvis [indeksas], 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 (indeksas); // 컬러 셋팅 하지 않음}

////// noColor rinkinys

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

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

//// dimColor rinkinys

void dim_color_set (int indeksas, int BC) {// 디밍 컬러 셋팅 함수 설정

if (startState [indeksas]) {atspalvis [indeksas] = žemėlapis (colorVal [indeksas], 0, 1023, 0, 359); // 0 ~ 1023 값 을 0 ~ 359 값 으로 매핑 한 값 을 가지고 색상 값 으로 color (colorVal 에) getRGB (atspalvis [indeksas], 255, prieš Kristų, 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 (indeksas); // 컬러 셋팅 하지 않음}

6 žingsnis: baigtas žvilgsnis

Rekomenduojamas: