Përmbajtje:
- Hapi 1: Materialet
- Hapi 2: Plani i Ndërtimit
- Hapi 3: Hardware: Dizajni i Qarkut
- Hapi 4: Hardware: Prerje akrilike
- Hapi 5: Kodi i Programimit Arduino
- Hapi 6: Një vështrim i përfunduar
Video: Modeli i dritës së pikave: 6 hapa
2024 Autor: John Day | [email protected]. E modifikuara e fundit: 2024-01-30 12:22
Fillova me idenë e "A mund ta kontrolloj dritën me duart e mia dhe të shpreh vullnetin tim?"
Shtë një 'Model Dot Light' që ju lejon të krijoni ngjyrat tuaja vetë, të hartoni modelet tuaja me ato ngjyra dhe të përjetoni efekte të ndryshme animacioni.
Hapi 1: Materialet
- Arduino UNO x 13
- Rrip LED WS2901 ose WS2811 pixel (130 LEDS)
- Çelësi i butonit x 1
- Çelësi i parakohshëm x 65
- Matësi i potencialit x 65
- Kabllo ylberi
- Fuqia e mjaftueshme SMPS
- Kabllo përcjellëse
- Shufër akrilike transparente e rrumbullakët (diametër 30 mm)
- Pllakë akrilike me ngjyrë të zezë (5T) (500mm*790mm) x 2, (500mm*35mm) x 2, (790mm*35mm) x 2
Hapi 2: Plani i Ndërtimit
Hapi 3: Hardware: Dizajni i Qarkut
-
Pritini pllakën akrilike si struktura e mësipërme. (shiko hapin 2)
- Një copë LED neo-piksel vendoset në pjesën e sipërme dhe të poshtme të vrimës së matësit të potencialit dhe janë bashkangjitur gjithsej 65 palë LED neo-pixel.
- Një palë LED neo-pixel janë lidhur së bashku për të formuar një kunj të vetëm Arduino.
- Vendosni 65 metra potenciale në vrimat e potenometrit. (Vendoseni në anën e kundërt të një sipërfaqeje neo-piksel.)
- Bashkangjitni 65 çelësa të parakohshëm që të përputhen me vrimat e ndërprerësit.
- Gjithsej trembëdhjetë UNO të Arduino janë bashkangjitur në secilën prej trembëdhjetë zonave në mënyrë që të lidhin pesë copë prej 65 copë pajisje në një Arduino UNO.
- Siç tregohet në foton e bashkangjitur, Lidhni matësit e potencialit, çelsat e parakohshëm dhe LED-të neo-piksel me kunjat e Arduino UNO me tela. (shiko hapin 2)
- Kunjat GND dhe 5V të disa UNO -ve Arduino mblidhen në telat e kabllove, pastaj lidhen me energjinë e jashtme. (shiko hapin 2)
- Hiqeni pluhurin nga presioni i ajrit.
Hapi 4: Hardware: Prerje akrilike
- Pritini shufrën akrilike në një gjatësi prej 50 mm.
- Njëra anë e shufrës akrilike është shpuar në madhësi dhe thellësi që të përputhet me pjesën kontrolluese të potencometrit.
- Shufra akrilike është e shkurtuar pak më e gjerë se vrima për një hapësirë që mund të përshtatet mirë në matësin e potencës.
-
Ana tjetër jep pak letër zmerile në mënyrë që drita të transmetohet me kujdes.
Hapi 5: Kodi i Programimit Arduino
www.kasperkamperman.com/blog/arduino/ardui…
'hsb në rgb' kod 를 참고 한 사이트
#përfshi
// 'adafruit_neopixel' 헤더 파일 라는 라는 라이브러리 를
// 픽셀 연결 핀 번호
#përcakto PIN1 2 #përcakto PIN2 3 #përcakto PIN3 4 #përcakto PIN4 5 #përcakto PIN5 6
#përcaktoni NUMPIXELS 2 // 네오 픽셀 LED 갯수
#përcakto NUM_LIGHTS 5 // 작동 모듈 갯수 (네오 픽셀 오브젝트 갯수)
// 네오 픽셀 ray Array 선언
Adafruit_NeoPixel piksel = {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 () 위한 변수 와 함수
konst 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 - ul];
// 색조, 밝기 (HSB /HSV) 를 RGB 변환 변환
// dim_curve 는 밝기 값 및 반전 (반전) 에서만 사용 됩니다. // 이것은 가장 자연스럽게 보입니다.
int r;
int g; int b; int bazë;
nëse (ul == 0) {
ngjyrat [indeksi] [0] = val; ngjyrat [indeksi] [1] = val; ngjyrat [indeksi] [2] = val; } tjetër {
bazë = ((255 - ul) * val) >> 8;
kaloni (nuancë / 60) {
rasti 0: r = val; g = (((val - bazë) * nuancë) / 60) + bazë; b = baza; pushim;
rasti 1:
r = (((val - bazë) * (60 - (nuanca % 60))) / 60) + bazë; g = val; b = baza; pushim;
rasti 2:
r = baza; g = val; b = (((val - bazë) * (nuanca % 60)) / 60) + bazë; pushim;
rasti 3:
r = bazë; g = (((val - bazë) * (60 - (nuanca % 60))) / 60) + bazë; b = val; pushim;
rasti 4:
r = (((val - bazë) * (nuanca % 60)) / 60) + bazë; g = bazë; b = val; pushim;
rasti 5:
r = val; g = bazë; b = (((val - bazë) * (60 - (nuanca % 60))) / 60) + bazë; pushim; }
ngjyrat [indeksi] [0] = r;
ngjyrat [indeksi] [1] = g; ngjyrat [indeksi] [2] = b; }
}
int rgb_ngjyrat [NUM_LIGHTS] [3]; // color 픽셀 오브젝트 갯수 마다 ngjyra rgb
int hue [NUM_LIGHTS]; // 네오 픽셀 오브젝트 갯수 ue hue 선언 int sat [NUM_LIGHTS]; // 네오 픽셀 오브젝트 갯수 명도 명도 선언 int brignt [NUM_LIGHTS]; // 네오 픽셀 오브젝트 갯수 마다 밝기
// 일반 변수 선언
int fillonShprehje = {8, 9, 10, 11, 12}; // on/off 버튼 핀 St startState boolean = {false, false, false, false, false, false}; // ndez/fik 상태 변수
const int colorPin = {A0, A1, A2, A3, A4}; // 가변 저항 핀 번호
int colorVal = {0, 0, 0, 0, 0}; // 가변 저항 초기 값
int animationButton = 7; // 모드 변환 버튼 핀
/////////////////////////////////////////////////
// 애니메이션 모든 변환 을 버튼 버튼 디 선언 디 // 디 바운싱? Button 시간 내 이벤트 가 발생 발생 button button button 대해서 지정된 지정된 시간 button button button button button 해결 button button button button button button int buttonState; // 핀 으로부터 의 현재 값 int lastButtonState = LART; // 이전 의 판독 값 은 켜진 로 로 pa shenjë longDebounceTime = 0; // 출력 핀 이 마지막 전환 전환 된 은 으로 0 deb debounce e gjatë e panënshkruarVonesë = 50; // 디 바운싱 타임 설정; 이 깜빡 한다 한다 në MODE = 0; // 애니메이션 모드 변수
int B_Intervali [5]; // 블 링킹 을 위한 각 모듈 모듈
int B_Min = 100; // 블 링킹 최단 속도; int B_Max = 500; // 블 링킹 최장 속도; int R_Interval = 50; // 레인보우 애니메이션 속도 변수 int D_Interval = 10; // 디밍 속도 변수
shteti boolean B_ [5]; // 블 링킹 을 위한 모듈 모듈 모듈
///////////////////////////////////////////////////////
// 멀티 테스 킹 애니메이션 위한 위한 위한
rrymë e gjatë e panënshkruarMillis; // 현재 시간 변수
i panënshkruar i gjatë B_paraprakMillis [5]; // 각 모듈 의 블 링킹 타이머 DR_Millis i gjatë i panënshkruar [5]; // 모듈 의 디밍 예비 (예비) pa shenjë e gjatë R_previousMillis; // 레인보우 타이머 pa shenjë e gjatë D_previousMillis; // 디밍 타이머
boolean firstRainbow = e vërtetë; // 레인보우 색상 초기화 상태
int RainbowSpeed; // 레인보우 변환 변수
int E ndritshme = 100; // 디밍 초기 값 int BrightnessFactor = 1; // 디밍 증감 값 ///////////////////////////////////////////// ///////////////////////////////////////
void setup () {
për (int i = 0; i <NUM_LIGHTS; i ++) {pixel .filloj (); // 픽셀 오브젝트 초기화}
// 버튼 인풋 설정
për (int i = 0; i <NUM_LIGHTS; i ++) {pinMode (fillon Ndërrimi , INPUT_PULLUP); // ndez/fik 버튼 인풋 설정} pinMode (animacionButton, INPUT_PULLUP); // 애니메이션 버튼 인풋 설정
për (int i = 0; i <NUM_LIGHTS; i ++) {B_Interval = int (rastësor (B_Min, B_Max)); // 모듈 별 블 링킹 속도 인터발 (인터발) 생성 생성}
Serial.filloj (9600); // 통신 설정
}
lak void () {
MODE = CheckAnimMode (); // 모드 에 애니메이션 체크 함수 함수 를
// 버튼 과 가변 저항 을 값 을.
për (int i = 0; i <NUM_LIGHTS; i ++) {startState =! digitalRead (fillonSwitch ); // ndezur/fikur 을 에서 읽은 값 의 St St startState 넣어 넣어 준다 // startState = digitalRead (fillonShpejtimi ); colorVal = analogRead (ngjyraPin ); // 저항 에서 읽은 값 을 가변 가변 값 에 넣는다 넣는다 넣는다
kaloni (MODE) {// 애니메이션 함수 스위치 문
rasti 0: më (); // në pushim 함수 실행; // 조건문 에서 빠져 나가라
rasti 1:
ylber (); // ylber 실행 실행 thyerje;
rasti 2:
zbehje (); // zbehje 실행 실행 pushim;
rasti 3:
vezullim (); // ndezje ink 실행 pushim; }
për (int i = 0; i <NUM_LIGHTS; i ++) {pixel .shfaq (); // 픽셀 오브젝트 배열 켜라 켜라}
}
/////////////////////////////////////////////////////////////
int CheckAnimMode () {
// 애니메이션 선택 버튼 을 읽어 모드 모드.
//////////////////////////////////////////////////////////////// /// aktualeMillis = millis (); // 시간 측정 int leximi = digitalRead (animacionButton); nëse (leximi! = lastButtonState) {// 입력 핀 으로부터 이전 의 버튼 의 의 비교 비교 비교 비교 비교 lastDebounceTime = milis (); // 시간 을 출력 핀 이 마지막 마지막 으로
if ((aktualeMillis - lastDebounceTime)> debounceDelay) {
nëse (leximi! = buttonState) {// 입력 핀 으로부터 받은 현재 값 과 판독 판독
buttonState = leximi; // 판독 값 을 buttonState 에 대입
nëse (buttonState == LOW) {// 버튼 상태 가 꺼져 있다면
MODE ++; // 버튼 모드 1 증가 증가 nëse (MODE> 3) {MODE = 0; firstRainbow = e vërtetë; // 레인보우 색상 초기화 상태 act BrightnessFactor = 1; // 디밍 증감 값 E ndritshme = 15; // 밝기 는 15}}}}
lastButtonState = lexim; // 판독 값 을 이전 버튼 버튼 버튼
kthimi MODE; Modaliteti 함수 를 하고 로 로 값 리턴 하라 하라}
////////////////////////////////////////////////////////////////////
// funksionimi i modalitetit të animacionit
// më
void në () {Serial.println ("on"); // 시리얼 모니터 에 në 을 써라 për (int i = 0; i <NUM_LIGHTS; i ++) {color_set (i, colorVal ); // 저항 값 에 따라 컬러 셋팅}}}
// Ylber
void ylber () {Serial.println ("shi"); // 시리얼 모니터 에 shi 을 써라 nëse (firstRainbow) {RainbowSpeed = 0; // 레인보우 속도 초기화 firstRainbow = false; // 레인보우 색상 초기화 상태 if} if (millis () - R_previousMillis> R_Interval) {// 흐른 시간 값 이 레인보우 인터벌 _ _ R_previousMillis = currentMillis; // 현재 시간 을 이전 의 레인보우 시간 라 라 RainbowSpeed += 10; // 레인보우 변환 변수 에 10 을 더해라}
për (int i = 0; i <NUM_LIGHTS; i ++) {color_set (i, (colorVal +RainbowSpeed) % 1023); // 컬러 셋팅}
}
// Zbehja e dritës
void dimming () {Serial.println ("dimm"); // 시리얼 모니터 에 dimm 을 ial Serial.println (E ndritshme); // 시리얼 모니터 에 E ndritshme 써라 nëse (aktualMillis - D_previousMillis> D_Interval) {// 흐른 시간 값 이 디밍 인터벌 _ _ D_previousMillis = currentMillis; // 현재 시간 을 이전 의 디밍 시간 라 ight ight Bright += BrightnessFactor; // 밝기 에 디밍 증감 씩 1 씩 올려라} nëse (Bright 254) {BrightnessFactor = -1 * BrightnessFactor; } Bright = kufizoj (Bright, 99, 254); // 변수 밝기 을 최소값 99 ~ 최대 값 254 사이 의 값 으로 한정
për (int i = 0; i <NUM_LIGHTS; i ++) {dim_color_set (i, Bright); // 디밍 컬러 셋팅}}
// Pulsim
pavlefshëm pulsim () {Serial.println ("vezullim"); // ink 모니터 에 ndezje ink 써라
për (int i = 0; i B_Interval ) {// 흐른 시간 값 이 이 블링크 값 보다
B_paraprakMillis = aktualMillis; // 현재 시간 을 이전 의 _ _ _ B_stat =! Shteti B_ ; // 각 모듈 링킹 상태 상태 반대 값 을 을 을}}}} për (int i = 0; i <NUM_LIGHTS; i ++) {if (B_state ) {// 모듈 의 블 링킹 읽 Set vendosja e ngjyrave (i, colorVal ); // 가변 저항 값 에 따라 컬러 else} tjetër {noColor_set (i); // 않으면 컬러 하지 하지 않음}}}
}
////////////////////////////////////////////////////////////////////////////////////////
// funksioni kryesor
// set ngjyrash
void color_set (indeksi int, int colorSenser) {
if (startState [index]) {hue [index] = map (colorSenser, 0, 1023, 0, 359); // 0 ~ 1023 을 0 ~ 359 값 으로 매핑 값 값 을 color color color color (colorSenser 에) getRGB (nuanca [indeksi], 255, 255, rgb_colors, index); për (int i = 0; i <NUMPIXELS; i ++) {pixel [index].setPixelColor (i, pixels [index]. Color (rgb_colors [index] [0], rgb_colors [index] [1], rgb_colors [index] [2])); } // 픽셀 컬러 셋팅 을 rgb_colors 의 r, g, b 으로 설정} tjetër noColor_set (indeksi); // 컬러 셋팅 하지 않음}
////// noColor set
pavlefshmeNcolor_set (int index) {// 컬러 셋팅 하지 않는 함수
për (int i = 0; i <NUMPIXELS; i ++) {pixel [index].setPixelColor (i, pixels [index]. Ngjyra (0, 0, 0)); } // 픽셀 컬러 세팅 을 0, 0, 0 으로 설정}
//// set dimColor
pavlefshme 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 color (colorVal) getRGB (nuanca [indeksi], 255, pes, rgb_colors, index); për (int i = 0; i <NUMPIXELS; i ++) {pixel [index].setPixelColor (i, pixels [index]. Color (rgb_colors [index] [0], rgb_colors [index] [1], rgb_colors [index] [2])); } /// 픽셀 컬러 셋팅 을 rgb_colors 의 r, g, b 으로 설정} tjetër noColor_set (indeksi); // 컬러 셋팅 하지 않음}
Hapi 6: Një vështrim i përfunduar
Recommended:
Simboli i dritës së dritës LED: 6 hapa (me fotografi)
Simboli LED i dritës flash: Jeni i ri në Soldering dhe doni të mësoni bazat me një çantë të thjeshtë? Nëse jeni duke kërkuar një mënyrë të thjeshtë për të mësuar lidhjen ose thjesht dëshironi të bëni një vegël të vogël portative, kjo simbol i dritës LED Flash është një zgjedhje e shkëlqyeshme Me Ky PCB LED Flash Light Badge është
Ndërprerës i dritës me telekomandë Bluetooth - Rinovoni. Ndërprerësi i dritës ende funksionon, pa shkrim shtesë .: 9 hapa (me fotografi)
Ndërprerës i dritës me telekomandë Bluetooth - Rinovoni. Ndërprerësi i dritës ende funksionon, pa shkrim shtesë .: Përditësoni 25 Nëntor 2017 - Për një version të fuqisë së lartë të këtij projekti që mund të kontrollojë kilovat e ngarkesës, shikoni Retrofit Control BLE në Ngarkesa të Fuqisë së Lartë - Nuk Kërkohet Shtesë shtesë Kërko Përditësim 15 Nëntor 2017 - Disa borde BLE / rafte softuerësh
Ndërprerës i dritës i aktivizuar me lëvizje me sensorin e dritës: 5 hapa
Ndërruesi i dritës së aktivizuar me lëvizje me sensorin e dritës: Ndërprerësi i dritës së aktivizuar me lëvizje ka shumë aplikime si në shtëpi ashtu edhe në zyrë. Kjo, megjithatë, ka shtuar avantazhin e inkorporimit të një sensori të dritës, në mënyrë që kjo dritë të ndizet vetëm gjatë natës
Ornamenti i dritës së tavolinës dhe shenja e dritës së derës: 8 hapa (me fotografi)
Zbukurimi i tavolinës dhe shenja e dritës së derës: Ky mësim do t'ju tregojë se si të programoni dhe ndërtoni një zbukurim tavoline që ndizet. Këto drita ndryshojnë ngjyrat gjatë një ore. Ju gjithashtu do të mësoni se si të programoni dhe ndërtoni një shenjë shoqëruese të derës që ndizet. Mund të përdorni derën
ESP8266 / Arduino RGB Dekorimi i dritares së dritës së Krishtlindjeve të dritës: 5 hapa (me fotografi)
ESP8266 / Arduino RGB LED Drita e Dritës së Krishtlindjeve Drita: thatshtë ajo kohë e vitit: Dhjetor. Dhe në lagjen time, të gjithë po zbukurojnë shtëpinë dhe dritaret e tyre me disa drita të Krishtlindjeve. Këtë herë, vendosa të ndërtoj diçka me porosi, unike, duke përdorur një modul ESP8266 dhe vetëm disa LED RGB. Ju c