Мазмуну:
- 1 -кадам: материалдар
- 2 -кадам: Курулуш планы
- 3 -кадам: Аппараттык: Райондук дизайн
- 4 -кадам: Аппараттык: Акрил кесүү
- 5 -кадам: Arduino программалоо коду
- 6 -кадам: Бүткөн көрүнүш
Video: Dot Light Pattern: 6 кадам
2024 Автор: John Day | [email protected]. Акыркы өзгөртүү: 2024-01-30 10:41
Мен "Жарыкты өз колум менен башкарып, өз эркимди билдире аламбы?" Деген ой менен баштадым.
Бул "Dot Light Pattern", бул өзүңүздүн түстөрүңүздү өзүңүз түзүүгө, ошол түстөр менен өз үлгүлөрүңүздү иштеп чыгууга жана ар кандай анимация эффекттерин баштан өткөрүүгө мүмкүндүк берет.
1 -кадам: материалдар
- Arduino UNO x 13
- WS2901 же WS2811 пикселдик LED тилкеси (130 LEDS)
- Баскыч x 1
- Snap switch x 65
- Potencymeter x 65
- Радуга кабели
- SMPS жетиштүү күч
- Өткөргүч кабель
- Акрил тунук тегерек тилкеси (диаметри 30 мм)
- Кара түс Акрил такта (5T) (500мм*790мм) х 2, (500мм*35мм) х 2, (790мм*35мм) х 2
2 -кадам: Курулуш планы
3 -кадам: Аппараттык: Райондук дизайн
-
Акрил табакты жогоруда көрсөтүлгөн структурага окшош кылып кесип алыңыз. (2 -кадамды караңыз)
- Нео-пиксель диодунун бир бөлүгү потенциалометр тешигинин үстү жана астына коюлат жана жалпысынан 65 жуп нео-пиксель диоддору тиркелет.
- Нео-пиксель диоддорунун жуптары бириктирилип, бир Arduino төөнөгүчүн түзөт.
- 65 потенциалды өлчөөчү тешиктерге орнотуңуз. (Нео-пикселдүү беттин карама-каршы жагына коюңуз.)
- Тутум тешиктерине дал келүү үчүн 65 тез алмаштыргычты тиркеңиз.
- Жалпысынан он үч Arduino UNOs он бир зонанын ар бирине тиркелет, алар бир Arduino UNOго 65 даана жабдыкты бириктирет.
- Тиркелген сүрөттө көрсөтүлгөндөй, потенциалды өлчөгүчтөрдү, тез өчүргүчтөрдү жана нео-пиксель диоддорун Arduino UNO казыктарына зым менен туташтырыңыз. (2 -кадамды караңыз)
- Бир нече Arduino UNOнун GND жана 5V казыктары кабелдик зымдарга чогултулуп, анан тышкы кубатка туташат. (2 -кадамды караңыз)
- Чаңды аба басымы менен тазалаңыз.
4 -кадам: Аппараттык: Акрил кесүү
-
Акрил таягын 50 мм узундукка кесип алыңыз.
- Акрил таякчасынын бир жагы потенциалометрдин контролердук бөлүгүнө дал келүү үчүн өлчөмүнө жана тереңдигине чейин бургуланган.
- Акрил таякчасы тешиктен бир аз кененирээк кесилген, бул потенциалдык өлчөгүчкө туура келет.
- Жарык тыкан өткөрүлүшү үчүн, экинчи жагы кичинекей кум кагазын берет.
5 -кадам: Arduino программалоо коду
www.kasperkamperman.com/blog/arduino/ardui…
'hsb to rgb' коду 를 참고 한 사이트
#кошуу
// 'adafruit_neopixel' 헤더 파일 라는 외부 라이브러리 를 포함
// 네오 픽셀 연결 핀 번호 선언
#аныктоо PIN1 2 #аныктоо PIN2 3 #аныктоо PIN3 4 #аныктоо PIN4 5 #аныктоо PIN5 6
#define NUMPIXELS 2 // 네오 픽셀 LED 갯수
#define NUM_LIGHTS 5 // 작동 모듈 갯수 (네오 픽셀 오브젝트 갯수)
// 네오 픽셀 오브젝트 Array 선언
Adafruit_NeoPixel пиксел = {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 байт 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, }; //
жараксыз getRGB (int hue, int sat, int val, int colors [5] [3], int index) {
val = dim_curve [val]; отурду = 255 - dim_curve [255 - отурду];
// 색조, 채도 및 밝기 (HSB /HSV) 를 RGB 로 변환
// dim_curve 는 밝기 및 채도 채도 (반전) 에서만 사용 됩니다. // 이것은 가장 자연스럽게 보입니다.
int r;
int g; int b; int base;
эгер (отурган == 0) {
түстөр [индекс] [0] = val; түстөр [индекс] [1] = val; түстөр [индекс] [2] = val; } башка {
base = ((255 - sat) * val) >> 8;
которуштуруу (өңү / 60) {
case 0: r = val; g = (((вал - базалык) * өң) / 60) + база; b = база; тыныгуу;
иши 1:
r = (((вал - базалык) * (60 - (реңк % 60))) / 60) + база; g = val; b = база; тыныгуу;
2 -жагдай:
r = база; g = val; b = (((val - базалык) * (реңк % 60)) / 60) + база; тыныгуу;
3 -жагдай:
r = база; g = (((вал - базалык) * (60 - (реңк % 60))) / 60) + база; b = val; тыныгуу;
4 -жагдай:
r = (((val - базалык) * (реңк % 60)) / 60) + база; g = база; b = val; тыныгуу;
5 -жагдай:
r = val; g = база; b = (((вал - база) * (60 - (реңк % 60))) / 60) + база; тыныгуу; }
түстөр [индекс] [0] = r;
түстөр [индекс] [1] = g; түстөр [индекс] [2] = b; }
}
int rgb_colors [NUM_LIGHTS] [3]; // 네오 픽셀 오브젝트 갯수 마다 rgb түс 선언
int hue [NUM_LIGHTS]; // 네오 픽셀 오브젝트 갯수 마다 hue 선언 int sat [NUM_LIGHTS]; // 네오 픽셀 갯수 갯수 마다 선언 선언 int brignt [NUM_LIGHTS]; // 네오 픽셀 오브젝트 갯수 마다 밝기 서언
// 일반 변수 선언
int startSwitch = {8, 9, 10, 11, 12}; // күйгүзүү/өчүрүү 번호 핀 번호 логикалык startState = {жалган, жалган, жалган, жалган, жалган}; // on/off 상태 변수
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_Interval [5]; // 블 링킹 위 위한 각 모듈 의 랜덤 속도 속도
int B_Min = 100; // 블 링킹 최단 속도; int B_Max = 500; // 블 링킹 최장 속도; int R_Interval = 50; // 레인보우 애니메이션 속도 변수 int D_Interval = 10; // 디밍 속도 변수
логикалык B_state [5]; // 블 링킹 위 각한 각 모듈 의 상태 상태
///////////////////////////////////////////////////////
// 멀티 테스 킹 을 위 위한 시간 변수 선언
кол коюлбаган узак currentMillis; // 현재 시간 변수
белгисиз узун B_previousMillis [5]; // 각 모듈 의 블 링킹 타이머 белгисиз узак DR_Millis [5]; // 각 모듈 의 디밍 랜덤 타이머 (예비) unsigned long R_previousMillis; // 레인보우 타이머 unsigned long D_previousMillis; // 디밍 타이머
логикалык firstRainbow = true; // 레인보우 색상 초기화 상태 변수
int RainbowSpeed; // 레인보우 변환 변수
int Bright = 100; // 디밍 초기 값 int BrightnessFactor = 1; // 디밍 증감 값 ///////////////////////////////////////////// ////////////////////////////////////////
жараксыз орнотуу () {
үчүн (int i = 0; i <NUM_LIGHTS; i ++) {пиксел .begin (); // 네오 픽셀 오브젝트 초기화}
// 버튼 인풋 설정
үчүн (int i = 0; i <NUM_LIGHTS; i ++) {pinMode (startSwitch , INPUT_PULLUP); // күйгүзүү/өчүрүү pin 인풋 설정} pinMode (animationButton, INPUT_PULLUP); // 애니메이션 버튼 인풋 설정
үчүн (int i = 0; i <NUM_LIGHTS; i ++) {B_Interval = int (random (B_Min, B_Max)); // 모듈 별 블 링킹 랜덤 속도 (인터발) 변수 생성}
Serial.begin (9600); // 통신 설정
}
void loop () {
MODE = CheckAnimMode (); // 모드 에 애니메이션 체크 모드 모드 를 를
// 버튼 과 가변 저항 을 값 읽 읽 읽 읽 다 다 한다.
for (int i = 0; i <NUM_LIGHTS; i ++) {startState =! digitalRead (startSwitch ); // күйгүзүү/өчүрүү 을 에서 읽은 값 반대 St startState 에 넣어 준다 // startState = digitalRead (startSwitch ); colorVal = analogRead (colorPin ); // 가변 저항 에서 읽은 값 을 가변 저항 초기 초기 값 넣는다 넣는다}
которуу (MODE) {// 애니메이션 함수 스위치 문
case 0: on (); // on 함수 실행 break; // 조건문 에서 빠져 나가라
иши 1:
асан -үсөн (); // асан -үсөн 함수 실행 тыныгуу;
2 -жагдай:
караңгылатуу (); // караңгылатуу 함수 실행 тыныгуу;
3 -жагдай:
жаркылдоо (); // көз ирмем 함수 실행 тыныгуу; }
for (int i = 0; i <NUM_LIGHTS; i ++) {пиксел .show (); // 네오 픽셀 오브젝트 배열 켜라}
}
/////////////////////////////////////////////////////////////
int CheckAnimMode () {
// 애니메이션 선택 버튼 읽 읽어 모드 를 한 다.
//////////////////////////////////////////////////// /// currentMillis = millis (); // 시간 reading int reading = digitalRead (animationButton); if (reading! = lastButtonState) {// 입력 으로부터 으로부터 이전 의 버튼 의 상태 비교 비교 D lastDebounceTime = millis (); // 현재 시간 을 출력 핀 핀 마지막 으로 전환 전환 된 시간 넣음 넣음}
эгер ((currentMillis - lastDebounceTime)> debounceDelay) {
if (reading! = buttonState) {// 입력 핀 으로부터 받은 현재 값 과 판독 값 과 비교
buttonState = окуу; // 판독 값 을 buttonState 에 대입
if (buttonState == LOW) {// 버튼 상태 가 꺼져 있다면
MODE ++; // 버튼 모드 1 씩 증가 if (MODE> 3) {MODE = 0; firstRainbow = true; // 레인보우 색상 초기화 상태 켜짐 BrightnessFactor = 1; // 디밍 증감 값 Bright = 15; // 밝기 는 15}}}}
lastButtonState = окуу; // 판독 값 을 이전 의 의 버튼 상태 에
кайтаруу MODE; 함수 를 종료 하고 режими 함수 로 값 을 리턴 하라}
////////////////////////////////////////////////////////////////////
// анимация режиминин функциясы
// боюнча
void on () {Serial.println ("on"); // 시리얼 모니터 에 боюнча int 써라 үчүн (int i = 0; i <NUM_LIGHTS; i ++) {color_set (i, colorVal ); // 가변 저항 값 에 따라 컬러 셋팅}}
// Радуга
void rainbow () {Serial.println ("жамгыр"); // 시리얼 모니터 에 жамгыр 을 써라 if (firstRainbow) {RainbowSpeed = 0; // 레인보우 속도 초기화 firstRainbow = false; // 레인보우 색상 초기화 상태 꺼짐} if (millis () - R_previousMillis> R_Interval) {// 흐른 시간 이 레인보우 레인보우 인터벌 보다 보다 _ R_previousMillis = currentMillis; // 현재 시간 을 이전 의 시간 에 넣 넣 넣 RainbowSpeed += 10; // 레인보우 변환 변수 에 10 을 더해라}
үчүн (int i = 0; i <NUM_LIGHTS; i ++) {color_set (i, (colorVal +RainbowSpeed) % 1023); // 레인보우 컬러 셋팅}
}
// Караңгылатуу
void dimming () {Serial.println ("dimm"); // 시리얼 모니터 에 dimm 을 써라 Serial.println (Bright); // 시리얼 모니터 에 Bright 를 써라 if (currentMillis - D_previousMillis> D_Interval) {// 흐른 시간 이 디밍 디밍 인터벌 값 보다 _ D_previousMillis = currentMillis; // 현재 시간 을 이전 의 시간 에 넣 넣 라 Bright += BrightnessFactor; // 밝기 에 디밍 증감 값 1 씩 올려라} if (Bright 254) {BrightnessFactor = -1 * BrightnessFactor; } Bright = чектөө (Bright, 99, 254); // 변수 밝기 값 을 최소값 99 ~ 값 254 사이 의 값 정 한정 한다
үчүн (int i = 0; i <NUM_LIGHTS; i ++) {dim_color_set (i, Bright); // 디밍 컬러 셋팅}}
// Көз ирмем
void blinking () {Serial.println ("жымыңдоо"); // 시리얼 모니터 에 blink 를 써라
үчүн (int i = 0; i B_Interval ) {// 흐른 시간 값 이 블링크 인터벌 값 보다 크면
B_previousMillis = currentMillis; // 현재 시간 이전 의 의 블링크 에 넣어 라 B_state =! B_state ; // 각 모듈 블 링킹 링킹 상태 의 의 의}}}}} үчүн (int i = 0; i <NUM_LIGHTS; i ++) {if (B_state ) {// 모듈 의 블 링킹 상태 가 읽 히면 color_set (i, colorVal ); // 가변 저항 값 에 따라 컬러 셋팅} else {noColor_set (i); // 읽히지 않으면 컬러 셋팅 하지 않음}}
}
////////////////////////////////////////////////////////////////////////////////////////
// негизги функция
// түстөр топтому
жараксыз color_set (int индекси, int colorSenser) {
if (startState [index]) {hue [index] = map (colorSenser, 0, 1023, 0, 359); // 0 ~ 1023 을 0 ~ 359 값 한 한 한 color color color color (colorSenser 에) getRGB (реңк [индекс], 255, 255, rgb_colors, индекс); үчүн (int i = 0; i <NUMPIXELS; i ++) {пиксел [индекс].setPixelColor (i, пикселдер [индекс]. Түс (rgb_colors [индекс] [0], rgb_colors [индекс] [1], rgb_colors [индекс] [2])); } // 픽셀 컬러 셋팅 을 rgb_colors 의 r, g, b 으로 설정} else noColor_set (index); // 컬러 셋팅 하지 않음}
////// noColor set
жараксыз noColor_set (int индекси) {// 컬러 셋팅 하지 않는 함수 설정
үчүн (int i = 0; i <NUMPIXELS; i ++) {пиксел [индекс].setPixelColor (i, пиксел [индекс]. Түс (0, 0, 0)); } // 픽셀 컬러 세팅 을 0, 0, 0 으로 설정}
//// dimColor топтому
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 color (colorVal 에) getRGB (реңк [индекс], 255, BC, rgb_colors, индекс); үчүн (int i = 0; i <NUMPIXELS; i ++) {пиксел [индекс].setPixelColor (i, пиксел [индекс]. Түс (rgb_colors [индекс] [0], rgb_colors [индекс] [1], rgb_colors [индекс] [2])); } /// 픽셀 컬러 셋팅 을 rgb_colors 의 r, g, b 으로 설정} else noColor_set (index); // 컬러 셋팅 하지 않음}
6 -кадам: Бүткөн көрүнүш
Сунушталууда:
BookWorm Light-Up Book Light жана Bookmark: 13 кадам (сүрөттөр менен)
BookWorm Light-Up Book Light жана Bookmark: Китеп чырагы катары эки эселенген бул кызыктуу bookworm кыстармасын жасаңыз! Биз аны басып чыгарабыз, кыркабыз, түстөбүз жана кооздойбуз, алар аны түн ичинде жарык берүү үчүн колдонушат, сиз караңгыда окуй аласыз. Ал бир нече материалдардан жасалган жана эң сонун чыгарманы жаратат
Animated Mood Light & Night Light: 6 кадам (сүрөттөр менен)
Animated Mood Light & Night Light: Жарыкка берилүү менен чектелген бир кызыкчылыкка ээ болуп, каалаган өлчөмдөгү RGB жарык дисплейлерин түзүү үчүн колдонула турган кичинекей модулдук ПХБлардын тандалмасын түзүүнү чечтим. Модулдук PCB жасап, мен аларды бир жерге жайгаштыруу идеясына чалындым
Mystery Light Box (Night Light): 4 кадам
Mystery Light Box (Night Light): Жана бул кичинекей кызыктуу проект, бул проект https://www.instructables.com/id/Arduino-Traffic-L…, Бирок мен мурунтан эле оригиналдуу сайттын көп структурасын өзгөрттү, мен дагы лед кошуп, бут кийим кутусун таңгактоо үчүн колдоном
D4E1 - Artmakers: Paper Pattern Maker: 8 Steps
D4E1 - Artmakers: Paper Pattern Maker: Биз Howestтин 4 Өнөр Дизайн Студентибиз жана бул биздин көркөм жаратуучубуз. Көркөм жасоочу деген эмне жана эмне үчүн. Арт -мейкер - бул когнитивдик мүмкүнчүлүгү чектелген балдарга кызыктуу буюмдарды жасоого же жөнөкөй тапшырманы даярдоого мүмкүндүк берген жөнөкөй машина
LED Night Light W/ Star Pattern жасоо: 8 кадам (Сүрөттөр менен)
LED түнкү жарыгын W/ Star Pattern жасоо: Бул LED түнкү жарыкта жылдыздын үлгүсү бар жана ал караңгы бөлмөнү сыйкырдуу түрдө жарык кылат. Мен жыгач үчүн ипэ колдондум, бирок, мисалы, кара жыгач же боёлгон MDF жакшы иштейт. Бул чындыгында кызыктуу долбоор жана акцент жарык катары сонун болмок