# 제목: 가변저항을 사용한 활용 예제



# 내용: 가변저항의 값을 아날로그 데이터로 입력하면 0~ 1023의 값이 입력된다.


이를 활용하여 필요한 만큼 구획을 나누어 원하는 상황에 맞게 사용할 수 있다.


해당 예제에서는 총 4개의 균등한 구획으로 나누고 각 구획마다 LCD에 다른 문구를 표시한다.



# 코드:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
 
LiquidCrystal_I2C lcd(0x3F162);  // I2C LCD 객체 선언
const int resistorPin = A0;   //아두이노 A0 I/O에 가변저항을 연결합니다.
int sensorValue = 0;
 
void setup() {
  lcd.begin(); // lcd를 사용을 시작합니다.
  lcd.clear(); // lcd를 전부 지웁니다.
  lcd.home();  // 첫번째 줄 첫번째(좌측) 위치로 이동한다.
 
  pinMode(resistorPin, INPUT);  //resistorPin 을 입력으로 설정합니다.
}
 
void loop() {
  lcd.home();
  sensorValue = analogRead(resistorPin);  //analogRead()를 사용해서 아날로그 입력을 받는다.
 
  if(sensorValue >= 0 && sensorValue <255) {         //sensorValue 값이 0~254 일때
    lcd.print("1st quarter");
  }
  else if(sensorValue >= 255 && sensorValue <511) {  //값이 255~510 일때
    lcd.print("2nd quarter");
  }
  else if(sensorValue >= 511 && sensorValue <766) {  //값이 511~765 일때
    lcd.print("3rd quarter");
  }
  else {                                             //값이 766~1023 일때
    lcd.print("4th quarter");
  }
}
cs


# 회로도(Fritzing):




# 실행결과:



# 비고:


# 제목: 3-pin 스위치(토글 스위치)를 사용해서 두가지 상태를 만들어보자.



# 내용: 3-pin 스위치에 경우 방향에 따라 다른 회로를 구성할 수 있다.



위 사진과 같이 회로를 구성하고 스위치를 좌-우로 움직여보면 어떤 상황일 때 LED가 켜지는 지 확인할 수 있다.

(스위치 구성에 따라 방향이 반대일 수 있으므로 꼭 사용하기 전에 확인하세요)


가운데 핀은 항상 연결이 되어있고, 스위치의 이동에 따라 좌측핀 혹은 우측핀과 가운데핀이 연결되는 구조이다.


오른쪽 버튼스위치의 경우 아예 회로가 단절되었다가 버튼을 눌렀을 때만 회로가 연결되는 구조라면, 토글스위치는 회로가 항상 연결은 되어있으나


두가지 회로 중 선택하는 스위치라고 생각하면 된다.


이번 예제에서는 스위치로 Apple 혹은 Banana 를 표시할 수 있는 회로를 만들어본다.


# 코드:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
 
LiquidCrystal_I2C lcd(0x3F162);  // I2C LCD 객체 선언
 
const int switchPin = 2;   //아두이노 디지털핀 2번 I/O에 스위치를 연결합니다.
int sensorValue = 0;
 
void setup() {
  lcd.begin(); // lcd를 사용을 시작합니다.
  lcd.clear(); // lcd를 전부 지웁니다.
  lcd.home();  // 첫번째 줄 첫번째(좌측) 위치로 이동한다.
 
  pinMode(switchPin, INPUT);  //switchPin 을 입력으로 설정합니다.
}
 
void loop() {
  lcd.home();
  sensorValue = digitalRead(switchPin);  //digitalRead()를 사용해서 디지털 입력을 받는다.
  if(sensorValue == HIGH) {  //스위치가 +5V와 연결되었을 경우 (HIGH)
    lcd.print(" Apple");
  }
  else {                     //스위치가 GND와 연결되었을 경우 (LOW)
    lcd.print("Banana");
  }
}
cs


# 회로도(Fritzing):




# 실행결과:



# 비고:




# 제목: 가변저항(INPUT) - 아두이노 - LCD1602(OUTPUT)으로 



# 내용: 가변저항을 사용해서 사용자가 직접 특정값을 입력해서 원하는 기능을 하도록 해보자.


일단 가변저항으로 어떻게 신호를 입력할 수 있을까?


이는 "전압분배법칙"을 사용해서 가능합니다.


법칙 자체를 설명하면 너무 복잡해질 것 같아서... 간단한 원리만 설명합니다.


가변저항은 총 3개의 핀으로 구성되어있고 좌/우측 끝 핀을 연결하면 전체저항값이 나오고,


끝단 중 하나와 가운데 핀을 연결하면 회전량만큼의 저항에 대한 값만 나오게 됩니다.


이걸 사용해서 좌/우끝단에 각각 +5V / GND 를 연결하고 가운데를 analog 입력에 넣으면 회전한 만큼 전압을 넣게되어


0~ 1023의 값을 입력할 수 있습니다. (analogRead() 메소드를 사용합니다)



# 코드:


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
 
LiquidCrystal_I2C lcd(0x3F162);  // I2C LCD 객체 선언
const int resistorPin = A0;   //아두이노 A0 I/O에 가변저항을 연결합니다.
int sensorValue = 0;
 
void setup() {
  lcd.begin(); // lcd를 사용을 시작합니다.
  lcd.clear(); // lcd를 전부 지웁니다.
  lcd.home();  // 첫번째 줄 첫번째(좌측) 위치로 이동한다.
 
  pinMode(resistorPin, INPUT);  //resistorPin 을 입력으로 설정합니다.
}
 
void loop() {
  lcd.home();
  lcd.print("Resistor(0~1023)");
  lcd.setCursor(0,1);   // LCD 에 한자리 ~ 네자리가 표시될 때
  lcd.print("    ");    // 네자리 표시 후에 한자리~세자리 표시로 바뀌면
  lcd.setCursor(0,1);   // 마지막자리 숫자가 그대로 남아있게 되어 표기오류가 생긴다.
                        // 그래서 이 방법을 사용해서 해당 LCD칸을 초기화해준다.
  sensorValue = analogRead(resistorPin);  //analogRead()를 사용해서 아날로그 입력을 받는다.
  lcd.print(sensorValue);   //lcd에 0~1023 값을 출력한다.
  lcd.setCursor(4,1);
  lcd.print("value");
}
cs


# 회로도(Fritzing):




# 실행결과:



# 비고:


이 방법을 사용하여 가변저항입력값 (0~1023)에 범위를 주어 특정값에 특정한 액션을 취하게 할 수 있습니다. 가변저항 입력을 사용하여 구현할 수 있는 예제를 다음 글에 써보도록 할게요~


+ Recent posts