Arduino 피에조 부저, 조도센서, PIR센서, 온습도 센서, lcd모니터

부저 다리를 보면 - + 라고 써져 있을거다

+에는 핀 번호를 -에는 GND를 연결

회로는 이렇게 구성하자

 

피에조 부저에 진동판이 있고 이 진동판이 진동될때 주파수가 활용된다

피에조 부저는 전기적인 신호를 소리로 변환해주는 소자이다

tone(핀번호, 주파수) & tone(핀번호, 주파수, 시간)

 

void setup() {
  tone(7,330);
}

void loop() {

}

일단 소리가 울리는지 보자.

잘 울리게 된다

 

문제)

도레미파솔라시도를 세 번 연주하고 피에조 부저에서 발생되는 소리가 멈추도록 작업하기

더보기
int count = 1;
double to[7] = {261.6, 311.1, 329.6, 349.2, 392.0, 440.0, 493.9};
void setup() {

}

void loop() {
  if(count<4) {
    for(int i=0; i<7; i++) {
      tone(7,to[i],300);
      delay(300);
    }
    count += 1;
  }
}

 

 

조도센서를 보자.

조도센서는 가변저항이라고 생각하면 편하다

빛이 없으면 저항이 올라가고

빛이 있으면 저항이 낮아진다.

회로는 이렇게하고

void setup() {
  Serial.begin(9600);
}

void loop() {
  int value = analogRead(A0);
  Serial.println(value);
  delay(1000);
}

시리얼 모니터를 보고

빛을 없애면 값이 커지고 빛을 보게하면 값이 줄어든다.

여기서 +와 -를 바꿔주면 결과값은 정 반대가 된다.

 

 

문제)

조도센서가 500이상이면 LED 켜기

더보기
void setup() {
  pinMode(12,OUTPUT);
}

void loop() {
  int value = analogRead(A0);
  if(value >= 500)
    digitalWrite(12, HIGH);
  else
    digitalWrite(12, LOW);
  delay(500);
}

 

 

문제)

조도센서 값에 따라 LED 밝기 조절하기

더보기
void setup() {
  pinMode(11,OUTPUT);
}

void loop() {
  int value = analogRead(A0);
  analogWrite(11,map(value,0,1023,0,255));
  delay(500);
}

 

PIR센서를 보자.

전압은 5V이고 거리는 110cm정도 안에 있는것을 감지한다.

 

왼쪽과 오른쪽이 있는데

오른쪽은 신호지속시간

왼쪽은 민감도 이다

 

십자드라이버 시계방향으로 돌리면 민감도를 낮추고 지속시간은 올라가고

반대로 돌리면 민감도를 올리고 지속시간은 낮아진다.

 

그리고 꼽는 핀이 3가지가 있는데

왼쪽 = GND

가운데 = 핀

오른쪽 = + 연결해주면 됩니다.

 

 

 

온습도 센서를 보자.

라이브러리 관리로 들어가서

dht11 검색 후 설치를 해준다.

그리고 #include "DHT.h" 상단에 입력해주면 된다.

 

온습도 센서를 보면 다리에 +, out, - 이렇게 써져 있다 out에는 핀번호를 넣어주면 된다.

회로 사진은 온습도 센서가 없어서 못올린다.

#include "DHT.h"
#define DHTTYPE DHT11
#define DHTPIN A1
DHT mydht11(DHTPIN,DHTTYPE); // DHT11객체 생성
void setup() {
  Serial.begin(9600);
  mydht11.begin();
}

void loop() {
  float humidity_val = mydht11.readHumidity(); // 습도 가져오기
  float temp_val = mydht11.readTemperature(); // 섭씨 온도 가져오기
  float f_temp_val = mydht11.readTemperature(true); // 화씨온도측정
  delay(2000); //측정하기 전에 2초이상 간격을 주고 측정하기 위해 초기화할 시간을 적용
  if(isnan(humidity_val) || isnan(temp_val) || isnan(f_temp_val)) {
    Serial.println("Fail~~~");
    return; // 현재작업을 종료
  }
  //화면에 출력하기
  Serial.println((String)"humidity:"+humidity_val);
  Serial.println((String)"temp:"+temp_val);
  Serial.println((String)"f_temp:"+f_temp_val);
  
}

 

 

 

LCD모니터를 보자.

GND - LCD가 작동하기 위해 GND에 연결하는 핀 - -핀

VDD - 전원 - +핀

V0 - LCD에 표시되는 글자를 흐리게 표시할지 진하게 표시할지를 결졍하는 핀으로 주로 가변저항과 연결해서 사용하며 가변저항의 입력단자와 연결을 한다. - 가변저항 연결

RS - LCD에 명령어나 데이터가 전달되는 시점을 알려주는 핀 - 디지털 핀을 넣어주면 됨.(12핀)

RW - LCD의 값을 읽을지 LCD에 값을 쓸지 결정하는 핀 - GND에 연결함

E - enable로 활성화 할것인지 결정하기 위한 핀 - 디지털 핀에 연결함 (11핀)

D0~7 - 아두이노와 LCD가 데이터를 주고 받을 핀으로 라이브러리에 정의되어 있는 스펙에 따라 적절하게 핀을 선택할수 있다. - 7,6,5,4만 꼽아준다.

BLA - 저항 220옴 연결 LCD의 LED를 겨기 위한 핀으로 애노드 - +핀

BLK - LCD의 LED를 켜기 위한 핀으로 캐소드 - -핀

 

글자는 가변저항을 돌리면 나오게 된다.

#include <LiquidCrystal.h> //LCD 모니터 사용
//LiquidCrystal(rs, enable, d4, d5, d6, d7)
LiquidCrystal lcd(12,11,4,5,6,7);
int count;

void setup() {
  //LDC초기화 start
  //가로 두 줄, 세로로 16글자를 표현할 수 있다.
  lcd.begin(16,2);
  lcd.print("hello");
}

void loop() {
  //첫번째 줄 - hello
  //두번째 줄로 이동해서 출력하고 싶은 경우 커서를 이동
  lcd.setCursor(0,1); //열, 행
                      //열 - 16글자 (0~15), 행 - 2라인(0 ~ 1)
  //lcd.print("123456789");
  //lcd.print("한글"); - 지원되지 않는다.
//  for(int i=1; i<= 9; i++) {
//    lcd.print(i);
//    delay(500);
//  }
  lcd.print("test:"+(String)count++);
  delay(1000);
}

 

#include <LiquidCrystal.h>
LiquidCrystal lcd(12,11,4,5,6,7);

void setup() {
  lcd.begin(16,2);
  lcd.print("hello , Arduino~~~~");
}

void loop() {
  lcd.scrollDisplayLeft();
  delay(500);
}

이렇게하면 글자가 오른쪽에서 나타날것이다.

 

문제)

LCD에 움직이는 텍스트를 출력하기

-scrollDisplayLeft(), scrollDisplayRight()를 활용하기

- 왼쪽으로 움직이고 끝을 만나면 다시 오른쪽으로 움직일 수 있도로 구현

- 오른쪽도 동일하게 움직이도록 구현하기

더보기
#include <LiquidCrystal.h>
LiquidCrystal lcd(12,11,4,5,6,7);

void setup() {
  lcd.begin(16,2);
  lcd.print("hello, Arduino~~~");
}

void loop() {
  for(int i=0; i<17; i++) {
    lcd.scrollDisplayLeft();
    delay(500);
  }
  for(int i=0; i<17; i++) {
    lcd.scrollDisplayRight();
    delay(500);
  }
}

회로도는 위와 동일

 

 

문제)

LCD와 DHT11을 이용해서 작업

- lcd의 첫 번째 줄 : 습도 출력

- lcd의 두 두번째 줄 : 온도 출력

더보기
#include <LiquidCrystal.h>
#include "DHT.h"

#define DHTTYPE DHT11
#define DHTPIN A1

LiquidCrystal lcd(12,11,4,5,6,7);
DHT mydht11(DHTPIN,DHTTYPE);
void setup() {
  lcd.begin(16,2);
  mydht11.begin();
  lcd.print("humidity:");
  lcd.setCursor(0,1);
  lcd.print("temp:");
}

void loop() {
  float humidity = mydht11.readHumidity();
  float temp = mydht11.readTemperature();
  delay(2000);

  lcd.setCursor(10,0);
  lcd.print(humidity);
  lcd.setCursor(6,1);
  lcd.print(temp);  
}

 

 

 

댓글

Designed by JB FACTORY