1. Arduino?
아두이노는 오픈 소스를 기반으로 한 단일 보드 MicroController로 완성된 보드와 관련 개발 도구 및 환경을 말한다. 2005년 이탈리아의 Interation Design Insitutelvera에서 하드웨어에 익숙지 않은 학생들이 자신들의 디자인 작품을 손쉽게 제어할 수 있게 하려고 고안된 아두이노는 처음에 AVR을 기반으로 만들어졌으며, ATMEL AVR 계열의 보드가 현재 가장 많이 판매되고 있다. ARM 계열의 Cortex-M0(Arduino M0 Pro)과 Cortex-M3(Arduino Due)를 이용한 제품도 존재한다. Hardware reference의 경우 CAD 파일을 다운로드하여 이용이 가능하다. Software의 경우 무료로 이용이 가능하다. (Arduino IDE)
2. Arduino Mega 2560
- ATmega2560 Chip을 기반으로 설계
- 54개의 Digital 입/출력 핀을 가지고 있음 (PWM 핀의 경우 15개)
- 16개의 Analog 입력 핀
- 16 MHz의 클럭 속도: 프로세서의 동작 속도를 의미
- 8-bit Microcontroller
- 입력 전압 범위: 6 ~ 20 V (5V 권장)
- Flash Memory: 256 KB (8KB는 부트로더로 쓰임): 사용자가 디자인한 코드가 저장되는 메모리
- SRAM: 8 KB, 프로그램이 실행되면서 임시로 변수가 저장되는 공간
- EEPROM: 4KB, 프로그램 실행 중 전원이 차단되어도 영구 저장할 수 있는 공간. 읽고 쓰는데 수명 제한이 존재
3. 아두이노 스케치 (내장 함수)
pinMode(Pin number, Input/Output mode): GPIO(General Purpose Input Output)를 입력으로 쓸지 출력으로 쓸지 정하는 함수.
ex) 1번 핀을 출력으로 쓸 경우: pinMode(1, OUTPUT);
2번 핀을 입력으로 쓸 경우: pinMode(2, INPUT);
3번 핀을 풀업 입력으로 쓸 경우: pinMode(3, INPUT_PULLUP);
INPUT의 경우 입력이 들어오지 않았을 때, 외부 pull-up회로를 별도로 구성하지 않으면 하이 임피던스 값(0인지 1인지 확실하지 않은 값, 신호가 뜬 상태)이 들어오게 된다. 스위치와 같은 소자가 연결되어있다고 가정했을 때, HIGH 또는 LOW의 값을 갖게 된다. 이런 현상을 방지하기 위해서 pull-up 또는 pull-down 저항을 구현하는데 회로는 아래와 같다. pull-up저항은 Vcc에 연결한다. 회로를 분석해보면, 스위치를 누르지 않을 경우 Vcc에 연결되어 HIGH의 값을 갖는다. 여기서 스위치를 연결하게 되면 Vcc는 그대로 GND로 흘러가기 때문에, LOW의 값으로 읽히는 것을 볼 수 있다. 그런데 여기서 굳이 Pull-up회로를 구성하지 않아도 아두이노 내부에는 Pull-up회로가 내장되어 있기 때문에, 위의 3번째 예시처럼 선언만 하면 Pull-up회로로 사용할 수 있다.
Pull-down회로는 Pull-up과 동일하지만 저항이 GND에 묶여있는 차이가 있으며, 스위치 입력값이 없을 때 LOW고 입력이 들어올 경우 HIGH의 값으로 읽힌다는 차이가 존재한다.
digitalWrite(Pin number, HIGH or LOW): 해당 핀에 전압을 출력시키고자 할 때 사용하는 함수이다. HIGH를 쓸 경우 해당 핀에서 5V의 출력을 내보낸다. 반대로 LOW의 값을 쓰게 되면 0V의 출력이 나간다.
digitalRead(Pin number): 입력 단자의 전압을 센싱 하여 기준값 이상일 경우 HIGH의 값을 return 하고, 기준값 이하일 경우 LOW의 값을 return 한다. 여기서 기준 값은 보드마다 상이하며 reference manual을 참고하길 바란다.
analogRead(Pin number): 해당 핀에 연결된 노드의 전압을 읽어와 digital값으로 변환시켜주는 함수이다. 아두이노 우노 또는 메가 기준으로 0 ~5V사이의 전압을 읽어올 수 있으며 전압의 비례하게 0 ~ 255의 값을 return 하게 된다. 해당 보드의 경우 ADC module이 8-bit를 지원하기 때문에 0 ~ 255의 값으로 변환하게 되는 것이며, 고가의 ADC module의 경우 더 높은 분해능을 가질 수도 있다. (2^8 - 1)
'임베디드 일지 > 아두이노 기초' 카테고리의 다른 글
[아두이노 기초] Serial 통신 (0) | 2023.03.30 |
---|---|
[아두이노 기초] ADC (0) | 2022.09.14 |
[아두이노 기초] Interrupt (0) | 2022.04.22 |
[아두이노 기초] GPIO Input (0) | 2022.04.09 |
[아두이노 기초] Arduino Mega 2560 - 2 (0) | 2021.12.17 |