Sisukord:
- Samm: materjalid
- 2. etapp: ehitusplaan
- 3. samm: riistvara: vooluahela kujundus
- Samm: riistvara: akrüüli lõikamine
- Samm: Arduino programmeerimiskood
- 6. samm: viimistletud pilk
Video: Punktvalguse muster: 6 sammu
2024 Autor: John Day | [email protected]. Viimati modifitseeritud: 2024-01-30 08:48
Alustasin ideega "Kas ma saan valgust oma kätega juhtida ja oma tahet väljendada?"
See on punktvalgusmuster, mis võimaldab teil ise oma värve luua, nende värvidega oma mustreid kujundada ja erinevaid animatsiooniefekte kogeda.
Samm: materjalid
- Arduino UNO x 13
- WS2901 või WS2811 piksliline LED -riba (130 LED -i)
- Nuppude lüliti x 1
- Lüliti x 65
- Potentsiameeter x 65
- Vikerkaabel
- Võimsus on piisav SMPS
- Juhi kaabel
- Akrüülist läbipaistev ümar riba (läbimõõt 30 mm)
- Musta värvi akrüülplaat (5T) (500 mm*790 mm) x 2, (500 mm*35 mm) x 2, (790 mm*35 mm) x 2
2. etapp: ehitusplaan
3. samm: riistvara: vooluahela kujundus
-
Lõika akrüülplaat nagu ülaltoodud struktuur. (vt 2. samm)
- Potentsusmõõtja augu üla- ja alaossa pannakse üks neopikslite LED-tükk ja kokku on kinnitatud 65 paari neopikslilisi LED-e.
- Paar neopikslit LED-i on ühendatud, moodustades ühe Arduino tihvti.
- Paigaldage 65 potentsiameetrit aukude mõõtmise aukudesse. (Asetage see neopiksliga pinna vastasküljele.)
- Kinnitage 65 lukustuslülitit, et need sobiksid lüliti avadega.
- Iga kolmeteistkümne tsooni külge on kinnitatud kokku kolmteist Arduino UNO -d, et siduda viis Arduino UNO -sse kuuluvat riistvara 65 tükki.
- Nagu on näidatud lisatud fotol, ühendage juhtme abil võimsusmõõturid, lukustuslülitid ja neopikslilised LED-id Arduino UNO tihvtidega. (vt 2. samm)
- Mitme Arduino UNO GND ja 5V tihvtid kogutakse kaablijuhtmetesse ja ühendatakse seejärel välise toiteallikaga. (vt 2. samm)
- Eemaldage tolm õhurõhu abil.
Samm: riistvara: akrüüli lõikamine
-
Lõika akrüülvarda pikkuseks 50 mm.
- Akrüülvarda üks külg puuritakse suuruse ja sügavusega, et see vastaks potentsimeetri kontrolleri osale.
- Akrüülvarras on kärbitud aukust veidi laiemalt, et oleks piisavalt ruumi potentsusmõõdikusse.
- Teine pool annab veidi liivapaberit, et valgus saaks korralikult läbi lasta.
Samm: Arduino programmeerimiskood
www.kasperkamperman.com/blog/arduino/ardui…
'hsb kuni rgb' kood 를 참고 한 사이트
#kaasake
// '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 // 작동 모듈 갯수 (네오 픽셀 오브젝트 갯수)
// 네오 픽셀 오브젝트 Massiiv 선언
Adafruit_NeoPixel pikslit = {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 bait 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 toon, int sat, int val, int värvid [5] [3], int indeks) {
val = hämar_kõver [val]; sat = 255 - hämar_kõver [255 - laup];
// 색조, 채도 및 밝기 (HSB /HSV) või RGB
// dim_curve 는 밝기 값 및 채도 (반전) 에서만 사용 됩니다. // 이것은 가장 자연스럽게 보입니다.
int r;
int g; int b; int alus;
kui (laupäev == 0) {
värvid [indeks] [0] = val; värvid [indeks] [1] = val; värvid [indeks] [2] = val; } muud {
alus = ((255 - laup) * val) >> 8;
lüliti (toon / 60) {
juhtum 0: r = val; g = ((((val - alus) * toon) / 60) + alus; b = alus; murda;
juhtum 1:
r = ((((val - alus) * (60 - (toon % 60))) / 60) + alus; g = val; b = alus; murda;
juhtum 2:
r = alus; g = val; b = ((((val - alus) * (toon % 60)) / 60) + alus; murda;
juhtum 3:
r = alus; g = ((((val - alus) * (60 - (toon % 60))) / 60) + alus; b = val; murda;
juhtum 4:
r = ((((val - alus) * (toon % 60)) / 60) + alus; g = alus; b = val; murda;
juhtum 5:
r = val; g = alus; b = ((((val - alus) * (60 - (toon % 60))) / 60) + alus; murda; }
värvid [indeks] [0] = r;
värvid [indeks] [1] = g; värvid [indeks] [2] = b; }
}
int rgb_colors [NUM_LIGHTS] [3]; // 네오 픽셀 오브젝트 갯수 마다 rgb värv 선언
int toon [NUM_LIGHTS]; // 네오 픽셀 오브젝트 갯수 마다 toon 선언 int sat [NUM_LIGHTS]; // 네오 픽셀 오브젝트 갯수 마다 명도 선언 int brignt [NUM_LIGHTS]; // 네오 픽셀 오브젝트 갯수 마다 밝기 서언
// 일반 변수 선언
int startsSwitch = {8, 9, 10, 11, 12}; // sisse/välja 버튼 핀 번호 boolean startState = {false, false, false, false, false}; // sisse/välja 상태 변수
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; // 이전 의 판독 값 은 켜진 상태 로 allkirjastamata long lastDebounceTime = 0; // 출력 핀 이 마지막 으로 전환 된 시간 은 0 으로 allkirjata pikk debounceDelay = 50; // 디 바운싱 타임 설정; 출력 이 깜빡 이면 증가 한다 int MODE = 0; // 애니메이션 모드 변수
int B_intervall [5]; // 블 링킹 을 위한 각 모듈 의 랜덤 속도 변수
int B_Min = 100; // 블 링킹 최단 속도; int B_max = 500; // 블 링킹 최장 속도; int R_intervall = 50; // 레인보우 애니메이션 속도 변수 int D_Interval = 10; // 디밍 속도 변수
boolean B_state [5]; // 블 링킹 을 위한 각 모듈 의 상태 변수
///////////////////////////////////////////////////////
// 멀티 테스 킹 애니메이션 을 위한 시간 변수 선언
allkirjastamata pikkvoolMillis; // 현재 시간 변수
allkirjastamata pikk B_previousMillis [5]; // 각 모듈 의 블 링킹 타이머 allkirjastamata pikk DR_Millis [5]; // 각 모듈 의 디밍 랜덤 타이머 (예비) allkirjata pikk R_previousMillis; // 레인보우 타이머 allkirjastamata pikk D_previousMillis; // 디밍 타이머
boolean firstRainbow = true; // 레인보우 색상 초기화 상태 변수
int RainbowSpeed; // 레인보우 변환 변수
int Bright = 100; // 디밍 초기 값 int BrightnessFactor = 1; // 디밍 증감 값 //////////////////////////////////////////////////////- /////////////////////////////////////////////////////
tühine seadistus () {
jaoks (int i = 0; i <NUM_LIGHTS; i ++) {pikslit .begin (); // 네오 픽셀 오브젝트 초기화}
// 버튼 인풋 설정
for (int i = 0; i <NUM_LIGHTS; i ++) {pinMode (startsSwitch , INPUT_PULLUP); // sisse/välja 버튼 인풋 설정} pinMode (animationButton, INPUT_PULLUP); // 애니메이션 버튼 인풋 설정
jaoks (int i = 0; i <NUM_LIGHTS; i ++) {B_Interval = int (juhuslik (B_Min, B_Max)); // 모듈 별 블 링킹 랜덤 인터발 (인터발) 변수 생성}
Seriaalne algus (9600); // 통신 설정
}
void loop () {
MODE = CheckAnimMode (); // 모드 에 애니메이션 체크 모드 함수 를 넣는다
// 버튼 과 가변 저항 을 값 을 각각 읽어 변수 에 에 지정 한다.
for (int i = 0; i <NUM_LIGHTS; i ++) {startState =! digitalRead (startsSwitch ); // sisse/välja 버튼 에서 읽은 값 의 반대 값 을 startState 에 넣어 준다 // startState = digitalRead (startsSwitch ); colorVal = analogRead (colorPin ); // 가변 저항 에서 읽은 값 을 가변 저항 초기 값 에 넣는다}
lüliti (MODE) {// 애니메이션 함수 스위치 문
juhtum 0: sees (); // on 함수 실행 break; // 조건문 에서 빠져 나가라
juhtum 1:
vikerkaar (); // vikerkaar 함수 실행 murda;
juhtum 2:
hämardamine (); // hämardamine 함수 실행 paus;
juhtum 3:
vilkuv (); // vilkuv 함수 실행 paus; }
jaoks (int i = 0; i <NUM_LIGHTS; i ++) {pikslit .show (); // 네오 픽셀 오브젝트 배열 켜라}
}
/////////////////////////////////////////////////////////////
int CheckAnimMode () {
// 애니메이션 선택 버튼 을 읽어 모드 를 결정 한다.
////////////////////////////////////////////////////////////- /// currentMillis = millis (); // 시간 측정 int lugemine = digitalRead (animationButton); if (lugemine! = lastButtonState) {// 입력 핀 으로부터 이전 의 버튼 의 상태 와 판독 값 비교 lastDebounceTime = millis (); // 현재 시간 을 출력 핀 이 마지막 으로 전환 된 시간 에 넣음}
if ((currentMillis - lastDebounceTime)> debounceDelay) {
if (lugemine! = buttonState) {// 입력 핀 으로부터 받은 현재 값 과 판독 값 과 비교
buttonState = lugemine; // 판독 값 을 buttonState 에 대입
if (buttonState == LOW) {// 버튼 상태 가 꺼져 있다면
MODE ++; // 버튼 모드 1 씩 증가 if (MODE> 3) {MODE = 0; esimeneVikerkaar = tõsi; // 레인보우 색상 초기화 상태 켜짐 BrightnessFactor = 1; // 디밍 증감 값 Hele = 15; // 밝기 는 15}}}}
lastButtonState = lugemine; // 판독 값 을 이전 의 버튼 상태 에 대입
tagasi MODE; 함수 를 종료 하고 režiim 함수 로 값 을 리턴 하라}
////////////////////////////////////////////////////////////////////
// animatsioonirežiimi kõikumine
//peal
void on () {Serial.println ("on"); // 시리얼 모니터 에 on 을 써라 for (int i = 0; i <NUM_LIGHTS; i ++) {color_set (i, colorVal ); // 가변 저항 값 에 따라 컬러 셋팅}}
// Vikerkaar
void vikerkaar () {Serial.println ("vihm"); // 시리얼 모니터 에 vihm 을 써라 if (esimeneVikerkaar) {Vikerkaarekiirus = 0; // 레인보우 속도 초기화 esimeneVikerkaar = vale; // 레인보우 색상 초기화 상태 꺼짐} if (millis () - R_previousMillis> R_Interval) {// 흐른 시간 값 이 레인보우 인터벌 값 보다 크면 R_previousMillis = currentMillis; // 현재 시간 을 이전 의 레인보우 시간 에 넣어 라 RainbowSpeed += 10; // 레인보우 변환 변수 에 10 을 더해라}
jaoks (int i = 0; i <NUM_LIGHTS; i ++) {color_set (i, (colorVal +RainbowSpeed) % 1023); // 레인보우 컬러 셋팅}
}
// Hämardamine
void dimming () {Serial.println ("hämar"); // 시리얼 모니터 에 dimm 을 써라 Serial.println (särav); // 시리얼 모니터 에 Hele 를 써라 if (currentMillis - D_previousMillis> D_Interval) {// 흐른 시간 값 이 디밍 인터벌 값 보다 크면 D_previousMillis = currentMillis; // 현재 시간 을 이전 의 디밍 시간 에 넣어 라 Bright += BrightnessFactor; // 밝기 에 디밍 증감 값 1 씩 올려라} if (Bright 254) {BrightnessFactor = -1 * BrightnessFactor; } Bright = piirata (Bright, 99, 254); // 변수 밝기 값 을 최소값 99 ~ 최대 값 254 사이 의 값 으로 한정 한다
jaoks (int i = 0; i <NUM_LIGHTS; i ++) {dim_color_set (i, Bright); // 디밍 컬러 셋팅}}
// Vilkuv
void vilkuv () {Serial.println ("vilkuma"); // 시리얼 모니터 에 vilgub 를 써라
jaoks (int i = 0; i B_Interval ) {// 흐른 시간 값 이 블링크 인터벌 값 보다 크면
B_previousMillis = praeguneMillis; // 현재 시간 을 이전 의 블링크 시간 에 넣어 라 B_state =! B_state ; // 각 모듈 의 블 링킹 상태 변수 값 의 반대 값 을 대입 하라}} for (int i = 0; i <NUM_LIGHTS; i ++) {if (B_state ) {// 모듈 의 블 링킹 상태 읽 읽 히면 color_set (i, colorVal ); // 가변 저항 값 에 따라 컬러 셋팅} else {noColor_set (i); // 읽히지 않으면 컬러 셋팅 하지 않음}}
}
////////////////////////////////////////////////////////////////////////////////////////
// põhifunktsioon
// värvikomplekt
void color_set (int indeks, int colorSenser) {
if (startState [register]) {toon [indeks] = kaart (colorSenser, 0, 1023, 0, 359); // 0 ~ 1023 값 을 0 ~ 359 값 으로 매핑 한 값 을 가지고 색상 값 으로 color (colorSenser 에) getRGB (toon [indeks], 255, 255, rgb_colors, index); (int i = 0; i <NUMPIXELS; i ++) {pikslit [indeks].setPixelColor (i, pikslit [indeks].värv (rgb_colors [register] [0], rgb_colors [register] [1], rgb_colors [register] [2])); } // 픽셀 컬러 셋팅 을 rgb_colors 의 r, g, b 으로 설정} else noColor_set (indeks); // 컬러 셋팅 하지 않음}
////// noColor komplekt
void noColor_set (int indeks) {// 컬러 셋팅 하지 않는 함수 설정
jaoks (int i = 0; i <NUMPIXELS; i ++) {pikslit [indeks].setPixelColor (i, pikslit [indeks]. Värv (0, 0, 0)); } // 픽셀 컬러 세팅 을 0, 0, 0 으로 설정}
//// dimColor komplekt
void dim_color_set (int indeks, int BC) {// 디밍 컬러 셋팅 함수 설정
if (stardiriik [indeks]) {toon [indeks] = kaart (colorVal [indeks], 0, 1023, 0, 359); // 0 ~ 1023 값 을 0 ~ 359 값 으로 매핑 한 값 을 가지고 색상 값 으로 color (colorVal 에) getRGB (toon [indeks], 255, eKr, rgb_colors, index); (int i = 0; i <NUMPIXELS; i ++) {pikslit [indeks].setPixelColor (i, pikslit [indeks]. Värv (rgb_colors [register] [0], rgb_colors [register] [1], rgb_colors [register] [2])); } /// 픽셀 컬러 셋팅 을 rgb_colors 의 r, g, b 으로 설정} else noColor_set (indeks); // 컬러 셋팅 하지 않음}
6. samm: viimistletud pilk
Soovitan:
Atari punkkonsool beebiga 8 sammu järjestus: 7 sammu (piltidega)
Atari punkkonsool koos beebi 8-astmelise sekveneerijaga: see vaheehitus on kõik-ühes Atari punk-konsool ja beebi 8-astmeline järjestus, mida saate freesida Bantam Tools töölaua PCB-freespingis. See koosneb kahest trükkplaadist: üks on kasutajaliidese (UI) plaat ja teine on utiliit
Akustiline levitatsioon Arduino Unoga samm-sammult (8 sammu): 8 sammu
Akustiline levitatsioon Arduino Uno abil samm-sammult (8 sammu): ultraheliheli muundurid L298N DC-naissoost adapteri toiteallikas isase alalisvoolupistikuga Arduino UNOBreadboard ja analoogpordid koodi teisendamiseks (C ++)
4G/5G HD -video otseülekanne DJI droonilt madala latentsusega [3 sammu]: 3 sammu
4G/5G HD-video otseülekanne DJI droonilt madala latentsusega [3 sammu]: Järgnev juhend aitab teil saada HD-kvaliteediga otseülekandeid peaaegu igalt DJI droonilt. FlytOSi mobiilirakenduse ja veebirakenduse FlytNow abil saate alustada drooni video voogesitust
Polt - DIY juhtmeta laadimise öökell (6 sammu): 6 sammu (piltidega)
Bolt - DIY juhtmeta laadimise öökell (6 sammu): Induktiivsed laadimised (tuntud ka kui juhtmeta laadimine või juhtmeta laadimine) on traadita jõuülekande tüüp. See kasutab kaasaskantavatele seadmetele elektrit pakkumiseks elektromagnetilist induktsiooni. Kõige tavalisem rakendus on Qi traadita laadimisst
4 sammu aku sisemise takistuse mõõtmiseks: 4 sammu
4 sammu aku sisemise takistuse mõõtmiseks: Siin on 4 lihtsat sammu, mis aitavad mõõta taigna sisemist takistust