레이블이 온도센서인 게시물을 표시합니다. 모든 게시물 표시
레이블이 온도센서인 게시물을 표시합니다. 모든 게시물 표시

2016년 11월 4일 금요일

아두이노 LCD와 온습도센서로 불쾌지수 표현하기


이번에는 LCD(16*2)와 저번에 소개했던 DHT11 온습도 센서로 불쾌지수를 측정 해보기로 했다.



위의 사이트에 온도와 상대습도로 불쾌지수를 산출해주는 공식이 나와있다.



위의 공식에 온도와 습도(%)를 대입하면 불쾌지수가 나온다.



이번에는 아두이노 나노를 사용하겠다.




위의 i2c변화기를 lcd에 납땝하여 사용한다.

GND는 GND
VCC는 5v
SDA는 A4
SCL는 A5

왼쪽은 i2c 오른쪽은 아두이노로

위와 같이 연결하면된다.


온습도센서의 Vcc는 아두이노 5V
GND는 아두이노 GND
DATA핀은 아두이노2번핀에 연결한다.

DHT11 라이브러리와
LCD i2c 라이브러리를 구글링하면 나오니깐
다운 받은후 라이브러리를 추가하자





추가후 아래의 코드를 복사 & 붙이기 해서 업로드해보자

/////////////////////////////////////////////////////////////////////
//Compatible with the Arduino IDE 1.0
//Library version:1.1
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <DHT11.h>
DHT11 dht11(2);
LiquidCrystal_I2C lcd(0x27, 16, 2); // set the LCD address to 0x20 for a 16 chars and 2 line display
int calculate(int, int);
void setup()
{
  lcd.init();                      // initialize the lcd
  // Print a message to the LCD.
  lcd.backlight();
}
char d[] = {"Discomfort index"};
char state[4][5] = {
  {"Great"},
  {"Good "},
  {"Soso "},
  {"Bad  "}
};
int s;
void loop()
{
  lcd.clear();
  lcd.setCursor(0, 0);
  for (int i = 0; i < 16; i++)
    lcd.print(d[i]);
  int err;
  float temp, humi;
  lcd.setCursor(0, 1);
  if ((err = dht11.read(humi, temp)) == 0) {
    lcd.print(':');
    lcd.print(calculate(temp, humi / 100));
    lcd.print(calculate(temp, humi / 100) % 10);
    if (calculate(temp, humi / 100) < 68) s = 0;
    else if (calculate(temp, humi / 100) < 75) s = 1;
    else if (calculate(temp, humi / 100) < 80) s = 2;
    else s = 3;
  }
  lcd.setCursor(6, 1);
  for (int i = 0; i < 5; i++)
    lcd.print(state[s][i]);
  delay(DHT11_RETRY_DELAY);
}
int calculate(int t, int rh) {
  int i = (9 / 5) * t - 0.55 * (1 - rh) * ((9 / 5) * t - 26) + 32;
  return i;
}
//////////////////////////////////////////////////////////////



원래 lcd.print를 하면 문자열도 가능하지만
이상하게 문자열의 첫글자만 나와서 코드가 복잡해진 것이니 어쩔수없다.




업로드후 아두이노를 살펴보면

Discomfort index
:지수    상태

의 형태로 나와야 정상이다.

지수는 말그대로 불쾌지수이고
상태는 본문 처음에 나와있던 사이트의 상태를 적용해본 것이다.




지금은 불쾌지수가 54이므로 쾌적한 상태이다.




2016년 10월 17일 월요일

아두이노 온도센서로 온도 측정하기

온도센서를 이용하여
시리얼 모니텅 창에 현재 온도를 표시한다.
준비물은 아두이노, LM35이다



LM35의 핀 배열은 위와같이

왼쪽에서부터 Vcc, OUTPUT, Gnd 이다.



LM35의 Vcc는 아두이노 5v
OUTPUT은 아날로그 어떤 핀에든지 꽂을수 있지만
이번 포스트에서는 A0에 꽂는다.

Gnd는 아두이노 Gnd에다 꽂는다.


///////////////////////////////////////////////////////////////////////////////////
#define Temp_pin A0
void setup() {
  Serial.begin(9600); //시리얼 통신 시작및 속도 설정
}

void loop() {
  int read = analogRead(Temp_pin);
  float Temperature = (5.0 * read * 100.0) / 1024.0;

  Serial.print(Temperature); //온도 출력
  Serial.println("°C");  //단위 출력(섭씨)
  delay(500);
}

////////////////////////////////////////////////////////////////////////////////


위의 프로그램을 업로드 한다.



그럼 위와같이 현재 온도가 0.5초 간격으로 나올것이다.


정수 부분은 그럭 저럭 잘 나오는것 같은데

소수부분이 좀 정확성이 떨어지는것 같다.