여기에서는 터치센서를 이용하여 디지털 입력 값을 받는 실험을 진행해보도록 하겠다. 시중에서 구할 수 있는 터치센서 모듈의 외형은 다음 그림과 같다.


[그림 1]  터치센서 모듈


터치센서의 금속판을 터치할 때 출력 신호가 바뀐다. 즉, 터치시에 HIGH를 아닐 때는 LOW 신호를 내보낸다.


 이 모듈은 선이 세 가닥이 있다. 두 가닥은 전원선이고 나머지 하나는 신호선이다. 이 신호선을 아두이노의 디지털 핀에 연결하면 되는데 예를 들어서 3번 핀에 연결한다면 다음과 같다.

[그림 2] 터치센서 모듈을 우노의 3번 핀에 에 연결한 모양


 이 모듈의 동작은 간단하다. 터치가 안 되어 있다면 신호선으로 LOW 신호가 나오고 터치가 되었다면 HIGH 신호가 나온다. 따라서 이 디지털 신호를 읽으면 터치 패널에 터치가 되었는지 아닌 지를 판별할 수 있다.


 단순하게 터치가 된 상태라면 LED가 켜진 상태를 유지하고 아니라면 LED도 꺼진 상태를 유지하는 매우 간단한 프로그램을 작성해 보도록 하겠다.


#define TS 3 // 터치센서에 연결된 핀 번호
void setup() {
   pinMode(LED_BUILTIN, OUTPUT);
   pinMode(TS, INPUT);
}
void loop() {
   int iTouched = digitalRead(TS);
   digitalWrite(LED_BUILTIN, iTouched);
}


이것을 더 간단하게 줄이면 다음과 같이 iTouched 변수를 생략할 수 있다.


#define TS 3 // 터치센서에 연결된 핀 번호
void setup() {
   pinMode(LED_BUILTIN, OUTPUT);
   pinMode(TS, INPUT);
}
void loop() {
   digitalWrite(LED_BUILTIN, digitalRead(TS));
}


이 프로그램이 실행되면 터치 상태를 계속 읽어들여서 터치되었다면 LED를 켠다.


아두이노 강좌 전체 목록 (TOP) >>>

C++ 언어 전체 강좌 목록 >>>

c{ard},n{ad009}


Posted by 살레시오
,

 이번에는 부저(buzzer)를 이용한 실험을 해 보겠다. 부저는 소리를 내는 부품으로서 소리 파형을 만들어서 인가하여야 하는 것과 그냥 전압을 걸면 소리가 나는 두 가지 종류가 있으나 실험의 편의상 후자를 택해서 진행한다.


[그림 1] 부저의 외형


부저는 극성이 있으며 조금 긴 다리가 (+)극이고 짧은 쪽은 (-)이다. 극성에 맞게 전압을 걸면 삐~~ 하는 소리가 발생한다. 아두이노 우노의 11번 핀에 부저의 (+)를 꽂으면 (-)핀은 GND에 들어맞게 되어 있다.


[그리 2] 아두이노의 11번 핀에 부저의 (+)를, GND핀에 (-)를 연결했다.


이렇게 연결했다면 부저를 울리는 것은 LED를 동작시키는 것과 똑같다. 단순히 1초 간격으로 삑삑 거리는 프로그램은 다음과 같이 하면 된다.


#define BUZ 11

void setup() {
    pinMode(BUZ, OUTPUT);
}
void loop() {
    digitalWrite(BUZ, HIGH); // 부저가 울리기 시작한다.
    delay(50);
    digitalWrite(BUZ, LOW); // 부저가 멈춘다
    delay(950);
}


이 예제에서는 부저가 울리는 시간을 50ms로 설정했으므로 짧은 시간 동안 ‘삑’하는 소리가 날 것이다. loop()함수 안에 있으므로 이것이 1초 간격으로 반복된다.


 두 번째 예제로 13번 핀에 물려 있는 LED와 조합해서 동작하도록 해보자. LED는 0.5초마다 한 번씩 켜지고 부저는 1초 마다 한 번씩 울리게 해서 마치 타이머처럼 동작하도록 하는 예제이다.


#define LED 13

#define BUZ 11

void setup() {
    pinMode(LED, OUTPUT);
    pinMode(BUZ, OUTPUT);
}
void loop() {
    digitalWrite(LED, HIGH);
    digitalWrite(BUZ, HIGH);
    delay(50);
    digitalWrite(BUZ, LOW);
    delay(200);
    digitalWrite(LED, LOW);
    delay(250);
    digitalWrite(LED, HIGH);
    delay(250);
    digitalWrite(LED, LOW);
    delay(250);
}



Posted by 살레시오
,

 아두이노 우노에는 실습용 LED가 실장되어 있는데 이것은 13번 핀과 연결되어 있다. 아래 그림과 같이 아두이노마크 근처에 위치하고 있다.(빨간 원 안)


[그림 1] 아두이노 우노의 내장 LED


이것을 이용하여 깜박이는 예제는 아두이노 IDE에 미리 탑재되어서 제공되는데 다음과 같이 예제파일을 선택하여 읽어들일 수 있다.


[그림 2] Blink 예제 읽어들이기


소스코드는 다음과 같다. (주석문은 삭제하였다.)


int led = 13;
void setup() {
   pinMode(led, OUTPUT);
}
void loop() {
   // turn the LED on (HIGH is the voltage level)
   digitalWrite(led, HIGH);
   delay(1000); // wait for a second

   // turn the LED off by making the voltage LOW

   digitalWrite(led, LOW);
   delay(1000); // wait for a second
}


이 예제의 구조를 살펴보면 먼저 눈에 띄는 것이 있는데 setup() 함수와 loop() 함수이다. 이 두 함수는 아두이노 프로그램의 전체적인 구조를 잡아주는 역할을 한다.


    ⁎ setup() 함수

       • 아두이노 프로그램이 실행될 때 맨 처음에 단 한 번 호출되어 수행된다.

       • 따라서 여기에 각종 장치를 초기화하거나 초기값을 설정하는 코드가 오게 된다.


    ⁎ loop() 함수

        • setup()함수 실행 후 수행되면 계속 반복 수행된다.

        • 아두이노에 연결된 장치들을 구동시키는 코드가 위치한다.


setup()함수 내에서 pinMode()함수를 사용하는데 이 함수는 핀을 입력(INPUT) 혹은 출력(OUTPUT)으로 사용할 지를 설정하는 함수이다. 첫 번째 인자로 핀의 번호가 두 번째 인자로 INPUT, 혹은 OUTPUT이라는 상수를 넘겨주면 된다. pinMode(led, OUTPUT) 은 led(13번)을 출력(OUTPUT)으로 사용하겠다고 설정하는 것이다.


   ⁎ pinMode(pinNumber, INPUT/OUTPUT) 함수

       • pinNumber 핀을 입력(INPUT) 혹은 출력(OUTPUT)으로 사용할 지를 지정한다.

       • pinNumber는 우노의 경우 0,1,2, … 13, A0, A1, ...A6 중 하나이다.


loop()함수에서는 digitalWrite()함수를 사용했는데 이 함수는 핀으로 출력값을 내보내는 작업을 수행한다. 첫 번째 인자로 핀 번호를 받고 두 번째 인자로 HIGH 혹은 LOW 상수를 받는다. digitalWrite(led, HIGH) 명령은 led 핀에 HIGH 신호를 내보내므로 LED가 켜지게 된다. 반대로 digitalWrite(led, LOW) 명령은 led 핀에 LOW 신호를 내보내므로 LED가 꺼지게 된다.


    ⁎ digitalWrite(pinNumber, HIGH/LOW) 함수

         • pinNumber 핀이 출력일 경우에 사용한다.

         • 1값을 내보낼지 (HIGH) 0값을 내보낼지(LOW)를 지정한다.


delay()함수는 입력된 시간만큼 아무 일도 안하고 멈춰있는 동작을 수행한다. delay(1000)은 1000ms 동안 지연시키는 것이다. 입력받는 숫자는 ms 단위이다.


    ⁎ delay(time) 함수

         • time ms 만큼 지연 (아무런 일도 안 하고 멈춰있음)한다.


이 함수의 입력 인자가 밀리세컨드(ms) 단위임을 유의해야 한다.


아두이노 강좌 전체 목록 (TOP) >>>

C++ 언어 전체 강좌 목록 >>>

c{ard},n{ad007}

Posted by 살레시오
,