- Buzzer
- Temperature and humidity sensor
- Real-time clock module
- RFID
- Ultrasonic distance sensor
Buzzer
전기적 신호로 진동판을 진동시켜 소리를 출력하는 부품이다.
마그네틱 부저, 피에조 부저, 메커니컬 부저 등이 있다.
메커니컬 부저는 내부에 있는 판이 진동하는 원리인데, 큰 소리를 내는 데 적합하다.
피에조 부저는 주파수에 따라 소리의 높낮이를 조절할 수 있다.
핀 두개만 연결하여 간단하게 사용가능하다.
pinMode(pin number,mode);
tone(pin number,frequency,time);
핀모드로 output설정을 해주고,
tone함수로 소리를 낼 수 있다.
frequency는 50%의 duty ratio를 갖는다
time은 지속시간인데, 밀리세컨드 단위이다.
int buzzerPin=9;
int songLength=16;
char notes[]="cee egg dff abb"; //악보
int beats[]={1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};//박자
int tempo=200; //노래의 빠르기
void setup()
{
pinMode(buzzerPin,OUTPUT);//부저핀 출력설정
}
void loop()
{
int duration; //부저출력시간에 사용할 변수
for(int i=0;i<songLength;i++)
{
duration=beats[i]*tempo;
if(notes[i]==' ')
delay(duration);
else
{
tone(buzzerPin,frequency(notes[i]),duration);//frequency()는 사용자정의함수
delay(duration);
}
delay(10);
}
}
int frequency(char note)
{
int i;
int notes=8;
char names[]={'c','d','e','f','g','a','b','C'};
int frequencies[]={262,294,330,349,392,440,494,523};
for(i=0;i<notes;i++)
{
if(names[i]==note)
return frequencies[i];
}
return(0);
}
Temperature-humiidity sensor DHT11
DHT11모델이다.
습도는 20~90% 측정가능하며 온도는 0~50도 까지 측정가능하다.
(아날로그 온도측정장비보다 범위가 작다는 단점이 있다)
습도는 +-5, 온도는 +-2 의 오차범위가 있고
출력값이 디지털이다.
DHT11을 단독으로 사용하거나 모듈을 함께 사용할 수 있는데,
모듈 사용 시 추가적인 저항을 연결하지 않아도 되고 핀 개수도 (원래는 4개인데 모듈사용시 3개)적다는 장점이 있다.
DHT sensor 라이브러리를 설치해야한다.
DHT SensorName(sensor pin, sensor type);
SensorName.begin();
SensorName.readTemperature();
SensorName.readHumidity();
이런 메소드가 있다.
#include "DHT.h"
#define DHTPIN 2
#define DHTTYPE DHT11
DHT dht(DHTPIN,DHTTYPE);
void setup()
{
Serial.begin(9600);
dht.begin();//센서시작
}
void loop()
{
unsigned char t=dht.readTemperature();
unsigned char h=dht.readHumidity();
Serial.print("Temperature is");
Serial.print(t);
Serial.print("Humidity is");
Serial.print(h);
delay(2000);
}
Real-time clock module
현재시각을 기억하는 장치이다.
OTP카드 등에 사용된다.
별도의 전원이 있어서, 아두이노가 꺼져있어도 시간을 계산한다.
I2C통신을 한다.
DS1302 rtc(CEPin,IOPin,CLKPin);
rtc.time(); //현재시각 읽기
#include <DS1302.h>
const int CEPin=5;
const int IOPin=6;
const int CLKPin=7;
DS1302 rtc(CEPin,IOPin,CLKPin);
void setup()
{
Serial.begin(9600);
rtc.writeProtect(false); //rtc에 쓰기방지
rtc.halt(false);//시간멈춤 방지
Time t(2015,8,15,00,00,00,Time::kSaturday);
rtc.time(t); //현재 시간을 DS1302에 입력
}
//day데이터를 string으로 반환하는 함수
String dayAsString(const Time::Day day)
{
switch(day){
case Time::kSunday: return "Sunday";
case Time::kMonday: return "Monday";
case Time::kTuesday: return "Tuesday";
case Time::kWednessday: return "Wednessday";
case Time::kThursday: return "Thursday";
case Time::kFriday: return "Friday";
case Time::kSaturday: return "Saturday";
}
return "몰라";
}
void loop()
{
Time t=rtc.time(); //현재시간 읽기
const String day=dayAsString(t.day);
Serial.print(day.c_str());
Serial.print(t.yr);
Serial.print(t.mon);
Serial.print(t.date);
Serial.print(t.hr);
Serial.print(t.min);
Serial.print(t.sec);
delay(1000);
}
RFID
전파를 이용해 원거리의 정보를 인식하는 기술.
모듈과 태그로 나눌 수 있다.
SPI 방식을 사용하고, 라이브러리가 필요하다.
MFRC522 mfrc522(SS_PIN,RST_PIN);
mfrc522.PICC_IsNewCardPresent(); //태그 접촉됐나요
mfrc522.PICC_ReadCardSerial();//내용읽기
Ultrasonic distance sensor
초음파 센서. 거리를 잴 수 있다.
외부 환경에 강한 특징을 갖고 있고, 물체의 색깔에 상관없이 사용할 수 있으며, 투명한 물체도 감지 가능하며 물이나 먼지 등이 있더라도 감지할 수 있는 장점이 있음.
외부에 초음파 발신부가 노출되어야 함.
아두이노가 측정을 시작하라는 trigger신호를 주면, 모듈이 8번의 초음파를 발사하고, 반사되어 돌아오는 신호를 받는다.
물체와의 거리가 L이라면
왔다갔다 하는 거리가 2L이므로
에코펄스폭*340m/s
L= --------------------------
2
대략 이런 계산이 가능하다
'2022-2 > 마이크로프로세서' 카테고리의 다른 글
10. Microprocessor (0) | 2022.11.21 |
---|---|
8. Infrared Remote Control (0) | 2022.11.14 |
7. Motor Drive (0) | 2022.11.07 |
6. Analog Input (1) | 2022.11.01 |
5. Digital Signal Input (0) | 2022.10.23 |
댓글