닭치고 아두이노 4 아두이노구조와 프로그램설명(Arduino About)
기초적인 아두이노 코딩과 작동을 해보는 시간입니다. 교재 내용을 꼼꼼히 읽어보시기 바랍니다. 교재 내용 좋으면 좋아요 구독 해 주세요. 아두이노 설치부터 차근 차근 공부해서 나중에 자율자동차, 드론제작 등을 실습을 해 보도록 해봅시다. 프로그램 언어는 C 언어입니다. 교재는 네이버 카페 백년지계 에 올리도록 하겠습니다. 책과 아두이노 키트를 구매코자 하시는 분은 시중에서 파는 아두이노, 상상을 현실로 만드는 프로젝트 입문편을 사시면 모두 구매 하실 수 있습니다.
[동영상강의]
아두이노 구조와 프로그램 설명
아두이노 구조
아두이노 구조를 모두 설명 하는 것이 아니라 3강에서 진행했던 것중 관련된 것들만 설명합니다. 앞으로 이런 식으로 관련된 부분을 강의를 하면 그 상황에 맞는 구조를 설명할 것입니다.
프로그램 설명도 마찬가지입니다.
제가 강의하는 데 사용한 아두이노 우노(ARDUINO UNO)는 아트멜(Atmel) 이라는 회사에서 만든 아트메가(Atmega)라느 프로세서를 사용합니다. 프로세서는 사람의 뇌와 같은 역할을 합니다. 좀 더 깊은 뜻은 지금은 알 필요가 없습니다. 만약 프로그램 언어를 다루거나 거기에 관련된 공부를 하신 분들은 그냥 이해를 하실 겁니다. 아니신 분들은 그냥 그런 용어가 있구나 정도로만 생각하시면 됩니다.
여하간 이 두뇌 역할을 하는 아트메가는 5V 에 동작을 합니다.
다른 모델들로는 아두이오 DUE, 아두이노 ZERO 가 있습니다. 이것들은 암(ARM) 이라는 프로세서를 사용하는데 스마트폰에 들어가는 프로세서들이 거의 암이 들어갑니다. 이 암은 3.3V 에 작동하기 때문에 아두이오 DUE, 아두이노 ZERO 사용시 3.3V 보다 큰 전압을 연결하면 보드가 망가질 수 있습니다. 주의해야 겠죠.
이번 시간의 설명은 구조라기 보다는 우리가 UNO 를 사용하니 아두이노 종류만 다뤘습니다.
여러가지 부품들을 사용하거나 본격적으로 전압을 사용하게 되면 거기에 맞는 설명들을 또 하겠습니다.
프로그램 설명
3강에서 배웠던 Blink.ino 를 설명하겠습니다.
/* 이 표시가 C 언어에서 사용하는 주석입니다.
이것은 여러 줄을 주석(설명) 할 때 사용하는 표시입니다.
Blink
Turns an LED on for one second, then off for one second, repeatedly.
Most Arduinos have an on-board LED you can control. On the UNO, MEGA and ZERO
it is attached to digital pin 13, on MKR1000 on pin 6. LED_BUILTIN is set to
the correct LED pin independent of which board is used.
If you want to know what pin the on-board LED is connected to on your Arduino
model, check the Technical Specs of your board at:
https://www.arduino.cc/en/Main/Products
modified 8 May 2014
by Scott Fitzgerald
modified 2 Sep 2016
by Arturo Guadalupi
modified 8 Sep 2016
by Colby Newman
This example code is in the public domain.
http://www.arduino.cc/en/Tutorial/Blink
이렇게 설명이 끝날 때도 표시를 해 줍니다.
이 부분이 필요 없다고 생각 되시면 지우시면 됩니다. */
// 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
//1000 : 1000밀리세컨드 = 1초 이므로 3000 으로 바꾸면 3초 간격으로 깜빡입니다.
digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}
그럼 지워보겠습니다.
// the setup function runs once when you press reset or power the board
//setup 은 당신이 리셋 하거나 보드에 전원을 넣으면 한 번 실행 됩니다.
//위의 영어를 번역을 해 보았습니다.
//setup 은 설치하다, 설정하다 라는 뜻인데 초기 설정과 관련된 코드들을 setup 함수 안
//에 넣으면 됩니다.
//setup(), loop() 이런 것들을 함수라고 부릅니다. 지금은 그냥 이런 것들이 함수라는
//것이구나 라고만 아시면 됩니다.
//setup() 함수 앞에 void 가 보이는 데요. 이것은 setup()이라는 함수가 끝날 때 아무
//값도 어느 곳에도 전달하지 않는 다는 뜻입니다.
//단순한 코드만 실행하는 경우 void 라고 함수명 앞에 적으시면 됩니다.
void setup() {
// initialize digital pin LED_BUILTIN as an output.
pinMode(LED_BUILTIN, OUTPUT);
}
// the loop function runs over and over again forever
// setup 함수가 한번 실행하고 나면 loop() 함수가 무한히 반복 실행됩니다.
//loop 뜻이 무한 반복이라는 뜻입니다.
//그러므로 실제로 우리가 구현하고자 하는 아두이노 동작 코딩을 loop() 함수에
//넣습니다.
void loop() {
digitalWrite(LED_BUILTIN, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
//1000 : 1000밀리세컨드 = 1초 이므로 3000 으로 바꾸면 3초 간격으로 깜빡입니다.
digitalWrite(LED_BUILTIN, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}
아두이노 구조- 디지털
pinMode가 있는데 이것을 알기 위해서는 아두이노 구조를 좀 알아야 합니다.
아두이노를 제어하는 방식은 크게 디지털(digital)과 아날로그(analog) 2가지 방식이 있습니다.
디지털 하면 우리가 잘 알고 있는 2진법인 0, 1 을 생각하시면 됩니다. 스위치를 껐다 켰다 하는 디지털 신호를 제어하는 것이 디지털 핀입니다.
아두이노 UNO 의 경우 DIGITAL 이라 표시된 곳에 0부터 13까지 숫자가 적혀 있는 핀(Pin)들을 볼 수 있습니다.
이 디지털 핀들을 통해 디지털 신호를 제어할 수 있습니다.
디지털 핀에 전기를 연결하거나 끊어주는 것이 디지털 출력 입니다.
디지털 핀으로 전기가 들어오는지 안들어오는지 확인하는 것이 디지털 입력입니다.
0부터 13이라는 숫자는 디지털 핀들의 고유 이름입니다.
이 숫자들을 프로그램할 때 사용함으로써 해당 숫자의 핀들을 디지털 출력으로 사용할 지 디지털 입력으로 사용할 지 결정할 수 있습니다.
그리고 초보자들은 0번과 1번은 사용하지 않는 것이 좋습니다.
0번과 1번은 컴퓨터 통신하는 부분과 연결되어 있기 때문에 잘못 사용하면 이상하게 작동을 할 수 있습니다. 그러므로 2번부터 13번까지 만 사용하세요.
프로그램 설명
void setup() {
// initialize digital pin LED_BUILTIN as an output.
// 디지털 핀 LED_BUILTIN 을 출력으로 초기화합니다.
pinMode(LED_BUILTIN, OUTPUT);
}
디지털 핀을 사용할 때는 처음에 디지털 핀을 입력 용도로 사용할지 출력 용도로 사용할 지
설정
해야 합니다.
설정이라는 단어가 나왔죠. setup 뜻이 설정하다였죠. 설정과 관련된 것들은 여기다 넣어야 되니 디지털 핀을 출력인지 입력인지 설정하는 것은 setup() 함수 안에 넣으면 되겠네요.
이때 사용하는 함수가 pinMode 입니다.
pinMode 함수는 2개의 매개변수가 필요합니다.
매개변수는 그냥 함수에 넣는 값들이라고만 생각하세요.
그러므로 위의 코드에서는 pinMode 라는 함수에 LED_BUILTIN 와 OUTPUT 을 넣는 다는 뜻입니다. 간단하죠. 깊은 이론은 지금 할 필요가 없습니다. 지금은 그런거구나 라고만 생각하시면 됩니다.
pinMode 의 첫번째 매개변수 LED_BUILTIN 이 있는 자리가 핀이름이 오는 곳입니다.
0부터 13 숫자를 적는 다는 뜻입니다.
LED_BUILTIN 은 내장 LED 를 말합니다. 그래서 blink.ino 는 내장 LED를 깜빡이게 한 거죠.
pinMode 는 핀이름, 상수의 두개의 매개변수를 받습니다.
pinMode(핀이름, 상수)
그런데 blink.ino 에서는 숫자 대신 LED_BUILTIN 을 사용하였죠.
이유는 LED_BUILTIN (내장 LED) 은 13번과 연결되어 있으므로 13 대신 LED_BUILTIN 을
적은 겁니다.
pinMode(13, OUTPUT) 해도 된다는 뜻입니다.
상수는 OUTPUT, INPUT 이 있는데 OUTPUT 은 1 값을 가진 숫자로 봐도 상관없습니다.
마찬가지로 INPUT 은 0값을 가진 상수입니다.
그러므로 blink.ino 에서 pinMode(LED_BUILTIN, OUTPUT) 를 pinMode(13, 1)
로 해도 된다는 소리입니다.
void setup() {
pinMode(13, 1);
}
그럼 진짜로 잘 되는지 확인을 해 보겠습니다.
프로그램을 수정 후 USB B선 연결하고 [확인]-[업로드] 하겠습니다.
// the setup function runs once when you press reset or power the board
void setup() {
// initialize digital pin LED_BUILTIN as an output.
pinMode(13, 1); // 수정
}
// 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(3000); // wait for a second
}
잘 작동하는 것을 볼 수 있습니다.
// 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(3000); // wait for a second
}
digitalWrite 함수는 디지털 신호를 출력할 때 사용합니다.
digitalWrite 는 2개의 매개변수가 필요한데 첫 번째는 디지털 신호를 출력할 핀 번호이고, 두 번째는 디지털 신호를 내보낼지 안 내보낼지 알려주는 값입니다.
첫 번째 매개변수가 LED_BUILTIN 이므로 내장 LED 인 13번 핀을 사용하겠다는 뜻이죠.
이게 이해가 팍팍 오시죠.
두 번째 매개변수는 HIGH 또는 LOW 가 옵니다 .
HIGH 는 1을 뜻하고, LOW 는 0을 뜻합니다.
HIGH 는 전압이 5V 가 되면서 전기가 흘러 가고, LOW 는 전압이 0V 가 되어서 전기가 흐르지 않습니다.
digitalWrite(LED_BUILTIN, HIGH) 은 LED_BUILTIN 인 내장 LED 에 해당하는 13번 핀을
HIGH 즉 5V 전압을 넣어 전기가 흐르게 하여 digitalWrite 출력하는 것이겠죠.
delay(1000) 으로 1초 동안 켜져 있게 만들고 1초후
digitalWrite(LED_BUILTIN, LOW)은 LED_BUILTIN 인 내장 LED 에 해당하는 13번 핀을
LOW 즉 전압을 0V 즉 전기를 끊어 버리게 한 후 digitalWrite 출력하는 것이겠죠.
delay(3000) 으로 3초 동안 전기가 끊긴 상태가 되니 내장 LED가 3초 동안 꺼져 있는 것입니다.
이것이 loop 무한 반복 되니 3초후 다시 1초 동안 켜지고 1초 후 3초 동안 꺼지는 반복이 계속 되는 것입니다.
프로그램 문법의 자세한 설명은 한꺼번에 못하니 이렇게 아두이노 프로젝트를 진행하면서 그때 그때 설명을 하겠습니다. 이렇게 하면 지루하지도 않고 한꺼번에 너무 많은 것을 안해도 되겠죠?
수고 많았습니다. 구독 좋아요 꼭 눌러 주세요. 큰 힘이 됩니다.
'Arduino > 닭치고 Arduino' 카테고리의 다른 글
닭치고 아두이노 6 LED 켜기(LED) (2) | 2020.04.06 |
---|---|
닭치고 아두이노 5 시리얼통신(Serial Communication) (0) | 2020.03.01 |
닭치고 아두이노 3강 기본LED깜빡이기(Arduion LED Blink) (0) | 2020.03.01 |
닭치고 아두이노 2강 IDE 살펴보기(Arduino IDE) (0) | 2020.03.01 |
닭치고 아두이노 1강 아두이노 설치(Arduion Setup) (0) | 2020.03.01 |
댓글