오늘부터 아두이노 기초 실습을 시작합니다. 실습은 개인 학습을 위해 "주) 엘케이 임베디드" 사이트에서 구매한 아두이노 코딩 배우기 고급 키트를 이용한 학습입니다. 동봉된 책을 기반으로 학습하면서 개인적인 궁금증과 추가 필요한 부분을 정리한 블로그임을 미리 알려드립니다
<준비물>
아두이노 우노 R3 : 1개
USB 케이블 : 1개
점퍼 케이블(숫숫) : 17개가량
브레드 보드 : 1개, 830홀 사용
텍트 스위치 : 5개
LED : 5개
저항 : 220Ω 5개, 10KΩ 5개
동작은 위의 스위치를 누르면 각각의 LED가 점등하는 아주 간단한 실습입니다. 우선 Tinkercad 회로 구성을 해보았습니다
팅커캐드 링크입니다 : https://www.tinkercad.com/things/euDnwP2hRzb
<참고 지식>
⦿ 아두이노 스케치에 지원하는 개발언어
개발언어는 C언어이다. C언어는 순차 지향적 언어이기 때문에 좌에서 우로, 위에서 아래로 코드를 실행합니다.
⦿ LED(Light Emitting Diode) 발광 다이오드
전류가 흐르면 빛을 방출하는 다이오드로 전기 에너지를 빛 에너지로 바꾸어 주는 대표적인 반도체 소자입니다.
LED는 허용치보다 높은 전류가 흐르면 쉽게 손상될 수 있어 이를 방지하기 의해 회로도에 과전류 보호 저항 220Ω을 추가해 사용합니다.
LED는 극성이 있어 연결 시 주의해야 합니다. 핀이 긴 쪽이 Anode(+)이고 짧은 쪽이 Cathode(-) 극성입니다. 다리의 길이가 같다면 "1"자가 Anode, "ㄱ"자가 Cathode입니다.
⦿텍트 스위치(Tact-Switch)
텍트 수위 치는 버튼을 누를 때 프로세서에 입력 신호를 주는 부품으로 각종 전자제품에 많이 사용됩니다
일반 상태에서는 1번과 2번이, 3번과 4번이 도통 상태(연결 상태)이고 스위치를 누르면 1,2,3,4번이 모두 도통 상태가 되는 부품입니다.
평상시 1,2번과 3,4번은 도통 상태라 회로 구성시 유의하시기 바랍니다.
⦿풀업, 풀다운 저항(Pull-up, Pull_Down Resistor)
칩에 전류를 흐르게 했을 때, 회로의 칩은 디지털 신호로 1 혹은 0을 구분하는데 이를 구분하지 못하는 애매한 상태를 플로팅 현상(Floating)이라 합니다. 이는 주변 전기장의 상태에 따라 입력값이 불안정하게 변해 칩이 전압을 정확하게 인식하지 못해 발생합니다. 이를 해결하기 위한 것이 풀업/풀다운 저항입니다.
위 회로에서 만일 VCC와 GND에 접속된 R1과 R2저항이 없다면 D8과 D9라인에는 어떠한 전압 신호가 걸릴까요? 이때 스위치를 누르지 않았을 때 신호가 플로팅 되어 하이도 로우도 아닌 불확실한 상태가 됩니다 이를 방지하고자 R1에는 Pull up 저항을 R2에는 Pull Down 저항을 추가해서 평상시 상태를 규정지어 디지털 신호를 바로 잡은 수 있습니다. 풀업, 다운 저항으로는 4.7KΩ과 10KΩ의 저항을 주로 사용합니다.
✼풀업, 풀다운 저항(Pull-up, Pull_Down Resistor)에 대하여서는 추후 따로 다루어볼까 합니다. 이번에는 플로팅 현상이라는 것이 있고 그것 예방하는 것이 풀업 풀다운 저항 아다 정도로만 이해 부탁합니다.
⦿브레드보드(Breadboard)
납땜 없이 쉽게 회로를 구성 테스트할 수 있는 부품입니다. 자세한 내용이 필요하시면 저가 따로 작성한 내용 링크 참조하세요
https://coding-sinki.tistory.com/9
브레드 보드(Bread Board : 빵판)
브레드보드, 다른 말로 빵판이라고 하는 전자 회로 테스트 도구입니다. 전자 회로 개발, 연구, 학습 시 납땜을 하지 않고 와이어링만으로 전자 회로를 구성, 동작 테스터, 및 계측 등을 하기 위한
coding-sinki.tistory.com
<실습 코드>
// 변수 지정
int led0_Pin = 0; //1번째 LED
int led1_Pin = 1; //2번째 LED
int led2_Pin = 2; //3번째 LED
int led3_Pin = 3; //4번째 LED
int led4_Pin = 4; //5번째 LED
int button0_Pin = 8; // 1번째 스위치
int button1_Pin = 9; // 2번째 스위치
int button2_Pin = 10; // 3번째 스위치
int button3_Pin = 11; // 4번째 스위치
int button4_Pin = 12; // 5번째 스위치
void setup() //pin 모드 설정
{
pinMode(led0_Pin, OUTPUT); //1번째 LED 핀출력 포트 설정
pinMode(led1_Pin, OUTPUT); //2번째 LED 핀출력 포트 설정
pinMode(led2_Pin, OUTPUT); //3번째 LED 핀출력 포트 설정
pinMode(led3_Pin, OUTPUT); //4번째 LED 핀출력 포트 설정
pinMode(led4_Pin, OUTPUT); //5번째 LED 핀출력 포트 설정
pinMode(button0_Pin, INPUT); //1번째 수위치핀입력 포트 설정
pinMode(button1_Pin, INPUT); //2번째 수위치핀입력 포트 설정
pinMode(button2_Pin, INPUT); //3번째 수위치핀입력 포트 설정
pinMode(button3_Pin, INPUT); //4번째 수위치핀입력 포트 설정
pinMode(button4_Pin, INPUT); //5 번째 수위치핀입력 포트 설정
}
/*스위치를 누를 시에 LED가 켜지도록 한다 */
void loop() //무한 루프
{
if (digitalRead(button0_Pin) == LOW) //1번째 스위치를 누르면
{digitalWrite(led0_Pin, HIGH); //1번째 LED ON
}
else digitalWrite(led0_Pin, LOW); //1번째 LED OFF
if (digitalRead(button1_Pin) == LOW) //2번째 스위치를 누르면
{digitalWrite(led1_Pin, HIGH); //2번째 LED ON
}
else digitalWrite(led1_Pin, LOW); //2번째 LED OFF
if (digitalRead(button2_Pin) == LOW) //3번째 스위치를 누르면
{digitalWrite(led2_Pin, HIGH); //3번째 LED ON
}
else digitalWrite(led2_Pin, LOW); //3번째 LED OFF
if (digitalRead(button3_Pin) == LOW) //4번째 스위치를 누르면
{digitalWrite(led3_Pin, HIGH); //4번째 LED ON
}
else digitalWrite(led3_Pin, LOW); //4번째 LED OFF
if (digitalRead(button4_Pin) == LOW) //5번째 스위치를 누르면
{digitalWrite(led4_Pin, HIGH); //5번째 LED ON
}
else digitalWrite(led4_Pin, LOW); //5번째 LED OFF
}
<함수 설명>
⦿ setup()
setup 함수는 아두이노에 전원을 인가하면 코드를 단 한 번만 실행하는 함수로 실행한 후에는 더 이상 setup함수를 호출 및 실행하지 않습니다. 이러한 동작 때문에 아두이노 스케치 코딩 시 핀의 입력, 출력 설정 및 부가적인 레지스터를 설정할 때 사용하는 함수입니다.
⦿ loop()
loop 함수는 문장을 반복한다는 뜻입니다. C언어에서는 while(1) 혹은 for(;;)에 해당하는 조건 반복문과 같은 동작을 합니다. 아두이노에서는 setup 함수가 실행돼 후 loop함수 안에 있는 코드가 실행되며 loop함수 내에서는 주변 기기를 제어할 동작, 연산 등 계속해서 반복해야 하는 코드를 작성하면 됩니다. 또한 다른 함수를 호출하거나 인터럽트가 걸리더라도 잠시 loop 함수를 벗어나 처리하고 다시 loop 함수로 돌아와 동작을 계속 반복 실행합니다.
⦿ pimMode(pin no, mode)
핀의 번호 및 입출력 방향을 설정하는 함수입니다. 핀을 입력으로 사용할지 아니면 출력으로 사용할 것인지를 설정할 수 있습니다. pin no는 핀번호 숫자 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, A0, A1, A2, A3, A4, A5 중에 선택하여 입력합니다. mode는 입출력 방향을 의미하며 핀을 출력으로 사용 시 OUTPUT, 입력으로 사용 시에는 INPUT으로 설정하면 됩니다.
⦿ digitalWrite(pin no, Value)
핀에 하이 혹은 로우 신호를 출력할 때 설정하는 함수입니다, pin no에 번호를 출력할 핀으로 선택하고 Value에 HIGH 혹은 LOW를 입력하여 출력할 신호가 하이인지 로우인지를 정해주는 함수입니다.
⦿ digitalRead(pin no)
입력된 핀번호의 핀의 신호를 읽어 들여 1 혹은 0으로 변환해주는 함수입니다. 핀에서 신호를 읽어 들일 때에는 전압에 의해서 하이 혹은 로우 신호를 감지하며 5V일 때에는 1, 0V일 때는 0의 논리 값으로 함수를 통해 반환됩니다.
< 실습 정리>
⦿ 하이 혹은 로우 신호?
디지털 신호 체계에서 하이 혹은 로우 신호는 자주 나오는 단어이다. 현재 우리가 사용하는 대부분의 전자회로 시스템은 디지털 시스템입니다. 디지털을 사용하는 이유는 아날로그에 비해 잡음에 강하고 신호처리가 쉽기 때문입니다. 또한 임베디드 시스템에서는 디지털을 이용해 초소형의 제품을 만들 수 있고 비용도 굉장히 저렴합니다,
디지털은 on과 off 혹은 0과 1 두 가지의 상태만을 갖고 있으며 이 두 가지의 상태로 데이터를 전송하고 조작할 수 있습니다.
ON | OFF | |
논리값 | 1 | 0 |
전압 | 5V | 0V |
신호 | High | Low |
위의 표와 같이 아두이노 우노 R3에 사용된 atmega328P마이크로 컨트롤러에서는 on은 1과 같으며 High로 표현하고 off는 0과 같으며 low신호로 표현됩니다. 이들 신호 로직 레벨은 일반적으로 동작전압의 크기에 의해 결정됩니다. 5V 전원을 메인전원으로 사용되는 우노의 로직레벨은 입력 신호 시 1.5V 이하의 전압을 low로 인식하고 3V이상의 전압을 high호 인식합니다 반대로 출력신로는 로우신호일 때 0.9V 이하의 전압을 출력하고 하이 신호일때 4.2V 이상의 전압을 출력합니다.
'Arduino > Arduinio기초 실습' 카테고리의 다른 글
6장. 7세그먼트(7 Segment. FND), 스위치 실습 (0) | 2022.04.04 |
---|---|
5장. 가변저항 10K 실습 (0) | 2022.04.02 |
4장. 시리얼 통신 실습 (0) | 2022.04.02 |
3장. 74HC595, LED 실습 (0) | 2022.04.01 |
2장. 3색 LED 실습 (0) | 2022.03.27 |