https://catch-sin.tistory.com/11
이전 포스팅에서는 LED와 부저 작동에 관한 코딩을 작성하고 실제 결과를 확인했습니다.
이번 포스팅에서는 온습도 센서를 통해 도출한
온도, 습도, PMV, PPD를 휴대폰으로 출력하려고 합니다.
발전 방향은 다음과 같습니다.
블루투스 교신을 위한 발전방향
1. 블루투스 모듈 회로 구성
2. MIT App Inventor 를 이용한 화면 구성 및 코딩
3. 블루투스 교신을 위한 아두이노 코딩 작성
4. PPD 계산
5. 휴대폰에 결과값 출력
6. 1~4편까지의 결과물
1. 블루투스 모듈 회로 구성
HC06 모듈 일러스트가 없어서 선만 표시하였습니다.
실제로 설치는 다음과 같이 하시면 됩니다.
HC06 아래에 VCC/GND/TXD/RXD 가 적혀있으므로 순서에 맞게 회로를 구성해주시면 됩니다.
2. MIT App Inventor 를 이용한 화면 구성 및 코딩
https://www.youtube.com/watch?v=wJCs8k1t6cg
저는 이분 유튜브를 참고해서 MIT App Inventor 화면구성과 코딩을 하였습니다.
전체를 이용한 것은 아니고 일부만 이용하였는데, 그 결과는 다음과 같습니다.
이 화면 구성에 대해서는 영상을 참고하시는 편이 훨씬 나으실 것 같습니다.
사실 그냥 가져다 두기만 해도 어느정도 구성이 가능합니다.
코딩은 다음과 같습니다.
첫째 블록부터 간단하게 설명을 드리자면
1. 블루투스 주소를 가져온다
2. 블루투스를 연결한다.
3. 블루투스를 통해 받은 정보를 출력한다.
로 설명할 수 있습니다.
다음과 같은 화면구성과 코드구성을 마치셨다면 MIT App Inventor에서 할 내용은 다 끝났습니다.
3. 블루투스 교신을 위한 아두이노 코딩 작성
#include <SoftwareSerial.h> // 블루투스 교신을 위한 라이브러리 가져오기 SoftwareSerial HC06(A4, A5); //블루투스 교신 TX, RX #include <DFRobot_DHT11.h> DFRobot_DHT11 DHT; #define DHT11_PIN A0 void setup(){ Serial.begin(9600); HC06.begin(9600); //블루투스-휴대폰통신 속도지정 } void loop(){ DHT.read(DHT11_PIN); //계산부 float ps = 6.112*exp(17.62*DHT.temperature/(243.12+DHT.temperature)); float fp = 1.0016 + 3.15*pow(10,-6)*760 - 0.074/760; float pm = fp*ps; float pa = DHT.humidity*pm; float fcl = 1.0903; float icl = 0.07; float hc = 4.3; float tcl=0.0008144*pow(DHT.temperature,2)+0.3488*DHT.temperature+21.24; float M = 58.2; float H = 3.96*pow(10,-8)*fcl*(pow((tcl+273),4)-pow((DHT.temperature+273),4))+fcl*hc*(tcl-DHT.temperature); float Ec = 3.05*pow(10,-3)*(5733-6.99*M-pa)-0.42*(M-58.15); float C = 0.0014*M*(34-DHT.temperature); float Er = 1.7*pow(10,-5)*M*(5867-pa); float PMV = (0.303*exp(-0.036*M)+0.028)*(M-H-Ec-C-Er); float PPD = 100 - 95*exp(-(0.03353*pow(PMV,4)+0.2179*pow(PMV,2))); // PPD 계산 식 구성 //출력부 Serial.print("온도:"); Serial.print(DHT.temperature); Serial.print("*C"); Serial.print(" 습도:"); Serial.print(DHT.humidity); Serial.println("%"); Serial.print("PMV : "); Serial.println(PMV); Serial.print("PPD : "); Serial.println(PPD); String data1 = String("온도 :") +String( DHT.temperature)+ String("*C"); String data2 = String("습도 :") +String( DHT.humidity)+ String("%"); String data3 = String("PMV :") +String( PMV); String data4 = String("PPD :") +String(PPD); HC06.println(data1); HC06.println(data2); HC06.println(data3); HC06.println(data4); delay(1800000); } |
편의를 위해 이전 포스팅에서 진행했던, LED와 부저에 관한 코딩은 삭제하였습니다.
위 코딩을 작성한 후 인코딩을 진행해주시면 됩니다.
4. PPD 계산
파란색으로 쓰여진 부분은 PPD 계산에 관한 식을 추가한 것입니다.
PPD란 PMV를 변수로 이용하는 식으로 "불쾌감을 느낄 사람의 비율"을 나타냅니다.
앞서 말씀드린 PMV에 따라
PMV | ||||||
-3 | -2 | -1 | 0 | 1 | 2 | 3 |
매우추움 | 추움 | 약간추움 | 쾌적함 | 약간더움 | 더움 | 매우더움 |
쾌적한 0에서 최소값을 가지고 |PMV|가 커질수록 PPD(불편함을 느끼는 사람의 비율)는 증가합니다.
5. 휴대폰에 결과값 출력
MIT App Inventor - Connect - AI Companion 을 클리하시면 다음과 같은 QR코드가 뜹니다.
어플리케이션 App Inventor를 다운 받으시고 코드나 QR코드를 입력해주시면 됩니다.
이러한 코딩을 완료하면 다음과 같은 결과물이 도출됩니다.
6. 1~4편까지의 결과물
프로젝트 과정을 거쳐서
https://catch-sin.tistory.com/9
https://catch-sin.tistory.com/10
https://catch-sin.tistory.com/11
온습도 출력, PMV계산 및 출력, LED와 부저 작동을 완료했습니다.
추가로 이번 포스팅을 통해 PPD계산 및 출력, 블루투스를 통한 스마트폰으로 출력을 완료했습니다.
그 결과물은 다음과 같습니다.
조금 더 직관적인 영상을 위해 4배속으로 동영상 편집을 하였습니다.
이제 프로젝트의 막바지에 다다르고 있습니다.
다음 포스팅에서는 시간에 따른 PMV와 PPD의 변화량을 그래프로 표현하고 분석하는 과정을 다루도록 하겠습니다.
'아두이노' 카테고리의 다른 글
[아두이노]조도센서를 이용한 회로구성과 조도값으로 변환 (2) | 2022.10.21 |
---|---|
[아두이노]MIT App Inventor(앱인벤터) 오류 해결방법 (feat.HC06) (0) | 2022.05.25 |
[아두이노]온습도 측정(DHT11)을 통한 LED와 부저 울리기[3편] (0) | 2022.05.24 |
[아두이노]온습도 측정(DHT11)을 통해 PMV(쾌적성 지표) 계산하기 [2편] (2) | 2022.05.24 |
[아두이노]온습도 측정 결과값 도출하기.(DHT11센서 이용)[1편] (3) | 2022.05.24 |