코코아팹은 누구나 창의적 아이디어를 현실로 만들어 낼 수 있도록
만들고, 공유하고, 배울 수 있는 터전이
되고자 합니다.
아이디와 비밀번호를 잊으셨나요?아이디 / 비밀번호 찾기
코코아팹 회원이 아니신가요? 회원가입
2018-12-27 10:34:10
건전지를 사용하다 보면 잔량이 얼마나 남았는지 몰라서 고생하신적이 있을겁니다.
이러한 문제를 해결하기 위해 충전지나 건전지 잔량을 측정하는 기구등이 있습니다.
이번 예제에서는 간단한 연결을 통해 배터리의 상태를 확인해 보고 이를 이용해서 3색 LED의 불을 제어해 보도록 하겠습니다.
아두이노를 이용하여 아날로그 핀에 들어오는 전압값을 확인하여 배터리의 잔량을 확인하는 방식입니다.
NO | 부품명 | 수량 | 상세설명 |
1 | 오렌지 보드 | 1 | 아두이노 우노 호환보드 |
2 | 3색 LED | 1 | |
3 | 제너 다이오드 | 1 | Zener Diode |
4 | 2.2KΩ저항 | 1 | |
5 | 330Ω저항 | 3 | |
6 | 브레드보드 | 1 | |
7 | 점퍼케이블 | 7 | |
8 | AA건전지 | 1 |
부품명 | 오렌지 보드 | 3색 LED | 제너 다이오드 | 2.2KΩ저항 |
파트 |
부품명 | 330Ω 저항 | 브레드보드 | 점퍼케이블 | AA건전지 |
파트 |
#define newLED 2 // 녹색 LED는 2번핀에 꽂습니다.
#define okLED 4 // 파란색 LED는 4번핀에 꽂습니다.
#define oldLED 6 // 빨간색 LED는 6번핀에 꽂습니다.
int analogValue = 0;
float voltage = 0;
int ledDelay = 2000;
void setup(){
Serial.begin(9600);
pinMode(newLED, OUTPUT);
pinMode(okLED, OUTPUT);
pinMode(oldLED, OUTPUT);
// LED의 핀모드를 OUTPUT으로 설정해줍니다.
}
void loop(){
analogValue = analogRead(0);
voltage = (((float)analogValue) / 1024.0 ) * 5.0;
Serial.println(voltage);
// analog 0번핀에 들어오는 값을 측정하여 이 값을 전압값으로 바꿔줍니다.
if(voltage >= 1.6){ // 전압값이 1.6이상일 경우 새 건전지
digitalWrite(newLED, HIGH);
delay(ledDelay);
digitalWrite(newLED, LOW); // 녹색 LED를 2초간 켜줍니다.
}
else if(voltage < 1.6 && voltage > 1.4){ // 1.6미만 1.4초과일 경우 사용가능한 건전지
digitalWrite(okLED, HIGH);
delay(ledDelay);
digitalWrite(okLED, LOW); // 파란색 LED를 2초간 켜줍니다.
}
else if(voltage <= 1.4){ // 1.4이하일 경우 다 쓴 건전지
digitalWrite(oldLED, HIGH);
delay(ledDelay);
digitalWrite(oldLED, LOW); // 빨간색 LED를 2초간 켜줍니다.
}
}
analogValue = analogRead(0);
voltage = (((float)analogValue) / 1024.0 ) * 5.0;
Serial.println(voltage);
// analog 0번핀에 들어오는 값을 측정하여 이 값을 전압값으로 바꿔줍니다.
아날로그 0번핀에 들어오는 값을 측정하여 이 값을 전압값으로 바꿔주는 부분입니다. 아날로그 값에다가 1024를 나눠주고 여기에 5를 곱해주면 해당 아날로그 핀에 들어오는 전압값이 됩니다.
if(voltage >= 1.6){ // 전압값이 1.6이상일 경우 새 건전지
digitalWrite(newLED, HIGH);
delay(ledDelay);
digitalWrite(newLED, LOW); // 녹색 LED를 2초간 켜줍니다.
}
else if(voltage < 1.6 && voltage > 1.4){ // 1.6미만 1.4초과일 경우 사용가능한 건전지
digitalWrite(okLED, HIGH);
delay(ledDelay);
digitalWrite(okLED, LOW); // 파란색 LED를 2초간 켜줍니다.
}
else if(voltage <= 1.4){ // 1.4이하일 경우 다 쓴 건전지
digitalWrite(oldLED, HIGH);
delay(ledDelay);
digitalWrite(oldLED, LOW); // 빨간색 LED를 2초간 켜줍니다.
}
위에서 측정한 전압값을 이용하여 LED의 불을 켜줍니다. 전압값이 1.6V이상이면 새건전지로 녹색불, 1.6V미만 1.4V초과면 사용가능한 건전지로 파란불, 1.4V이하면 다쓴 건전지로 빨간불을 켜줍니다.
(기준은 건전지에 따라서 달라집니다. 충전지일 경우는 기본 전압이 낮을 수 있습니다. 또한 AA건전지(1.5V) 외에 다른 건전지를 사용하실 경우 그 건전지에 맞게 전압값을 수정해 주시면 됩니다.)
밑의 사진은 DC Power Supply를 통해 전압을 공급했을 때 제대로 측정값이 나오는지 확인해본 사진입니다.(0.0x단위 오차가 있긴하지만 비교적 정확하게 나왔습니다.)
kocoafab