아두이노를 이용한 입력까지 이해하시는데 어려움이
없으시면 이제 간단한 입력과 출력을 이용한 제어를
공부해 볼까 합니다.

앞으로 다양한 센서를 사용해 보고 싶지만
초기에 생활에서 쉽게 사용하고 여러분들이
정말 향후에 사용해 볼 수 있는 센서를 기본으로 
다양하게 활용 하려고 합니다.

제일 먼저 사용해볼 센서는 CDS셀 이라는 것을
이용해 데이터를 받아오려고 합니다.

CDS셀은 아래과 같이 생겼는데요.
빛을 통해 흐르는 전류량에 따라 저항의 크기가
달라지는 특성을 보입니다.
한마디로 빛 감지 센서 또는 광센서라고 부릅니다.









센서의 회로적 연결은 다음과 같이 연결되는데요.
먼저 연결 상태를 보게 되면,

0


5V 부분과 광센서, 광센서와 10KΩ의 저항 그리고 접지(GND)로 연결되고
그리고 광센서와 저항 사이에서 값을 불러오도록
세팅이 됩니다.^^

먼저 그리고 아셔야 되는 것이 일반적으로 
광센서가 아니더라도 저항을 두게 되는 이유는
보호저항이라는 역할을 하도록 기본회로를 설계하는데요.

일반적으로 광센서가 아닌 다를 센서를 사용한다고 하더라도
보호 저항 역할을 하도록 센서를 연결하게 됩니다.

동작 원리에 대해 간단히 이해해 보면요.
보호저항 값이 10KΩ을 가지고 있을 때
CDS의 정확한 값은 센서마다 조금 다를 수 있습니다.
예를 들어서 대략 빛의 밝기에 따라 0~100KΩ으로
광센서의 밝기 값이 달라진다고 합시다.

빛이 밝을 때는 저항이 1kΩ
빛이 아주 어두울 때는 100kΩ 달라질 때



밝은 곳에 둔 저항 값을 계산해 보면요
전압의 분배 원리를 비교해서 계산해 볼까요?

(보호저항+측정저항) = 전체저항
측정저항/전체저항 = 센서 값 비율

센서 값 비율 X 사용전압 = 실제 센서 전압


어두운 저항값

광센서 1k 보호저항은 10k
전체의 저항은 11k가 되겠죠.
가운데 흐르는 전압은 5V가 되고

1 / 11 = 0.09 
0.09 X 5V = 0.45V

실제 흐르는 전압은 0.45V가 되겠죠.

밝은 저항값
100/110 = 0.9
0.9 X 5 = 4.5V 가 될꺼에요.

여기서 나오는 전압의 크기는 우리는
센서에서 획득이되는 전압의 크기가 됩니다.

센서에서 나오는 전압의 크기는 
0~5V 로 표현 될 수 있지만

아두이노 자체에서는 0~5V로 표현하기보다
받아오는 데이터를 10bit로 쪼개서 
수치화 하는데요. 지난 시간에 디지털이
bit 단위로 0또는 1로만 구분될 때는 
0~5V는 0과 1밖에 말 할 수 없습니다.
그런데 10bit로 구분할 때는

아두이노에서는 최대 5V라는 신호를 받을 때
최대로 표현 가능 bit 단위는 10bit 즉 1024까지
표현되는거죠

5V는 1024로
2.5V는 512로 
0V는 0으로 표현 할 수 있다는 말이죠.

여기에 대한 개념은 이제 어느 정도 잡히실 겁니다.
그래도 어렵다면 아니면 저에게 질문해 주시면 됩니다.


 테스트를 해볼려니 갑자기 브레드보드가 필요한데요.
브레드보드는 회로를 쉽게 결선할 수 있도록 도와주는 판인데
빵을 굽는 판과 같이 구멍이 뚤어져 있다고 해서
브레드보드 즉 우리나라 말로 빵판 이라고 합니다.

빵판은 대게 5개의 구멍이 옆으로 연결되어 있습니다.
내부구조는 아래 그림과 같고요.
여러 가지의 부품 또는 부품과 부품간의 결선을 위해 사용됩니다.





다시 돌아가서 연결은 광센서와 저항이 직렬로 연결되도록
빵판에 연결하고 광세서와 저항사이에서 신호를 뽑아 
아두이노로 보낼 수 있도록 다음 그림과 같이 연결합니다.


빵판을 직렬로 연결할 때 CDS의 왼쪽가는 5V와 연결하고
CDS의 다른 한쪽은 저항과 연결 저항의 가장 오른쪽은 접지를 연결합니다.
그리고 저항과 CDS가 연결되는 부분에서 신호를 뽑아서 


자신이 보내고 싶은 위치에 신호를 보냅니다.
그럼 CDS의 값을 변화 시킬때마다 값을 확인 할 수 있게 됩니다.
손으로 CDS를 가릴때와 가리지 않을 때를 확인해볼까요?


3편에서 입력에 따른 값의 확인의 소스를 가져와 볼까요?

상단 탭의 파일 => 예제 => 01.Basics => AnalogReaSerial
이곳에 있는 예제를 열어봅니다.


void setup() {
Serial.begin(9600);
}

void loop() {
int sensorValue = analogRead(A0);
Serial.println(sensorValue);
delay(1); 
}

이제 이 소스코드를 알고 계실 겁니다.
그럼 여기 소스의 analogRead(A0) 를 대신해서 analogRead(A2) 에 
CDS값을 입력해볼까요?


그럼 이전과 동일하게 시리얼모니터를 통해 값이 읽어지는
것을 확인할 수 있는데요. 손으로 빛을 가리는 양에 따라
시리얼 모니터의 값의 변화를 확인 할 수 있습니다.

우리는 이제 손을 통해 빛의 밝기를 조절해
강의  2편과 3편에서의 LED를 켜거나 끄는 명령을 활용할 예정인데요.









void setup() {
Serial.begin(9600);
pinMode(13, OUTPUT);

}

void loop() {

int sensorValue = analogRead(A2);
Serial.println(sensorValue);

if ( sensorValue < 500)
{
digitalWrite(13, HIGH); 
}
else 
{
digitalWrite(13, LOW); 
}
}


우리는 2편과 3편에서 배운 코드를 조합해서
다음과 같은 코드를 만들었는데요.

A2번 단자를 통해 들어오는 값을
sensorValue에 입력하도록 만들고
지정하는 기준값 500보다 낮으면 13포트가 켜지고

아닌 경우에는 13포트가 꺼지도록 프로그램했습니다.

여기서 if(조건식) { 내용 } else{ 내용 }
다음과 같이 동작하도록 하였습니다.

if는 원하는 조건식에서 맞으면 내용이 실행되고
else는 if가 아닌 모든 내용일 때 내용이 실행되도록
제작해둔 조건문입니다.





오늘의 기본 동작 아래과 같이 동작하니 다시 천천히 이해하시고
궁금한 사항은 질문하십시오.

+ Recent posts