Arduino 1 ( 소개, IDE 설치, 기초코딩 ) 컴퓨터 2
컴퓨터 컴퓨터 자동적으로계산이나작업을수행하는기계 컴퓨터기능 연산 : 데이터에대한산술연산 ( 덧셈, 뺄셈, 곱셈, 나눗셈 ), 논리연산 (AND, OR 등 ) 등을하는기능. 중앙처리장치 (CPU; central processing unit) 에서수행. 제어 : 명령을순차적으로읽고해석하여처리하는기능으로모든장치의동작을지시하고감독통제하여자동적인처리가가능함. CPU 에서담당. 기억 : 데이터를저장하는기능으로주기억장치 (RAM, ROM) 와보조기억장치 ( 하드디스크 ) 에서담당. 입력 : 데이터를컴퓨터로읽어들이는기능. 키보드, 마우스, 터치패드 / 스크린, 스캐너, 마이크등. 출력 : 데이터를출력하는기능. 모니터, 프린터, 스피커등. 3 마이크로컨트롤러 마이크로프로세서 (MPU; Microprocessor Unit) 단일칩 CPU 마이크로컨트롤러 (MCU; Microcontroller Unit) MPU + Memory (ROM, RAM)+I/O 버스및모듈이하나의칩으로만들어진소형컴퓨터 4
아두이노소개 2005년이탈리아에서개발된마이크로컨트롤러보드와소프트웨어개발환경 오픈소스하드웨어 / 소프트웨어 저렴한가격 간단한프로그래밍 아두이노보드 Arduino UNO Arduino MEGA Arduino DUE Arduino NANO 5 Arduino Boards 6
Arduino MEGA 2560 ATmega2560 마이크로컨트롤러 (8-bit) 범용디지털입출력핀 USB 연결단자 USB- 시리얼컨버터 7-12V DC Power jack 전원및보조핀 아날로그입력핀 DC power supply: USB (5V. <500mA) or power jack (7-12V) or Vin (7-12V) 5V, 3.3V: These pins provide the regulated DC voltages. IOREF: provides voltage reference with which the MCU operates. 7 Technical Specification Arduino MEGA 2560 Microcontroller ATmega2560 Operating Voltage 5V Input Voltage (recommended) 7-12V Input Voltage (limit) 6-20V Digital I/O Pins 54 (of which 15 provide PWM output) Analog Input Pins 16 (10 bits) DC Current per I/O Pin 20 ma DC Current for 3.3V Pin 50 ma Flash Memory 256 KB of which 8 KB used by bootloader SRAM 8 KB EEPROM 4 KB Clock Speed 16 MHz LED_BUILTIN 13 Length 101.52 mm Width 53.3 mm Digital I/O Operates at 5V can receive or provide 20 ma Limit < 40 ma PWM: 2-13, 44-46: 8-bit PWM output LED: 13 Analog input 0-5V 10-bit ADC AREF: reference voltage for the analog inputs. Used with AnalogReference(). 8
Arduino Uno 9 아두이노개발환경 PC: 아두이노통합개발환경 (IDE) 프로그램코딩, 컴파일, 업로딩 10
아두이노통합개발환경 (IDE) 1) www.arduino.cc 에접속하여 download 클릭 2) 자신의 OS 에맞는다운로드버튼을누른다. (Windows 사용자는 Windows installer 클릭 ) 11 아두이노통합개발환경 (IDE) 3) JUST DOWNLOAD 클릭 4) 설치후 IDE 실행 12
아두이노 USB 드라이버 다운로드링크 : http://www.wch.cn/download/ch341ser_zip.html 13 아두이노 -PC 연결 USB 드라이버설치 1. 제어판 장치관리자에서기타장치 > USB2.0-Serial > 드라이버소프트웨어업데이트 USB 케이블을이용하여아두이노와 PC 를연결 2. 컴퓨터에서드라이버소프트웨어찾아보기 3. 압축을해제한드라이버폴더 (CH341SER) 를지정 4. 아두이노 (USB-SERIAL CH340) 가연결된포트를확인 14
아두이노 -PC 연결 IDE 프로그램의 [ 툴 ] 메뉴에서 [ 보드 ] - Arduino / Genuino Mega or Mega 2560 [ 프로세서 ] - ATMEGA2560(Mega 2560) [ 포트 ] - 장치관리자에서확인한포트설정 15 아두이노코드 스케치 (sketch) : 아두이노를실행시키기위해작성된프로그램이나코드 #include < > int variables void setup() { void loop() { 라이브러리변수선언 한번만실행되는함수 ex) 보드의설정작업 무한반복되는함수 16
예제 : Blink 1. 파일 (File) > 예제 (Examples) > 0.1 Basics > Blink 2. 컴파일 : 아이콘 3. 업로드 : 아이콘 주석 (comment) /* */ // 전역변수 (global variable) void setup() { 초기설정함수 한번만실행 void loop() { 반복함수 무한반복실행 17 예제 : Blink 내장함수 pinmode(led, OUTPUT); led 핀을디지털출력으로지정한다. digitalwrite(led, HIGH); led 핀에 HIGH ( 높은전압, 5V) 을출력한다 LED on digitalwrite(led, LOW); led 핀에 LOW ( 낮은전압, 0V) 을출력한다 LED off delay(1000); 1초 (1000ms) 간기다린다 18
예제 : Blink pinmode(pin, mode) 매개변수 pin : 설정할핀번호 mode : 출력일때 OUTPUT, 입력일때 INPUT, INPUT_PULLUP 반환값 : 없음 digitalwrite(pin, value) 매개변수 pin : 설정할핀번호 value : HIGH(=1, 5V 의미, ON 상태 ) 또는 LOW(=0, 0V 의미, OFF 상태 ) 반환값 : 없음 delay(ms) 매개변수 ms : 밀리초단위의지연시간 반환값 : 없음 19 LED 를 2 초주기로깜빡이도록하기 Blink 예제 : 실습 LED 가켜져있는시간 ( 또는꺼져있는시간 ) 을전역변수로지정 2 초동안 LED ON 후에꺼지게하기 Setup 함수 : 한번실행 20
데이터 : 상수, 변수 데이터 숫자 (number): 십진수, 이진수 문자 (character): 문자한개, 작은따옴표로표기, c 문자열 (string): 문자여러개, 큰따옴표안에표기, string 상수 (constant): 프로그램수행중값이변하지않는데이터 변수 (variable): 프로그램수행중값이변하는데이터 변수는사용하기전에반드시선언이되어있어야함 변수의데이터형이지정되어있어야함 변수선언 int a; byte b; char c; boolean yes_no; 값저장 a = 2; b = 2; c = 'A'; yes_no = true; 21 Data type in Arduino 데이터형 (Data Type) 용량 (Size in Bytes) 내용 비교 boolean 1 참, 거짓 ( 불타입 ) true (1) 또는 false (0) char 1 문자 ( 아스키코드 ) -128 ~ +127 byte 1 바이트 0 ~ 255 int 2 정수 (short와같음 ) -32,768 ~ +32,767 unsigned int 2 부호가없는양의정수 0 ~ 65,535 Long 4 long 정수 -2,147,483,648 ~ +2,147,483,647 unsigned long 4 부호가없는 long 정수 0 ~ 4,294,967,295 float 4 실수 (double과같음 ) -3.4028235E+38 ~ +3.4028235E+38 1 byte = 8 bit: 256(0-255) 22
시리얼통신 (Serial Communications) USB 케이블 : 시리얼통신 컴퓨터와아두이노간의통신을통하여아두이노에서의결과를컴퓨터모니터에출력하거나, 컴퓨터에서의입력을아두이노로전송할수있음. 23 시리얼통신 (Serial Communications) int intval = 6; char charval = 65; void setup() { Serial.begin(9600); Serial.print("Strings"); Serial.println("100"); Serial.println(200); Serial.println(intVal); void loop() { Serial.print("intVal: "); Serial.print(intVal); Serial.print(" binary representation:"); Serial.println(intVal, BIN); Serial.begin(baud rate) Starts serial comm between computer and Arduino Baud rate: number of bits transmitted per second 9600 ~ 1,000 characters per second 컴퓨터와아두이노가동일한 baud rate 로설정이되어있어야함 ( 컴퓨터쪽은시리얼모니터창에서속도선택 ) Serial.print( xxx ) Display xxx on serial monitor Serial.print(data, format) Serial.println( xxx ): a next print statement starts on a new line Serial.write( Text \n ) sizeof(x): size (number of bytes) of a variable Serial.print("charVal: "); Serial.println(charVal); Serial.println(charVal, DEC); Serial.println('A', DEC); Serial.println(sizeof(intVal)); 24
데이터형 (Data Type) 실습 다음코드를실행하면어떠한결과가나올지생각해보시오. 자신의예상이맞는지확인해보시오. int a = 10; int b = 20; void setup() { Serial.begin(9600); Serial.print("a="); Serial.print(a); Serial.print(", b="); Serial.println(b); Serial.print("a+b="); Serial.println(a+b); Serial.print("a/b="); Serial.println(a/b); Serial.print("10.0/20 = "); Serial.println(10.0/20); float x = 10; float y=20; Serial.print("x/y="); Serial.println(x/y); void loop() { 25 Arduino Operator (1) 분류연산자의미예제예제결과 산술연산 ( 예 : int x = 6, y = 5) + 더하기 z = x + 1; z = 7 - 빼기 z = x 2; z = 4 * 곱하기 z = x * 2; z = 12 / 나누기 z = x / 2; z = 3 % 나머지구하기 z = x % 4; z = 2 ++ +1 z = y++; ( 또는 ++y) z = 6 -- -1 z = y--; ( 또는 --y) z = 4 관계연산 ( 예 : int i = 5, j = 3, k = 3) == 양쪽이서로같다 j == k; true!= 양쪽이서로같지않다 j!= k; false > 왼쪽이크다 i > j; true < 왼쪽이작다 i < j; false >= 왼쪽이크거나같다 i >= j; true <= 왼쪽이작거나같다 i <= j; false 26
Arduino Operator (2) 분류연산자의미예제예제결과 논리연산 ( 예 : x = 0000 0101 (4), y = 0000 0001 (1)) 논리합 (AND) x y 1 && 논리곱 (OR) x && y 1! 부정 (NOT)!x 0 대입연산 ( 예 : int x = 5) += 더한후대입 x += 3; x = 8; -= 뺀후대입 x -= 3; x = 2; *= 곱한후대입 x *= 2; x = 10; /= 나눈후대입 x /= 2; x = 2; %= 나눈후나머지대입 x %= 2; x = 1; 27 Arduino Operator (3) 분류연산자의미계산식예제결과 비트연산 ( 예 : x = 1111 1001, y = 0000 0001) ( 예 : x = 1001 0110) & bitwise AND x & y 0000 0001 bitwise OR x y 1111 1001 ^ bitwise Exclusive OR x ^ y 1111 1000 ~ 1의보수 (bitwise negation) y = ~x; y = 0110 1001 >> 오른쪽시프트 y = x >> 3; y = 0001 0010 << 왼쪽시프트 y = x << 2; y = 0101 1000 조건연산? : if-else 대체구문 조건? 처리 1 : 처리 2; If ( 조건 ) { 처리 1; else { 처리 2; void setup() { Serial.begin(9600); int x =2; int y=6; Serial.println(x,BIN); Serial.println(y,BIN); Serial.println(x&&y, BIN); Serial.println(x&y, BIN); void loop() { // put your main code here, to run repeatedly: 10 110 1 10 28
실습 : Arduino Operator 29 소스코드및컴파일 (IDE) 소스코드 ( 스케치 : C 언어 ) 실행파일 컴파일 ( 문법과의존성확인 ) ( 오류발생시디버깅 ) 아두이노보드에업로드 전처리기 (preprocess): 주석제거, define 치환등 컴파일러 (compiler): 소스코드를 assembly file 로변환어셈블러 (Linker): assembly file 을 object file 로변환 링커 (Linker): object file ( 참조하는함수, 라이브러리포함 ) 을연결하여실행파일 (exe) 파일생성 30
아두이노구성및동작 CPU 입력장치 ( 센서 ) ALU Control unit 출력장치 (LED/LCD/ 스피커 / 모터등 ) Register bus Memory Main memory Bootloader Bootloader: 컴파일된코드를읽어들이는펌웨어 Main memory: 컴파일된코드및데이터저장 Bus: CPU 와메모리간의데이터가전송되는통로 CPU(central processing unit) Register: 명령어, 데이터저장을위한임시의작은메모리 Control unit: 명령어를읽고해석 (Decode) ALU(arithmetic logic unit): 산술 / 논리연산수행 (execution) 31 if else ( 조건문 ) Blink 예제 : 깜빡이는시간을 50 us 씩줄여나가다가 0 us 이하가되면다시처음으로반복 if ( 조건 ) { 참일때수행할동작 ; else { 거짓일때수행할동작 ; 비교연산자 연산자 의미 a == b a와 b는같다. a < b a는 b보다작다. a > b a는 b보다크다. a <= b a 는 b 와같거나작다. a >= b a 는 b 와같거나크다. a!= b a 와 b 는다르다. 32
switch ( 조건문 ) 다음코드를실행하면어떠한결과가나올지생각해보시오. 자신의예상이맞는지확인해보시오. void setup() { Serial.begin(9600); void loop() { char ch = Serial.read(); switch (ch) { case 'a': Serial.print('A'); break; case 'b': Serial.print('B'); break; switch ( 조건 ) { case 값 1: 동작 1. break; case 값 2: 동작 2. Break;.. default: default 동작 break; Serial.read(): 시리얼모니터에서데이터읽기 ( 문자 ) 33 for 문 다음코드를실행하면어떠한결과가나올지생각해보시오. 자신의예상이맞는지확인해보시오. void setup() { Serial.begin(9600); for(int i=1;i<5;i++){ Serial.println(i); delay(500); for(initialization; conditional test; iteration) { 조건을만족하는동안동일한 task 를반복함 void loop() { 34
for 문 : 실습 Blink 예제 : 1 초 ON, 1 초 OFF 를 10 번하고종료 Setup 함수 : 한번실행 35 실습 : for 문 1 부터 10 까지의합을시리얼모니터에출력 int sum = 0; void setup() { Serial.begin(9600); for(int i=1;i<=10;i++){ sum +=i; Serial.print("1+2+...+10="); Serial.print(sum); void loop() { 36
함수 1 예제 : 화씨를섭씨로바꾸어시리얼모니터에표시 (0 도에서 100 도까지 10 도간격으로 ) c= 5/9*(f-32) void setup() { Serial.begin(9600); int f; float c; for(f=0;f<=100;f+=10){ c= 5.0/9.0*(f-32.0); Serial.print(f); Serial.print(" F = "); Serial.print(c); Serial.println(" C"); void loop() { 37 함수 2 함수 : 특정한기능을하는코드를따로빼내어묶어놓은것 라이브러리함수다른프로그래머에의해구현된함수 사용자함수사용자가새로정의해서사용하는함수 함수선언 데이터형함수명 ( 매개변수 ) { 처리부분 int ex4(int a){ return 2+a; 함수사용 int a; a = ex4(3); //a=5 38
함수 3 회색부분안에들어갈함수를코딩해보시오. void setup() { Serial.begin(9600); int f; float c; for(f=0;f<=100;f+=10){ c= f_to_c(f); Serial.print(f); Serial.print(" F = "); Serial.print(c); Serial.println(" C"); void loop() { float f_to_c(int temp_f){ float temp_c = 5.0/9.0*(temp_F-32.0); return temp_c; 함수 : 반복적으로사용되는처리문을함수로정의하여사용 내장함수 ( 시스템함수 ) 외부함수 ( 헤더파일에서불러옴 ) 사용자정의함수 ( 사용자가정의하여사용 ) 데이터타입함수명 ( 매개변수 ) { 처리 매개변수 : 함수로전달되는값 ( 입력 ) 반환값 : 입력값을이용하여계산된출력값 반환값이없는경우데이터타입은 void가됨 ( 절차함수 ) 39 실습 (blinkrate) Blink rate (1 에서 9 사이의숫자 ) 를시리얼모니터에서입력받아서 LED blinking. (7 을입력하면 blink rate = 700 msec) const int LED = 13; int blinkrate = 0; void setup() { Serial.begin(9600); pinmode(led, OUTPUT); Serial.println("Enter the blink rate in x100 ms"); void blink() { digitalwrite(led, HIGH); delay(blinkrate); digitalwrite(led, LOW); delay(blinkrate); Serial.available(): 시리얼모니터에서입력문자가있는지확인 If(Serial.available()) { 문자입력이있으면숫자로변경 char ch = Serial.read(); blinkrate = (ch - '0'); blinkrate *= 100; void loop() { if(serial.available()){ // check to see if at least one character is available char ch = Serial.read(); if(isdigit(ch)) // is this an ascii digit between 0 and 9? { blinkrate = (ch - '0'); //ASCII value converted to numeric value blinkrate *= 100;// 100 msec times recieved digit Serial.print("Blink Rate = "); Serial.print(blinkRate); Serial.println(" msec"); else Serial.println("Enter the number between 0 and 9 only."); blink(); 40
아두이노사용부품 : 입출력소자 입력소자 조도센서온도센서초음파센서 출력소자 스위치 4 4 키패드 RFID DC 모터 LED 피에조부저 LCD 서보모터 7 세그먼트 8 8 도트매트릭스 41 아두이노사용부품 : Breadboard 납땜없이소자들을연결할수있도록하는도구 1 2 부품연결 그라운드 (0V) 전원 (ex:vdd) 선으로표시된구멍들은내부적으로연결되어있음 1 과 2 는연결되어있지않음 42
아두이노사용부품 : 저항 전류의흐름을방해하여전류와전압을조절하는소자 저항읽는법 5밴드예시 521Ω 저항은 5 ( 초록색 ), 2 ( 빨간색 ), 1 ( 갈색 ) 에검정색인승수 0을곱해서계산오차 ±1%( 갈색 ) 4밴드예시 82kΩ 저항은 8 ( 회색 ), 2 ( 빨간색 ) 에주황색인승수 3을곱해서계산오차 ±5%( 금색 ) 43