아두이노를활용하여작품만들기 이시영
Ⅰ. 아두이노들어가기
스마트경인교육대학교러닝코딩과학영재광명교육지원청교육원
명사로서로봇 (robot) 은다음의의미를지닌다. 기계 인간과비슷한형태를가지고걷기도하고말도하는기계장치. 인조인간. 기계 어떤작업이나조작을자동적으로하는기계장치. 남의지시대로움직이는사람을비유적으로이르는말. 하드웨어와소프트웨어를설계하여설계자가생각하는동적을체계적으로수행하는기계
Led 예술작품만들기 바나나피아노 메이키메이키 탱크만들기
스마트경인교육대학교러닝코딩과학영재광명교육지원청교육원 아두이노란? 1. 마이크로컨트롤러보드 =? 소형컴퓨터 2. 아두이노 - 아두이노보드 & 통합개발환경 3. 오픈소스 - 아두이노보드하드웨어공개하드웨어를다양한형태로자유롭게변형가능클론보드 ( 복제보드 ) 도무방 - 통합개발환경코드공개 4. 다양한성능의아두이노보드우노, 메가, 듀에, 아두이노이더넷, 등 5. 개발 ( 사용 ) 이편리, 6. 저렴한가격 7. 다양한 OS 지원 Windows, Mac OS, Linux
스마트경인교육대학교러닝코딩과학영재광명교육지원청교육원 아두이노 ( 보드 ) 개발목적컴퓨터와인간의상호작용의폭을넓히기위해쉬운개발환경을제공하여전문교육을받지않은일반인도쉽게프로그래밍가능일반인? 어린이 ( 초등학생 )? 아두이노보드프로그래밍언어아두이노보드를개발한목적에부합한쉬운개발환경제공텍스트기반프로그래밍언어텍스트코딩, ( 예를들어 C 언어 ) 그래픽기반프로그래밍언어 ( 예, LabView, Scratch for Arduino 등 ) int led = 13; void setup() { pinmode(led, UTPUT); void loop() { digitalwrite(led, HIGH); // turn the LED on delay(1000); // wait for a second digitalwrite(led, LOW); // turn the LED off delay(1000); // wait for a second
아두이노보드 아두이노우노 아두이노네오나르도 아두이노마이크로 아두이노이더넷 아두이노메가 아두이노듀에 아두이노윤 아두이노릴리패드 아두이노확장쉴드 이더넷쉴드와이파이쉴드모터쉴드무선쉴드 스마트경인교육대학교러닝코딩과학영재광명교육지원청교육원
스마트경인교육대학교러닝코딩과학영재광명교육지원청교육원 개발환경설치 아두이노홈페이지접속 Download 선택, arduino.cc 사용하는컴퓨터의 OS 에맞는개발환경프로그램선택
Windows Installer 를선택 아두이노통합개발환경설치
아두이노보드를컴퓨터에연결 장치관리자에서아두이노보드확인자동인식되지않은경우수동으로드라이브설치아두이노통합개발환경실행파일이있는폴더아래에 drivers 라는폴더에서. 아두이노통합개발환경 (IDE) 실행보드설정 - 아두이노보드선택포트설정 - 보드가연결된포트선택 ( 장치관리자참고 )
통합개발환경사용법 - 컴파일 - 업로드작성된코드에대한에러검사에러없을경우보드로업로드 - 저장 - 열기 - 새파일 - 시리얼모니터실행직렬포트로데이터송수신하는프로그램실행
파일 예제 Basic- Blink 컴파일 - 업로드 Gnd 와 13 번사이에불이깜박이면이상없음
Ⅱ. 디지털기초이해
아날로그신호 연속해서변화하는 양 ( 量 ) 의개념을가리킨다. 예를들면온도나습도, 전압, 음의크기, 이들모두아날로그양이다. 보통이것을 숫자 로표시한다. 그러나숫자는이론적으로불연속 ( 디지털 ) 이고, 양 을정확하게표현할수없다. 숫자 를사용하는것은어디까지나편의에따라사용하는것이다. 전기회로는 아날로그회로 와 디지털회로 로구분된다. 아날로그회로에서는연속되는아날로그신호파형을그대로취급하며, 확대 ( 증폭 ) 하거나축소 ( 감쇠 ), 또는변형 ( 특성변화, 꼬임 ) 시키기도한다. 즉, 신호를본래아날로그양그대로취급하는것이아날로그회로이다. 이와는달리디지털회로에서는연속된 양 은다루지않고, 주로전압이 있다 혹은 없다 라는불연속적인동작만일어난다. 따라서디지털회로에서소리와같은아날로그양을다룰때는반드시사전에디지털변환 ( 코드화 ) 하여 숫자 와같은불연속적인기호로전환해야한다.
디지털신호 정보를표현하는방법에있어서아날로그가모양으로표시된다면디지털은정확하게 '0 과 1' 이라는수치로표시되는것을말한다. 아날로그의경우자연상태의정보를전달하기때문에먼거리로전송할경우변형되기쉽지만디지털은 0 과 1 이라는숫자로변형시켜전달하기때문에훨씬먼거리까지정확하게전송할수있다. 디지털방식은주로컴퓨터에서사용되고있으며, 최근에는방송분야에도입되어선명한영상과함께쌍방향멀티미디어형태의다양한기술들을가능하게해주고있다. 0 과 1 을사용한 2 진부호로나타낸불연속적인정보이다. 레이저의꺼지고켜짐이디지털신호의 0 과 1 에대응된다. 데이터전송과통신에서는양질의전송을위하여디지털방식을이용하고있다. 디지털시스템은설계하기가쉬우며, 정보저장이쉽고, 정밀성과정확성이더큰것은물론프로그래밍할수있으며, 더많은디지털회로가 IC 칩으로집적될수있다는장점이있다.
브레드보드사용법 그림기준세로방향구멍 5 개연결 가로방향각각분리
브레드보드사용법 붉은색선을따라세로방향연결파란색선을따라세로방향연결
회로구성하기주어진회로를브레드보드에구성하시오. 저항은 + 단자와 단자를구분하지않음.
브레드보드사용법 아래회로구현예
아래회로구현예
회로구성하기주어진회로를브레드보드에구성하시오 LED 는 + 단자와 단자구분
십의자리일의자리를읽고여기에다가승수를곱하면됨 V = I R 즉전압이 5 = 0. 5m 10k 옴
실습규칙 1 아두이노보드의 5v 핀과 GND 핀을바로연결하지않습니다. 합선, 쇼트 ^^ 실습규칙 2 아두이노보드의 5v 핀과 GND 핀을바로연결하지않습니다. 합선, 쇼트 ^^ 실습규칙 3 아두이노보드의 5v 핀과 GND 핀을바로연결하지않습니다. 합선, 쇼트 ^^
다음과같이회로를구성전류는 5V (+) 핀에서흘러나와서 LED 의긴핀 (+) 으로들어가서짧은핀 (-) 로나온다. 전류는저항을거져 GND(-) 로들어간다. LED 에전류가흐르기때문에 LED 가켜진다. 저항 : 330[Ω]
실습 Turn on LED LED 는극성에주의 LED 의긴핀 : + LED 의짧은핀 : - [ 단계 1] LED 의두핀중에서길이가긴핀을아두이노보드의 5V 핀에연결. [ 단계 2] LED 의두핀중짧은핀을 330[Ω] 저항의한쪽핀에연결.
실습 Turn on LED [ 단계 3] 아무것도연결되지않은저항의한쪽핀을아두이노보드의 GND 핀과연결. [ 고찰 ] 전류는 5V (+) 핀에서흘러나온다. 전류는 LED 의긴핀 (+) 으로들어가서짧은핀 (-) 로나온다. 전류는저항을거져 GND(-) 로들어간다. LED 에전류가흐르기때문에 LED 가켜진다.
두개의 LED 점등 저항 : 330[Ω]
실험 1 준비물 : 전원공급장치, 브래드보드, 7408IC, 4.7K 저항, 330 저항, 적색 LED, 녹색 LED, DIP 스위치 입력 출력 A B Z 0 0 0 1 1 0 1 1
실험 1 준비물 : 전원공급장치, 브래드보드, 7432IC, 4.7K 저항, 330 저항, 적색 LED, 녹색 LED, DIP 스위치 입력 출력 A B Z 0 0 0 1 1 0 1 1
실험 1 준비물 : 전원공급장치, 브래드보드, 7400IC, 4.7K 저항, 330 저항, 적색 LED, 녹색 LED, DIP 스위치 입력 출력 A B Z 0 0 0 1 1 0 1 1
Ⅲ. 아두이노실습
실험 1 아두이노스케치의기본구조 - 기본구조 setup() 제일먼저실행되는함수. setup() 함수종료후 loop() 함수실행 loop() loop() 함수내의코드는무한반복됨. 디지털신호출력 - Blink 예제 PinMode() 핀의입출력결정첫번째인자핀번호두번째인자입출력결정 digitalwrite() 디지털값출력첫번째인자핀번호 두번째인자핀상태 delay() 괄호안의시간만큼지연 단위는 ms void setup() { pinmode(13, OUTPUT); void loop() { digitalwrite(13, HIGH); delay(1000); digitalwrite(13, LOW); delay(1000);
실험 1
실험 2
#define DELAY_TIME 100 void setup(){ pinmode(2. OUTPUT); pinmode(3. OUTPUT); pinmode(4. OUTPUT); pinmode(5. OUTPUT); pinmode(6. OUTPUT); void loop(){ digitalwrite(2.high); delay(delay_time); digitalwrite(2.low); digitalwrite(3.high); delay(delay_time); digitalwrite(3.low); digitalwrite(4.high); delay(delay_time); digitalwrite(4.low); digitalwrite(5.high); delay(delay_time); digitalwrite(5.low); digitalwrite(6.high); delay(delay_time); digitalwrite(6.low); digitalwrite(5.high); delay(delay_time); digitalwrite(5.low); digitalwrite(4.high); delay(delay_time); digitalwrite(4.low); digitalwrite(3.high); delay(delay_time); digitalwrite(3.low); 실험 2
실험 2 #define DELAY_TIME 100 #define 매크로상수로선언하는명령어상수란처음한번값을할당하고사용하는것을말한다. 여기서 100 의값을갖는 DELAY_TIME 이라는매크로상수를선언한것이다.
실험 3
버튼을사용하여불을깜박이는프로그램 실험 3 #define LED 12 #define BUTTON 7 void setup() { pinmode(led, OUTPUT); pinmode(button, INPUT); void loop() { if (digitalread(button)==hi GH){ digital Write(LED, HIGH); delay(500); digital Write(LED, LOW);
버튼을사용하여불을깜박이는프로그램 실험 3
버튼을사용하여불을깜박이는프로그램 실험 3 풀업 입력핀과전원사이를저항을두고연결한다. 스위치가연결되지않으면입력핀은 5V 가된다.
버튼을사용하여불을깜박이는프로그램 실험 3 풀다운 입력핀과 GND 사이를저항을두고연결한다. 스위치가연결되지않으면입력핀의전압은 0V 가된다.
실험 3 If( 조건 ){ ----------- If 문 If 문은조건이참이면괄호안의코드를실행시킨다. (digitalread(button)==high){ == 기호는좌우가같은지비교하는것이다. 만약동일하면참이고다르면거짓이다. 프로그래밍에서는참을 true, 거짓을 false 라고한다.
실험 3 If( 조건 ){ else{ ----------- ----------- If 문에는 else 가붙는경우도있다. 조건이동일하지않으면 else 쪽괄호코드가실행된다.
실험 3 #define LED 12 #define BUTTON 7 void setup() { pinmode(led, OUTPUT); pinmode(button, INPUT); void loop() { if (digitalread(button)==high){ digital Write(LED, HIGH); delay(500); digital Write(LED, LOW);
실험 3 과제 Led 순차적으로켜지는회로를배웠습니다. 버튼을누르면거꾸로가는회로를만들어보세요
실험 4-1 삼색 LED 삼색 LED 는빛의삼원색을제어하여원하는색을나타내는 LED 다.
실험 4-1
실험 4-1 #define RED 11 #define GREEN 10 #define BLUE 9 void setup() { randomseed(analogread(0)); void loop() { analogwrite(red, random(255)); analogwrite(green, random(255)); analogwrite(blue, random(255)); delay(1000); randomseed(analogread(0)); 키값을이용하여난수생성기를초기화하는명령어 random(255); 0 이상 255 미만의랜덤한수를발생함
실험 4-2
#define RED 11 #define GREEN 10 #define BLUE 9 #define RED_BUTTON 4 #define GREEN_BUTTON 3 #define BLUE_BUTTON 2 int r=0, g=0, b=0 void setup() { pinmode(red_button, INPUT); pinmode(green_button, INPUT); pinmode(blue_button, INPUT); void loop() { if(digitalread(red_button) == HIGH){ ++r; if(r>255){ r=0; 실험 4-2 if(digitalread(green_button) == HIGH){ ++r; if(r>255){ r=0; if(digitalread(blue_button) == HIGH){ ++r; if(r>255){ r=0; analogwrite(red. r); analogwrite(green. g); analogwrite(blue. b); delay(10);
실험 4-2 ++a; ++ 기호는해당변수에 1 을더한다는뜻이다. --a; -- 기호는해당변수에 1 을뺀다는뜻이다.
실험 4-2 과제 - 색을감소시켜서변화시키는삼색 LED 프로그램을만들어보세요 - 신호등을만들어보세요
실험 5-1
실험 5-1
실험 5-1
실험 5-1
#include "pitches.h" int melody[] = { NOTE_G4, NOTE_G4, NOTE_A5, NOTE_A5, NOTE_G4, NOTE_G4, NOTE_E4, NOTE_G4, NOTE_G4, NOTE_E4, NOTE_E4, NOTE_D4, 0, NOTE_G4, NOTE_G4, NOTE_A5, NOTE_A5, NOTE_G4, NOTE_G4, NOTE_E4, NOTE_G4, NOTE_E4, NOTE_D4, NOTE_E4, NOTE_C4, 0; int notedurations[] = { 1,1,1,1, 1,1,2, 1,1,1,1, 3,1, 1,1,1,1, 1,1,2, 1,1,1,1, 3,1; 실험 5-1
실험 5-1 void setup() { for (int thisnote = 0; thisnote<26; thisnote++){ int noteduration = 250 * notedurations[thisnote]; tone(8, melody[thisnote],noteduration); int pausebetweennotes = noteduration * 1.30; delay(pausebetweennotes); notone(8); void loop(){
실험 5-1
실험 5-1
실험 5-1
실험 5-2
#define NOTE_C4 262 #define NOTE_D4 294 #define NOTE_E4 330 실험 5-2 int pins[] = {2, 3, 4; int notes[] = {NOTE_E4, NOTE_D4, NOTE_C4; void setup() { for(int i = 0; i<3; i++){ pinmode(pins[i], INPUT); void loop() { for(int i = 0; i <3; i++){ if(digitalread(pins[i]) == HIGH){ tone(8, notes[i], 20);
실험 5-2 과제 : 피아노건반의수를늘려서음악을재생해봅시다. 삼색 Led 활용하여피아노건반을만들어봅시다.
실험 6-1 빛의밝기가밝아지면저항이줄어든다.
실험 6-1
실험 6-1
실험 6-1 void setup() { void loop() { analogwrite(9,map(analogread(a0),0,1023,0,255)); 기준값 기준값이속한범위의최소값 기준값이속한범위의최소값 변환하고자하는범위의최소값 변환하고자하는범위의최소값 Map : 특정범위에속하는값을다른범위의값으로변환해주는명령어
실험 6-2
실험 6-2
실험 6-2 void setup() { void loop() { tone(8,map(analogread(a0),0,1023,31,4978),20); delay(500); 피에죠스피커가낼수있는음의범위
실험 6-2 빛이밝을수록 LED 밝아지도록수정해보세요. 빛의밝기에따라피에죠스피커의재생시간도다르게만들어보세요
실험 7-1 초음파쎈서에서 Trig 부분이초음파가발사된다 초음파가돌아오는시간을거리로계산한다.
실험 7-1
실험 7-1 #define TRIG 2 #define ECHO 3 #define RED 11 #define GREEN 10 #define BLUE 9 void setup() { pinmode(trig, OUTPUT); pinmode(echo, INPUT); void loop() { digitalwrite(trig,low); delaymicroseconds(2); digitalwrite(trig,high); delaymicroseconds(10); digitalwrite(trig,low); long distance = pulsein(echo,high)/58.2; analogwrite(red,0); analogwrite(green,0); analogwrite(blue,0); if(distance<10){ analogwrite(red,255); else if (distance<20){ analogwrite(green,255); else if (distance<30){ analogwrite(blue,255); delay(100);
실험 7-1 long distance = pulsein(echo,high)/58.2; 확인하고자하는핀번호 목표의상태값 초음파의거리를 cm 로환산
실험 7-2
실험 7-2 #define TRIG 2 #define ECHO 3 void setup() { pinmode(trig, OUTPUT); pinmode(echo, INPUT); void loop() { digitalwrite(trig,low); delaymicroseconds(2); digitalwrite(trig,high); delaymicroseconds(10); digitalwrite(trig,low); tone(8,1000,20); delay(100); tone(8,1000,20); delay(distance); long distance = pulsein(echo,high)/58.2;
실험 7-2 거리에따라삼색 LED 가다양한색으로빛나게한다. 거리에따른음의주기가아니라음의높이를바꾸게한다.
실험 8
실험 8 아노드방식 보통사용하는방식으로 vcc 에전원을연결한다. A~G, DP 핀에전원을 0 으로설정하면 LED 가켜지고 5V 설정하면꺼진다.
실험 8-1
byte digits[10][7]= { {0,0,0,0,0,0,1,//0 {1,0,0,1,1,1,1,//1 {0,0,1,0,0,1,0,//2 {0,0,0,0,1,1,0,//3 {1,0,0,1,1,0,0,//4 {0,1,0,0,1,0,0,//5 {0,1,0,0,0,0,0,//6 {0,0,0,1,1,1,1,//7 {0,0,0,0,0,0,0,//8 {0,0,0,1,1,0,0,//9 ; void setup(){ for(int i=2;i<10;i++){ pinmode(i, OUTPUT); digitalwrite(9,high); void loop(){ for(int i=0;i<10;i++){ delay(1000); displaydigit(i); 실험 8-1 void displaydigit(int num){ int pin = 2; for(int i=0;i<7;i++){ digitalwrite(pin+i,digits[num][i]); 숫자를표시하는함수 DP LED 를끈다.
실험 8-1
실험 8-2
#define PLUS 11 #define MINUS 12 int digit = 0; byte digits[10][7]= { {0,0,0,0,0,0,1,//0 {1,0,0,1,1,1,1,//1 {0,0,1,0,0,1,0,//2 {0,0,0,0,1,1,0,//3 {1,0,0,1,1,0,0,//4 {0,1,0,0,1,0,0,//5 {0,1,0,0,0,0,0,//6 {0,0,0,1,1,1,1,//7 {0,0,0,0,0,0,0,//8 {0,0,0,1,1,0,0,//9 ; void setup(){ pinmode(plus, INPUT); pinmode(minus, INPUT); for(int i=2;i<10;i++){ pinmode(i, OUTPUT); digitalwrite(9,high); void loop(){ if(digitalread(plus) == HIGH){ ++digit; if(digit>9){ digit=0; if(digitalread(minus)==high){ --digit; if(digit<0){ digit=9; 실험 8-2 displaydigit(digit); delay(100); void displaydigit(int num){ int pin = 2; for(int i=0;i<7;i++){ digitalwrite(pin+i,digits [num][i]);
실험 8-2 7 세그먼트 2 개를연결해본다. 숫자가아닌알파벳을연결해본다.