INHOUDSOPGAWE:
- Stap 1: materiaal
- Stap 2: Bouplan
- Stap 3: Hardeware: Kringontwerp
- Stap 4: Hardeware: akriel sny
- Stap 5: Arduino -programmeringskode
- Stap 6: 'n Voltooide blik
Video: Dot Light -patroon: 6 stappe
2024 Outeur: John Day | [email protected]. Laas verander: 2024-01-30 07:26
Ek het begin met die idee van "Kan ek lig met my eie hande beheer en my eie wil uitdruk?"
Dit is 'n 'Dot Light Pattern' waarmee u self u eie kleure kan skep, u eie patrone met die kleure kan ontwerp en verskillende animasie -effekte kan ervaar.
Stap 1: materiaal
- Arduino UNO x 13
- WS2901 of WS2811 pixel LED strook (130 LEDs)
- Knoppie skakelaar x 1
- Snap -skakelaar x 65
- Potensiemeter x 65
- Reënboogkabel
- Krag voldoende SMPS
- Leierkabel
- Akriel deursigtige ronde staaf (30 mm in deursnee)
- Swart kleur akrielbord (5T) (500mm*790mm) x 2, (500mm*35mm) x 2, (790mm*35mm) x 2
Stap 2: Bouplan
Stap 3: Hardeware: Kringontwerp
-
Sny die akrielplaat soos die struktuur hierbo. (sien stap 2)
- Een stuk neo-pixel LED word bo en onder in die gat van die potensiaalmeter geplaas, en 'n totaal van 65 pare neo-pixel LED's word aangeheg.
- 'N Paar neo-pixel LED's word aan mekaar gekoppel om 'n enkele Arduino-pen te vorm.
- Pas 65 potmeter aan die gate van die potmeter. (Sit dit aan die teenoorgestelde kant van 'n neo-gepixelde oppervlak.)
- Heg 65 klikskakelaars aan om by die skakelaargate te pas.
- Altesaam dertien Arduino UNO's is aan elk van die dertien sones gekoppel om vyf stukke van 65 stukke hardeware in een Arduino UNO te bind.
- Soos aangedui op die aangehegte foto, verbind die potensiaalmeters, snapskakelaars en neo-pixel LED's met draad aan die penne van die Arduino UNO. (sien stap 2)
- GND- en 5V -penne van verskeie Arduino UNO's word op kabeldrade versamel en dan aan eksterne krag gekoppel. (sien stap 2)
- Verwyder die stof deur lugdruk.
Stap 4: Hardeware: akriel sny
-
Sny die akrielstaaf tot 50 mm lank.
- Die een kant van die akrielstaaf word op die grootte en diepte geboor om by die kontroleerderdeel van die potensiaalmeter te pas.
- Die akrielstaaf is effens wyer as die gat afgewerk vir 'n speling wat goed in die potmeter kan pas.
- Die ander kant gee 'n bietjie skuurpapier sodat die lig netjies oorgedra kan word.
Stap 5: Arduino -programmeringskode
www.kasperkamperman.com/blog/arduino/ardui…
'hsb na rgb' -kode 를 참고 한 사이트
#insluit
// 'adafruit_neopixel' 헤더 파일 라는 외부 라이브러리 를 포함
// 네오 픽셀 연결 핀 번호 선언
#definieer PIN1 2 #definieer PIN2 3 #definieer PIN3 4 #definieer PIN4 5 #definieer PIN5 6
#define NUMPIXELS 2 // 네오 픽셀 LED 갯수
#define NUM_LIGHTS 5 // 작동 모듈 갯수 (네오 픽셀 오브젝트 갯수)
// 네오 픽셀 오브젝트 Array 선언
Adafruit_NeoPixel pixels = {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 의 개수 // 두번째 인자 값 은 네오 픽셀 이 연결된 아두 이노 핀 핀 번호 // 세번째 인자 값 은 네오 픽셀 의 타입 에 따라 바뀌는 바뀌는 vlag
//////////////////////////////////////////////////////////////
////// HSV 를 RGB 로 변환 하는 함수 getRGB () 를 위한 변수 와 함수 선언
const 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 - sat];
// 색조, 채도 및 밝기 (HSB /HSV) 를 RGB 로 변환
// dim_curve 는 밝기 값 및 채도 (반전) 에서만 사용 됩니다. // 이것은 가장 자연스럽게 보입니다.
int r;
int g; int b; int basis;
as (sat == 0) {
kleure [indeks] [0] = val; kleure [indeks] [1] = val; kleure [indeks] [2] = val; } anders {
basis = ((255 - sat) * val) >> 8;
skakelaar (kleur / 60) {
geval 0: r = val; g = (((val - basis) * tint) / 60) + basis; b = basis; breek;
geval 1:
r = (((val - basis) * (60 - (tint % 60)))) / 60) + basis; g = val; b = basis; breek;
geval 2:
r = basis; g = val; b = (((val - basis) * (kleur % 60)) / 60) + basis; breek;
geval 3:
r = basis; g = (((val - basis) * (60 - (tint % 60)))) / 60) + basis; b = val; breek;
geval 4:
r = (((val - basis) * (kleur % 60)) / 60) + basis; g = basis; b = val; breek;
saak 5:
r = val; g = basis; b = (((val - basis) * (60 - (tint % 60)))) / 60) + basis; breek; }
kleure [indeks] [0] = r;
kleure [indeks] [1] = g; kleure [indeks] [2] = b; }
}
int rgb_colors [NUM_LIGHTS] [3]; // 네오 픽셀 오브젝트 갯수 마다 rgb -kleur 선언
int tint [NUM_LIGHTS]; // 네오 픽셀 오브젝트 갯수 마다 hue 선언 int sat [NUM_LIGHTS]; // 네오 픽셀 오브젝트 갯수 마다 명도 선언 int brignt [NUM_LIGHTS]; // 네오 픽셀 오브젝트 갯수 마다 밝기 서언
// 일반 변수 선언
int startsSwitch = {8, 9, 10, 11, 12}; // aan/uit 버튼 핀 번호 boolese startState = {vals, vals, vals, vals, vals}; // aan/af 상태 변수
const int colorPin = {A0, A1, A2, A3, A4}; // 가변 저항 핀 번호
int colorVal = {0, 0, 0, 0, 0}; // 가변 저항 초기 값
int animationButton = 7; // 애니메이션 모드 변환 버튼 핀 번호
/////////////////////////////////////////////////
// 애니메이션 모든 변환 을 위한 버튼 디 바운싱 변수 선언 디 // 디 바운싱? Button 시간 내 많은 이벤트 가 발생 하는것 에 대한 문제 에 대해서 시간 간격 으로 으로 를 호출 하여 해결 int buttonState; // 입력 핀 으로부터 의 현재 판독 값 last int lastButtonState = HOOG; // 이전 의 판독 값 은 켜진 상태 로 ongetekende lang lastDebounceTime = 0; // 출력 핀 이 마지막 으로 전환 된 시간 은 0 으로 ongetekende lang debounceDelay = 50; // 디 바운싱 타임 설정; 출력 이 깜빡 이면 증가 한다 int MODE = 0; // 애니메이션 모드 변수
int B_Interval [5]; // 블 링킹 을 위한 각 모듈 의 랜덤 속도 변수
int B_Min = 100; // 블 링킹 최단 속도; int B_Maks = 500; // 블 링킹 최장 속도; int R_Interval = 50; // 레인보우 애니메이션 속도 변수 int D_Interval = 10; // 디밍 속도 변수
booleaanse B_staat [5]; // 블 링킹 을 위한 각 모듈 의 상태 변수
///////////////////////////////////////////////////////
// 멀티 테스 킹 애니메이션 을 위한 시간 변수 선언
ongetekende langstroomMillis; // 현재 시간 변수
ongetekende lang B_previousMillis [5]; // 각 모듈 의 블 링킹 타이머 ongetekende lang DR_Millis [5]; // 각 모듈 의 디밍 랜덤 타이머 (예비) ongetekende lang R_previousMillis; // 레인보우 타이머 ongetekende lang D_previousMillis; // 디밍 타이머
boolean firstRainbow = true; // 레인보우 색상 초기화 상태 변수
int RainbowSpeed; // 레인보우 변환 변수
int Bright = 100; // 디밍 초기 값 int BrightnessFactor = 1; // 디밍 증감 값 //////////////////////////////////////// //////////////////////////////////////////////
ongeldige opstelling () {
vir (int i = 0; i <NUM_LIGHTS; i ++) {pixels .begin (); // 네오 픽셀 오브젝트 초기화}
// 버튼 인풋 설정
vir (int i = 0; i <NUM_LIGHTS; i ++) {pinMode (startsSwitch , INPUT_PULLUP); // aan/af 버튼 인풋 설정} pinMode (animasie -knoppie, INPUT_PULLUP); // 애니메이션 버튼 인풋 설정
vir (int i = 0; i <NUM_LIGHTS; i ++) {B_Interval = int (random (B_Min, B_Max)); // 모듈 별 블 링킹 랜덤 속도 (인터발) 변수 생성}
Serial.begin (9600); // 통신 설정
}
leemte -lus () {
MODE = CheckAnimMode (); // 모드 에 애니메이션 체크 모드 함수 를 넣는다
// 버튼 과 가변 저항 을 값 을 각각 읽어 변수 에 지정 한다.
for (int i = 0; i <NUM_LIGHTS; i ++) {startState =! digitalRead (startsSwitch ); // aan/af 버튼 에서 읽은 값 의 반대 값 을 startState 에 넣어 준다 // startState = digitalRead (startsSwitch ); colorVal = analogRead (colorPin ); // 가변 저항 에서 읽은 값 을 가변 저항 초기 값 에 넣는다}
skakel (MODE) {// 애니메이션 함수 스위치 문
saak 0: op (); // op 함수 실행 breek; // 조건문 에서 빠져 나가라
geval 1:
reënboog (); // reënboog 함수 실행 breek;
geval 2:
verduistering (); // verduistering 함수 실행 breek;
geval 3:
knipper (); // knipperende 함수 실행 breek; }
vir (int i = 0; i <NUM_LIGHTS; i ++) {pixels .show (); // 네오 픽셀 오브젝트 배열 켜라}
}
/////////////////////////////////////////////////////////////
int CheckAnimMode () {
// 애니메이션 선택 버튼 을 읽어 모드 를 결정 한다.
//////////////////////////////////////////////////// /// currentMillis = millis (); // 시간 측정 int reading = digitalRead (animationButton); if (lees! = lastButtonState) {// 입력 핀 으로부터 이전 의 버튼 의 상태 와 판독 값 비교 D lastDebounceTime = millis (); // 현재 시간 을 출력 핀 이 마지막 으로 전환 된 시간 에 넣음}
if ((currentMillis - lastDebounceTime)> debounceDelay) {
if (lees! = buttonState) {// 입력 핀 으로부터 받은 현재 값 과 판독 값 과 비교
buttonState = lees; // 판독 값 을 knoppie Staat 에 대입
if (buttonState == LOW) {// 버튼 상태 가 꺼져 있다면
MODUS ++; // 버튼 모드 1 씩 증가 if (MODE> 3) {MODE = 0; firstRainbow = waar; // 레인보우 색상 초기화 상태 켜짐 BrightnessFactor = 1; // 디밍 증감 값 Helder = 15; // 밝기 는 15}}}}
lastButtonState = lees; // 판독 값 을 이전 의 버튼 상태 에 대입
terug MODE; 함수 를 종료 하고 modus 함수 로 값 을 리턴 하라}
////////////////////////////////////////////////////////////////////
// funksie van die animasiemodus
// op
nietig op () {Serial.println ("aan"); // 시리얼 모니터 에 op 을 써라 vir (int i = 0; i <NUM_LIGHTS; i ++) {color_set (i, colorVal ); // 가변 저항 값 에 따라 컬러 셋팅}}
// Reënboog
leë reënboog () {Serial.println ("reën"); // 시리얼 모니터 에 reën 을 써라 if (firstRainbow) {RainbowSpeed = 0; // 레인보우 속도 초기화 firstRainbow = vals; // 레인보우 색상 초기화 상태 꺼짐} if (millis () - R_previousMillis> R_Interval) {// 흐른 시간 값 이 레인보우 인터벌 값 보다 크면 R_previousMillis = currentMillis; // 현재 시간 을 이전 의 레인보우 시간 에 넣어 라 RainbowSpeed += 10; // 레인보우 변환 변수 에 10 을 더해라}
vir (int i = 0; i <NUM_LIGHTS; i ++) {color_set (i, (colorVal +RainbowSpeed) % 1023); // 레인보우 컬러 셋팅}
}
// Verdof
leegte verduistering () {Serial.println ("dimm"); // 시리얼 모니터 에 dimm 을 써라 Serial.println (helder); // 시리얼 모니터 에 Helder 를 써라 as (currentMillis - D_previousMillis> D_Interval) {// 흐른 시간 값 이 디밍 인터벌 값 보다 크면 D_previousMillis = currentMillis; // 현재 시간 을 이전 의 디밍 시간 에 넣어 라 Bright += BrightnessFactor; // 밝기 에 디밍 증감 값 1 씩 올려라} if (Bright 254) {BrightnessFactor = -1 * BrightnessFactor; } Helder = beperking (helder, 99, 254); // 변수 밝기 값 을 최소값 99 ~ 최대 값 254 사이 의 값 으로 한정 한다
vir (int i = 0; i <NUM_LIGHTS; i ++) {dim_color_set (i, Bright); // 디밍 컬러 셋팅}}
// Knipperend
leegte knipper () {Serial.println ("knip"); // 시리얼 모니터 에 knip 를 써라
for (int i = 0; i B_Interval ) {// 흐른 시간 값 이 블링크 인터벌 값 보다 크면
B_previousMillis = currentMillis; // 현재 시간 을 이전 의 블링크 시간 에 넣어 라 B_staat =! B_staat ; // 각 모듈 의 블 링킹 상태 변수 의 값 의 반대 값 을 대입 하라}} for (int i = 0; i <NUM_LIGHTS; i ++) {if (B_state ) {// 모듈 의 블 링킹 상태 가 읽 히면 color_set (i, colorVal ); // 가변 저항 값 에 따라 컬러 셋팅} anders {noColor_set (i); // 읽히지 않으면 컬러 셋팅 하지 않음}}
}
////////////////////////////////////////////////////////////////////////////////////////
// kernfunksie
// kleurstel
void color_set (int index, int colorSenser) {
if (startState [index]) {hue [index] = map (colorSenser, 0, 1023, 0, 359); // 0 ~ 1023 값 을 0 ~ 359 값 으로 매핑 한 값 을 가지고 색상 값 으로 지정 color (colorSenser 에) getRGB (tint [indeks], 255, 255, rgb_kleure, indeks); for (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_kleure 의 r, g, b 으로 설정} anders noColor_set (indeks); // 컬러 셋팅 하지 않음}
////// noColor -stel
void noColor_set (int index) {// 컬러 셋팅 하지 않는 함수 설정
for (int i = 0; i <NUMPIXELS; i ++) {pixels [index].setPixelColor (i, pixels [index]. Color (0, 0, 0)); } // 픽셀 컬러 세팅 을 0, 0, 0 으로 설정}
//// dimColor -stel
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 (colorVal 에) getRGB (hue [index], 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 [index] [2])); } /// 픽셀 컬러 셋팅 을 rgb_kleure 의 r, g, b 으로 설정} anders noColor_set (indeks); // 컬러 셋팅 하지 않음}
Stap 6: 'n Voltooide blik
Aanbeveel:
BookWorm Light-Up Book Light en Bookmark: 13 stappe (met prente)
BookWorm Light-Up Book Light en Bookmark: Maak hierdie prettige boekwurm-boekmerk wat ook as boeklig kan dien! Ons sal dit uitdruk, uitknip, kleur en versier, en hulle gebruik hom om die nag aan te steek sodat u in die donker kan lees. Hy is gemaak met net 'n paar materiale en maak 'n uitstekende eerste rol
Animated Mood Light en Night Light: 6 stappe (met foto's)
Animated Mood Light & Night Light: Met 'n bekoring wat grens aan obsessie met lig, het ek besluit om 'n verskeidenheid klein modulêre PCB's te skep wat gebruik kan word om RGB -ligskerms van enige grootte te skep. Nadat ek die modulêre PCB gemaak het, het ek die idee gekry om dit in 'n
Mystery Light Box (Night Light): 4 stappe
Mystery Light Box (Night Light): en dit is 'n prettige klein projek wat maklik is om te maak. Hierdie projek is 'n verwysing na https://www.instructables.com/id/Arduino-Traffic-L… het die struktuur van die oorspronklike webwerf baie verander
Ikea Light Hack (flexin Your Light): 5 stappe
Ikea Light Hack (flexin Your Light): Toe ek besluit om die beligting op my lessenaar te verbeter, wend ek my tot Ikea. Ek het die Ikea Jansjo (http://www.ikea.com/us/en/catalog/products/10128748) en die Ikea Lack (http://www.ikea.com/us/en/catalog/products/60124272) ) en per ongeluk die kwitansie weggegooi
Led Light Cap / Safty Cap of Light: 4 stappe
Led Light Cap / Safty Cap of Light: dit is een van my inskrywings vir die wedstryd, ek het hierdie idee gekry van 'n tydskrif in die gereedskapskisgedeelte, genaamd h2on, dit is 'n doplamp vir nalgeenbottels, so ek het vir my gesê in plaas van om te koop vir 22 dollar het ek my eie minder as 'n paar dollar gemaak