728x90
300x250

[기초전자실습] 온도(LM35), 온습도(DHT22)센서와 아두이노메가 2560 사용

 

아두이노를 활용하여 온도, 온도/습도를 측정할 수 있는 방법에 대해서 소개하려고 한다.

 


1. 아두이노 라이브러리

 

[첨부(Attachment)]

 

https://github.com/adafruit/DHT-sensor-library

 

[DHT11 버전]

DHT11_library.7z

 

[DHT 통합버전(DHT11, DHT22 등)]

DHT-sensor_library.7z

 


2. 하드웨어

 

번호

구분

항목명

비고

1

센서(Sensor)

온도센서

 

2

센서(Sensor)

DHT11(습도, 온도 센서) || DHT22

 

3

보드(Board)

아두이노 메가 2560

 

 

[DHT-11, DHT-22 특징]

 

항목명

DHT-11

DHT-22

온도 측정 범위

0~50℃

-40~80℃

온도 측정 오차

2℃

0.5℃

습도 측정 범위

20~80%

0~100%

습도 측정 오차

5%

2%

측정 간격

1초

2초

 

[LM35 특징]

 

번호 

구분

영어(문장)

한글

1

특징(Features)

 Calibrated Directly in Celsius (Centigrade)

 직접 섭씨(중앙)로 보정됨

2

특징(Features) 

 Linear + 10-mV/°C Scale Factor

 선형(리너) + 10mV/°C 스케일 팩터

3

특징(Features) 

 0.5°C Ensured Accuracy (at 25°C)

 0.5°C의 정확성 보장(25°C)

4

특징(Features)

 Rated for Full −55°C to 150°C Range

 전체 -55°C~150°C 범위에 대해 등급 설정

5

특징(Features)

 Suitable for Remote Applications

 원격 애플리케이션에 적합

6

특징(Features)

 Low-Cost Due to Wafer-Level Trimming

 웨이퍼 레벨 트리밍으로 인한 저비용

7

특징(Features)

 Operates From 4 V to 30 V

 4V ~ 30V 작동

8

특징(Features)

 Less Than 60-μA Current Drain

 60μA 미만의 전류 방전

9

특징(Features)

 Low Self-Heating, 0.08°C in Still Air

 낮은 자체 가열, 정지 공기 중 0.08°C

10

특징(Features)

 Non-Linearity Only ±¼°C Typical

 비선형성만 ±1⁄4°C 일반

11

특징(Features)

 Low-Impedance Output, 0.1 Ω for 1-mA Load

 저임피던스 출력, 1mA 로드의 경우 0.1Ω

12

적용(Applications)

 Power Supplies

 전원 공급류

13

적용(Applications) 

 Battery Management

 베터리 관리

14

적용(Applications)

 HVAC

 

15

적용(Applications)

 Appliance

 가전

 

 

 


3. 소스코드

 

#include <DHT11.h>

const int temperaturePin = 0;
const int DHTPIN = 2;

#define DHTTYPE DHT11

DHT11 dht11(DHTPIN);

float dht_temperature;
float dht_humidity;

void setup() { 
     Serial.begin(9600); //시리얼 통신속도 설정
}
 
void loop() {
     char type = NULL;
     int reading = analogRead(temperaturePin);           // LM35 센서값 읽어오기
  
     printTemperatureHumidity();
  
     Serial.print((5.0*reading*100.0)/1024.0);               // LM35 센서
     Serial.print(",");

     Serial.print( dht_temperature );
     Serial.print(",");
     Serial.print( dht_humidity );
     Serial.print("%");

     delay(1000); // 측정 간격 설정 (1000 = 1초)

}

void printTemperatureHumidity(){
 
     int err;
  
     if (err = dht11.read(dht_humidity, dht_temperature) == 0 ) {
         dht_temperature = dht_temperature + 28; // 보정값
     }else{
         Serial.println("Failed to read from DHT sensor!");
         return;
     }
}


소스코드(DHT11)

 

#include "DHT.h"       // DHT.h 라이브러리를 포함한다

#define DHTPIN 2      // DHT핀 (DATA핀 - 디지털 포트로 구성)

#define DHTTYPE DHT11  // DHT타입을 DHT11 DHT22,

 

DHT dht(DHTPIN, DHTTYPE);  // DHT설정 - dht (디지털 포트번호, dht11)


void setup() {

     Serial.begin(9600);    // 9600 속도로 시리얼 통신을 시작한다

}

 

void loop() {

     delay(2000);

    

     int h = dht.readHumidity();  // 변수 h에 습도 값을 저장

     int t = dht.readTemperature();  // 변수 t에 온도 값을 저장

    

     Serial.print("Humidity: ");  // 문자열 Humidity: 를 출력한다.

     Serial.print(h);  // 변수 h(습도)를 출력한다.

     Serial.print("%\t");  // %를 출력한다

     Serial.print("Temperature: ");  // 이하생략

     Serial.print(t);

     Serial.println(" C");

 

}


소스코드(통합 DHT)

 


4. 참고자료(Reference)

 

1. Arduino Playground - DHT11Lib, Last Modified , Accessed by 2018-08-14, http://playground.arduino.cc/main/DHT11Lib

2. adafruit/DHT-sensor-library: Arduino library for DHT11DHT22, etc, Temp & Humidity Sensors, Last Modified , Accessed by 2018-08-14, https://github.com/adafruit/DHT-sensor-library

3. DHT11, DHT22 and AM2302 Sensors - Adafruit, Last Modified , Accessed by 2018-08-14, https://cdn-learn.adafruit.com/downloads/pdf/dht.pdf

4. LM35 Precision Centigrade Temperature Sensors datasheet (Rev. H), Last Modified , Accessed by 2018-08-14, www.ti.com/lit/ds/symlink/lm35.pdf

반응형
728x90
300x250

[기초전자실습] Lub 18.04 - 아두이노 센서 구현하기

 

루분투 18.04를 활용하여 아두이노 센서 구현 프로젝트를 진행하도록 하겠다.

크게 어렵지 않게 할 수 있다.

 

축약어를 사용하였음. (Lub = Lubuntu 18.04)

 

소프트웨어: Microsoft Windows 10, Oracle VirtualBox GNU/GPL 5.2.16, Arduino 1.8.5, Lubuntu 18.04

 

[참고사항]
1. 아두이노 실험 또는 실습에 임하는 태도는 주변환경을 깨끗하게 치운다.
 -> 적어도 청소는 꼭 하고 진행하기 바람.2. 전기 코드 및 USB 등의 전원사항, 주변 환경 온도 등을 잘 체크하기 바란다.
 -> 노트북 등에서 사용할 경우, 경우에 따라서 USB포트가 고장날 수도 있으니 허브 등으로 예방하기 바란다.

3. 아두이노가 코드 등에 있어서 외형은 쉬워보여도 의외로 많은 시간을 소비한다.

4. 아두이노 실습 또는 실험이 끝난 후에는 뒷 정리를 해야 한다.
    -> 청소  (반드시 부품 등을 식별해야 함. 섞이면 안 됨.)

-> 전선 등을 반드시 줍도록 하고.

-> 케이블, 저항 등은 분류해서 차분하게 정리해서 넣도록 한다.

 


1. 하드웨어 구성하기

 

아래의 그림처럼 키트를 구성하도록 한다.

 

 

그림 1-1. 아두이노와 LM35 센서

 

LM35센서 등을 알고 싶다면, 조그만한 센서 가까이에 눈을 크게 뜨고 본다면 LM35라고 적혀져 있는 것을 볼 수 있다.

눈을 크게 뜨고 봐야 센서의 타입을 알 수 있다.

 

PCB 기판 위에 IC가 박혀있다.(납땜이나 정밀납땜 등으로 굳어진 상태??를 표현하고자 함.)

 

육안으로 보기에는 조금 간신히 보인다.

 

 

그림 1-2. 온도 센서, 도도(Dodo)

 

이 센서는 실제로 다리가 3개 있다.

 

그림 1-3. 온도센서의 실제 모습, 도도(Dodo)

 

실제로는 LM35의 모습은 이렇게 다리가 3개로 구성된 IC로 되어있다.

이러한 타입의 다양한 부품들이 실제로 더 많이 존재한다고 보면 된다.

 

이해를 돕기 위해서 부품을 몇 개 그려보았다.

부품을 만지다보면, 섬세해지는 경향이 있을 수 있다. 참고하기 바란다.

 

 

그림 1-4. 다양한 종류의 부품 형상 예 - 도도(Dodo)

 

적어도 최소한은 데이터시트를 반드시 참고하길 바란다.

 

[첨부(Attachment)]

diversityOfSensor.7z

LM35.7z

 

 


2. 아날로그 - 포트 이해하기

 

나는 아두이노 메가 2560으로 작성하게 되었다.

ESP8266 펌웨어가 내장이 되어있지 않은 제품군이다. 다만, 포트 확장성이 우노(Uno)에 비해서 좋다.

 

아두이노 메가 2560을 자세히 살펴보면, 포트가 굉장히 많다.

아날로그 13개, 디지털 53개 정도 구성되어 있다.

 

쉽게 이야기하면, LCD도 여러 개 부착해도 된다.

 

나는 아두이노 메가 2560이 굉장히 제어할 수 있는 디바이스, 부품이 많다고 주장한다.

 

그림 2-1. 스키메틱(Schematics) - 도도(Dodo)

 

 

 

 

그림 2-2. 스키메틱(Schematics) - 도도(Dodo)

 

그림 2-2에서 보면 아날로그 포트가 A01~A15까지 있다.

즉, 15개의 아날로그 포트가 존재한다는 의미이다.

 

이렇게 Fritizing으로 Atmega 2560 칩에 대한 모습을 살펴볼 수 있겠으나 자세한 건 데이터시트를 찾아보는 것이 좋다.

 

 

 

그림 2-3. 스키메틱(Schematics) - 도도(Dodo)

 

[첨부(Attachment)]

mega2560-lm35.7z

 


3. 실제 구동 시연

 

다음은 두 가지 측면으로 작성하였다. (동시에 진행한다고 가정하고 시청하길 바란다.)

영상 3-1, 영상 3-2를 동시에 보는 것도 하나의 방법이다.

 

임베디드 작업에서 중요한 것은 하드웨어와 소프트웨어를 동시에 작업한다는 것이다.

 

 

영상 3-1. 아두이노 하드웨어

 

 

영상 3-2. 소프트웨어 - 도도(Dodo)

 


4. 코드 

 

아래의 내용은 아두이노에서 작성한 소스코드이다.

 

const int temperaturePin = 0;
 
void setup() {
  Serial.begin(9600); //시리얼 통신속도 설정
}
 
void loop() {
  int reading = analogRead(temperaturePin); //센서값 읽어옴
 
  Serial.print((5.0*reading*100.0)/1024.0);
  Serial.println("do");
  delay(1000); // 측정 간격 설정 (1000 = 1초)
}

 

 


5. 맺음글(Conclusion)

 

간단한 아두이노 메가 기반의 센서에 대해 살펴보았다.

그리고 아날로그 포트와 디지털 포트 등에 대해서도 충분히 자세히 소개하였다.

 


6. 참고자료(Reference)

 

1. LM35 Interfacing with Arduino Mega 2560, Last Modified 2016-07-05, Accessed by 2018-08-12, http://bravelearn.com/lm35-interfacing-with-arduino-mega-2560/

반응형
728x90
300x250

[임베디드(Embedded)] 아두이노 메가 2560, 우노 R3 - LCD 2004A + I2C 동작

 

이번에 소개할 것은 아두이노 메가 2560 - LCD 2004A + I2C 동작을 시키는 실습을 진행할 것이다.

크게 어려운 구성은 아니다.

 

아두이노 라이브러리의 예제 코드 찾기가 무척 힘들다. (Arduino Libraries has difficulted to Sample code.)
이론적으로는 동작이 쉽다. 그러나 코드 라이브러리 찾는데 많은 시간을 소요하다. 
(Arduino has easy to operation for text but it is spend to many time and find for libraries.

 


1. 아두이노 메가 2560 - LCD 2004A + I2C

 

아두이노 메가 2560을 활용하여 LCD 2004A + I2C를 구현하는 실습을 하겠다.

크게 어려운 건 아닌데, 라이브러리에서 찾는데 많은 시간을 소요할 것이다.

 

 

그림 1-1. 실제 구현, 도도(Dodo)

 

 

그림 1-2. 실제 구현, 도도(Dodo)

 


2. 회로 스케치 - 아두이노 2560 

 

 

다음은 회로 스케치이다. 아두이노 2560 메가를 기준으로 작성하였다.

 

 

그림 2-1. 스케치, 아두이노 메가 2560(Arduino Mega 2560) - 도도(Dodo)

 

 

영상 2-1. 회로스케치, 스케메틱(아두이노 메가 2560) - 도도(Dodo)

 

 

영상 2-2. 회로스케치 - PCB (라우팅) - 도도(Dodo)

 

참고로 알아두면 도움이 되는 것은 아두이노 우노나 아두이노 2560하고 큰 차이가 없긴 없다.

 

 

그림 2-2. 스키메틱, 아두이노 우노(Arduino Uno) - 도도(Dodo)

 

다음은 회로 스케치를 할 때 참고한 것이다.

스케치에 해당하는 부품이 없는 경우에는 종종 Fritzing 사이트에서 올라온다. 잘 찾아보면 도움이 될 것이다.

 

 

그림 2-3. LCD PowerTip - LCD 2004A(20x4) - 도도(Dodo)

 

http://fritzing.org/projects/lcd-powertip-pc2004c-20x4-con-arduino/fab/

 

이 사이트에 접속하면, LCD 2004A 부품을 얻어낼 수 있다. LCD 디스플레이를 부품으로 가져다 쓰려면 접속하면 도움이 많이 된다.

 

[첨부(Attachment)]

Arduino_Uno_i2C_LCD.zip

Arduino_Mega2560_i2c_LCD.zip

 

 

참고로 실제 LCD 2004를 직접 수작업으로 구현할 경우가 있다면, 이 글은 해당되지 않는다.

아두이노의 단점인데, I2C 변형부품을 사용하면 구현도 쉬워진다.

 


3. 아두이노 - 라이브러리

 

https://github.com/marcoschwartz/LiquidCrystal_I2C

 

이 사이트에 접속하면, LCD 2004A 화면 출력을 위한 라이브러리를 얻어낼 수 있다.

 

 

그림 3-1. 아두이노 라이브러리 - 프로젝트

 

아두이노 프로젝트 소스코드를 살짝 개조하면, C++ 처럼 사용가능하다고 주장한다.

이 프로젝트를 "Clone or download"를 눌러서 내려받는다.

 

 

그림 3-2. 라이브러리 파일 압축 해제 - 도도(Dodo)

 

그림 3-2의 모습처럼 압축이 풀어진다. LiquidCrystal_I2C-Master가 설치되었다면, 아두이노 프로그래밍을 하면 된다.

 


4. 코드(Code)

 

 

 

 #include <LiquidCrystal_I2C_AvrI2C.h>
 LiquidCrystal_I2C_AvrI2C lcd(0x27, 16, 2);

 

 // 접근주소: 0x27, 16, 2 (아두이노 Uno)

 // 접근주소: 0x3F or 0x27 (아두이노 Uno)
 

 void setup()
 {
       lcd.begin();
       lcd.backlight();
       lcd.setCursor(0, 0);
 }

 void loop(){
       lcd.clear();
       delay(1000);
       lcd.print("Hello, world!"); //
       lcd.setCursor(0, 1);
       lcd.print("mutlu aysu"); //
       delay(1000);
 }

 #include <Wire.h>                        // i2C 통신을 위한 라이브러리

 #include <LiquidCrystal_I2C.h>        // LCD 2004 I2C용 라이브러리


 LiquidCrystal_I2C lcd(0x3F,20,4);     // 아두이노 메가 2560


 void setup()
 {
      lcd.init();                      // LCD 초기화
      // Print a message to the LCD.

      lcd.backlight();                // 백라이트 켜기
      lcd.setCursor(0,0);             // 1번째, 1라인

      lcd.print("Hello, world!");
      lcd.setCursor(0,1);             // 1번째, 2라인
      lcd.print("Welcome");
      lcd.setCursor(2,3);             // 4번째, 3라인
      lcd.print("DoDo");

 }


 void loop()
 {
 } 

아두이노 우노

아두이노 메가 2560

 헤더 등이 구버전 프로젝트로 추정되는 소스코드이다.

 라이브러리 폴더를 참고하길 바란다.

 

 


5. 실제 구현

 

임베디드 프로그래밍의 장면이다. 크게 어렵게 진행되진 않는다.

 

 

 

 

 

 하드웨어 작업

 소프트웨어 작업

 (Actor): 하드웨어 작업도 보면서, 동시에 키보드를 타이핑하면서 디버깅을 한다.

 그림 5-1. 임베디드 프로그래밍 작성의 예, 도도(Dodo)

 

 

[첨부(Attachment)]

180811-design.7z

 

 


6. 참고자료(Reference)

 

1. Fritzing Project, Arduino I2C LCD Display, Last Modified , Accessed by 2018-08-11, http://fritzing.org/projects/arduino-i2c-lcd-display/fab/

2. Fritzing Project, lcd-powertip-pc2004c-20x4-con-arduino, Last Modified , Accessed by 2018-08-11, http://fritzing.org/projects/lcd-powertip-pc2004c-20x4-con-arduino/fab/

3. Marcoschwartz/LiquidCrystal_I2C, Last Modified , Accessed by 2018-08-11, https://github.com/marcoschwartz/LiquidCrystal_I2C

반응형

+ Recent posts