• 검색 결과가 없습니다.

[PRJ6]¹èÅ͸®Àü¾ÐÅ×½ºÅͱâ

N/A
N/A
Protected

Academic year: 2021

Share "[PRJ6]¹èÅ͸®Àü¾ÐÅ×½ºÅͱâ"

Copied!
17
0
0

로드 중.... (전체 텍스트 보기)

전체 글

(1)

아두이노

(2)

목차

PRJECT6. : 배터리 전압 테스터기 만들기

PRJECT7. : 피에조 부저로 소리내기

(3)

PROJECT 06. 배터리 전압테스터기 만들기

알고리즘

1.

analogRead() 함수로 아날로그핀 0 번의 값을 읽어들

인다 .

2.

읽어들인 값에 0.0048 을 곱하여 전압으로 변환한다 .

3.

전압 값에 따라 적절한 LED 를 켠다 .

1.6V 이상 : 녹색 LED, 1.4~1.6 : 노랑 LED, 1.4 이하 : 빨강

LED

4.

무한 반복

필요부품

330 

저항 3 개

초록 LED 1 개

노랑 LED 1 개

빨강 LED 1 개

브레드보드 , 연결선 , 아두이노 보드와

USB

케이블

배터리의 전압을 측정하여 LED 를 통해 3 단계로 표시

analogRead()

함수 : 0~5V 전압입력에 비례하여 0-1023 의 정수값을 반환

1

의 반환 값은 (5/1024)V=0.0048V 에 해당됨

회로도

(4)
(5)

피에조 부저

피에조 부저

(6)

PROJECT 07. 피에조 부저로 소리내기 1

// 피에조 부저를 3 번 핀으로 설정 int piezo = 3; // 스위치를 5 번 핀으로 설정 int sw = 5; void setup() { // 피에조 부저가 연결된 핀을 OUTPUT 으로 설정 pinMode(piezo, OUTPUT); // 스위치가 연결된 핀의 모드를 INPUT_PULLUP 상태 ( 초 기 로직레벨을 HIGH 로 설정 ) 로 설정 // 설정된 디지털 핀은 아래와 같은 값을 반환 // 스위치가 열려있다면 ( 누르지 않은 상태 ) HIGH // 스위치를 닫혀있다면 ( 누른 상태 ), LOW pinMode(sw, INPUT_PULLUP); } void loop() { if (digitalRead(sw) == LOW) { analogWrite(piezo, 128); // 50% 듀티사이클 , 0-255 delay(500); digitalWrite(piezo, LOW); } }

푸쉬버튼을 누르면 ‘ 500Hz’ 음계를 소리 내도록 한다 .

(7)

PROJECT 07. 피에조 부저로 소리내기 2

// 피에조 부저를 3 번 핀으로 설정 int piezo = 3; // 스위치를 5 번 핀으로 설정 int sw = 5; // 톤 배열 수 int numTones = 8; // 음계 표준 주파수 (4 옥타브 ) : 도 , 레 , 미 , 파 , 솔 , 라 , 시 , 도 int tones[] = { 261, 294, 330, 349, 392, 440, 494, 523}; void setup() { // 피에조 부저가 연결된 핀을 OUTPUT 으로 설정 pinMode(piezo, OUTPUT); // 스위치가 연결된 핀의 모드를 INPUT_PULLUP 상태 ( 초 기 로직레벨을 HIGH 로 설정 ) 로 설정 // 설정된 디지털 핀은 아래와 같은 값을 반환 // 스위치가 열려있다면 ( 누르지 않은 상태 ) HIGH // 스위치를 닫혀있다면 ( 누른 상태 ), LOW pinMode(sw, INPUT_PULLUP); }

푸쉬버튼을 누르면 ‘도레미파솔라시’ 음계를 소리내도록 한다 .

(8)

PROJECT 07. 피에조 부저로 소리내기 2

푸쉬버튼을 누르면 ‘도레미파솔라시’ 음계를 소리내도록 한다 .

void loop() {

// 스위치가 연결된 핀의 로직레벨이 LOW 라면 // 스위치가 닫혀있는 상태 ( 누른 상태 ) 이므로 , 아래의 블록을 실행 if (digitalRead(sw) == LOW) {

for (int i = 0; i < numTones; i++) {

// 피에조 부저가 연결된 핀으로 지정된 주파수를 가지는 square-wave( 구형파 또는 사각파 ) 를 생성하도록 설정 // 도가 261Hz 의 주파수를 가진다면 , 1 초에 261 번의 square-wave 을 발생시킨다는 의미 // 디지털은 0 과 1 (HIGH 와 LOW) 로 표현되므로 , 1 초 동안에 0 과 1 의 변화를 261 번 주는 것과 같음 tone(piezo, tones[i]); // 0.5초 동안 대기합니다 . delay(500); } // 피에조 부저가 연결된 핀으로부터 square-wave 를 생성을 중단하도록 설정합니다 . noTone(piezo); } }

(9)

PROJECT 08. 아날로그 온도센서로 온도계 만들기

TMP36

으로 온도를 측정하여 LED 를 통해 3 단계로 표시

TMP36

은 0 도에서 500mV 출력 , 1 도 증감하면 10mV 증감 출력

Ex)

측정온도가 20 도이면 500mV + 20x10mV=700mV 출력

analogRead()

함수 : 0~5V(5000mV) 전압입력에 비례하여 0-1023 의 정수 값

을 반환

Ex)

센서 출력으로부터 700mV 가 아두이노로 입력되면

700x(1024/5000)=143

을 반환

143

이란 값으로부터 전압을 역으로 계산하면 143x(5000/1024)=698mV

0

도에서 500mV 를 출력하므로 , 698-500=198 이고 ,

이것을 10 으로 나누어주면 실제 온도값 19.8 도가 나온다 .

회로도

5V

gnd

Analog voltage out

필요부품

330 

저항 3 개

초록 LED 1 개 , 노랑 LED 1 개 , 빨강 LED

1

TMP36

온도센서 1 개

브레드보드 , 연결선 , 아두이노 보드와

(10)

PROJECT 08. 아날로그 온도센서로 온도계 만들기

TMP36

으로 온도를 측정하여 LED 를 통해 3 단계로 표시

회로도

코드

(11)

PROJECT 09. 반복동작 수행을 위한 새로운 함수 정의하기

아두이노 보드에 내장된 LED 를 점등 , 소등을 두번 반복하는 함수 작성

하여 활용

사용자 정의 함수를 작성하여 사용해본다 .

#define LED 13 #define del 200 void setup() { pinMode(LED, OUTPUT); } void blinkLED() { digitalWrite(LED, HIGH); delay(del); digitalWrite(LED, LOW); delay(del); digitalWrite(LED, HIGH); delay(del); digitalWrite(LED, LOW); delay(del); } void loop() { blinkLED(); delay(1000); }

(12)

PROJECT 10. 지정된 횟수만큼 불빛을 깜빡이는 함수정의

불빛이 깜빡이는 횟수와 지연시간을 변경할 수 있는 입력인수를 가지는 함

수를 작성

사용자 정의 함수를 작성하여 사용해본다 .

#define LED 13 void setup() { pinMode(LED, OUTPUT); }

void blinkLED(int cycles, int del) { for(int z=0; z<cycles; z++) { digitalWrite(LED, HIGH); delay(del); digitalWrite(LED, LOW); delay(del); } } void loop() { blinkLED(12, 100); delay(1000); }

(13)

PROJECT 11. 내장 LED 를 이용한 온도계 만들기

필요부품

TMP36

온도센서 1 개

브레드보드 , 연결선 , 아두이노 보드와

USB

케이블

TMP36

온도센서와 아두이노 내장 LED 를 통해 온도계 만들기

사용자 정의 함수의 활용

섭씨 20 도 이하는 LED 두번 깜박임 , 20 도 ~26 도는 네번깜빡임 , 26 도 이상은

6

번깜빡임

회로도

(14)

PROJECT 11. 내장 LED 를 이용한 온도계 만들기

#define LED 13 int blinks = 0; void setup() { pinMode(LED, OUTPUT); } Int checkTemp() { float voltage = 0; float celsius = 0; float hotTemp = 26; float coldTemp = 20; float sensor = 0; int result; //온도센서의 전압을 읽어들이고 섭씨온도로 변환 sensor = analogRead(0); voltage = (sensor*5000)/1024; //mV단위로 변환 voltage = voltage – 500; //전압옾셋 제거 celsius = voltage / 10; //섭씨온도로 변환 if (celsius < coldTemp) { result = 2; }

else if (celsius >= coldTemp && celsius <= hot-Temp) { result = 4; } else {

reslut = 6; // (celsius > hotTemp인 경우 ) }

return result; }

void blinkLED(int cycles, int del) { for(int z=0; z<cycles; z++) { digitalWrite(LED, HIGH); delay(del); digitalWrite(LED, LOW); delay(del); } } void loop() { blinks = checkTemp(); blinkLED(blinks, 500); delay(2000); }

(15)

PROJECT 12. 시리얼 모니터에 측정온도 표시하기

프로젝트 8 의 코드를 활용하여 , 온도를 섭씨와 화씨 단위로 시리얼모니

터에 출력

시리얼 모니터 : 아두이노보드에서 시리얼통신을 통해 컴퓨터의 모니터화면에 데이터를

보여줌

시리얼모니터 사용하기

setup()

함수에서 아래 코드를 작성하여 시리얼 모니터를 활성화 시켜야 함

Serial.begin(9600);

(16)

PROJECT 12. 시리얼 모니터에 측정온도 표시하기

시리얼모니터 사용하기

setup()

함수에서 아래 코드를 작성하여 시리얼 모니터를 활성화 시켜야 함

Serial.begin(9600);

시리얼 모니터로 텍스트 보내기

Serial.print(“Arduino for Everyone!”);

Serial.println(“Arduino for Everyone!”);

시리얼 모니터에 변수값 출력하기

Serial.println(results);

Serial.println(results, 4);

Serial.print(results);

Serial.print(results, 4);

이때 , results 가 float 형인 경우 소수점 이하 4 자리 표시

(17)

PROJECT 12. 시리얼 모니터에 측정온도 표시하기

//Project12 시리얼모니터에 온도표시하기 float celsius = 0; float fahrenheit = 0; void setup() { Serial.begin(9600); } void findTemps() { float voltage = 0; float sensor = 0; //온도센서의 전압을 읽어서 섭씨와 화씨온도로 변환 sensor = analogRead(0); voltage = (sensor*5000)/1024; //mV단위로 변환 voltage = voltage – 500; //전압옾셋 제거 celsius = voltage / 10; //섭씨온도로 변환 fahrenheit = (1.8*celsius) + 32; //화씨온도로 변 환 } void displayTemps() { Serial.print(“Temperature is ”); Serial.print(celsius, 2); Serial.print(“ deg. C / ”); Serial.print(fahrenheit, 2); Serial.println(“ deg. F”); //표시하고 줄바꾸기 } void loop() { findTemps(); displayTemps(); delay(1000); }

참조

관련 문서

고객은 직원과 마찬가지로 서비스의 생산과 전달 과정에 참여 임시 직원으로서의 고객이 가지는 불확실성에 유의해야 함

 개인의 섭식습관과 식단을 크게 변화시키지 않으면서 당분섭취 의 횟수와 양을 줄이고 이상적인 영양소를 공급할 수 있도록

회계기준을 해석ㆍ적용하여 재무제표를 작성 ㆍ공시하거나 회계기준 미비 경우에 적용할 수 있는 일관된 지침제공. 외부감사의견형성의

● 중소기업이 ①「중소기업기본법」의 규정에 따른 중소기업 외의 기업과 합병하는 경우 ②유예 기간 중에 있는 기업과 합병 ③독립성기준의 요건을 충족하지 못하게

[r]

[r]

‚ÓÁÏÓÊÌÓÒÚË ‰Îfl ÒÓÓÚ˜ÂÒÚ‚ÂÌÌËÍÓ‚, ÍÓÚÓ˚ ÔËÂÁʇ˛Ú ‚ äÓ². MINISTRY OF JUSTICE

학습 속도를 유지하고 분류 성능을 높일 수 있는 방법은 기존 사용하고 있던 활성화 함 수를 바꿔주는 것이 좋다고 생각하여 컨벌루션 신경회로망에서 사용하여 유명하게