앱인벤터 온습도 센서 - aeb-inbenteo onseubdo senseo

구글 플레이 스토어에서 다운 받을 수 있는 블루투스 터미널 앱을 사용하지 말고 자신이 코딩한 앱인벤터로 아두이노 우노에 설치된 DHT11 온습도 센서 데이터를 HC-06 블루투스 센서 보드에 의해서 안드로이드 폰에서 수신해 보자.

앱인벤터 온습도 센서 - aeb-inbenteo onseubdo senseo

필요한 준비물은 아래와 같다.
안드로이드 스마트 폰; HC-06 아두이노 블루투스 센서 보드 X 1
아두이노 우노 보드 X 1; DHT11 온습도 센서X1; 점퍼선 7개

#아두이노 우노 블루투스 배선
HC-06 블루투스 보드의 데이터 선 2개는 TXD 와 RXD 이다. 아두이노 보드의 (0,1)은 코드를 업로딩할 때 사용하기 때문에 점퍼 선을 뺏다 끼웠다 하기가 대단히 불편하므로 SoftwareSerial.h 라이브러리에 의해 (2,3)을 사용하기로 한다.

클라스 선언을 통해 BTSerial (2,3)으로 선언한다. 블루투스 센서 보드의 TXD 가 아두이노 우노에서는 RX 역할을 맡는 2번으로 매칭된다. 마찬가지로 블루투스 센서 보드의 RXD는아두이노 우노에서 TX 역할인 3번으로 매칭된다. DHT11 온습도 센서는 디지털 데이터 핀 5번에 설치하기로 한다. PC와의 통신은 9600 블루투스 통신속도 또한 9600 으로 설정한다. HC-06 의 default 통신 속도는 9600 으로 설정되어 있다.

#스마트폰 블루투스 보드 등록
스마트 폰 블루투스 등록 과정은 사용가능한 디바이스를 찾는 것으로 시작된다. 리스트에 나온 블루투스 보드 중에 하나를 선택 터치하면 해당 디바이스의 PIN 번호를 물어본다. 1234로 입력하자.

앱인벤터 온습도 센서 - aeb-inbenteo onseubdo senseo

#앱 인벤터 코딩 디자인

앱인벤터 온습도 센서 - aeb-inbenteo onseubdo senseo

팔레트의 User Interface에서 ListPicker 1개, 수평배열용 레이아웃 1개, 라벨 1개, Connectivity에서 BluetoothClient 1개, Clock 1개를 사용하기로 한다.

ListPicker 란 앞에서 블루투스 보드 찾기 작업을 하면 사용가능한 디바이스 리스트가 뜨는데 이 중에서 여러개의 블루투스 보드를 등록하게 되면 결국 앱인벤터에서도 그 리스트 중에서 하나를 선택해야 한다. 그런 이유로 ListPiking 이란 명칭이 사용되는 듯하다.

ListPicker를 Viewer Screen1 에 드래그한 후 속성 창에서 Text 입력 박스에 DHT11을 입력한다. center, bold를 포함하는 폰트 세부 정보를 입력 하고 Width 항목에서 Fill parent를 선택하면 화면에서 자동적으로 수평 한 줄을 차지하게 된다.

Layout의 HorizontalArrangement를 드래그 하고 라벨 1개를 선택해 드래그 해 넣고 텍스트 명을 Temp & Humidity 로 해 둔다.

Clock은 DHT11의 샘플링 시간 간격을 2초로 설정하므로 Timeinterval 을 2000 으로 입력한다. 아두이노의 delay(2000)에 해당한다.

앱인벤터 온습도 센서 - aeb-inbenteo onseubdo senseo

#앱 인벤터 블록 편집
ListPicker는 블루투스 사용 시 페어링 이전과 이후에 Address 와 명칭을 처리하는 데 사용된다.

DHT11 이라는 이름의 ListPicker1은 픽(Pick) 전(Before)에 블루투스 클라이언트로서 주소와 이름을 갖는다. Pick 후(After)에는 그 주소와 이름으로 블루투스를 통해 외부 아두이노 우노의 HC_06과 연결(Connect) 한다. 이때 필요한 주소와 이름을 ListPicker1로부터 제공 받는다.

앱인벤터 온습도 센서 - aeb-inbenteo onseubdo senseo

#아두이노 앱인벤터 실행
앱인벤터 블록 편집이 끝나면 디자이너로 빠져나와서 내용을 저장하고 Connect 의 AI Companion 명령을 실행한다. 아울러 QR 코드를 스캔하면 앱인벤터 코드가 실행되어 뜬다. 옸11 버튼을 누르면 블루투스 페어링 ID 가 나타난다. 지금은 1개만 스마트폰에 등록했기 때문에 ListPiking 작업이 대단히 수비다. 98:⦁⦁⦁를 터치 후 잠깐 기다린다.

블루투스가 연결되면 ListPicker1의 DHT11 이 Connected with DHT11 로 바뀐다. 연결된 상태에서 타이머가 작동하며 아두이노 우노에서 2초에 한번씩 샘플된 온습도 데이터가 다수의 바이트 데이터를 한 묶음으로 구성하여 수신된다.

앱인벤터 온습도 센서 - aeb-inbenteo onseubdo senseo

묶음 데이터 구성 방식은 “temperature”+측정된 온도 값+“ C deg” 까지를 블루투스에 출력한 후 줄 바꿈 한다. 이어서 “Humidity: ”+측정된 습도 값+“ %” 까지를 출력한다. 이 2개의 데이터를 합한 정보가 안드로이드 폰에서 다수의 바이트들로 구성된 1개 단위의 정보로 수신되어 2줄로 출력된다. 앱인벤터를 실행해 보자.

앱인벤터 온습도 센서 - aeb-inbenteo onseubdo senseo

한편 SoftwareSerial.h 라이브러리를 사용하지 않고 아두이노 보드의 (0,1)을 사용할 때에는 다음 점을 주의해야 한다. 아두이노 코드를 업로딩할 때에는 HC-06 블루투스 보드의 RXD, TXD 점퍼선을 반드시 빼 놓아야 한다. LED가 지속적으로 껌뻑이는 상태를 확인하자. 컴파일 업로딩이 끝나면 USB 케이블을 제거한 후 RXD, TXD 점퍼선을 다시 끼운다. DC어댑터에 9V 전지가 연결된 잭을 끼우고 스마트폰 앱인벤터 코드에서 페어링 작업을 수행한다. 다소 불편하게 느껴질 수 있다. 단 별도로 클라스 선언을 할 필요가 없으며 시리얼 모니터가 사용하던 Serial.⦁⦁⦁명령들을 그대로 블루투스가 점유하여 사용하게 된다.

■ 준비물

휴몬랩 메이커 미세먼지 키트 : 아두이노, 온습도 센서, 블루투스, 점퍼선, 앱인벤터

■ 회로 구성

아래의 그림을 보고 따라서 회로를 구성해 주세요!

※참고※

여기서 사용된 온습도 센서 모듈은 단자가 총 3개입니다.

따로 저항이 필요 없는 모델입니다.

* 온습도 모듈마다 핀 구성이 다를 수 있으니 모듈에 적혀진 GND(-)와 신호(S) 기호를 잘 확인하세요!

#include #define DHTPIN 5 #define DHTTYPE DHT11 DHT dht(DHTPIN, DHTTYPE); #include SoftwareSerial BTSerial(2,3); // 아두이노의 RX, TX에 블루투스 모듈의 TX, RX를 연결 void setup() { // 아두이노의 시리얼 전송속도(BAUD Rate)와 블루투스의 데이터 전송속도를 같게 해 줌 Serial.begin(9600); BTSerial.begin(9600); } void loop() { int a = dht.readTemperature(); //온도값을 초기화 int b = dht.readHumidity(); //습도값을 초기화 Serial.println(a); Serial.println(b); BTSerial.print("온도 : "); BTSerial.print(a); BTSerial.println("℃"); BTSerial.print("습도 : "); BTSerial.println(b); delay(1000); }

앱인벤터 온습도 센서 - aeb-inbenteo onseubdo senseo

안녕하세요~ 인투피온입니다.
이번 시간에는 '아두이노와 앱인벤터를 통한 온습도 출력하기'를 해보도록 하겠습니다.

앱인벤터 온습도 센서 - aeb-inbenteo onseubdo senseo

앱인벤터 온습도 센서 - aeb-inbenteo onseubdo senseo

디자인은

블루투스 버튼 - 이미지 - 측정값 - 끄기 버튼

이렇게 구성해 봤어요.

앱인벤터 온습도 센서 - aeb-inbenteo onseubdo senseo

앱인벤터 온습도 센서 - aeb-inbenteo onseubdo senseo

앱을 실행하게 되면 먼저 블루투스의 주소와 이름을 가져옵니다.

앱인벤터 온습도 센서 - aeb-inbenteo onseubdo senseo

그리고 '블루투스 연결 버튼'을 누르면 아래 사진처럼 연결 가능한 블루투스의 주소와 이름을 가져와요.

앱인벤터 온습도 센서 - aeb-inbenteo onseubdo senseo

앱인벤터 온습도 센서 - aeb-inbenteo onseubdo senseo

그리고 타이머를 이용해 블루투스가 연결되고

블루투스를 통해 받을 수 있는 바이트 크기가 '0' 이상이라면

블루투스의 텍스트를 가져오게 돼요.

앱인벤터 온습도 센서 - aeb-inbenteo onseubdo senseo

앱인벤터 온습도 센서 - aeb-inbenteo onseubdo senseo

마지막으로 '블루투스 끄기'를 누르게 되면 아래 사진처럼 텍스트가 출력돼요.

앱인벤터 온습도 센서 - aeb-inbenteo onseubdo senseo

앱인벤터 온습도 센서 - aeb-inbenteo onseubdo senseo

위의 회로도를 참고해 주세요

HC-06과 DHT-11의 접지는 서로 다른 핀에 해주셔야 됩니다!!

#include "DHT.h" // DHT 라이브러리 호출

#include 

#define DHTPIN 7     // 온습도 센서가 7번에 연결

#define DHTTYPE DHT11   // DHT11 온습도 센서 사용

SoftwareSerial BTSerial(2,3);

DHT dht(DHTPIN, DHTTYPE); 

  Serial.begin(9600); // 통신속도 9600으로 통신 시작

  Serial.println("DHT11 test!"); // 문자 출력

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

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

  BTSerial.print("Humi: ");

  BTSerial.print(h);// 소수 이하 자리 없음

  BTSerial.print("% Temp: ");

  BTSerial.print(t, 1);//소수 이하 1자리 허용

  delay(2000);// 샘플링 간격 2초 부여

이렇게 온습도의 변화를 어플을 통해 모니터링할 수 있어요.

온도나 습도 관리가 필요한 곳에서 쓸 수 있겠죠?

여기까지 '아두이노와 앱인벤터를 통한 온습도 출력하기'를 해보았습니다~

앱인벤터 온습도 센서 - aeb-inbenteo onseubdo senseo
앱인벤터 온습도 센서 - aeb-inbenteo onseubdo senseo


전자부품 전문 쇼핑몰 인투피온입니다.
필요한 자재에 관한 문의는 홈페이지를 통한 견적 신청, 혹은 전화나 메일로 주시면 빠른 회신을 드릴 수 있도록 하겠습니다.

▶ 홈페이지: http://intopion.com/
▶ 전화: 02-2615-7278
▶ FAX : 02-6124-4242
▶ 메일: [email protected]