?>

Hard Copy World

HCW

Q&A

Home > Forum >

Q&A

질문 | 아두이노 + HM-10 + SHT75

페이지 정보

작성자 진심돼지 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 작성일18-07-17 14:16 조회210회 댓글1건

본문

안녕하세요. 
인터넷에서 이것저것 검색하다가 비콘이라는 신기한게 있어서 만들어보려고합니다.
아두이노 + HM-10 + SHT75(온습도센서)을 이용하여 일정거리에 다가가면 온도와 습도를 알려주는 장치를 만들어 보려고 합니다.
온도와 습도의 센서값을 어떻게 비콘을 통해서 핸드폰 어플도 던져 질 수 있는건가요?
제가 해본결과 아두이노에서 HM-10 비콘 모드를 활성화 시키면 거리값은 나오지만 센서의 값은 안나오며,
아두이노에서 소스 업로드뒤 비콘 활성화를 안하면 센서값은 넘어오지만 거리값은 안넘어와서 질문드립니다...
#include "Sensirion.h"
#include <SoftwareSerial.h>

SoftwareSerial BTSerial(2, 3); // SoftwareSerial(RX, TX)

const uint8_t dataPin =  9;              // SHT serial data
const uint8_t sclkPin =  8;              // SHT serial clock
const uint32_t TRHSTEP  = 500UL;      // Sensor query period

Sensirion sht = Sensirion(dataPin, sclkPin);

uint16_t rawData;
float temperature;
float humidity;
//float dewpoint;

byte measActive = false;
byte measType = TEMP;

unsigned long trhMillis = 0;            // Time interval tracking
unsigned long blinkMillis = 0;

void setup() {
  Serial.begin(9600);
  Serial.println("Hello!");

  // 블루투스 포트 열어라
  BTSerial.begin(9600);

  sht.measTemp(&rawData);                // SHT75 온도데이터
  temperature = sht.calcTemp(rawData);
  sht.measHumi(&rawData);                // SHT75 습도데이터
  humidity = sht.calcHumi(rawData, temperature);
  logData();
}

void loop() {
  unsigned long curMillis = millis();       


  // Demonstrate non-blocking calls
  if (curMillis - trhMillis >= TRHSTEP) {   
    measActive = true;
    measType = TEMP;
    sht.meas(TEMP, &rawData, NONBLOCK);        // 온도 측정시작
    trhMillis = curMillis;
  }
  if (measActive && sht.measRdy()) {         
    if (measType == TEMP) {                   
      measType = HUMI;
      temperature = sht.calcTemp(rawData);   
      sht.meas(HUMI, &rawData, NONBLOCK);      // 습도측정시작
    } else {
      measActive = false;
      humidity = sht.calcHumi(rawData, temperature); // Convert raw sensor data
    // dewpoint = sht.calcDewpoint(humidity, temperature);
      logData();
    }
  }

  while (BTSerial.available()){ // 블루투스로 전송
  byte data = BTSerial.read();
  Serial.write(data); // 시리얼 모니터에 출력
  }

  while (Serial.available()){ // 시리얼 모니터 전송

    byte data = Serial.read();
    BTSerial.write(data); // 블루투스에 출력
    }
}

void logData() {
  BTSerial.print("Temperature = "); 
  BTSerial.print(temperature);
  BTSerial.print("C");
  delay(500);
  BTSerial.print("Humidity = "); 
  BTSerial.print(humidity);
  BTSerial.print("%");
  delay(500);
 }


댓글목록

최고관리자님의 댓글

최고관리자 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 작성일

비컨 모드일때는 수신 신호의 강도를 이용해 대강의 거리를 측정할 수 있습니다. 하지만 BLE 연결이 맺어지면 비컨 모드는 종료되므로 거리를 측정하기 힘듭니다. 온습도 센서값을 얻기 위해 연결을 했다면 비컨 모드는 종료되어서 거리값을 얻지 못했을겁니다.
온습도 센서의 값을 비컨 데이터에 실어서 전송하면 이런 문제점들을 해결할 수 있긴 합니다. BLE 연결 없이 비컨 데이터만 보고 온습도 센서값을 얻으면 됩니다. 관련한 HM-10 AT 커맨드를 뒤져보셔야 할 것 같습니다.