산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Technology >> 제조공정

푸시 버튼을 사용하여 PWM으로 조명 디밍

구성품 및 소모품

Arduino Mega 2560
× 1
브레드보드(일반)
× 1
점퍼 와이어(일반)
사용하는 양은 다를 수 있으며 사용 방법에 따라 다릅니다.
× 11
LED(일반)
어떤 색상이든 상관없지만 3가지 색상을 추천합니다.
× 3
SparkFun 푸시버튼 스위치 12mm
× 1
저항 330옴
× 4

앱 및 온라인 서비스

Arduino IDE

이 프로젝트 정보

이 프로젝트는 Arduino를 사용하여 LED(발광 다이오드)를 페이드하는 방법을 보여줍니다. 3개의 섹션으로 나뉩니다:

<울>
  • 페이드 라이트
  • <울>
  • 푸시 버튼으로 조명 끄기
  • <울>
  • 버튼이 있는 페이드 라이트(지연 개선)
  • 페이드 라이트:

    이 섹션의 끝에서 프로젝트는 다음과 같아야 합니다.

    보시다시피 신호등이 더 밝게 빛났다가 신호등의 순서로 점차 어두워집니다. 이제 시작하겠습니다.

    설계도:

    보시다시피 LED는 핀 3, 6, 9에 연결되어 있습니다. 원하는 핀에 LED를 연결할 수 있지만 나중에 코드에서 변경하는 것을 기억해야 합니다.

    코드:

    시작하려면 이것을 코드에 추가하십시오. 이것은 어떤 구성 요소(이 경우 어떤 LED가 어떤 핀에 연결되는지)를 나타냅니다.

    int ledRed =9;int ledYellow =6;int ledGreen =3; 

    이제 void setup()에서 기능, 핀이 입력인지 출력인지 여부를 지정합니다.

    void setup() { pinMode(ledRed, OUTPUT); 핀모드(LED노란색, 출력); pinMode(ledGreen, OUTPUT);} 

    마지막으로 void loop()에 다음을 추가합니다. 기능. MCU에게 무엇을 해야 하는지 알려줍니다.

    void loop() { // 이것은 단지 빨간불을 흐리게 하는 것입니다 - ledRed //ledRed for (int i=0; i<=255; i++) { analogWrite(ledRed, i); 지연(30); } for (int i=255; i>=0; i--) { analogWrite(ledRed, i); 지연(30); }} 

    여기서 일어나는 일은 MCU가 정수 'i' 255 미만이거나 아닙니다. 그렇다면 'i'의 값 1씩 증가합니다. 프로세스가 30밀리초 지연된 다음 다시 시작됩니다. 'i' 값이 255 이상인 경우 확인할 때마다 1씩 뺍니다. 값이 0에 도달하면 프로세스가 다시 수행됩니다.

    그러나 페이드하는 데 걸리는 시간을 변경하려면 모든 delay()를 변경해야 합니다. 원하는 양만큼 기능합니다. 그다지 효율적이지 않습니다. delay()를 변경하고 싶을 때 일을 더 쉽고 빠르게 하려면 번, 이것을 코드 시작 부분에 추가하십시오.

    const int fade =30; 

    그것이 하는 일은 기본값을 설정하는 것입니다. 이 경우에는 기본 시간입니다. 이제 모든 delay()를 변경합니다. 값을 (페이드) . 원하는 경우 다른 이름을 지정할 수 있습니다. 결과적으로 delay() 기능은 다음과 같아야 합니다.

    지연(페이드); 

    코드는 다음과 같아야 합니다.

    int ledRed =9;int ledYellow =6;int ledGreen =3;const int fade =10;void setup() { pinMode(ledRed, OUTPUT); 핀모드(LED노란색, 출력); pinMode(ledGreen, OUTPUT);}void 루프() { //ledRed for (int i =0; i <=255; i++) { analogWrite(ledRed, i); 지연(페이드); } for (int i =255, i>=0, i--) { analogWrite(ledRed, i); 지연(페이드); } // ledYellow for (int i =0; i <=255; i++) { analogWrite(ledYellow, i); 지연(페이드); } for (int i =255; i>=0; i--) { analogWrite(ledYellow, i); 지연(페이드); } //ledGreen for (int i =0; i <=255; i++) { analogWrite(ledGreen, i); 지연(페이드); } for (int i =255, i>=0, i--) { analogWrite(ledGreen, i); 지연(페이드); } // ledYellow for (int i =0; i <=255; i++) { analogWrite(ledYellow, i); 지연(페이드); } for (int i =255; i>=0; i--) { analogWrite(ledYellow, i); 지연(페이드); }} 

    푸시 버튼으로 조명 페이드:

    이 섹션이 끝나면 프로젝트에 버튼을 추가할 수 있습니다.

    보시다시피 LED는 버튼을 누른 후에만 변경됩니다. 이제 시작하겠습니다.

    설계도:

    모든 LED가 같은 위치에 유지되지만 푸시 버튼이 추가된 것을 보셨을 것입니다.

    코드:

    먼저 MCU에 버튼이 연결된 핀을 알려야 합니다. 그렇게 하려면 코드 시작 부분에 이것을 추가하세요.

    int 버튼 =7;  

    이제 무효 설정()에서 기능을 추가하여 버튼이 출력의 입력인지 MCU에 알려줍니다.

    pinMode(버튼, 입력); 

    또한 이것을 함수에 추가하십시오.

    <사전><코드> digitalWrite(ledRed, LOW); digitalWrite(led노란색, LOW); digitalWrite(ledGreen, HIGH);

    그것은 시작 빛을 설정합니다. 이번에는 시작 LED가 녹색이지만 원하는 경우 빨간색이나 노란색으로 변경할 수 있습니다.

    이제 void loop()에 큰 변화가 있습니다. 기능. loop()에 있던 모든 것 이제 fadeLights()라는 함수로 대체되었습니다. (원하는 경우 이름이 다를 수 있음). 루프()에서 이제 다음과 같아야 합니다.

    void loop() { if(digitalRead(button) ==HIGH) { delay(15); // 소프트웨어 디바운스 if(digitalRead(button) ==HIGH){ // 버튼을 누르면 함수 fadeLights(); // fadeLights가 호출됩니다 } } else { digitalWrite(ledRed, LOW); // 버튼을 누르지 않으면 녹색 LED는 digitalWrite(ledYellow, LOW); // 켜져 있고 나머지는 켜져 있지 않습니다. 디지털 쓰기(ledGreen, HIGH); }} 

    앞서 언급했듯이 void fadeLights() 함수는 루프에 있던 것을 갖게 됩니다.

    void fadeLights(){ for (int i =255; i>=0; i--) { //녹색에서 시작하므로 녹색으로 페이드해야 합니다. analogWrite(ledGreen, i); 지연(페이드); } // ledYellow for (int i =0; i <=255; i++) { analogWrite(ledYellow, i); 지연(페이드); } for (int i =255; i>=0; i--) { analogWrite(ledYellow, i); 지연(페이드); } //ledRed for (int i =0; i <=255; i++) { analogWrite(ledRed, i); 지연(페이드); } for (int i =255, i>=0, i--) { analogWrite(ledRed, i); 지연(페이드); } // ledYellow for (int i =0; i <=255; i++) { analogWrite(ledYellow, i); 지연(페이드); } for (int i =255; i>=0; i--) { analogWrite(ledYellow, i); 지연(페이드); } //ledGreen for (int i =0; i <=255; i++) { analogWrite(ledGreen, i); 지연(페이드); } } 

    프로젝트가 비디오에서와 같이 작동한다면 올바르게 수행한 것입니다. 순서가 올바르지 않으면 다음을 확인하십시오.

    <울>
  • 코드가 올바르게 작성된 경우
  • <울>
  • LED를 올바른 핀에 연결한 경우
  • 조명이 켜지지 않으면 확인

    <울>
  • LED를 올바른 핀에 연결한 경우
  • <울>
  • 전선을 제대로 연결했다면
  • <울>
  • 공식을 올바르게 작성했다면
  • 버튼이 있는 페이드 라이트(지연에 대한 개선):

    눈치채셨겠지만, 버튼에서 손을 떼면 조명이 계속 어두워집니다. 이 섹션 이후에는 버튼을 눌렀을 때만 LED가 희미해지도록 코드를 편집할 수 있습니다.

    여기에서 볼 수 있듯이 버튼에서 손을 떼면 LED가 기본 순서로 돌아갑니다.

    빨간색 - 꺼짐

    노란색 - 꺼짐

    녹색 - 켜짐

    설계도:

    더 이상 구성 요소를 추가하지 않거나 다른 작업을 수행하기를 원하기 때문에 회로도는 동일하게 유지됩니다. 여전히 LED가 흐려지기를 원합니다.

    코드:

    우리는 더 이상 항목을 추가하지 않으므로 처음에 아무것도 추가할 필요가 없습니다. 그러나 지연을 변경하므로 이를 삭제해야 합니다.

    const int 페이드 =10; // 더 이상 필요하지 않습니다. 

    setup()에 대해 변경할 사항이 없습니다. 기능. void 루프()에서 , else를 추가해야 합니다. 성명서.

    void loop() { if(digitalRead(button) ==HIGH) { delay(15); if(digitalRead(버튼) ==HIGH){ fadeLights(); } } else { // 여기에 추가 digitalWrite(ledRed, LOW); digitalWrite(led노란색, LOW); 디지털 쓰기(ledGreen, HIGH); }}  

    즉, 버튼을 누르지 않으면 프로그램이 fadeLights()를 종료합니다. 기타로 이동 기본 LED 순서가 있는 문. 이전과 달리 이전에는 fadeLights() 버튼이 확인되지 않았습니다. 호출되었습니다.

    이제 모든 delay()를 변경합니다. 이에 대한 기능:

    for( int y =0; y <1000; y++){ // 버튼을 놓으면 if (digitalRead(button) ==LOW) { return; } 

    각 루프에서 마이크로프로세서는 버튼을 확인합니다. 출시되면 반환 fadeLights()를 중지하기 위해 명령이 호출됩니다. . 내 추정에 따르면 각 for 루프가 실행될 때 약 10마이크로초가 소요될 것입니다. 즉, 원하는 속도로 만들기 위해 많은 시간을 수행해야 함을 의미합니다.

    이 튜토리얼이 도움이 되었기를 바라며 프로젝트에 행운을 빕니다.

    <섹션 클래스="섹션 컨테이너 섹션 축소 가능" id="코드">

    코드

    <울>
  • 페이드 라이트
  • 푸시 버튼으로 조명 끄기
  • 푸시 버튼으로 조명 페이드(지연 개선)
  • 페이드 라이트Arduino
    int ledRed =9;int ledYellow =6;int ledGreen =3;const int fade =10;void setup() { pinMode(ledRed, OUTPUT); 핀모드(LED노란색, 출력); pinMode(ledGreen, OUTPUT);}void 루프() { //ledRed for (int i =0; i <=255; i++) { analogWrite(ledRed, i); 지연(페이드); } for (int i =255, i>=0, i--) { analogWrite(ledRed, i); 지연(페이드); } // ledYellow for (int i =0; i <=255; i++) { analogWrite(ledYellow, i); 지연(페이드); } for (int i =255; i>=0; i--) { analogWrite(ledYellow, i); 지연(페이드); } //ledGreen for (int i =0; i <=255; i++) { analogWrite(ledGreen, i); 지연(페이드); } for (int i =255, i>=0, i--) { analogWrite(ledGreen, i); 지연(페이드); } // ledYellow for (int i =0; i <=255; i++) { analogWrite(ledYellow, i); 지연(페이드); } for (int i =255; i>=0; i--) { analogWrite(ledYellow, i); 지연(페이드); }}
    푸시 버튼으로 조명 페이드Arduino
    <사전>int ledRed =9;int ledYellow =6;int ledGreen =3;int 버튼 =7;const int 페이드 =10;void setup() { pinMode(ledRed, OUTPUT); 핀모드(LED노란색, 출력); 핀모드(LED녹색, 출력); 핀모드(버튼, 입력); 디지털 쓰기(ledRed, LOW); digitalWrite(led노란색, LOW); digitalWrite(ledGreen, HIGH);} 무효 루프() { if (digitalRead(버튼) ==HIGH) { 지연(15); if (digitalRead(버튼) ==HIGH) { fadeLights(); } } else { digitalWrite(ledRed, LOW); digitalWrite(led노란색, LOW); 디지털 쓰기(ledGreen, HIGH); }}void fadeLights() { for (int i =255; i>=0; i--) { analogWrite(ledGreen, i); 지연(페이드); } // ledYellow for (int i =0; i <=255; i++) { analogWrite(ledYellow, i); 지연(페이드); } for (int i =255; i>=0; i--) { analogWrite(ledYellow, i); 지연(페이드); } //ledRed for (int i =0; i <=255; i++) { analogWrite(ledRed, i); 지연(페이드); } for (int i =255, i>=0, i--) { analogWrite(ledRed, i); 지연(페이드); } // ledYellow for (int i =0; i <=255; i++) { analogWrite(ledYellow, i); 지연(페이드); } for (int i =255; i>=0; i--) { analogWrite(ledYellow, i); 지연(페이드); } //ledGreen for (int i =0; i <=255; i++) { analogWrite(ledGreen, i); 지연(페이드); }}
    푸시 버튼으로 조명 페이드(지연 개선)Arduino
    int ledRed =9;int ledYellow =6;int ledGreen =3;int 버튼 =7;const int fade =10;void setup() { pinMode(ledRed, OUTPUT); 핀모드(LED노란색, 출력); 핀모드(LED녹색, 출력); 핀모드(버튼, 입력); 디지털 쓰기(ledRed, LOW); digitalWrite(led노란색, LOW); digitalWrite(ledGreen, HIGH);} 무효 루프() { if(digitalRead(버튼) ==HIGH) { 지연(15); if(digitalRead(버튼) ==HIGH){ fadeLights(); } } else { digitalWrite(ledRed, LOW); digitalWrite(led노란색, LOW); 디지털 쓰기(ledGreen, HIGH); }} 무효 fadeLights(){ for( int i=255; i>=0; i--) { analogWrite(ledGreen, i); for( int y =0; y <1000; y++){ // 버튼을 놓으면 if (digitalRead(button) ==LOW) { return; } } } // ledYellow for( int i=0; i<=255; i++) { analogWrite(ledYellow, i); for( int y =0; y <400; y++){ // 버튼을 놓으면 if (digitalRead(button) ==LOW) { return; } } } for( int i=255; i>=0; i--) { analogWrite(ledYellow, i); for( int y =0; y <400; y++){ // 버튼을 놓으면 if (digitalRead(button) ==LOW) { return; } } } //ledRed for( int i=0; i<=255; i++) { analogWrite(ledRed, i); for( int y =0; y <1000; y++){ // 버튼을 놓으면 if (digitalRead(button) ==LOW) { return; } } } for( int i=255; i>=0; i--) { analogWrite(ledRed, i); for( int y =0; y <1000; y++){ // 버튼을 놓으면 if (digitalRead(button) ==LOW) { return; } } } // ledYellow for( int i=0; i<=255; i++) { analogWrite(ledYellow, i); for( int y =0; y <400; y++){ // 버튼을 놓으면 if (digitalRead(button) ==LOW) { return; } } } for( int i=255; i>=0; i--) { analogWrite(ledYellow, i); for( int y =0; y <400; y++){ // 버튼을 놓으면 if (digitalRead(button) ==LOW) { return; } } } //ledGreen for( int i=0; i<=255; i++) { analogWrite(ledGreen, i); for( int y =0; y <1000; y++){ // 버튼을 놓으면 if (digitalRead(button) ==LOW) { return; } } }}

    회로도


    제조공정

    1. MPU-6050을 사용한 Arduino 자이로스코프 게임
    2. Python과 함께 Arduino 및 RFID를 사용한 출석 시스템
    3. DHT11 센서(LED 및 피에조 스피커 포함)
    4. ARDUINO를 사용하는 초음파 부상 기계
    5. Unopad - Ableton이 포함된 Arduino MIDI 컨트롤러
    6. Arduino를 사용한 자동 식물 관수 시스템
    7. Arduino를 사용한 간단한 장애물 센서
    8. 나를 찾기
    9. Arduino를 사용하여 지구의 질량을 측정하는 방법
    10. Arduino Uno를 사용한 25kHz 4핀 PWM 팬 제어