Orodha ya maudhui:
- Hatua ya 1: Vifaa
- Hatua ya 2: Mpango wa Ujenzi
- Hatua ya 3: Vifaa: Vifaa vya Mzunguko
- Hatua ya 4: Vifaa: Kukata Acrylic
- Hatua ya 5: Msimbo wa Programu ya Arduino
- Hatua ya 6: Mwonekano Umekamilika
Video: Mfano wa Nuru ya Nukta: Hatua 6
2024 Mwandishi: John Day | [email protected]. Mwisho uliobadilishwa: 2024-01-30 12:53
Nilianza na wazo la "Je! Ninaweza kudhibiti nuru kwa mikono yangu mwenyewe na kuelezea mapenzi yangu mwenyewe?"
Ni 'Dot Light Pattern' ambayo hukuruhusu kuunda rangi zako mwenyewe, tengeneza muundo wako na rangi hizo, na upate athari anuwai za uhuishaji.
Hatua ya 1: Vifaa
- Arduino UNO x 13
- WS2901 au WS2811 pixel LED strip (130 LEDS)
- Kitufe kubadili x 1
- Kubadilisha snap x 65
- Kipimo cha nguvu x 65
- Cable ya upinde wa mvua
- Nguvu ya kutosha SMPS
- Cable ya kondakta
- Baa ya duru ya uwazi ya akriliki (kipenyo cha 30mm)
- Rangi nyeusi Akriliki bodi (5T) (500mm * 790mm) x 2, (500mm * 35mm) x 2, (790mm * 35mm) x 2
Hatua ya 2: Mpango wa Ujenzi
Hatua ya 3: Vifaa: Vifaa vya Mzunguko
-
Kata sahani ya akriliki kama muundo hapo juu. (tazama hatua2)
- Kipande kimoja cha pikseli ya LED imewekwa juu na chini ya shimo la mita, na jumla ya jozi 65 za LED za neo-pixel zimeambatanishwa.
- Jozi za LEDs mamboleo zimeunganishwa pamoja kuunda pini moja ya Arduino.
- Weka vipodozi 65 vya ufinyanzi kwenye mashimo ya mita. (Weka upande wa pikseli mamboleo.)
- Ambatisha swichi 65 za kufanana na mashimo ya kubadili.
- Jumla ya UNOs kumi na tatu za Arduino zimeambatanishwa kwa kila moja ya maeneo kumi na tatu ili kufunga vipande vitano vya vipande 65 vya vifaa katika Arduino UNO moja.
- Kama inavyoonyeshwa kwenye picha iliyoambatishwa, Unganisha viunga vya maji, swichi za snap na LED za neo-pixel kwenye pini za Arduino UNO kwa waya. (tazama hatua2)
- Pini za GND na 5V za UNO kadhaa za Arduino hukusanywa kwa waya za kebo, kisha kuunganishwa na nguvu ya nje. (tazama hatua2)
- Ondoa vumbi kwa shinikizo la Hewa.
Hatua ya 4: Vifaa: Kukata Acrylic
-
Kata fimbo ya akriliki kwa urefu wa 50mm.
- Upande mmoja wa fimbo ya akriliki umepigwa kwa saizi na kina ili kufanana na sehemu ya mtawala wa mita ya maji.
- Fimbo ya akriliki imepunguzwa kwa upana kidogo kuliko shimo kwa kibali ambacho kinaweza kutoshea vizuri kwenye bomba la maji.
- Upande wa pili unatoa sandpaper kidogo ili taa iweze kupitishwa vizuri.
Hatua ya 5: Msimbo wa Programu ya Arduino
www.kasperkamperman.com/blog/arduino/ardui…
nambari 'hsb kwa rgb' 를 참고 한 사이트
# pamoja
// 'adafruit_neopixel' 헤더 파일 라는 외부 라이브러리 를 포함
// 네오 픽셀 연결 핀 번호 선언
#fafanua PIN1 2 #fafanua PIN2 3 #fafanua PIN3 4 #fafanua PIN4 5 #fafanua PIN5 6
#fafanua NUMPIXELS 2 // 네오 픽셀 LED 갯수
#fafanua NURU NUM_T 5 // 작동 모듈 갯수 (네오 픽셀 오브젝트 갯수)
// 네오 픽셀 오브젝트 Mpangilio 선언
Saizi za Adafruit_NeoPixel = {Adafruit_NeoPixel (NUMPIXELS, PIN1, NEO_GRB + NEO_KHZ800), Adafruit_NeoPixel (NUMPIXELS, PIN2, NEO_GRB + NEO_KHZ800), Adafruit_NeoPixel (NUMPIXELS), Adafruit_NeoPixel (NUMPIXELS) Adafruit_NeoPixel (NUMPIXELS, PIN5, NEO_GRB + NEO_KHZ800)}; //// 네오 픽셀 을 사용 하기 위해 객체 하나 를 다 한다. // 첫번째 인자 값 은 네오 픽셀 의 LED 의 개수 // 두번째 인자 값 은 네오 픽셀 연결된 연결된 아두 노 핀 핀 번호
//////////////////////////////////////////////////////////////
////// 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, }; //
utupu GetRGB (int hue, int sat, int val, int rangi [5] [3], int index) {
val = dim_curve [val]; ameketi = 255 - dim_curve [255 - ameketi];
// 색조, 채도 및 밝기 (HSB / HSV) 를 RGB 로 변환
// dim_curve 는 밝기 값 및 채도 (반전) 에서만 사용 됩니다. // 이것은 가장 자연스럽게 보입니다.
int r;
int g; int b; msingi;
ikiwa (ameketi == 0) {
rangi [index] [0] = val; rangi [index] [1] = val; rangi [index] [2] = val; } mwingine {
msingi = ((255 - kukaa) * val) >> 8;
kubadili (hue / 60) {
kesi 0: r = val; g = (((val - msingi) * hue) / 60) + msingi; b = msingi; kuvunja;
kesi 1:
r = (((val - msingi) * (60 - (hue% 60))) / 60) + msingi; g = val; b = msingi; kuvunja;
kesi 2:
r = msingi; g = val; b = (((val - msingi) * (hue% 60)) / 60) + msingi; kuvunja;
kesi ya 3:
r = msingi; g = (((val - msingi) * (60 - (hue% 60))) / 60) + msingi; b = val; kuvunja;
kesi ya 4:
r = (((val - msingi) * (hue% 60)) / 60) + msingi; g = msingi; b = val; kuvunja;
kesi 5:
r = val; g = msingi; b = (((val - msingi) * (60 - (hue% 60))) / 60) + msingi; kuvunja; }
rangi [index] [0] = r;
rangi [index] [1] = g; rangi [index] [2] = b; }
}
rangi rgb_color [NUM_LIGHTS] [3]; // 네오 픽셀 오브젝트 갯수 마다 rangi ya rgb 선언
ndani ya rangi [NUM_LIGHTS]; // 네오 픽셀 오브젝트 갯수 마다 hue 선언 int ameketi [NUM_LIGHTS]; // 네오 픽셀 오브젝트 갯수 마다 명도 선언 int brignt [NUM_LIGHTS]; // 네오 픽셀 오브젝트 갯수 마다 밝기 서언
// 일반 변수 선언
int startsSwitch = {8, 9, 10, 11, 12}; // on / off 버튼 핀 번호 boolean startState = {uongo, uwongo, uwongo, uwongo}; // kuwasha / kuzima 상태 변수
const int colorPin = {A0, A1, A2, A3, A4}; // 가변 저항 핀 번호
rangi ya rangi = {0, 0, 0, 0, 0}; // 가변 저항 초기 값
int animationButton = 7; // 애니메이션 모드 변환 버튼 핀 번호
/////////////////////////////////////////////////
// Je, ni kwa nini? 짧은 시간 내 많은 이벤트 가 발생 하는것 에 대한 문제 에 대해서 지정된 시간 간격 으로 으로 함수 를 호출 하여 해결 int buttonState; // 입력 핀 으로부터 의 현재 판독 값 int lastButtonState = JUU; // 이전 의 판독 값 은 켜진 상태 로 iliyosainiwa muda mrefu mwishoDebounceTime = 0; // 출력 핀 이 마지막 으로 전환 된 시간 은 0 으로 unsigned muda mrefu 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; // 디밍 속도 변수
boolean B_state [5]; // 블 링킹 을 위한 각 모듈 의 상태 변수
///////////////////////////////////////////////////////
// 멀티 테스 킹 애니메이션 을 위한 시간 변수 선언
unsigned long longMillis; // 현재 시간 변수
isiyosainiwa B_previousMillis [5]; // 각 모듈 의 블 링킹 타이머 isiyosainiwa kwa muda mrefu DR_Millis [5]; // 각 모듈 의 디밍 랜덤 타이머 (예비) iliyosainiwa kwa muda mrefu R_previousMillis; // 레인보우 타이머 isiyosainiwa muda mrefu D_previousMillis; // 디밍 타이머
boolean kwanzaRainbow = kweli; // 레인보우 색상 초기화 상태 변수
int Upinde wa mvua Speed; // 레인보우 변환 변수
int Bright = 100; // 디밍 초기 값 int BrightnessFactor = 1; // 디밍 증감 값 //////////////////////////////////////////////////////// ///////////////////////////////////////////
usanidi batili () {
kwa (int i = 0; i <NUM_LIGHTS; i ++) saizi {{i]. anza (); // 네오 픽셀 오브젝트 초기화}
// 버튼 인풋 설정
kwa (int i = 0; i <NUM_LIGHTS; i ++) {pinMode (StartSwitch , INPUT_PULLUP); // kuwasha / kuzima 버튼 인풋 설정} pinMode (kifungo cha uhuishaji, INPUT_PULLUP); // 애니메이션 버튼 인풋 설정
kwa (int i = 0; i <NUM_LIGHTS; i ++) {B_Interval = int (nasibu (B_Min, B_Max)); // 모듈 별 블 링킹 랜덤 속도 (인터발) 변수 생성}
Serial. Kuanza (9600); // 통신 설정
}
kitanzi batili () {
MODE = CheckAnimMode (); // 모드 에 애니메이션 체크 모드 함수 를 넣는다
// 버튼 과 가변 저항 을 값 을 각각 읽 변수 변수 에 다 한다.
kwa (int i = 0; i <NUM_LIGHTS; i ++) {startState =! digitalRead (StartSwitch ); // on / off 버튼 에서 읽은 값 의 반대 값 을 startState 에 넣어 준다 // startState = digitalRead (StartSwitch ); colorVal = AnalogRead (colorPin ); // 가변 저항 에서 읽은 값 을 가변 저항 초기 값 에 넣는다}
badilisha (MODE) {// 애니메이션 함수 스위치 문
kesi 0: on (); // kwenye 실행 실행 kuvunja; // 조건문 에서 빠져 나가라
kesi 1:
upinde wa mvua (); // upinde wa mvua 실행 실행 kuvunja;
kesi 2:
kupungua (); // kupunguka 실행 실행 kuvunja;
kesi ya 3:
kupepesa (); // kupepesa 실행 실행 kuvunja; }
kwa (int i = 0; i <NUM_LIGHTS; i ++) {pixels .show (); // 네오 픽셀 오브젝트 배열 켜라}
}
/////////////////////////////////////////////////////////////
int CheckAnimMode () {
// 애니메이션 선택 버튼 을 읽어 모드 를 결정 한다.
/////////////////////////////////////////////////////////// /// currentMillis = millis (); // 시간 측정 int kusoma = kusoma kwa dijiti (kifungo cha uhuishaji); ikiwa (kusoma! // 현재 시간 을 출력 핀 이 마지막 으로 전환 된 시간 에 넣음}
ikiwa ((currentMillis - lastDebounceTime)> debounceDelay) {
ikiwa (kusoma! = kifungoState) {// 입력 핀 으로부터 받은 현재 값 과 판독 값 과 비교
buttonState = kusoma; // kifungo 판독 값 을 Jimbo 에 대입
ikiwa (buttonState == LOW) {// 버튼 상태 가 꺼져 있다면
MODE ++; // 버튼 모드 1 씩 증가 ikiwa (MODE> 3) {MODE = 0; kwanzaRainbow = kweli; // 레인보우 색상 초기화 상태 켜짐 MwangazaFactor = 1; // 디밍 증감 값 Mkali = 15; // 밝기 는 15}}}}
lastButtonState = kusoma; // 판독 값 을 이전 의 버튼 상태 에 대입
kurudi MODE; 고 를 종료 하고 modi 함수 로 값 을 리턴 하라}
////////////////////////////////////////////////////////////////////
// uhuishaji wa hali ya uhuishaji
// juu
batili juu ya () {Serial.println ("on"); // 시리얼 모니터 에 on 을 써라 kwa (int i = 0; i <NUM_LIGHTS; i ++) {color_set (i, colorVal ); // 가변 저항 값 에 따라 컬러 셋팅}}}
// Upinde wa mvua
upinde wa mvua utupu () {Serial.println ("mvua"); // 시리얼 모니터 에 mvua 을 써라 ikiwa (upinde wa mvua wa kwanza) {RainbowSpeed = 0; // 레인보우 속도 초기화 kwanza Rainbow = uongo; // 레인보우 색상 초기화 상태 꺼짐} ikiwa (millis () - R_previousMillis> R_Interval) {// 흐른 시간 값 이 레인보우 인터벌 값 보다 크면 R_previousMillis = currentMillis; // 현재 시간 을 이전 의 레인보우 시간 에 넣어 라 Kasi ya Upinde wa mvua + = 10; // 레인보우 변환 변수 에 10 을 더해라}
kwa (int i = 0; i <NUM_LIGHTS; i ++) {color_set (i, (colorVal + RainbowSpeed)% 1023); // 레인보우 컬러 셋팅}
}
// Kupunguza
kufifia batili () {Serial.println ("kufifia"); // 시리얼 모니터 에 kufifia 써라 써라 Serial.println (Mkali); // 시리얼 모니터 에 Mkali 를 써라 ikiwa (currentMillis - D_previousMillis> D_Interval) {// 흐른 시간 값 이 디밍 인터벌 값 보다 크면 D_previousMillis = currentMillis; // 현재 시간 을 이전 의 디밍 시간 에 넣 라 라 Mkali + = MkaliFactor; // 밝기 에 디밍 증감 값 1 씩 올려라} ikiwa (Mkali 254) {BrightnessFactor = -1 * BrightnessFactor; } Mkali = kubana (Mkali, 99, 254); // 변수 밝기 값 을 최소값 99 ~ 최대 값 254 사이 의 값 으로 한정 한다
kwa (int i = 0; i <NUM_LIGHTS; i ++) {dim_color_set (i, Bright); // 디밍 컬러 셋팅}}
// Kupepesa
blinking batili () {Serial.println ("blink"); // 시리얼 모니터 에 kupepesa 를 써라
kwa (int i = 0; i B_Interval ) {// 흐른 시간 값 이 블링크 인터벌 값 보다 크면
B_previousMillis = sasaMillis; // 현재 시간 을 이전 의 블링크 시간 에 넣어 라 B_state =! B_state ; // 각. Seti ya rangi (i, rangiVal ); // 가변 저항 값 에 따라 컬러 셋팅} mwingine {noColor_set (i); // 읽히지 않으면 컬러 셋팅 하지 않음}}
}
////////////////////////////////////////////////////////////////////////////////////////
// functuation ya msingi
// rangi iliyowekwa
color_set tupu (int index, int colorSenser) {
ikiwa (startState [index]) {hue [index] = ramani (colorSenser, 0, 1023, 0, 359); // 0 ~ 1023 을 을 0 ~ 359 값 으로 매핑 한 값 을 가지고 색상 값 으로 지정 (colorSenser 에) getRGB (hue [index], 255, 255, rgb_colors, index); kwa (int i = 0; i <NUMPIXELS; i ++) {pixels [index].setPixelColor (i, saizi [index]. Rangi (rgb_colors [index] [0], rgb_colors [index] [1], rgb_colors [index] [2])); } // 픽셀 컬러 셋팅 을 rgb_color 의 r, g, b 으로 설정} mwingine noColor_set (index); // 컬러 셋팅 하지 않음}
////// noColor set
batili noColor_set (int index) {// 컬러 셋팅 하지 않는 함수 설정
kwa (int i = 0; i <NUMPIXELS; i ++) {pixels [index].setPixelColor (i, saizi [index]. Rangi (0, 0, 0)); } // 픽셀 컬러 세팅 을 0, 0, 0 으로 설정}
//// dimColor imewekwa
batili dim_color_set (int index, int BC) {// 디밍 컬러 셋팅 함수 설정
ikiwa (startState [index]) {hue [index] = ramani (colorVal [index], 0, 1023, 0, 359); // 0 ~ 1023 을 을 0 ~ 359 값 으로 매핑 한 값 을 가지고 색상 값 으로 지정 (colorVal 에) getRGB (hue [index], 255, BC, rgb_colours, index); kwa (int i = 0; i <NUMPIXELS; i ++) {pixels [index].setPixelColor (i, saizi [index]. Rangi (rgb_colors [index] [0], rgb_colors [index] [1], rgb_colors [index] [2])); } /// 픽셀 컬러 셋팅 g rgb_color 의 r, g, b 으로 설정} mwingine noColor_set (index); // 컬러 셋팅 하지 않음}
Hatua ya 6: Mwonekano Umekamilika
Ilipendekeza:
Saver ya Nuru ya Nuru ya Fairy: Hatua 8 (na Picha)
Kiokoa Betri cha Nuru Nyepesi: Betri za CR2032 ni nzuri, lakini hazidumu kwa muda mrefu kama tungependa wakati wa kuendesha LED " Taa ya Fairy " strings.Na Msimu wa Likizo hapa, niliamua kurekebisha nyuzi chache 20 nyepesi kukimbia benki ya umeme ya USB. Nilitafuta mkondoni na f
Uendeshaji wa Nyumbani Wingu ya Nuru ya Nuru na ESP-01 na Moduli ya Kupeleka Pamoja na Kitufe cha Kushinikiza: Hatua 7
Usafirishaji wa Nyumbani Wingu ya Nuru ya Nuru na ESP-01 na Moduli ya Kupitisha na Kitufe cha Push: Kwa hivyo katika maagizo ya awali tuliandaa ESP-01 na Tasmota tukitumia Flasher ya ESP na tukaunganisha ESP-01 na mitandao yetu ya wifi. kuwasha / kuzima swichi nyepesi kwa kutumia WiFi au kitufe cha kushinikiza.Kwa wor wa umeme
Raspberry Pi - BH1715 Mafunzo ya Mwanga wa Nuru ya Nuru ya Dijiti: Hatua 4
Raspberry Pi - BH1715 Digital Ambient Light Sensor Python Mafunzo: BH1715 ni sensorer ya Mwanga iliyoko kwenye dijiti na kiolesura cha basi cha I²C. BH1715 kawaida hutumiwa kupata data ya taa iliyoko kwa kurekebisha umeme wa taa ya LCD na Keypad kwa vifaa vya rununu. Kifaa hiki kinatoa azimio la 16-bit na kiambatisho
Kubadilisha Nuru ya Bluetooth ya Kijijini - Retrofit. Nuru Kubadilisha Bado Inafanya Kazi, Hakuna Uandishi wa Ziada .: Hatua 9 (na Picha)
Kubadilisha Nuru ya Bluetooth ya Kijijini - Retrofit. Nuru Kubadilisha Bado Inafanya Kazi, Hakuna Uandishi wa Ziada. Baadhi ya BLE / programu nyingi za programu hutoa
Jinsi ya kutengeneza Nuru ya Mwangaza wa Nuru na LED - DIY: Mwanga mkali mkali: Hatua 11
Jinsi ya Kutengeneza Mwanga wa Nuru Mkali Na LED - DIY: Mwanga Mkali Sana: Tazama video Mara ya Kwanza