재밌는 컴퓨팅, 신나는 메이킹, 즐거운 소프트웨어를 추구하는 모두를 위한 코딩 커뮤니티 '코딩클럽'의 왕초보 아두이노따라잡기 워크샵 자료입니다. 아두이노와 오픈소스하드웨어의 기본개념, 아두이노 설치, 구동 방법, C 코딩, LED, 센서 활용법 등을 쉽게 이해할 수 있도록 소개하였습니다. by 코딩클럽의 신송섭 선생님
http://www.oss.kr/index.php?mid=oss_information6&category=1371&document_srl=1392
제 1회 공개SW역량프라자 정기기술세미나(6월24일) 발표자료를 올립니다.
세션1 : 리눅스 시스템을 위한 성능 분석
(강사) 국민대학교 이남승 연구원
세션2 : 우분투 환경에서의 임베디드 개발환경 구축 및 애플리케이션 개발
(강사)우분투코리아 강분도 대표
아젠텍 이호민 전임연구원
다음회차에는 더 좋은 주제로 찾아뵙겠습니다.
감사합니다.
창조경제 IoT 해커톤 대회에 참가할 비전공자들을 위해 준비한 교육과정의 4일차 자료입니다.
이제껏 배웠던 아두이노(Arduino)의 디지털 입출력과 아날로그 입출력, 그리고, 센서 제어 등을 복습해보고, DC 모터와 블루투스(BlueTooth) 모듈을 간단하게 제어해 보는 내용을 다루고 있습니다.
한국의 코딩교육과 세계의 코딩교육을 간단히 비교
특히 미국과 영국의 코딩교육과 비교
마이클 무어의 다음침공은 핀란드편을 인용해서 교육의 바른 기능과 모습을 검토
표준화 시험에 올인하는 미국과 한국이 코딩이라는 새로운 기회마저 엉터리 시험으로 망치지 않기를 바람
배우고 싶어하는 아이들에게 배울수 있는 길을 만들자.
MIT 해커를 통해 자유소프트웨어와 오픈소스, 오픈하드웨어를 소개
12살 실비아 토드가 만든 워터컬러봇 소개
http://www.oss.kr/index.php?mid=oss_information6&category=1371&document_srl=1392
제 1회 공개SW역량프라자 정기기술세미나(6월24일) 발표자료를 올립니다.
세션1 : 리눅스 시스템을 위한 성능 분석
(강사) 국민대학교 이남승 연구원
세션2 : 우분투 환경에서의 임베디드 개발환경 구축 및 애플리케이션 개발
(강사)우분투코리아 강분도 대표
아젠텍 이호민 전임연구원
다음회차에는 더 좋은 주제로 찾아뵙겠습니다.
감사합니다.
창조경제 IoT 해커톤 대회에 참가할 비전공자들을 위해 준비한 교육과정의 4일차 자료입니다.
이제껏 배웠던 아두이노(Arduino)의 디지털 입출력과 아날로그 입출력, 그리고, 센서 제어 등을 복습해보고, DC 모터와 블루투스(BlueTooth) 모듈을 간단하게 제어해 보는 내용을 다루고 있습니다.
한국의 코딩교육과 세계의 코딩교육을 간단히 비교
특히 미국과 영국의 코딩교육과 비교
마이클 무어의 다음침공은 핀란드편을 인용해서 교육의 바른 기능과 모습을 검토
표준화 시험에 올인하는 미국과 한국이 코딩이라는 새로운 기회마저 엉터리 시험으로 망치지 않기를 바람
배우고 싶어하는 아이들에게 배울수 있는 길을 만들자.
MIT 해커를 통해 자유소프트웨어와 오픈소스, 오픈하드웨어를 소개
12살 실비아 토드가 만든 워터컬러봇 소개
개발은 혼자 할 수 있을까? 혹은 개발자들끼리 할 수 있을까? 저는 아니라고 생각합니다. 개발은 개발에 관여된 모든 부서와 종사자들이 함께하는 겁니다. 개발자가 어떻게 하냐에 따라 SE와 QA 그리고 심지어 Sales 까지 하나의 팀으로 공동의 목표를 쫓아 시너지를 낼 수 있습니다. 저는 그렇게 믿습니다.
3. 코딩클럽 신송섭 (ssshin22@naver.com)3
목차
• 오픈소스/아두이노
• 개발환경에 대하여
• 프로그래밍 기초
• LED Blink
– 실습 #1 - LED On/Off
– 실습 #2 - LED 부드럽게 On/Off
– 실습 #3 - RGB LED Control
• 외부입력으로 LED 제어하기
– 실습 #4 – 버튼으로 LED On/Off
– 실습 #5 - 기울기 스위치(Tilt switch)로 On/Off
– 실습 #6 – 가변저항으로 LED On/Off 제어
– 실습 #7 – 가변저항으로 LED 밝기 제어
• 센서로 LED 제어하기
– 실습 #8 – 빛센서
– 실습 #9 - 온도센서
4. 코딩클럽 신송섭 (ssshin22@naver.com)4
Open Source
• Open Source
= Open Source H/W + Open Source S/W
– Open Source SW : Linux, Inkscape, Ecllips, ………
– Open Source HW :
• 정의 : 오픈소스문화에서 비롯되어 생성된 소스를 공개
• 공개범위 : 회로도, PCB 거버화일, BOM, 기구도면, HDL, IC Circuit Layout data, 하드웨어
를 구동하기 위한 소프트웨어
• 오픈소스 하드웨어 프로젝트 리스트
(http://en.wikipedia.org/wiki/List_of_open-source_hardware_projects)
• Arduino, 3D Printer, Quadcopter, Robot 등등
• Raspberry Pi는 오픈소스일까?
– 오픈소스 라이선스
https://wiki.kldp.org/wiki.php/OpenSourceLicenseGuide
http://www.oshwa.org/http://opensource.org/
6. 코딩클럽 신송섭 (ssshin22@naver.com)6
아두이노 - History
• 아두이노 시작
– Ivrea, Northern Italy
– Interaction Design Institute Ivrea (IDII), Masimo Banzi
– Hernando Barragan(학생) : Wiring( http://www.wiring.org.co )
– Processing : MIT Media Lab
– 2005년 IDII 학생들의 위해서 Release
Wiring Processing
Arduino
H/W
Ardiono
IDE
Arduino Platform
7. 코딩클럽 신송섭 (ssshin22@naver.com)7
아두이노 – Core team
The Arduino core team [from left]—
David Cuartielles, Gianluca Martino, Tom Igoe, David Mellis, and Massimo Banzi
http://spectrum.ieee.org/geek-life/hands-on/the-making-of-arduino
11. 코딩클럽 신송섭 (ssshin22@naver.com)11
Arduino UNO R3 Board
디지털 입출력/PWM 핀
아날로그 입출력 핀전원입출력
MicroController
USB 커넥터
외부전원입력
리셋버튼
I2C, AREF
ICSP
USB to Serial
리셋버튼
전원 LED
13. 코딩클럽 신송섭 (ssshin22@naver.com)13
Arduino IDE
(Intergrated Development Environment)
코딩
(텍스트 편
집기)
컴파일
(컴파일러)
링크
(링커)
디버깅
(디버거)
다운로딩
(임베디드시
스템)
실행
이클립스
AVR Studio
Visual Studio
24. 코딩클럽 신송섭 (ssshin22@naver.com)24
부품 – LED
• LED : 전기에너지를 빛에너지로 변환하는 부품
• 기호 :
• LED는 두종류의 물질을 가지고 만드는 반도체
• 갈륨비소(GaAs), 갈륨인(GaP), 갈륨비소인(GaAsP), 갈륨질소(GaN)등
• LED를 사용하는 이유
– 에너지 효율 Up, 전력소모는 Down
– 백열등에 비해 1/5 수준의 전력만 소비
– 백열등에 비해 15배 이상의 긴 수명
– 지구를 살리는 친환경 기술
– 다양한 색깔을 표현할 수 있음
– 빛의 색상, 밝기등을 손쉽게 제어할 수 있음
27. 코딩클럽 신송섭 (ssshin22@naver.com)27
Arduino – 프로그래밍 기초
• http://arduino.cc/en/Reference/HomePage
• 구조
– 기본 구조문 : setup(), loop(),
– 제어구문 : if, if … else…, for, switch, while, do while, break, continue, return, goto
– 기타구문 : ;, {}, //, /* */, #define, #include
– 수연산자 : =, +, -, *, /, %
– 비교연산자 : ==, ~=, <, >, <=,>=
– 논리연산자 : &&, ||, !
– 포인트연산자 : *, &
– 비트연산자 : &, |, ^, ~, <<, >>
– 합성연산자 : ++, --, +=, -=, *=, /=, &=, |=
• 변수 : 상수, 변수, 데이터 타입, 형변환, …
• 함수
– 기본 제공함수 : 디지털 입출력함수, 아날로그 입출력 함수, 시간함수, 수학함수, …
– 사용자 함수
• 라이브러리
– 함수들의 집합
– 기본함수 : EEPROM, Ethernet, Firmata, GSM, LCD, SD, Servo, SPI,…
– ..Arduinolibraries
– http://arduino.cc/en/Reference/Libraries
28. 코딩클럽 신송섭 (ssshin22@naver.com)28
C 프로그래밍 기초 - 기본
• 주석
– /* 주석 */ : 여러줄 주석
– // 주석 : 한줄 주석
• 세미콜론( ; ) : 문장의 끝
– 문자의 끝을 의미
• { } : 함수, 반복문, 조건문 등에서 블럭을 정의할때 사용함
시작/끝을 나타내며 항상 쌍으로 이루어져야 함
– void setup(){ }
– void loop(){ }
– for( ){ ~ }
– If( ){ ~ } else { ~ }
if( ){
if( ){
if( ){
}
}
}
else{
}
29. 코딩클럽 신송섭 (ssshin22@naver.com)29
C 프로그래밍 기초 – 상수/변수
• 상수와 변수?
– 상수란 : 항상 일정한 값.
– 변수란 : 변하는 데이터, 데이터를 저장할 수 있는 공간,
• 선언과 초기화
– 선언 : ‘데이터형’’변수이름’ = ‘초기값’;
const int led=13; <- 상수선언
int led=13; <- 변수선언
– 초기화
• 상수는 선언하면서 값을 주어짐
• 변수는 선언하면서 초기화해도 되고 프로그램 중간에 넣어도 된다.
• 상수/변수 이름 짓기
– 영문 대소문자, 숫자, ‘_’만 사용함, 대소문자 구분됨
ex) a, A, Show_Me_The_Money, showmethemoney, showMEtheMoney …
– 특수문자안됨 ex) A#212, B@4%6, …
– 띄어쓰기가 있으면 안됨 ex)add num, show me the money, …
– 숫자가 맨앞에 오는 것은 안됨 ex) 1aA
– 실제변수의 기능에 따라 이름을 작명 ex) VResistorVal, RLedPort, BLedPort, …
30. 코딩클럽 신송섭 (ssshin22@naver.com)30
C 프로그래밍 기초 - 연산자
연산자 연산의 예 의미
< a<b a가 b보다 작으면
> a>b a가 b보다 크면
== a==b a와 b가 같으면
!= a!=b a와 b가 같지 않으면
<= a<=b a가 b보다 작거나 같으면
>= a>=b a가 b보다 크거나 같으면
연산자 연산의 예 의미 연산자 연산의 예 의미
+ a+b a 더하기 b / a/b a 나누기 b
- a-b a 빼기 b % a%b a 나누기 b 의 나머지
* a*b a 곱하기 b
• 수 연산자
• 비교 연산자
연산자 연산의 예 의미 연산자 연산의 예 의미
++ a++ a + 1을 의미 += a+=1 a=a+1
-- a-- a – 1을 의미 -= a-=1 a=a-1
• 합성연산자
31. 코딩클럽 신송섭 (ssshin22@naver.com)31
연산자 사용예 의미
! !a not 연산자, a 가 아니면
&& a&&b and 연산자, a 이고 b
|| a||b or 연산자, a 이거나 b
• 조건 연산자
• 사용예
• !a : a가 아니면
– if(!(a<3)){ A실행 }
• A && b : a 이고 b일때
– if(analogRead(swPin1) && digitalRead(swPin2)){ }
• A || b : a 이거나 b일때
– if(analogRead(swPin1) || digitalRead(swPin2)){ }
C 프로그래밍 기초 - 연산자
32. 코딩클럽 신송섭 (ssshin22@naver.com)32
C 프로그래밍 기초 – if 조건문
• 문법
• 기능
– 만약, ‘조건 ’이 참(True)라면 ‘ ’을 실행하고
‘조건 ’이 거짓(False)이면 ‘ ’을 실행한다.
• 사용예(a=3이면) (a=10이면)
if(조건)
{ <- A영역 시작
‘A 영역’
} <- A영역 끝
else
{ <- B영역 시작
‘B 영역’
} <- B영역 끝
A 영역
B 영역
if( a < 10 ){
digitalWrtite(13, HIGH);
}
else{
digitalWrite(12, HIGH);
}
if( a < 10 ){
digitalWrtite(13, HIGH);
}
else{
digitalWrite(12, HIGH);
}
33. 코딩클럽 신송섭 (ssshin22@naver.com)33
C 프로그램 기초 – for() 제어문
• 문법
• 기능 : 조건식이 만족하면 영역을 실행한다.
– 초기값 : 조건식에 사용할 변수의 초기값
– 조건식 : 조건문
– 증감식 : 변수의 증감값
• 사용예
for(초기값;조건식;증감식)
{
실행영역;
}
for(i=0;i<5;i++)
{
digitlaWrite(i, HIGH);
}
delay(1000);
i=
digitalWrite( , HIGH)0
i=i+1
실행
i<5 이면 실행
012345
1234
delay(1000);
34. 코딩클럽 신송섭 (ssshin22@naver.com)34
• 프로그램에서 함수란?
특정한 기능을 하는 제어문, 조건문, 함수들의 집합
• 함수구조
“반환값” “함수이름” (“전달인자1”, “전달인자2”,---)
Ex)
digitalWrite(pin, HIGH);
pinMode(pin, OUTPUT);
delay(1000);
randomNumber=random(min,max);
=
• 함수란?
“반환값”
“전달인자1”, “전달인자2”,
함수 f( )
C 프로그래밍 기초 - 함수
35. 코딩클럽 신송섭 (ssshin22@naver.com)35
Arduino - 프로그램 구조
1. // 프로그램 설명부 : 프로그램 동작설명, 제작자, 라이선스, 생성연월일/버전, 등 정보부분
2. /* Blink
3. Turns on an LED on for one second, then off for one second, repeatedly.
4.
5. This example code is in the public domain.
6. */ <- 주석끝
7. // 변수 및 함수 정의부
8. int led = 13; <- 변수정의 및 초기값 설정
9. void setup( ) { <- 프로그램 시작할때 한번만 실행됨
10. // 입출력 핀의 초기값
11. // 시리얼 포트 설정
12. // 변수 초기값
13. // 등 프로그램 시작시 한번만 실행되거나 주변 회로에 대한 초기값을 설정하는 부분
14. }
15. void loop( ) { <- 메인 실행 함수, 반복실행됨
16. // 주 실행 프로그램 부분
17. // 무한반복됨
18. }
19. void User_Lib() <- 사용자 정의 함수
20. {
21. // 사용자 정의 함수 부분
22. }
36. 코딩클럽 신송섭 (ssshin22@naver.com)36
Arduino – 기본 프로그램 예제
1. /* <- 주석시작
2. Blink
3. Turns on an LED on for one second, then off for one second, repeatedly.
4.
5. This example code is in the public domain.
6. */ <- 주석끝
7.
8. // Pin 13 has an LED connected on most Arduino boards. <-한줄 주석
9. // give it a name: <-한줄 주석
10. int led = 13; <- 변수정의 및 초기값 설정
11. // the setup routine runs once when you press reset: <-한줄 주석
12. void setup( ) { <- 프로그램 시작할때 한번만 실행됨
13. // initialize the digital pin as an output.
14. pinMode(led, OUTPUT); <- 핀의 사용모드 정의 함수
15. }
16. // the loop routine runs over and over again forever: <-한줄 주석
17. void loop( ) { <- 메인 실행 함수, 반복실행됨
18. digitalWrite(led, HIGH); // LED 켜기
19. delay(1000); // 1초 동안 시간지연
20. digitalWrite(led, LOW); // LED 끄기
21. delay(1000); // 1초 동안 시간지연
22. }
37. 코딩클럽 신송섭 (ssshin22@naver.com)37
실습 #1 - 사용함수
• pinMode();
– 기능 : 디지털 입출력 핀을 입력 또는 출력으로 설정
– Syntax
pinMode(pin, mode);
– Parameter
pin : 디지털 핀번호
mode : INPUT or OUTPUT
• digitalWrite();
– 기능 : 디지털 핀에 HIGH or LOW를 쓴다.
– Syntax
digitalWrite(pin,mode);
– Parameter
pin : 디지털 핀 번호
mode : HIGH or LOW
• dely();
– 기능 : 지연
– Syntax
delay(time);
– Parameter
time : 지연시간(ms), 1000ms = 1sec
38. 코딩클럽 신송섭 (ssshin22@naver.com)38
실습 #1 - LED On/Off
1. int led5 = 5;
2. int led6 = 6;
3. void setup( ) {
4. pinMode(2, OUTPUT);
5. pinMode(3, OUTPUT);
6. pinMode(4, OUTPUT);
7. pinMode(led5, OUTPUT);
8. pinMode(led6, OUTPUT);
9. }
10. void loop( ) {
11. digitalWrite(2, HIGH); // LED 켜기
12. digitalWrite(3, HIGH); // LED 켜기
13. digitalWrite(4, HIGH); // LED 켜기
14. digitalWrite(5, HIGH); // LED 켜기
15. digitalWrite(6, HIGH); // LED 켜기
16. delay(1000); // 1초 동안 시간지연
17. digitalWrite(2, LOW); // LED 끄기
18. digitalWrite(3, LOW); // LED 끄기
19. digitalWrite(4, LOW); // LED 끄기
20. digitalWrite(led5, LOW); // LED 끄기
21. digitalWrite(led6, LOW); // LED 끄기
22. delay(1000); // 1초 동안 시간지연
23. }
330ohm
47. 코딩클럽 신송섭 (ssshin22@naver.com)47
실습 #6 – 가변저항으로 LED On/Off 시간제어
analogRead();
- 기능 : 디지털 핀에 PWM 신호 출력
- Syntax
returnValue = analogRead(pin);
- Parameter
pin : 핀번호
- 리턴값 : 0 ~ 1023
1번핀
2번핀
3번핀
1번핀
2번핀
3번핀
48. 코딩클럽 신송섭 (ssshin22@naver.com)48
실습 #6 – 가변저항으로 LED On/Off 시간제어
1. int sensorPin = A0; // 가변저항 입력핀 설정
2. int ledPin = 13; // LED 핀 설정
3. int sensorValue = 0; // 가변저항으로 부터 입력되는 값을 자장하기 위한 변수
4. void setup() {
5. pinMode(ledPin, OUTPUT); // LED 핀을 출력으로 설정
6. Serial.begin(9600); // 시리얼 포트 설정
7. }
8. void loop() {
9.
10. sensorValue = analogRead(sensorPin); // 가변저항으로 부터 값을 읽어들임
11. Serial.print(sensorValue); // 가변저항으로 읽어들인 값을 PC로 전송
12.
13. digitalWrite(ledPin, HIGH); // LED On
14. delay(sensorValue); // 가변저항으로부터 입력되는 값만큼 지연(milliseconds)
15.
16. digitalWrite(ledPin, LOW); // LED Off
delay(sensorValue); // 가변저항으로부터 입력되는 값만큼 지연(milliseconds)
17.
18. }
49. 코딩클럽 신송섭 (ssshin22@naver.com)49
실습 #7 – 가변저항으로 LED 밝기제어
1. int sensorPin = A0; // select the input pin for the potentiometer
2. int red_led = 9 ;
3. int blue_led = 10;
4. int green_led = 11;
5. int sensorValue = 0; // variable to store the value coming from the sensor
6. void setup() {
7. pinMode(red_led, OUTPUT);
8. pinMode(blue_led, OUTPUT);
9. pinMode(green_led, OUTPUT);
10. Serial.begin(9600);
11. }
12. void loop() {
13. sensorValue = analogRead(sensorPin); // read the value from the sensor:
14. Serial.println(sensorValue);
15. map_sensorValue=map(sensorValue, 0,1023, 0,255);
16.
17. analogWrite(red_led, sensorValue/4 );
18. analogWrite(blue_led, map_sensorValue );
19. analogWrite(green_led, sensorValue/4 );
20. }
56. 코딩클럽 신송섭 (ssshin22@naver.com)56
실습 #9 – 온도에 따라 LED On/Off
1. int sensorPin = A4; // select the input pin for the potentiometer
2. int sensorValue = 0; // variable to store the value coming from the sensor
3. void setup() { // declare the ledPin as an OUTPUT:
4. Serial.begin(9600);
5. }
6. void loop() {
7.
8. sensorValue = analogRead(sensorPin); // read the value from the sensor:
9. Serial.print(sensorValue);
10.
11. if(sensorValue < 250){
12. digitalWrite(ledPin, HIGH); // turn the ledPin on
13. } else {
14. digitalWrite(ledPin, LOW); // turn the ledPin off:
}
15. }
57. 코딩클럽 신송섭 (ssshin22@naver.com)57
실습 #9 – 함수를 이용해서 온도표시하기
• 라이브러리 다운받기
– https://code.google.com/p/thermistor10k/downloads/list
• 압축풀기
– ../Thermister/
– ../Thermister/example, Thermister.cpp, Thermister.h
• 아두이노 스케치북 위치로 카피하기
– 스케치북 위치 : 스케치>파일>환경설정
– 스케치북 위치 : ..user-nameDocumentArduino
– 스케치북 폴더로 ..librariesThermister 폴더를 카피
– “스케치 > 파일 > 예제”에 copy한 폴더의 example 이 보임
– “라이브러리 이름”/example 폴더내에 있는 파일이 보임
– 예제 파일을 연구해서 라이브러리를 어떻게 사용하는지 연구
58. 코딩클럽 신송섭 (ssshin22@naver.com)58
Arduino 개발방법
아디디어 구상
자료수집
부품구매
하드웨어
코딩
디버깅
• 회로도를 찾아보자
• 부품에 해당되는 라이브러리가 있을까?
• 없으면 라이브러리가 있는 부품을 구하자
• 온라인
• Devicemart.co.kr
• Eleparts.co.kr
• Icbanq.co.kr
• 오픈마켓(G마켓, 11번가, 옥션, …)
• 알리바바, 알리익스프레스, 아마존,..
• 오프라인
• 구로유통상가
• 청계천
• 안양유통상가
• 브래드보드에 회로를 구성한다.
• PCB에 회로를 구성한다. <- 고수
• 라이브러리를 설치한다
• 응용프로그램을 코딩한다.
• 현상보고 문제 예측하기
• 소프트웨어 구성대로 하드웨어가 동작하는지?
• 소프트웨어는 정확히 구성되어 있는가..?
• 소프트웨어 검증방법은?
• 소프트웨어에서 설정한대로 하드웨어가 연결되었는가?
• 하드웨어 문제인가?
• 왜?
• 하드웨어 검증방법은?
• 미궁에 빠지다
• 열정과 노력이 필요함
59. 코딩클럽 신송섭 (ssshin22@naver.com)59
아두이노와 스크래치
• Firmata 방식 – 마이컴과 호스트 컴퓨터간의 통신 프로토콜
– S4A(http://s4a.cat)
– S2A(https://github.com/MrYsLab/S2A_fm )
– BYOB(Build Your Own Block)/SNAP(http://snap.berkeley.edu)
• 다운로드 방식
– Ardublock(http://blog.ardublock.com )
– Minibloq(http://blog.minibloq.org )
– Modekit(http://www.modkit.com )
– Amici (http://dimeb.informatik.uni-bremen.de/eduwear/?cat=16 )
Firmata
for PC
ArduinoFirmata for
arduino
• Scratch
• Processing
• MAX/MSP
• Flash
• Other Program
60. 코딩클럽 신송섭 (ssshin22@naver.com)60
Arduino = Maker
• 정보를 얻을 수 있는 곳
– http://www.adafruit.com
– http://www.instructables.com
– http://makezine.com
– http://hackaday.com
– ……
• 크라우드 펀딩
– http://www.kickstarter.com
– https://www.indiegogo.com
– https://www.quirky.com
– ……