아두이노
목차
PRJECT6. : 배터리 전압 테스터기 만들기
PRJECT7. : 피에조 부저로 소리내기
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 에 해당됨
회로도
피에조 부저
피에조 부저
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’ 음계를 소리 내도록 한다 .
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); }
푸쉬버튼을 누르면 ‘도레미파솔라시’ 음계를 소리내도록 한다 .
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); } }
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 개
브레드보드 , 연결선 , 아두이노 보드와
PROJECT 08. 아날로그 온도센서로 온도계 만들기
TMP36
으로 온도를 측정하여 LED 를 통해 3 단계로 표시
회로도
코드
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); }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); }
PROJECT 11. 내장 LED 를 이용한 온도계 만들기
필요부품
TMP36
온도센서 1 개
브레드보드 , 연결선 , 아두이노 보드와
USB
케이블
TMP36
온도센서와 아두이노 내장 LED 를 통해 온도계 만들기
사용자 정의 함수의 활용
섭씨 20 도 이하는 LED 두번 깜박임 , 20 도 ~26 도는 네번깜빡임 , 26 도 이상은
6
번깜빡임
회로도
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); }