아두이노 high low - adu-ino high low

일단 매뉴얼부터 보자.

아래의 매뉴얼은 아두이노 메가에 사용되는 ATMEGA2560의 매뉴얼이다.

보통 입력 전압으로 5V를 사용하니 5V 기준이다. 

제일 첫 번째 행을 보면 Input Low Voltage, Except XTAL1 and Reset pin, 즉 XTAL1과 Reset 핀을 제외한 핀들의

LOW 인식 범위는 -0.5V부터 1.5V까지이며 

4번째 행을보면 Input High Voltage, Except XTAL1 and Reset pin, 즉 XTAL과 Reset핀을 제외한 핀들의

HIGH 인식 범위는 3V ~ 5.5V까지이다.

아두이노 high low - adu-ino high low

그럼 1.5V부터 3V는 어떻게 되느냐? 그건 그때그때 다르다.

이 매뉴얼은 제조업체에서 말하는 공식적인 전압 인식 범위이며 짝퉁, 수명, 사용 환경 등에 달라질 수도 있다.

보통은 입력 전압에 /2를 하여 아래로는 LOW, 위로는 HIGH로 생각하는 게 대부분이다.

직접 가변전압을 걸어 측정해보았을 때 LOW->HIGH로 넘어가는 지점은 4V였는데 HIGH->LOW로 넘어가는 건 3.6였다.

그러나 이마저도 보드마다 다르겠지.

보드마다 차이가 있는 건 확실하다. 

그저 LOW를 주고 싶으면 0V, HIGH를 주고싶으면 5V가 확실한 거 같다.

아래는 ATMega2560 데이터 시트이고 전압 페이지는 367페이지이다.

datasheet (1).pdf

2.91MB

아두이노 우노 보드에는 0번부터 13번까지 14개의 디지털 핀이 있습니다. 디지털 핀과 센서들을 연결하여 데이터를 입력 받아 처리하고 LED, 스피커, LCD로 데이터를 출력할 수 있습니다.

디지털 핀은 전류의 흐름을 제어하여 LOW와 HIGH로 전기적 신호를 구분합니다. LOW로 0V, HIGH로 5V의 전류를 흐르게 합니다. 그래서 디지털 신호로 LOW는 0으로 HIGH는 1이 됩니다.

아두이노 high low - adu-ino high low

디지털 핀 출력 제어 - LED 불 켜기/끄기

1. 디지털 핀을 입력/출력으로 제어하기 위해서는 디지털 핀을 입력 모드나 출력 모드로 설정해햐 합니다.

12번 디지털 핀을 출력 모드로 제어하기 위해서는 pinMode()함수를 사용합니다.

pinMode()함수의 첫번째 파라미터는 디지털 핀 번호이고, 두번째 파리미터는 모드입니다. 입력 모드는 INPUT, 출력 모드는 OUTPUT입니다.

12번 디지털 핀을 출력 모드로 설정합니다.

void setup() {
  pinMode(12, OUTPUT);
}

2. 12번 디지털 핀에 디지털 신호를 주기 위해서는 digitalWrite()함수를 사용합니다.

digitalWrite()함수의 첫번째 파라미터는 디지털 핀 번호이고, 두번째 디지털 신호입니다. 디지털 신호는 LOW와 HIGH로 전류를 흐리게 할려면 HIGH를 전류를 끊으려면 LOW를 설정하면 됩니다.

12번 디지털 핀을 1초마다 켜고 끄기 위해서 digitalWrite()함수로 HIGH와 LOW를 번걸아 호출합니다.

그리고 1초 동안 대기하기 위해 delay()함수를 사용합니다.

delay()함수는 밀리초(millisecond)로 1초를 설정하기 위해 1000을 설정합니다.

void loop() {
  digitalWrite(12, HIGH);
  delay(1000);
  digitalWrite(12, LOW);
  delay(1000);
}

3. 아두이노 우노 보드의 디지털 핀 왼쪽에 있는 GND에 검정색 M-M 점퍼 와이어를 꼽고 12번 디지털 핀에 빨간색 M-M 점퍼 와이어를 꼽습니다.

아두이노 high low - adu-ino high low

4. 브레드보드에 적색 LED의 음극(-)을 j열 14번에 양극(+)을 j열 15번에 꼽습니다.

그리고 검정색 M-M 점퍼 와이어를 f열 14번 라인에 꼽습니다.

220옴 저항을 적색 LED 양극(+)이 꼽혀 있는 f열 15번과 b열 2번에 꼽습니다.

a열 15번에 빨간색 M-M 점퍼 와이어를 꼽습니다.

아두이노 high low - adu-ino high low

5. 컴파일하고 업로드합니다. 잠시 후 적색 LED 불이 1초 간격으로 켜졌다 꺼졌다 합니다.

아두이노 high low - adu-ino high low

다음은 아두이노 IDE에서 제공하는 예제인 Blink(블링크 - 깜박 거리다)의 소스입니다.

메뉴 : 파일 > 예제 > 01. Basics > Blink

LED_BUILTIN은 아두이노 우노 보드에 장착되어 있는 LED와 연결되어 있는 13번 디지털 핀입니다.

#define LED_BUILTIN 13
// the setup function runs once when you press reset or power the board
void setup() {
  // initialize digital pin LED_BUILTIN as an output.
  pinMode(LED_BUILTIN, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
  digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(1000);                       // wait for a second
  digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW
  delay(1000);                       // wait for a second
}

디지털 핀 출력 제어 - LED 이색 신호등

측주식 횡형 이색등(수직 기둥(측주식)에 신호등이 가로로(횡형) 2가지 색(이색)으로 된 신호등)은 적색과 녹색의 이색등화로 표시되는 신호등입니다.

신호 순서는 녹색 -> 녹색점멸 -> 적색 순으로 반복하고 신호 시간은 5초 -> 1초 -> 3초 입니다.

1. 12번 디지털 핀과 11번 디지털 핀을 출력 모드로 설정합니다.

void setup() {
  pinMode(12, OUTPUT);
  pinMode(11, OUTPUT);
}

2. 12번 디지털 핀을 digitalWrite()함수로 HIGH를 호출하여 불을 켜고 delay()함수로 5초를 대기하고 12번 디지털 핀을 digitalWrite()함수로 LOW를 호출하여 불을 끕니다. 그리고 delay()함수로 1초를 대기합니다.

11번 디지털 핀을 digitalWrite()함수로 HIGH를 호출하여 불을 켜고 delay()함수로 3초를 대기하고 11번 디지털 핀을 digitalWrite()함수로 LOW를 호출하여 불을 끕니다.

void loop() {
  digitalWrite(12, HIGH);
  delay(5000);
  digitalWrite(12, LOW);
  delay(1000);
  digitalWrite(11, HIGH);
  delay(3000);
  digitalWrite(11, LOW);
}

3. 아두이노 우노 보드의 디지털 핀 왼쪽에 있는 GND로 검정색 M-M 점퍼 와이어를 꼽고 12번 디지털 핀에 녹색 M-M 점퍼 와이어를 꼽고 11번 디지털 핀에 빨간색 M-M 점퍼 와이어를 꼽습니다.

아두이노 high low - adu-ino high low

4. 브레드보드에 음극(-)선에 검정색 M-M 점퍼 와이어를 꼽습니다.

녹색 LED의 음극(-)을 j열 9번에 양극(+)을 j열 10번에 꼽습니다.

그리고 흰색 M-M 점퍼 와이어를 f열 9번 라인에 꼽고 음극(-)선에 꼽습니다.

220옴 저항을 녹색 LED 양극(+)이 꼽혀 있는 f열 10번과 b열 2번에 꼽습니다.

a열 10번에 녹색 M-M 점퍼 와이어를 꼽습니다.

적색 LED의 음극(-)을 j열 13번에 양극(+)을 j열 14번에 꼽습니다.

그리고 흰색 M-M 점퍼 와이어를 f열 13번 라인에 꼽고 음극(-)선에 꼽습니다.

220옴 저항을 적색 LED 양극(+)이 꼽혀 있는 f열 14번과 b열 14번에 꼽습니다.

a열 14번에 빨간색 M-M 점퍼 와이어를 꼽습니다.

아두이노 high low - adu-ino high low

5. 컴파일하고 업로드합니다. 잠시 후 녹색 LED 불이 5초 동안 켜졌다 꺼지고 1초후 적색 LED 불이 3초 동안 켜졌다 꺼지고 다시 녹색 LED 불이 들어 오면서 반복됩니다.

아두이노 high low - adu-ino high low

디지털 핀 출력 제어 - LED 삼색 신호등(시리얼 통신으로 통지)

측주식 횡형 삼색등(수직 기둥(측주식)에 신호등이 가로로(횡형) 3가지 색(삼색)으로 된 신호등)은 적색, 황색, 녹색의 삼색등화로 표시되는 신호등입니다.

신호 순서는 녹색 -> 황색 -> 적색 -> 황색 순으로 반복하고 신호 시간은 5초 -> 2초 -> 5초 -> 2초 입니다.

1. 12번, 11번, 10번 디지털 핀을 출력 모드로 설정합니다. 그리고 시리얼 통신하기 위해서는 Serial.begin()함수를 사용하여 설정합니다.

void setup() {
  pinMode(12, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(10, OUTPUT);
  Serial.begin(9600);
  while(!Serial) {
  }
  Serial.println("Serial Port Connected.");
}

2. 12번 디지털 핀을 digitalWrite()함수로 HIGH를 호출하여 불을 켜고 시리얼 통신으로 신호등 상태가 녹색임을 출력하고 delay()함수로 5초를 대기한 후 12번 디지털 핀을 digitalWrite()함수로 LOW를 호출하여 불을 끕니다.

11번 디지털 핀을 digitalWrite()함수로 HIGH를 호출하여 불을 켜고 시리얼 통신으로 신호등 상태가 주황색임을 출력하고 delay()함수로 2초를 대기한 후 11번 디지털 핀을 digitalWrite()함수로 LOW를 호출하여 불을 끕니다.

10번 디지털 핀을 digitalWrite()함수로 HIGH를 호출하여 불을 켜고 시리얼 통신으로 신호등 상태가 적색임을 출력하고 delay()함수로 5초를 대기한 후 10번 디지털 핀을 digitalWrite()함수로 LOW를 호출하여 불을 끕니다.

11번 디지털 핀을 digitalWrite()함수로 HIGH를 호출하여 불을 켜고 시리얼 통신으로 신호등 상태가 주황색임을 출력하고 delay()함수로 2초를 대기한 후 11번 디지털 핀을 digitalWrite()함수로 LOW를 호출하여 불을 끕니다.

void loop() {
  digitalWrite(12, HIGH);
  Serial.println("Traffic Light : Green");
  delay(5000);
  digitalWrite(12, LOW);
  digitalWrite(11, HIGH);
  Serial.println("Traffic Light : Orange");
  delay(2000);
  digitalWrite(11, LOW);
  digitalWrite(10, HIGH);
  Serial.println("Traffic Light : Red");
  delay(5000);
  digitalWrite(10, LOW);
  digitalWrite(11, HIGH);
  Serial.println("Traffic Light : Orange");
  delay(2000);
  digitalWrite(11, LOW);
}

3. 아두이노 우노 보드의 디지털 핀 왼쪽에 있는 GND로 검정색 M-M 점퍼 와이어를 꼽고 12번 디지털 핀에 녹색 M-M 점퍼 와이어를 꼽고 11번 디지털 핀에 주황색 M-M 점퍼 와이어를 꼽고 10번 디지털 핀에 빨간색 M-M 점퍼 와이어를 꼽습니다.

아두이노 high low - adu-ino high low

4. 브레드보드에 음극(-)선에 검정색을 꼽습니다.

녹색 LED의 음극(-)을 j열 9번에 양극(+)을 j열 10번에 꼽습니다.

그리고 흰색 M-M 점퍼 와이어를 f열 9번 라인에 꼽고 음극(-)선에 꼽습니다.

220옴 저항을 녹색 LED 양극(+)이 꼽혀 있는 f열 10번과 b열 2번에 꼽습니다.

a열 15번에 녹색 M-M 점퍼 와이어를 꼽습니다.

노랑색 LED의 음극(-)을 j열 13번에 양극(+)을 j열 14번에 꼽습니다.

그리고 흰색 M-M 점퍼 와이어를 f열 13번 라인에 꼽고 음극(-)선에 꼽습니다.

220옴 저항을 노랑색 LED 양극(+)이 꼽혀 있는 f열 14번과 b열 14번에 꼽습니다.

a열 14번에 주황색 M-M 점퍼 와이어를 꼽습니다.

적색 LED의 음극(-)을 j열 17번에 양극(+)을 j열 18번에 꼽습니다.

그리고 흰색 M-M 점퍼 와이어를 f열 17번 라인에 꼽고 음극(-)선에 꼽습니다.

220옴 저항을 적색 LED 양극(+)이 꼽혀 있는 f열 18번과 b열 18번에 꼽습니다.

a열 18번에 빨간색 M-M 점퍼 와이어를 꼽습니다.

아두이노 high low - adu-ino high low

5. 컴파일하고 업로드합니다. 잠시 후 녹색 LED 불이 5초 동안 켜졌다 꺼지고 노랑색 LED 불이 2초 동안 켜졌다 꺼지고 적색 LED 불이 5초 동안 켜졌다 꺼지고 노랑색 LED 불이 2초 동안 켜졌다 꺼지고 다시 녹색 LED 불이 들어 오면서 반복됩니다.

아두이노 high low - adu-ino high low

시리얼 모니터를 실행하면 신호등의 현재 등색이 출력됩니다.

아두이노 high low - adu-ino high low