전력 소비는 전원을 끄지 않고 오랫동안 지속적으로 실행되는 장치의 중요한 문제입니다. 따라서이 문제를 극복하기 위해 거의 모든 컨트롤러에는 절전 모드가 제공되어 개발자가 최적의 전력 소비를위한 전자 장치를 설계하는 데 도움이됩니다. 절전 모드는 사용하지 않는 모듈을 꺼서 장치를 절전 모드로 전환합니다.
앞서 절전을 위해 ESP8266의 딥 슬립 모드에 대해 설명했습니다. 오늘 우리는 아두 이노 슬립 모드에 대해 배우고 전류계를 사용하여 전력 소비를 시연 할 것 입니다. 아두 이노 절전 모드로도 불린다 아두 이노 절전 모드 또는 아두 이노 대기 모드.
Arduino 절전 모드
절전 모드를 사용하면 마이크로 컨트롤러에서 사용하지 않는 모듈을 중지하거나 끌 수있어 전력 소비를 크게 줄일 수 있습니다. Arduino UNO, Arduino Nano 및 Pro-mini는 ATmega328P와 함께 제공되며 절전 모드시 공급 전압을 모니터링하는 BOD (Brown-out Detector)가 있습니다.
ATmega328P에는 6 가지 절전 모드가 있습니다.
슬립 모드로 들어가려면 슬립 모드 제어 레지스터 (SMCR.SE)에서 슬립 비트를 활성화해야합니다. 그런 다음 절전 모드 선택 비트는 유휴, ADC 잡음 감소, 전원 차단, 절전, 대기 및 외부 대기 중에서 절전 모드를 선택합니다.
내부 또는 외부 Arduino 인터럽트 또는 재설정은 Arduino를 절전 모드에서 깨울 수 있습니다.
유휴 모드
유휴 절전 모드로 들어가려면 컨트롤러 '000'의 SM 비트를 작성하십시오. 이 모드는 CPU를 중지하지만 SPI, 2-wire 직렬 인터페이스, USART, Watchdog, 카운터, 아날로그 비교기가 작동하도록 허용합니다. 유휴 모드는 기본적으로 CLK CPU 및 CLK FLASH를 중지합니다. Arduino는 외부 또는 내부 인터럽트를 사용하여 언제든지 깨울 수 있습니다.
유휴 절전 모드 용 Arduino 코드:
LowPower.idle (SLEEP_8S, ADC_OFF, TIMER2_OFF, TIMER1_OFF, TIMER0_OFF, SPI_OFF, USART0_OFF, TWI_OFF);
arduino에서 다양한 저전력 모드를 설정하는 라이브러리가 있습니다. 따라서 먼저 주어진 링크에서 라이브러리를 다운로드하여 설치하고 위의 코드를 사용하여 Arduino를 유휴 절전 모드로 전환하십시오. 위의 코드를 사용하면 Arduino는 8 초 동안 절전 모드로 들어가 자동으로 깨어납니다. 코드에서 볼 수 있듯이 유휴 모드는 모든 타이머, SPI, USART 및 TWI (2 선 인터페이스)를 끕니다.
ADC 노이즈 감소 모드
이 슬립 모드를 사용하려면 SM 비트를 '001'에 쓰십시오. 이 모드는 CPU를 중지하지만 ADC, 외부 인터럽트, USART, 2- 와이어 직렬 인터페이스, Watchdog 및 카운터가 작동하도록 허용합니다. ADC 노이즈 감소 모드는 기본적으로 CLK CPU, CLK I / O 및 CLK FLASH를 중지합니다. 다음과 같은 방법으로 ADC 노이즈 감소 모드 에서 컨트롤러를 깨울 수 있습니다.
- 외부 리셋
- 감시 시스템 재설정
- 워치 독 인터럽트
- 브라운 아웃 리셋
- 2 선 직렬 인터페이스 주소 일치
- INT의 외부 레벨 인터럽트
- 핀 변경 인터럽트
- 타이머 / 카운터 인터럽트
- SPM / EEPROM 준비 인터럽트
파워 다운 모드
파워 다운 모드는 생성 된 모든 클럭을 중지하고 비동기 모듈의 작동 만 허용합니다. SM 비트를 '010'에 써서 활성화 할 수 있습니다. 이 모드에서 외부 발진기는 꺼지지 만 2 선 직렬 인터페이스, 감시 및 외부 인터럽트는 계속 작동합니다. 아래 방법 중 하나로 만 비활성화 할 수 있습니다.
- 외부 리셋
- 감시 시스템 재설정
- 워치 독 인터럽트
- 브라운 아웃 리셋
- 2 선 직렬 인터페이스 주소 일치
- INT의 외부 레벨 인터럽트
- 핀 변경 인터럽트
파워 다운주기 모드를위한 Arduino 코드:
LowPower.powerDown (SLEEP_8S, ADC_OFF, BOD_OFF);
이 코드는 전원 차단 모드를 켜는 데 사용됩니다. 위의 코드를 사용하면 Arduino는 8 초 동안 절전 모드로 들어가 자동으로 깨어납니다.
또한 Arduino가 절전 모드로 들어가지만 외부 또는 내부 인터럽트가 제공 될 때만 깨어나는 인터럽트와 함께 전원 차단 모드를 사용할 수 있습니다.
파워 다운 인터럽트 모드를위한 Arduino 코드:
void loop () { // wake up 핀이 로우에서 인터럽트를 트리거하도록 허용합니다. attachInterrupt (0, wakeUp, LOW); LowPower.powerDown (SLEEP_FOREVER, ADC_OFF, BOD_OFF); // 웨이크 업 핀에서 외부 핀 인터럽트를 비활성화합니다. detachInterrupt (0); // 여기서 뭔가를하세요 }
절전 모드
절전 모드로 들어가려면 SM 핀을 '011'에 써야합니다. 이 절전 모드는 절전 모드와 비슷하지만 타이머 / 카운터가 활성화 된 경우 절전 모드에서도 실행 상태를 유지합니다. 타이머 오버플로를 사용하여 장치를 깨울 수 있습니다.
시간 / 카운터를 사용하지 않는 경우 절전 모드 대신 절전 모드를 사용하는 것이 좋습니다.
대기 모드
대기 모드는 파워 다운 모드와 동일하며,이 모드에서 유일한 차이점은 외부 발진기가이 모드에서 계속 실행된다는 것입니다. 이 모드를 활성화하려면 SM 핀을 '110'에 쓰십시오.
확장 대기 모드
이 모드는 오실레이터가 계속 실행된다는 점을 제외하면 절전 모드와 유사합니다. SM 핀을 '111'에 쓰면 장치가 확장 대기 모드로 들어갑니다. 이 장치는 확장 된 대기 모드에서 깨어나 기 위해 6 클럭주기가 걸립니다.
다음은 회로도에 따라 회로를 연결 한 후이 프로젝트에 대한 요구 사항입니다. Arduino IDE를 사용하여 수면 모드 코드를 Arduino에 업로드합니다. Arduino는 유휴 절전 모드로 들어갑니다. 그런 다음 USB 전류계로 전류 소비를 확인합니다. 그렇지 않으면 클램프 미터를 사용할 수도 있습니다.
필요한 구성 요소
- Arduino UNO
- DHT11 온도 및 습도 센서
- USB 전류계
- 브레드 보드
- 전선 연결
Arduino와 함께 DHT11을 사용하는 방법에 대해 자세히 알아 보려면 링크를 따르십시오. 여기에서는 USB 전류계를 사용하여 절전 모드에서 Arduino가 소비하는 전압을 측정합니다.
USB 전류계
USB 전류계는 USB 포트에서 전압과 전류를 측정하는 데 사용되는 플러그 앤 플레이 장치입니다. 동글은 USB 전원 공급 장치 (컴퓨터 USB 포트)와 USB 장치 (Arduino) 사이에 연결됩니다. 이 장치는 끌어 당기는 전류 값을 측정하는 전원 핀과 인라인으로 0.05ohm 저항이 있습니다. 이 장치에는 연결된 장치에서 소비하는 전류 및 전압 값을 즉시 표시하는 4 개의 7 세그먼트 디스플레이가 있습니다. 이 값은 3 초 간격으로 바뀝니다.
사양:
- 작동 전압 범위: 3.5V ~ 7V
- 최대 전류 등급: 3A
- 나르 게 쉬운 소형 크기
- 외부 공급이 필요하지 않음
신청:
- USB 장치 테스트
- 부하 수준 확인
- 배터리 충전기 디버깅
- 공장, 전자 제품 및 개인 사용
회로도
Arduino Deep Sleep 모드 를 시연하기위한 위의 설정 에서 Arduino는 USB 전류계에 연결됩니다. 그런 다음 USB 전류계를 노트북의 USB 포트에 연결합니다. DHT11 센서의 데이터 핀은 Arduino의 D2 핀에 부착되어 있습니다.
코드 설명
비디오가있는 프로젝트의 전체 코드는 끝에 제공됩니다.
DHT11 센서와의 라이브러리를 포함하여 코드의 시작 저전력 라이브러리를. 저전력 라이브러리를 다운로드하려면 링크를 따르십시오. 그런 다음 DHT11의 데이터 핀이 연결된 Arduino 핀 번호를 정의하고 DHT 객체를 생성했습니다.
#포함
에서 무효 설정 기능, 우리 이용하여 시리얼 통신을 개시 한 , serial.begin (9600)를 여기 9600 보레이트이다. 우리는 Arduino의 내장 LED를 절전 모드의 표시기로 사용하고 있습니다. 따라서 핀을 출력으로 설정하고 디지털 쓰기를 낮게 설정했습니다.
void setup () { Serial.begin (9600); pinMode (LED_BUILTIN, OUTPUT); digitalWrite (LED_BUILTIN, LOW); }
에서 보이드 루프 기능, 우리는 센서 내장 LED HIGH 및 판독 온도 및 습도 데이터를 만들고있다. 여기에서 DHT.read11 (); 명령은 센서에서 데이터를 읽는 것입니다. 데이터가 계산되면 모든 변수에 저장하여 값을 확인할 수 있습니다. 여기에서는 두 개의 float 유형 변수 't' 및 'h'를 사용했습니다 . 따라서 온도 및 습도 데이터는 직렬 모니터에 직렬로 인쇄됩니다.
void loop () { Serial.println ("DHT11에서 데이터 가져 오기"); 지연 (1000); digitalWrite (LED_BUILTIN, HIGH); int readData = DHT.read11 (dataPin); // DHT11 float t = DHT. 온도; 플로트 h = DHT. 습도; Serial.print ("온도 ="); Serial.print (t); Serial.print ("C-"); Serial.print ("습도 ="); Serial.print (h); Serial.println ("%"); 지연 (2000);
절전 모드를 활성화하기 전에 "Arduino:-I am going for a Nap"을 인쇄 하고 내장 LED를 낮게 설정합니다. 그 후 코드에서 아래에 언급 된 명령을 사용하여 Arduino 절전 모드를 활성화합니다.
아래 코드는 Arduino 의 유휴 주기적 절전 모드 를 활성화하고 8 초의 절전을 제공합니다. ADC, Timers, SPI, USART, 2-wire 인터페이스를 OFF 상태로 전환합니다.
그런 다음 8 초 후에 자동으로 Arduino를 절전 모드에서 깨우고 "Arduino:-Hey I just Woke up"을 인쇄합니다.
Serial.println ("Arduino:-낮잠을 원합니다"); 지연 (1000); digitalWrite (LED_BUILTIN, LOW); LowPower.idle (SLEEP_8S, ADC_OFF, TIMER2_OFF, TIMER1_OFF, TIMER0_OFF, SPI_OFF, USART0_OFF, TWI_OFF); Serial.println ("Arduino:-방금 일어 났어요"); Serial.println (""); 지연 (2000); }
따라서이 코드를 사용하면 Arduino는 1 분에 24 초 동안 만 깨어나고 나머지 36 초 동안 절전 모드로 유지되어 Arduino 기상 관측소에서 소비하는 전력을 크게 줄일 수 있습니다.
따라서 Arduino 를 절전 모드로 사용 하면 장치 런타임을 약 두 배로 늘릴 수 있습니다.