1. 가변저항으로 LED 제어하기
▶ 가변저항(potentiometer)이란?
: 값을 바꿀 수 있는 저항
- 가변저항은 노브(kmob)를 돌려 사용자가 값을 변경할 수 있다.그래서 오디오 볼륨을 제어하거나, LED 조명의 밝기를 제어하는 등 아날로그값을 조절할 때 반드시 필요하다.
▶ 가변저항의 구조와 작동 원리
가변저항은 세 개의 단자로 구성된다. 양 끝의 두 단자는 전원(5V)과 접지(GND)에 연결한다. 가운데 단자는 와이퍼(wiper)라고 하는데, 가변저항의 변경된 저항값을 읽을 수 있는 특별한 단자이다.
고정저항과 가변저항은 모두 극성이 없는 전자부품이어서, 전원과 접지의 연결 단자가 서로 바뀌어도 잘 작동한다. 하지만 가변저항의 경우, 전원과 접지의 방향을 변경하면 와이퍼에서 측정되는 값의 범위가 뒤바뀐다. 예를 들어, 가변저항의 왼쪽 단자를 전원(5V)에 연결하고 오른쪽 단자를 접지(GND)에 연결할 때 가운데 입력 단자를 통해 읽은 값이 최댓값이라면, 왼쪽 단자를 접지(GND)에 연결하고 오른쪽 단자를 전원(5V)에 연결할 때 가운데 입력 단자를 통해 읽은 값은 최솟값이다.
▶ 아날로그 신호의 입력 범위
가변저항의 가운데 2번 단자를 아두이노의 아날로그 입력 핀에 연결해 입력받는 값의 범위는 최솟값이 0이고, 최댓값이 1,023이 된다.
Do it! 실습 7-1. 가변저항값 측정하기
// C++ code
//
void setup()
{
Serial.begin(9600); //직렬 통신 초기화
}
void loop()
{
int readValue = analogRead(A0); //A0 단자에서 측정되는 아날로그 신홋값을 저장
Serial.println(readValue); //아날로그값 출력
}
Do it! 실습 7-2. 가변저항으로 LED 켜고 끄기
// C++ code
//
void setup()
{
Serial.begin(9600);
pinMode(13, OUTPUT); //디지털 13번 핀을 출력 모드로 설정
}
void loop()
{
int readValue = analogRead(A0); //A0 핀에서 읽은 값을 readValue에 저장
Serial.println(readValue);
if(readValue < 500) //readValue값이 500 미만이라면 LOW
digitalWrite(13, LOW);
else
digitalWrite(13, HIGH); //readValue값이 500 이상이라면 HIGH
}
Do it! 실습 7-3. 가변저항으로 LED 깜빡임 속도 조절하기
// C++ code
//
void setup()
{
Serial.begin(9600);
pinMode(13, OUTPUT); //디지털 13번 핀을 출력 모드로 설정
}
void loop()
{
int readValue = analogRead(A0); //A0 핀에서 읽은 값을 readValue에 저장
Serial.println(readValue);
digitalWrite(13, LOW);
delay(readValue); //readValue값만큼 코드 실행을 기다린다.
digitalWrite(13, HIGH);
delay(readValue); //readValue값만큼 코드 실행을 기다린다.
}
- delay(readValue): readValue값만큼 코드 실행을 기다린다.
Do it! 7-3(2). LED 깜빡임 지연 속도 놀리기
// LED 깜빡임 지연 속도 늘리기
//
void setup()
{
Serial.begin(9600);
pinMode(13, OUTPUT);
}
void loop()
{
int input = analogRead(A0); //아날로그 신호 측정
int output = (float)input/1023*2000; //출력값 변환식 적용(형 변환)
Serial.print(input); //아날로그 입력값 출력
Serial.print('\t'); //공백 출력
Serial.println(output); //변환된 출력값 출력
digitalWrite(13, LOW);
delay(output); //지연 시간을 변수로 제어
digitalWrite(13, HIGH);
delay(output);
}
- int output = (float)input/1023*2000; 출력값 변환식 적용
2. 조도 센서로 스마트 가로등 만들기
▶ 조도 센서(photoresistor)란?
: 빛의 세기에 따라 저항값이 변하는 전자 부품
- 빛이 많이 들어오면 저항이 작아지고, 적게 들어오면 저항이 커지는 황화 카드뮴이라는 화합물을 사용한다.
- 조도 센서의 모습을 보면 동그란 부분이 빛을 감지하는 부분이며, 전류가 흐르는 길인 두 개의 단자로 구성된다.
저항처럼 극성이 없어서 전원(5V)와 접지(GND)의 방향에 상관없이 연결할 수 있다.
Do it! 실습 7-4. 조도 센서값 측정하기
// C++ code
//
void setup()
{
Serial.begin(9600);
}
void loop()
{
int photoresistor = analogRead(A0); //조도 센서값 측정
Serial.println(photoresistor); //조도 센서값 출력
}
슬라이드 바를 위로 올리면 빛의 밝기가 세지고, 아래로 내리면 빛의 밝기가 약해진다. 밝기 조절에 따라 바뀌는 출력값은 직렬 모니터로 확인할 수 있다. 빛이 가장 밝을 때는 49, 가장 어두울 때는 969이다.
Do it! 실습 7-5. 조도 센서로 스마트 가로등 회로 만들기
// C++ code
//
void setup()
{
Serial.begin(9600);
pinMode(13, OUTPUT);
}
void loop()
{
int photoresistor = analogRead(A0); //조도 센서값 측정
Serial.println(photoresistor); //조도 센서값 출력
if(photoresistor>100)
digitalWrite(13, HIGH); //어두울 때 가로등을 켬
else
digitalWrite(13, LOW); //밝을 때 가로등을 끔
}
3. 온도 센서로 온도계 만들기
▶ 온도 센서란?
: 온도를 감지해 전기 신호로 바꿔주는 전자 부품
- 서킷은 세 개의 단자로 구성된 TMP36이라는 온도 센서를 지원한다. 왼쪽부터 전원, 출력, 접지 단자이다.
Do it! 실습 7-6. 온도 센서로 온도계 회로 만들기
// C++ code
//
void setup()
{
Serial.begin(9600); //직렬 통신 초기화
}
void loop()
{
int analogInput = analogRead(A0); //온도 센서(TMP36)값 측정
float voltage = analogInput*5.0/1023.0; //전압값 변환
float temparature = voltage*100-50; //온도값 변환
Serial.print("Temperature : ");
Serial.println(temparature); //온도값 출력
}
도전: 화재경보기를 만들어 봐요!
: 온도가 120도를 넘으면 LED를 깜빡이는 화재경보기를 만든다.
// C++ code
//
void setup()
{
Serial.begin(9600);
pinMode(13, OUTPUT);
}
void loop()
{
int analogInput = analogRead(A0); //온도 센서(TMEP36)값 측정
float voltage = analogInput*5.0/1023.0;
float temperature = voltage*100-50;
Serial.println(temperature); //온도값 출력
if(temperature>120){ //120도 이상일 때
digitalWrite(13, HIGH);
delay(1000);
digitalWrite(13, LOW);
delay(1000);
}
else
digitalWrite(13, LOW);
}
'아두이노' 카테고리의 다른 글
[Do it! 아두이노] 9. 함수와 라이브러리 활용하기 (0) | 2023.08.20 |
---|---|
[Do it! 아두이노] 8. 아두이노 출력으로 아두이노 작동하기 (1) | 2023.08.19 |
[Do it! 아두이노] 6. 디지털 입력으로 아두이노 작동하기 (0) | 2023.08.19 |
[Do it! 아두이노] 5. 디지털 출력으로 아두이노 작동하기 (0) | 2023.08.19 |
[Do it! 아두이노] 4. 전기 신호의 종류와 움직임 이해하기 (0) | 2023.08.19 |