이번 시간에는 지난 시간에 말씀드렸다시피 Digital 입출력에 대해서 간단히 설명하고 ADC에 대해서 알아보고 실습해 보도록 하겠습니다.
매주 한번씩 띄엄띄엄 하다보니 먼가 간질맛 나겠지만!!
짧고 굵게 보다는 얇고 길게~~ 를 목표로 한번 가보겠습니다~~!
자.. 그럼 먼저 Digital 입출력에 대해서 알아보도록 하죠.
6-1. Digital 입출력
제가 앞서 강의하면서 Digital 입출력에 대해서 계속 얘기했었는데요. 어떤 때는 5V라고 하고 어떤때는 1이라고 했다가 어떤 때는 0V라고 하고 어떤 때는 GND라고 하고 했는데 이번에 정리해 보겠습니다.
이전 시간에 말씀드렸다시피 전자의 흐름은 물과 같다고 했는데요. 물은 높은 곳에서 낮은 곳으로만 흐르죠. 따라서 아두이노 보드에 5V 전압을 가한다는 것은 더 정확히 말하면 5V 전위차의 전원을 인가한다 가 맞겠네요. 이게 먼소리냐 하면 한쪽에는 5V를 걸어주고 다른 한편에는 기준전압으로 0V를 걸어주기 때문입니다.
따라서 아두이노보드에는 전위차가 5V 발생하게 되고 동작하게 되는 것이죠.
"원래 그런거 아닌가요?" 라고 말할 수 있는데 반대로 생각하면 10V를 공급해주면 아두이노가 망가지나요? 보통은 '네' 가 맞겠지만 0V 대신에 5V를 반대편에 기준전압으로 공급해준다면 아두이노에는 한쪽에는 10V가 걸리고 다른편에는 5V가 걸려서 실제로 아두이노에서 발생하는 전위차는 5V가 되기때문에 정상동작하게 됩니다~
우선 기본적인 전압에 대해서 얘기 했으니 원래 목적으로 돌아가면
제가 지금까지 중구난방으로 말한 0, 1, 5V, 0V, HIGH, LOW는 다 같은 얘기 입니다.
디지털 로직에서 0이냐 1이냐를 판단할 때 로직 0 또는 1 이라고 말하는데 같은 말로 로직 HIGH 냐 LOW 라고 얘기를 합니다. 그럼 이 기준은 무엇이냐? 라고 생각할텐데 전압을 기준으로 얘기합니다.
아두노에 공급되는 전압이 5V 이기 때문에 5V를 HIGH, 1 이라고 하고 0V를 LOW, 0 이라고 하죠. 그럼 반드시 5V나 0V만 그렇게 불리느냐?
'아닙니다.'
TTL LEVEL과 CMOS LEVEL 이 있는데요. 아래그림을 보시면 이해가 쉬우실 꺼에요~
펌 : http://aboutmadlife.blogspot.kr/2014/09/vih-vil-voh-vol-nmh-nml.html |
간단하죠!
그럼 모른다가 나온김에 하나더 설명 드리면 디지털로직은 지금까지 0과 1만 있는줄 아셨겠지만 방금 설명드린대로 모른다도 있고 하이임피던스 라는 것도 있습니다.
정리하면 Logic 0, 1, unknow, Hi-Z 가 있겠네요~
오늘은 많이 했으니 이것들은 차차 알아가도록 하고 본격적인 강좌를 시작해볼까요?!
(헉헉.. 힘듬)
6-2. ADC란 무엇인가?
ADC란 Analog-Digital Converter 의 약자입니다. 이걸 한국말로 바꾸면 '아날로그를 디지탈로 변환' 한다는 얘기가 되겠네요!
그럼 아날로그는 머고 디지탈은 머죠?
펌 위키백과 |
아날로그 신호는 우리가 일반적으로 보는 것들입니다. 연속적인 것들.. 디지털 처럼 끊어지지 않는 것들이죠! 그림에서 빨간 선 같은 연속적인 신호들을 아날로그 신호라고 하는데 이것을 0과 1의 디지털 신호로 변환하여 출력해주는 것을 아날로그 디지털 컨버터라고 하는 기능입니다!!
간단하죠? 먼가 알듯 말듯하면 회로를 보고 설명해보겠습니다~
멀티펑션 보드의 가변저항 회로 인데요. 보시면 가변저항 R10의 10K옴 입니다. 그리고 가변저항의 양쪽에는 한쪽에 5V, 반대편에 0V가 걸려있고 남은 핀에는 아두이노의 A0 아날로그핀에 연결되어 있죠.
이게 무엇이냐 하면 가변저항, 말그대로 저항값을 변화시킬 수 있다는 말인데요. 이 저항값을 변화시키면 아두이노랑 연결된 A0 핀에 0~5V 까지 전압이 변화하면서 입력된다는 것입니다!
핵심이죠. 가변저항을 돌리면서 전압값이 1.1V도 들어갈 수 있고 3.333V도 들어갈 수 있는데 이것들을 아두이노에서 입력으로 받아서 처리는 하는 것입니다. 어떻게 처리하느냐?
아두이노의 경우 ADC가 8bit 동작이 있고 10bit 동작이 있는데요. 이말은 0V ~ 5V의 전압 값을 입력으로 받아서 0~255(8bit)로 표현하느냐 0~1023(10bit)로 표현하느냐의 차이가 되겠네요. 쉽죠~?
그럼 가변저항에서 2.5V 값이 출력되고 아두이노에서 ADC 10bit로 입력받고 있다면 변환된 값은 얼마가 출력될까요?
정답은 512 가 되겠네요! ㅎㅎ
이해 안되시면 리플 달아주세요!
자 .. 그럼 실습 갑니닷!
6-4. 펌웨어 코드
void setup() {
Serial.begin(9600);
}
void loop() {
int sensorValue = analogRead(A0);
Serial.println(sensorValue);
delay(1);
}
언제나 처럼 실습은 영상으로 대체합니닷!!
후반부터 보시면 될 것 같네요~
그럼 다음시간에 뵈요~~
0 댓글