Satura rādītājs:
- 1. solis: materiāli
- 2. solis: būvniecības plāns
- 3. solis: Aparatūra: shēmas dizains
- 4. solis: Aparatūra: akrila griešana
- 5. darbība: Arduino programmēšanas kods
- 6. solis: pabeigts izskats
Video: Punkta gaismas modelis: 6 soļi
2024 Autors: John Day | [email protected]. Pēdējoreiz modificēts: 2024-01-30 10:56
Es sāku ar domu "Vai es varu kontrolēt gaismu ar savām rokām un izteikt savu gribu?"
Tas ir “punktveida gaismas modelis”, kas ļauj jums pašiem izveidot savas krāsas, noformēt savus modeļus ar šīm krāsām un piedzīvot dažādus animācijas efektus.
1. solis: materiāli
- Arduino UNO x 13
- WS2901 vai WS2811 pikseļu LED sloksne (130 LED)
- Pogas slēdzis x 1
- Slēdzis x 65
- Potences mērītājs x 65
- Varavīksnes kabelis
- Jauda pietiekami SMPS
- Diriģenta kabelis
- Akrila caurspīdīgs apaļš stienis (diametrs 30 mm)
- Melnas krāsas akrila tāfele (5T) (500 mm*790 mm) x 2, (500 mm*35 mm) x 2, (790 mm*35 mm) x 2
2. solis: būvniecības plāns
3. solis: Aparatūra: shēmas dizains
-
Izgrieziet akrila plāksni tāpat kā iepriekš minēto struktūru. (skat. 2. darbību)
- Potenciometra atveres augšpusē un apakšā ir uzlikts viens neo pikseļu gaismas diodes gabals, un kopā ir pievienoti 65 pāri neo pikseļu gaismas diodes.
- Pāris neo pikseļu gaismas diodes ir savienotas kopā, lai izveidotu vienu Arduino tapu.
- Uzstādiet 65 stiprības mērītājus caurumiem. (Novietojiet to neo-pikselētas virsmas pretējā pusē.)
- Pievienojiet 65 fiksējošos slēdžus, lai tie atbilstu slēdža caurumiem.
- Katrai no trīspadsmit zonām ir pievienoti trīspadsmit Arduino UNO, lai vienā Arduino UNO sasaistītu piecus 65 aparatūras gabalus.
- Kā parādīts pievienotajā fotoattēlā, pieslēdziet jaudas mērītājus, fiksācijas slēdžus un neo pikseļu gaismas diodes ar vadu Arduino UNO tapām. (skat. 2. darbību)
- Vairāku Arduino UNO GND un 5V tapas tiek savāktas kabeļu vados, pēc tam pievienotas ārējai barošanai. (skat. 2. darbību)
- Noņemiet putekļus ar gaisa spiedienu.
4. solis: Aparatūra: akrila griešana
-
Izgrieziet akrila stieni 50 mm garumā.
- Viena akrila stieņa puse ir izurbta līdz izmēram un dziļumam, lai tas atbilstu potenciometra kontroliera daļai.
- Akrila stienis ir apgriezts nedaudz platāks par atveri, lai iegūtu atstarpi, kas labi iederas stiprības mērītājā.
- Otra puse dod nedaudz smilšpapīra, lai gaismu varētu kārtīgi pārraidīt.
5. darbība: Arduino programmēšanas kods
www.kasperkamperman.com/blog/arduino/ardui…
“hsb to rgb” kods 를 참고 한 사이트
#iekļaut
// 'adafruit_neopixel' 헤더 파일 라는 외부 라이브러리 를 포함
// 네오 픽셀 연결 핀 번호 선언
#definēt 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 pikseļi = {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 baits 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 = blāva izliekums [val]; sat = 255 - dim_curve [255 - sat];
//, 채도, 및 및 (HSB /HSV), RGB
// dim_curve 는 밝기 값 및 채도 (반전) 에서만 사용 됩니다. // 이것은 가장 자연스럽게 보입니다.
int r;
int g; int b; int bāze;
ja (sest = = 0) {
krāsas [indekss] [0] = val; krāsas [indekss] [1] = val; krāsas [indekss] [2] = val; } vēl {
bāze = ((255 - sat) * val) >> 8;
slēdzis (nokrāsa / 60) {
gadījums 0: r = val; g = ((((val - bāze) * nokrāsa) / 60) + bāze; b = bāze; pārtraukums;
1. gadījums:
r = ((((val - bāze) * (60 - (nokrāsa % 60))) / 60) + bāze; g = val; b = bāze; pārtraukums;
2. gadījums:
r = bāze; g = val; b = ((((val - bāze) * (nokrāsa % 60)) / 60) + bāze; pārtraukums;
3. gadījums:
r = bāze; g = ((((val - bāze) * (60 - (nokrāsa % 60))) / 60) + bāze; b = val; pārtraukums;
4. gadījums:
r = ((((val - bāze) * (nokrāsa % 60)) / 60) + bāze; g = bāze; b = val; pārtraukums;
5. gadījums:
r = val; g = bāze; b = ((((val - bāze) * (60 - (nokrāsa % 60))) / 60) + bāze; pārtraukums; }
krāsas [indekss] [0] = r;
krāsas [indekss] [1] = g; krāsas [indekss] [2] = b; }
}
int rgb_colors [NUM_LIGHTS] [3]; // 네오 픽셀 오브젝트 갯수 마다 rgb krāsa 선언
int nokrāsa [NUM_LIGHTS]; // 네오 픽셀 오브젝트 갯수 마다 nokrāsa 선언 int sat [NUM_LIGHTS]; // 네오 픽셀 오브젝트 갯수 마다 명도 선언 int brignt [NUM_LIGHTS]; // 네오 픽셀 오브젝트 갯수 마다 밝기 서언
// 일반 변수 선언
int startsSlēdzis = {8, 9, 10, 11, 12}; // ieslēgts/izslēgts 버튼 핀 번호 Būla sākuma statuss = {false, false, false, false, false}; // ieslēgts/izslēgts 상태 변수
const int colorPin = {A0, A1, A2, A3, A4}; // 가변 저항 핀 번호
int colorVal = {0, 0, 0, 0, 0}; // 가변 저항 초기 값
int animationButton = 7; // 애니메이션 모드 변환 버튼 핀 번호
/////////////////////////////////////////////////
// 애니메이션 모든 변환 을 위한 버튼 디 바운싱 변수 선언 // 디 바운싱? Button 시간 내 많은 이벤트 가 발생 하는것 에 대한 문제 에 대해서 지정된 시간 간격 으로 함수 함수 호출 호출 하여 button int buttonState; // 입력 핀 으로부터 의 현재 판독 값 int lastButtonState = HIGH; // 이전 의 판독 값 은 켜진 상태 로 neparakstīts long lastDebounceTime = 0; // 출력 핀 이 마지막 으로 전환 된 시간 은 0 으로 neparakstīts garš 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ūla B_valsts [5]; // 블 링킹 을 위한 각 모듈 의 상태 변수
///////////////////////////////////////////////////////
// 멀티 테스 킹 애니메이션 을 위한 시간 변수 선언
neparakstīta garā strāvaMillis; // 현재 시간 변수
neparakstīts garš B_previousMillis [5]; // 각 모듈 의 블 링킹 타이머 neparakstīts garš DR_Millis [5]; // 각 모듈 의 디밍 랜덤 타이머 (예비) neparakstīts garš R_previousMillis; // 레인보우 타이머 neparakstīts garš D_previousMillis; // 디밍 타이머
Būla pirmaisRainbow = true; // 레인보우 색상 초기화 상태 변수
int RainbowSpeed; // 레인보우 변환 변수
int Spilgts = 100; // 디밍 초기 값 int BrightnessFactor = 1; // 디밍 증감 값 ///////////////////////////////////////////////////////////////////////////////// un /////////////////////////////////////////////////////
void setup () {
par (int i = 0; i <NUM_LIGHTS; i ++) {pikseļi .sākt (); // 네오 픽셀 오브젝트 초기화}
// 버튼 인풋 설정
par (int i = 0; i <NUM_LIGHTS; i ++) {pinMode (startsSwitch , INPUT_PULLUP); // ieslēgts/izslēgts 버튼 인풋 설정} pinMode (animationButton, INPUT_PULLUP); // 애니메이션 버튼 인풋 설정
par (int i = 0; i <NUM_LIGHTS; i ++) {B_Interval = int (nejauši (B_Min, B_Max)); // 모듈 별 블 링킹 랜덤 인터발 (인터발) 변수 생성}
Sērijas sākums (9600); // 통신 설정
}
void loop () {
MODE = CheckAnimMode (); // 모드 에 애니메이션 체크 모드 함수 를 넣는다
// 버튼 과 가변 저항 을 값 을 각각 읽어 변수 에 지정 한다 한다.
for (int i = 0; i <NUM_LIGHTS; i ++) {startState =! digitalRead (startsSwitch ); // ieslēgt/izslēgt 버튼 에서 읽은 값 의 반대 값 을 startState 에 넣어 준다 // startState = digitalRead (startsSwitch ); colorVal = analogRead (colorPin ); // 가변 저항 에서 읽은 값 을 가변 저항 초기 값 에 넣는다}
slēdzis (REŽĪMS) {// 애니메이션 함수 스위치 문
gadījums 0: ieslēgts (); // on 함수 실행 break; // 조건문 에서 빠져 나가라
1. gadījums:
varavīksne (); // varavīksne 함수 실행 pārtraukums;
2. gadījums:
aptumšošana (); // aptumšošana 함수 실행 pārtraukums;
3. gadījums:
mirgo (); // mirgo 함수 실행 pārtraukums; }
par (int i = 0; i <NUM_LIGHTS; i ++) {pikseļi .show (); // 네오 픽셀 오브젝트 배열 켜라}
}
/////////////////////////////////////////////////////////////
int CheckAnimMode () {
// 애니메이션 선택 버튼 을 읽어 모드 를 결정 한다.
/////////////////////////////////////////////////////////////////////////////////////////////////////////// /// currentMillis = millis (); // 시간 측정 int lasīšana = digitalRead (animationButton); if (lasot! = lastButtonState) {// 입력 핀 으로부터 이전 의 버튼 의 상태 와 판독 값 비교 lastDebounceTime = millis (); // 현재 시간 을 출력 핀 이 마지막 으로 전환 된 시간 에 넣음}
if ((currentMillis - lastDebounceTime)> debounceDelay) {
ja (lasot! = buttonState) {// 입력 핀 으로부터 받은 현재 값 과 판독 값 과 비교
buttonState = lasīšana; // 판독 값 을 buttonState 에 대입
ja (buttonState == LOW) {// 버튼 상태 가 꺼져 있다면
MODE ++; // 버튼 모드 1 씩 증가 ja (REŽĪMS> 3) {MODE = 0; firstRainbow = taisnība; // 레인보우 색상 초기화 상태 켜짐 BrightnessFactor = 1; // 디밍 증감 값 Spilgts = 15; // 밝기 는 15}}}}
lastButtonState = lasīšana; // 판독 값 을 이전 의 버튼 상태 에 대입
atgriezties MODE; 하고 를 종료 하고 režīms 함수 로 값 을 리턴 하라}
////////////////////////////////////////////////////////////////////
// animācijas režīma svārstības
// uz
void on () {Serial.println ("ieslēgts"); // 시리얼 모니터 에 on 을 써라 for (int i = 0; i <NUM_LIGHTS; i ++) {color_set (i, colorVal ); // 가변 저항 값 에 따라 컬러 셋팅}}
// Varavīksne
void varavīksne () {Serial.println ("lietus"); // 시리얼 모니터 에 lietus 을 써라 if (firstRainbow) {RainbowSpeed = 0; // 레인보우 속도 초기화 firstRainbow = false; // 레인보우 색상 초기화 상태 꺼짐} if (millis () - R_previousMillis> R_Interval) {// 흐른 시간 값 이 레인보우 인터벌 값 보다 크면 R_previousMillis = currentMillis; // 현재 시간 을 이전 의 레인보우 시간 에 넣어 라 RainbowSpeed += 10; // 레인보우 변환 변수 에 10 을 더해라}
par (int i = 0; i <NUM_LIGHTS; i ++) {color_set (i, (colorVal +RainbowSpeed) % 1023); // 레인보우 컬러 셋팅}
}
// aptumšošana
void dimming () {Serial.println ("dimm"); // 시리얼 모니터 에 dimm 을 써라 Serial.println (Bright); // 시리얼 모니터 에 Spilgts 를 써라 if (currentMillis - D_previousMillis> D_Interval) {// 흐른 시간 값 이 디밍 인터벌 값 보다 크면 D_previousMillis = currentMillis; // 현재 시간 을 이전 의 디밍 시간 에 넣어 라 Bright += BrightnessFactor; // 밝기 에 디밍 증감 값 1 씩 올려라} if (Bright 254) {BrightnessFactor = -1 * BrightnessFactor; } Spilgts = ierobežot (Spilgts, 99, 254); // 변수 밝기 값 을 최소값 99 ~ 최대 값 254 사이 의 값 으로 한정 한다
par (int i = 0; i <NUM_LIGHTS; i ++) {dim_color_set (i, Bright); // 디밍 컬러 셋팅}}
// Mirgo
void mirgo () {Serial.println ("mirgot"); // 시리얼 모니터 에 mirgo 를 써라
par (int i = 0; i B_Interval ) {// 흐른 시간 값 이 블링크 인터벌 값 보다 크면
B_previousMillis = pašreizējaisMillis; // 현재 시간 을 이전 의 블링크 시간 에 넣어 라 B_valsts =! B_valsts ; // 각 모듈 의 블 링킹 상태 변수 값 의 반대 값 을 대입 하라}} for (int i = 0; i <NUM_LIGHTS; i ++) {if (B_state ) {// 모듈 의 블 링킹 상태 읽 읽 히면 color_set (i, colorVal ); // 가변 저항 값 에 따라 컬러 셋팅} else {noColor_set (i); // 읽히지 않으면 컬러 셋팅 하지 않음}}
}
////////////////////////////////////////////////////////////////////////////////////////
// pamatfunkcijas
// krāsu komplekts
void color_set (int indekss, int colorSenser) {
ja (startState [indekss]) {nokrāsa [indekss] = karte (colorSenser, 0, 1023, 0, 359); // 0 ~ 1023 값 을 0 ~ 359 값 으로 매핑 한 값 을 가지고 색상 값 으로 color (colorSenser 에) getRGB (nokrāsa [indekss], 255, 255, rgb_colors, index); for (int i = 0; i <NUMPIXELS; i ++) {pixels [index].setPixelColor (i, pixels [index]. Color (rgb_colors [index] [0], rgb_colors [index] [1], rgb_colors [indekss] [2])); } // 픽셀 컬러 셋팅 을 rgb_colors 의 r, g, b 으로 설정} cits noColor_set (indekss); // 컬러 셋팅 하지 않음}
////// noColor set
void noColor_set (int indekss) {// 컬러 셋팅 하지 않는 함수 설정
par (int i = 0; i <NUMPIXELS; i ++) {pikseļi [indekss].setPixelColor (i, pikseļi [indekss]. Krāsa (0, 0, 0)); } // 픽셀 컬러 세팅 을 0, 0, 0 으로 설정}
//// dimColor komplekts
void dim_color_set (int indekss, int BC) {// 디밍 컬러 셋팅 함수 설정
ja (startState [indekss]) {nokrāsa [indekss] = karte (colorVal [indekss], 0, 1023, 0, 359); // 0 ~ 1023 값 을 0 ~ 359 값 으로 매핑 한 값 을 가지고 색상 값 으로 color (colorVal 에) getRGB (nokrāsa [indekss], 255, BC, rgb_colors, index); for (int i = 0; i <NUMPIXELS; i ++) {pixels [index].setPixelColor (i, pixels [index]. Color (rgb_colors [index] [0], rgb_colors [index] [1], rgb_colors [indekss] [2])); } /// 픽셀 컬러 셋팅 을 rgb_colors 의 r, g, b 으로 설정} cits noColor_set (indekss); // 컬러 셋팅 하지 않음}
6. solis: pabeigts izskats
Ieteicams:
Vienkāršs automatizēts dzelzceļa modelis no punkta līdz punktam: 10 soļi (ar attēliem)
Vienkāršs automatizēts dzelzceļa modelis: Arduino mikrokontrolleri ir lieliski, lai automatizētu dzelzceļa modeļu izkārtojumu. Izkārtojumu automatizēšana ir noderīga daudziem mērķiem, piemēram, izkārtojuma izvietošanai displejā, kur izkārtojuma darbību var ieprogrammēt, lai vilcieni darbotos automatizētā secībā. L
Punktu pie punkta sprieguma kontrolēts oscilators: 29 soļi
Punkts pie punkta ar spriegumu kontrolēts oscilators: Sveiki! Jūs atradāt projektu, kurā mēs paņemam vienu patiešām lētu mikroshēmu, CD4069 (jauku), un pielīmējam dažas detaļas un iegūstam ļoti noderīgu sprieguma kontrolējamu oscilatoru! Mūsu veidotajai versijai ir tikai zāģa vai rampas viļņu forma, kas ir
Automatizēts dzelzceļa modelis no punkta līdz punktam ar pagalma apšuvumu: 10 soļi (ar attēliem)
Automatizēts dzelzceļa modeļa modelis ar pagalma apšuvumu: Arduino mikrokontrolleri paver lielas iespējas dzelzceļa modeļu modelēšanā, it īpaši, ja runa ir par automatizāciju. Šis projekts ir šādas lietojumprogrammas piemērs. Tas ir turpinājums vienam no iepriekšējiem projektiem. Šis projekts sastāv no norādes
Jauna ģeocaching ceļa punkta saglabāšana iPhone: 8 soļi
Jauna ģeogrāfiskās kešatmiņas ceļa punkta saglabāšana iPhone: Vai jūs mēģināt atrast kešatmiņas savā iPhone, bet nevarat saprast, kā pāriet uz mīklas finālu, vai arī jāredz, kur atrodas ceļš uz kešatmiņu. Nemeklējiet tālāk, šī pamācība palīdzēs jums iziet šo procesu. Pārbaudiet manu geocachin
Ko darīt ar nejaušām motoru kolekcijām: 2. projekts: griešanās gaismas (NLO modelis): 12 soļi (ar attēliem)
Ko darīt ar nejaušām motoru kolekcijām: 2. projekts: griešanās gaismas (NLO modelis): Tātad, man joprojām ir izlases motoru kolekcija … Ko es darīšu? Nu, padomāsim. Kā ir ar LED gaismas vērpēju? (Ne pie rokas, atvainojiet izklaidējušos vērpēju mīļotājus.) Tas izskatās kā NLO, tas izklausās kā sajaukums starp nezālēm un blenderi