공대생과 공부하기/전기공학 실험 보고서

[전기전자공학 실험] 아두이노 마이크로 프로세서 기본 및 환경 세팅 : 예비보고서

전기과 팡팡이 2019. 8. 1. 19:46
728x90
 

1. 개요

 마이크로 프로세서의 기본 개념을 익히고, 사용할 마이크로 프로세서 보드의 스펙 및 상세정보 확인 방법을 습득한다. 또한 개발 환경을 세팅하고 기초 예제를 통해 정상 작동을 체크한다.

 

2. 관련 이론

Micro Controller Unit (MCU)

 이것은 마이크로프로세서와 입출력 모듈을 하나의 칩으로 만들어 정해진 기능을 수행하는 컴퓨터를 말한다.

 CPU 코어, 메모리 그리고 프로그램 가능한 입/출력을 가지고 있다. NOR 플래시 메모리, EPROM 그리고 OTP ROM 등의 메모리를 가지고 있어 정해진 기능을 수행하도록 프로그래밍 코딩하고 이 기계어 코드를 써넣는다. 기계어 코드가 실행되기 위한 변수나 데이터 저장을 위해 적은 용량의 SRAM을 가지고 있다.기타 칩에 따라 EEPROM을 내장하기도 한다.

 MCU는 임베디드 애플리케이션을 위해 디자인되었으며 임베디드 시스템에 널리 상용된다. 개인용 컴퓨터가 다양한 요구에 따라 동작하는 일반적인 일에 사용된다면, MCU는 기능을 설정하고 정해진 일을 수행하도록 프로그래밍되어 장치 등에 장착되어 동작한다.따라서 일반적으로 성능이 PC에 비해 낮고 형상도 다른다.한 번 프로그래밍하면 코드를 나중에 바꿀 일이 거의 없기 때문에 냉장고,전자레인지 등의 기기에 사용된다.

 

AVR

 아트멜 AVR(Atmel AVR)1996년 아트멜 사에서 개발된 하버드 구조로 수정한 8비트 RISC 단일칩 마이크로컨트롤러이다. 출시 당시 AVR은 프로그램을 저장하기 위해 이용한 메모리 방식을 다른 마이크로컨트롤러처럼 ROM, EPROM 또는 EEPROM을 사용하지 않고, 단일칩 플래시메모리를 사용한 최초의 마이크로컨트롤러 중 하나이다.

 AVR은 중앙처리장치와 소용량 플래시메모리가 하나의 IC에 집적되어 있다. AVR 하버드구조(Harvard architecture)의 변형 형태로 프로그램과 데이터 메모리가 분리된 형태이다. 특수 명령어로 프로그램 데이터를 데이터 영역으로 읽을 수 있다.

 

아두이노

 아두이노(이탈리아어: Arduino)는 오픈 소스를 기반으로 한 단일 보드 마이크로컨트롤러로 완성된 보등(상품)와 관련 개발 도구 및 환경을 말한다. 2005년 이탈리아의 IDII에서 하드웨어에 익숙하지 않은 학생들이 자신들의 디자인 작품을 손쉽게 제어할 수 있게 하려고 고안된 아두이노는 처음에 AVR을 기반으로 만들어졌으며, 아트멜 AVR계열의 보드가 현재 가장 많이 판매되고 있다. ARM계열의 Cortex-M0(Arduino M0 Pro)Cortex-M3(Arduino Due)를 이용한 제품도 존재한다. [출처: 위키백과]

실험에서 활용한 아두이노 우노 보드는 MCUAVR ATMEGA328을 사용하고 있으며 다음과 같은 회로도로 구성되어 있다.

실제 보드에 각 입력 및 출력 단자는 다음 그림과 같이 배치되어 있다.

그림  4.  아두이노 우노 보드 입출력 단자 배치

 

기본적인 아두이노 활용 과정 요약

 1. 아두이노와 주변 장치(보통 만능 기판 혹은 브레드보드를 통해 결선)를 연결

 2. 아두이노와 PCUSB연결하고, PC에서 아두이노 통합 개발 환경(IDE)을 실행

 3. 소스코드(스케치)를 작성

 4. 소스코드를 컴파일(기계어 번역)

 5. 오류 발생시 3으로 돌아가 디버깅

 6. 컴파일 완료 후 아두이노에 업로드

 7. 아두이노 및 주변 장치가 의도한 대로 동작하는지 확인

 8. 문제 발생시 3으로 돌아가 디버깅

 

3. 실험 기기

랩톱 PC, 아두이노우노 보드, 브레드보드, 전선, 저항, LED, 디지털 테스터

 

4. 예비 보고서

1) 인터넷 검색을 통해 아두이노 우노 및 MCU의 기본정보를 확인하고, 다음 표를 완성하시오.

정보
Digital I/O 핀 개수 14(PWM기능 6핀 포함)
Analog I/O 핀 개수 6
전원 입력 전압 범위 Recommended 7~12V Limits 6~20V
MCU 동작 전압 범위 3.3V, 5V 
플래시 메모리 크기 32KB of which 0.5KB used by bootloader
클럭 주파수 16MHz
MCU 작동 온도 범위 -40ºC~125ºC

 

2) 아두이노 우노의 Digital I/O 핀을 통해 출력되는 전압 및 최대 전류에 관한 정보와 LED 소자의 정보를 수집한 후 그 정보들을 토대로 다음 회로의 저항 값(또는 값의 범위)를 정하고 그 이유를 논리적으로 설명하시오. (그림의 저항값은 무시)

 

(아두이노 핀 데이터 시트)

아두이노 핀 최대출력
I/O  최대 40mA
5V 출력핀

USB 전원 사용시: 200mA

외부전원 사용시: 7V까지 400mA

* 7V 이상으로 올라가면 레귤레이터의 열이 발생되어 출력은 낮아진다.

3.3V 출력핀  150mA

* 5V에서 분기되어 나오므로 3.3V 출력핀에서 끌어 쓴 만큼의 전류 감소를 고려해야 한다.

 

(LED 데이터 시트)

색상 구분 최소전압 최대전압 전류(일반) 전류(최대)
Red 1.8V 2.3V 20mA 50mA
Orange 2.0V 2.3V 30mA 50mA
Real Yellow 2.0V 2.8V 20mA 50mA
Emerald Green 1.8V 2.3V 20mA 50mA
Real Green 3.0V 3.6V 20mA 50mA
Sky Blue 3.4V 3.8V 20mA 50mA
Real Blue 3.4V 3.8V 20mA 50mA
Pink 3.4V 3.8V 20mA 50mA
White 3.4V 4.0V 20mA 50mA

위의 회로에서 LED를 적색이라고 했을 때, 저항값은 최소 160이어야 한다.

5V의 전원이 인가되었을 때 저항의 써서 LED에 걸리는 전압을 낮추어야 한다. 그 때 저항의 최소값을 구할 때 옴의 법칙을 이용해 알 수 있다. [저항값=(입력전압-LED를 켜기 위한 최소전압)/전류] 때문에 160보다 낮은 저항값을 쓰게 되면 LED에 더 많은 전류가 흐르게 되고 LED의 허용전류를 벗어나면서 고장나게 된다.

 

3) 다음 기본 이론들을 복습하고, 3page 내외로 요약 정리하시오.

* 브레드보드의 구조 및 사용법

 브레드 보드에서 파란색 선과 빨간색 선이 지나가는 부분을 버스부분이라고 부르고 빨간색은 +, 파란색은 전원 선을 연결한다. 중간에 세로로 5칸씩 구멍이 있는데 이부분을 IC영역/부품영역이라고 하고 부품을 꼽는 영역이다. 부품영역에 위아래로 5칸씩 되어있는데, 이것은 위아래 서로 5칸씩 격리되어 있고 위에 5칸과 아래5칸은 서로 전기가 통하지 않는다. 각 영역은 선으로 표시되어 있는 것처럼 브레드 보드 내부에 스트립으로 연결되어 있음을 표시한다.

 

* 기본 논리 회로 요소(NOT, AND, OR, NAND, NOR, XOR, XNOR )

 

* C 언어 변수형(char, unsigned char, int, unsigned int, long, unsigned long )

C 프로그램 내에서 변수의 이름은 다음과 같은 규칙을 따른다.

 - 변수의 이름은 문자, 숫자, 밑줄 (_)을 포함할 수 있다.

 - 변수의 이름에서 첫 번째 문자는 영문자(letter)가 되어야 한다. 또한 밑줄을 첫 번째 문자로 사용할 수 있지만 가능하다면 사용하지 않는 것이 좋다.

 - 대문자나 소문자의 구분에는 중요한 차이가 있다. countCount라는 이름은 서로 다른 변수이다.

 - C의 키워드를 변수의 이름으로 사용할 수 없다. 키워드는 C 언어의 일부분으로 사용되는 명령어를 말한다.

 

C의 숫자 변수는 크게 다음과 같은 두 가지 종류로 구분할 수 있다.

 - 정수형 변수는 소수 부분이 전혀 없는 값을 저장한다. , 음수와 0, 양수만으로 구성되는 값을 가진다. 정수형 변수는 다시 두 가지로 나누어진다. 부호 있는 정수형 변수는 양수나 0, 음수를 모두 저장할 수 있지만, 부호 없는 정수형 변수에는 0과 양수만을 저장할 수 있다.

 - 부동 소수형 변수는 소수 부분을 가지는 숫자를 저장하는 변수이다. , 실수가 저장된다.

변수의 이름 키워드 메모리의 양(Byte) 값의 범위
문자형 char 1 -128~127
정수형 int 2 -32,768 ~ 32,767
short형 정수 short 2 -32,768 ~ 32,767
long형 정수 long 4 -2,147,483,648 ~ 2,147,438,647
부호 없는 문자형 unsigned char 1 0 ~ 255
부호 없는 정수형 unsigned int 2 0 ~ 65,535
부호 없는 short형 정수 unsigned short 2 0 ~ 65,535
부호 없는 long형 정수 unsigned long 4 0 ~ 4,294,967,295
단정도 부동 소수형 float 4 1.2E-38 ~ 3.4E38
배정도 부동 소수형 double 8 2.2E-308 ~ 1.8E308

 

* C 언어 기본 연산자 (산술, 대입, 논리, 비교, 비트 연산자 등)

 

- 대입 연산자

a = 1;

오른쪽의 값인 1을 왼쪽의 a라는 변수에 넣는다. 이와 같이 오른쪽을 왼쪽에 대입하는 역할을 한다.

 

- 산술 연산자

 

- 관계 연산자: 두 값의 크기를 비교하는 연산을 한다.

 

- 논리 연산자: 두 값을 해당하는 논리로 연산한다.

 

- 할당 연산자: 대입연산과 산술연산을 줄여서 같이 쓰는 경우에 쓰인다.

 

- 삼항 연산자

조건 ? 참일 때의 값 : 거짓일 때의 값;

이런 형식이며, ‘?’ 왼쪽의 조건이 이면 ‘:’의 왼쪽 값을, 거짓이면 ‘:’의 오른쪽 값을 반환한다.

 

- 비트 연산자: 비트 단위로 특정한 연산을 수행한다.

 

* C 언어 기본 함수(if, else, for, while, 사용자 정의 함수 등)

- if : 조건문의 결과가 참이면 if문을 수행하게 되고, 거짓이면 if문을 수행하지 않고 지나간다.

if(조건){

명령;

}

 

- else : if문을 사용했을 경우, 그 뒤에 else문을 사용할 수 있다. if문 안의 조건이 거짓일 경우 else문의 중괄호 안에 있는 내용이 실행된다.

if(조건){

실행1;

}

else{

실행2;

}

 

- for : ‘선언 및 초기화 부분에서는 몇 번부터 시작할 것인가를 알려주고, ‘조건 부분if문에서와 같이 조건이 만족하는지를 확인하고(조건이 맞다면 중괄호의 내용을 실행, 조건 불만족이면 for문 종료), ‘증감부는 반복을 수행할 때 어떠한 간격으로 처리할지 알려준다.

for(선언 및 초기화; 조건; 증감부){

//실행내용(반복될 내용)

}

 

- while : 반복을 위한 문장으로 조건을 만족하는 동안 중괄호의 내용을 계속 반복하고, 조건을 불만족하면 중괄호 밖의 문장을 실행한다.

while(조건){

문장;

}

 

- 사용자 정의 함수 : 이미 만들어진 함수를 사용하듯 직접 새로운 함수를 정의하여 사용하는 방법이다.

반환데이터타입 함수명(인수목록){

함수 본체

}

 

반환데이터타입 : 함수가 리턴하는 값의 데이터 타입. 함수의 작업결과이기도 하다. 리턴값이 없는 경우 void라고 명시해야 한다.

함수명 : 함수의 이름. 변수 이름과 같은 식별자이므로 변수 이름을 짓는 규칙이 동일하게 적용된다.

인수목록 : 함수가 전달받는 값으로, 인수의 타입과 함수 내에서 쓰일 이름을 적는다. 없을 수도 있고, 여러 개가 있을 수도 있다.

본체 : 실제 함수 내부에서 수행할 동작들을 적는 곳

 

5. 실험 순서

기본 환경 구성 및 동작 테스트

1) 랩톱 PC에 아두이노 IDE를 설치한다.

2) 랩톱 PC와 아두이노 보드를 USB 케이블로 연결하여 전원을 인가한다.

3) 아두이노 보드의 전원 LED에 불이 들어오는 것을 확인하고, 테스터기를 이용해 5V핀과 3.3V핀에 정상적인 전압이 인가되는지 확인한다.

 

예제 코드 실행

4) 아두이노 보드와 주변 회로를 [그림 7]과 같이 연결한다.

5) [그림 8]과 같이 예제 코드를 불러온다. [파일 - 예제 - Basics - Blink]

 

6) 컴파일 버튼을 눌러 컴파일한다.

7) ‘컴파일 완료메시지가 출력되는지 확인한다.

8) [그림 9]와 같이 보드를 선택한다. [도구 - 보드 - Arduino Uno]

 

9) [그림 10]과같이 통신 포트를 선택한다. (보통은 하나의 포트가 활성화되어 있음)

 

10) 업로드 버튼을 눌러 업로드한다.

11) 보드의 TX/RX LED가 깜빡이고, ‘컴파일 완료업로드 완료로 출력되었는지 확인한다.


 

유익하셨다면 좋아요와 구독 꾹 부탁드립니다 ㅎㅎ