제조공정
| × | 1 |
눈송이는 Arduino Nano 마이크로컨트롤러에 의해 개별적으로 제어될 수 있는 17개의 독립적인 세그먼트로 그룹화된 30개의 LED로 구성됩니다. 각 LED 그룹은 PWM으로 흐리게 처리하여 멋진 애니메이션을 만들 수 있습니다.
도구
납땜 인두, 땜납, 펜치만 있으면 됩니다.
건설
우선 몇 가지 패턴을 선택합니다. 멋지고 심플한 눈송이 결정을 골라서 결정의 핵인 육각형 안에 아두이노 나노가 들어갈 수 있는 크기로 인쇄합니다.
배선 역할도 하는 지지 구조는 주석과 함께 납땜된 0.8mm 황동 막대로 만들어집니다. 나는 총 2m의 막대를 사용했습니다. 왜 자유형인가? 저는 항상 그것을 시도하고 싶었고 그것은 당신의 인내와 기술을 시험하는 것이기 때문입니다.
먼저 단일 막대를 구부려 코어 육각형을 만들고 끝을 함께 납땜했습니다. 육각형의 상단에 6개의 막대를 더 추가하면 접지 배선이 완료되므로 이제 LED의 모든 음극 리드를 납땜하여 눈송이 패턴을 만들어야 합니다. 까다로운 부분은 SMD LED를 추가하는 것이었지만 판지와 양면 테이프로 만든 지그로 스스로를 도왔습니다.
다음으로 코어 구조 아래에 Arduino Nano 마이크로컨트롤러를 추가하여 마이크로컨트롤러 핀을 모든 LED 양극 리드에 연결할 황동 막대 배선의 3개 레이어에 맞도록 충분한 공간을 남겨두었습니다. 이것은 엄청난 인내심이 필요했습니다. 전선 사이의 단락을 방지할 뿐만 아니라 전류 제한 저항을 추가하여 보기 좋게 만들어야 합니다.
리프 LED는 가장 가까운 Arduino의 출력 핀에 각각 별도로 연결됩니다. 분기 LED는 2개로 그룹화되어 PWM 핀에 연결됩니다. 코어 LED도 2개로 그룹화되어 나머지 핀에 연결됩니다. Arduino NANO에는 18개의 출력 핀(A6 및 A7은 입력만 해당)만 있고 터치 센서용으로 1개의 핀이 필요하므로 17개의 핀만 남게 되므로 두 쌍의 코어 LED를 함께 연결하여 4개의 그룹을 만듭니다. 각 핀을 통해 흐르는 전류를 약 8mA로 제한하기 위해 220Ω 저항을 사용하고 있습니다. 즉, ATmega328 칩의 경우 약간 높지만 작동하는 총 240mA입니다. 안전한 최대값은 200mA라고 합니다.
터치 센서
눈송이와 상호 작용할 수 있도록 다른 황동 막대를 추가하여 정전식 터치 센서를 만들었습니다. Paul Stoffregen의 훌륭한 라이브러리와 튜토리얼을 찾았습니다. 터치 센서는 arduinoflake와 상호 작용하는 데 사용됩니다. 애니메이션 변경, 켜기/끄기, 터치 시 반짝임, 이름 지정...
최종 메모
납땜하기 전에 모든 다이오드를 확인하는 것을 잊지 마십시오. 파손되거나 극성이 반대로 연결되면 교체하기가 매우 어렵습니다.
코드
원래 하드웨어 PWM 핀에 연결된 분기 LED만 어둡게 할 수 있을 것이라고 생각했습니다. 그러나 운 좋게도 모든 핀을 하드웨어 PWM인 것처럼 사용할 수 있는 멋진 소프트웨어 PWM 라이브러리가 있습니다. 이 설정은 애니메이션에 대한 무한한 가능성을 만들어냈습니다! 첫 번째 애니메이션 중 일부와 함께 아래에 첨부된 코드를 확인하세요.
섹션> <섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">
#include "SoftPWM.h#include섹션>byte edgeLedPins[] ={13, A4, A5, 2, 8, 12};byte middleLedPins[] ={10, 6, 3, 5, 9, 11}; 바이트 innerLedPins[] ={A2, A3, A1, 4, 7, A1};ADCTouchSensor 터치 센서 =ADCTouchSensor(A0, 1); 무효 설정() { Serial.begin(115200); SoftPWMBegin();}바이트 애니메이션 =0;긴 touchAt =0;void 루프() { 스위치(애니메이션) { 경우 0:_fill(100); 부서지다; 사례 1:shinyAnimation(); //페이딩애니메이션(); 부서지다; 사례 2:circleAnimation(); 부서지다; 사례 3:loopAnimation(); 부서지다; 사례 4:fireworkAnimation(); 불꽃애니메이션(); 불꽃애니메이션(); 불꽃애니메이션(); 불꽃애니메이션(); 불꽃애니메이션(); 애니메이션 ++; 부서지다; 사례 5:스마일애니메이션(); 부서지다; 기본값:애니메이션 =0; 부서지다; } int touchValue =touchSensor.read(); if (touchAt + 2000 1000) { touchAt =millis(); // 터치다운, 콜드다운 타임아웃은 2초입니다. animation ++; _채우기(0); }} 무효 fireworkAnimation() { for (int i =0; i <4; i++) { SoftPWMSet(innerLedPins[i], 100); 지연(100); } SoftPWMSet(innerLedPins[4], 100); for (int i =0, i <6, i++) { SoftPWMSet(middleLedPins[i], 255); } 지연(50); for (int i =0, i <6, i++) { SoftPWMSet(innerLedPins[i], 0); SoftPWMSet(edgeLedPins[i], 255); } 지연(50); for (int i =0, i <6, i++) { SoftPWMSet(middleLedPins[i], 0); } 지연(50); _fill(0);}스마일애니메이션 무효화() { SoftPWMSet(innerLedPins[1], 100); SoftPWMSet(innerLedPins[3], 100); SoftPWMSet(middleLedPins[0], 255); SoftPWMSet(middleLedPins[5], 255); SoftPWMSet(edgeLedPins[2], 255); SoftPWMSet(edgeLedPins[3], 255); 지연(2000); SoftPWMSet(innerLedPins[1], 0); SoftPWMSet(innerLedPins[3], 0); 지연(100); SoftPWMSet(innerLedPins[1], 100); SoftPWMSet(innerLedPins[3], 100); 지연(100); SoftPWMSet(innerLedPins[1], 0); SoftPWMSet(innerLedPins[3], 0); delay(100);}byte circleState[] ={100, 55, 10};byte circleStateAnimation[] ={1, 1, 1};void circleAnimation() { for (int i =0; i <3; i++) { if (circleState[i]>=100) { circleStateAnimation[i] =-1; // 희미한 } else if (circleState[i] <=10) { circleStateAnimation[i] =1; // 밝은 } circleState[i] +=circleStateAnimation[i]; } for (int i =0; i <6; i++) { SoftPWMSet(innerLedPins[i], circleState[0]); SoftPWMSet(middleLedPins[i], circleState[1]); SoftPWMSet(edgeLedPins[i], circleState[2]); } 지연(5);}바이트 waveState[] ={100, 55, 10, 10, 55, 100};바이트 waveStateAnimation[] ={1, 1, 1, -1, -1, -1}; 무효 waveAnimation () { for (int i =0; i <6; i++) { if (waveState[i]>=100) { waveStateAnimation[i] =-1; // 희미함 } else if (waveState[i] <=10) { waveStateAnimation[i] =1; // 밝은 } waveState[i] +=waveStateAnimation[i]; } for (int i =0, i <6, i+=2) { SoftPWMSet(innerLedPins[i], waveState[0]); SoftPWMSet(middleLedPins[i], waveState[1]); SoftPWMSet(edgeLedPins[i], waveState[2]); SoftPWMSet(innerLedPins[i + 1], waveState[3]); SoftPWMSet(middleLedPins[i + 1], waveState[4]); SoftPWMSet(edgeLedPins[i + 1], waveState[5]); } 지연(10);}바이트 루프 카운터 =0;바이트 루프 상태 =150; 무효 루프 애니메이션() { SoftPWMSet(innerLedPins[loopCounter], 루프 상태); SoftPWMSet(middleLedPins[loopCounter], 루프 상태); SoftPWMSet(edgeLedPins[loopCounter], 루프 상태); 루프 카운터 =_nextIndex(루프 카운터, 1); if (loopCounter ==0) { loopState =(loopState ==150 ? 0 :150); } 지연(100);} 바이트 slowOnCounter =0, 바이트 slowOnState =150; 무효 slowOnAnimation() { 바이트 randomLed =random(0, 18); if (randomLed <6) { SoftPWMSet(innerLedPins[randomLed], slowOnState); } else if (randomLed <12) { SoftPWMSet(middleLedPins[randomLed - 6], slowOnState); } else { SoftPWMSet(edgeLedPins[randomLed - 12], slowOnState); } 슬로우온카운터 ++; if (slowOnCounter>=50) { slowOnCounter =0; slowOnState =(slowOnState ==150 ? 0 :150); } delay(50);}byte shinyState[] ={0, 100, 0, 100, 0, 100};byte shinyStateAnimation[] ={1, 1, 1, 1, 1, 1};byte shinyCounter =0; void shinyAnimation() { for (int i =0; i <6; i++) { if (shinyState[i]>=100) { shinyStateAnimation[i] =-1; // 희미한 } else if (shinyState[i] <=0) { shinyStateAnimation[i] =1; // 밝음 } shinyState[i] +=shinyStateAnimation[i]; SoftPWMSet(edgeLedPins[i], ShinyState[i]); } 반짝이 카운터 ++; if (shinyCounter> 10) { ShinyCounter =0; (바이트 r =random(1, 3), r> 0, r--) { 바이트 randomLed =random(0, 12); if (randomLed <6) { SoftPWMSet(innerLedPins[random(0, 6)], 255); } else { SoftPWMSet(middleLedPins[random(0, 6)], 255); } } } else { for (int i =0; i <6; i++) { SoftPWMSet(innerLedPins[i], 20); SoftPWMSet(middleLedPins[i], 20); } } delay(30);}byte fadingState[] ={0, 100, 0, 100, 0, 100};byte fadingStateAnimation[] ={1, 1, 1, 1, 1, 1};void fadingAnimation() { for (int i =0; i <6; i++) { if (fadingState[i]>=100) { fadingStateAnimation[i] =-1; // 희미함 } else if (fadingState[i] <=0) { fadingStateAnimation[i] =1; // 밝은 } fadingState[i] +=fadingStateAnimation[i]; SoftPWMSet(edgeLedPins[i], fadingState[i]); SoftPWMSet(middleLedPins[_nextIndex(i, 1)], fadingState[i]); SoftPWMSet(innerLedPins[i], 50); } delay(20);}void _fill(바이트 값) { for (int i =0; i <6; i++) { SoftPWMSet(edgeLedPins[i], 값); SoftPWMSet(middleLedPins[i], 값); SoftPWMSet(innerLedPins[i], 값); }}byte _prevIndex(짧은 인덱스, 바이트 단계) { 인덱스 -=단계; 동안 (인덱스 <0) { 인덱스 +=6; } 반환 인덱스;}byte _nextIndex(짧은 인덱스, 바이트 단계) { 인덱스 +=단계; 동안 (인덱스> 5) { 인덱스 -=6; } 반환 인덱스;}
제조공정
LED는 아름다운 프로젝트를 만들고 표시기 역할을 할 수 있는 다목적 구성 요소입니다. LED를 활용하는 방법은 여러 가지가 있지만 아름다움과 알림을 결합하는 방법인 LED 버튼을 제시합니다. 그러나 LED 버튼의 개념은 두 가지 의미를 가질 수 있습니다. 여러 개의 LED를 제어하는 버튼이나 버튼 형태의 LED를 의미할 수 있습니다. 이 기사에서는 LED를 버튼으로 사용하고 어떻게 작동하는지 살펴보겠습니다. 또한 휴대전화에서 LED를 제어하는 방법도 배우게 됩니다. 준비 되었나요? 시작하겠습니다! LED 버튼이란 무엇
포고 핀은 일반적으로 두 개의 회로 기판의 많은 개별 노드를 연결하는 조밀한 배열로 배열됩니다. 이 작은 포고 핀은 복잡해 보이지 않지만 전체 제조 공정에 주의를 기울일 가치가 있습니다. 부적격 제품은 수명 주기가 짧고 비용이 증가하여 효율성이 떨어지기 때문입니다. 좋은 포고 핀을 제조하는 것은 다음과 같습니다. 핀 품질 그리고 도금 공정 다음 단락에서는 포고 핀의 품질을 모니터링하는 몇 가지 주요 단계를 보여줍니다. 도움이 되기를 바랍니다! 1. 핀의 품질 포고 핀은 플런저의 세 가지 기본 부분으로 구성됩니다.