728x90
728x90
학부 강의 중 아두이노 보드를 통해 완성품을 제작하는 기초설계 강의를 듣고있다.
아직 완성까지는 외관 디자인을 포함해서 부족한 부분이 많기에 업데이트 되는대로 블로그에 글을 적어보고자 한다.
현재 목표로 제작 중인 프로젝트는
온습도 + 미세먼지 센서를 이용해 측정. (푸쉬버튼을 눌렀을때만 동작)
- 온도 측정값에 따라 캐릭터를 원판 중 한곳을 스텝모터를 통해 표현.
- 미세먼지 측정값에 따라 마스크를 착용할지 안할지 서보모터를 이용해 표현.
사용 센서
- 푸쉬버튼, 온습도 센서, 미세먼지 센서, 스텝모터, 서보모터, LCD판
#include <Wire.h>
#include <hd44780.h>
#include <HD44780ioClass/hd44780_I2Cexp.h>
#include <DHT.h>
#include <DHT_U.h>
#include <Stepper.h> //스텝모터 라이브러리 불러옴
#define DHTPIN 2
#define DHTTYPE DHT11
hd44780_I2Cexp lcd; //LCD 객체
DHT dht(DHTPIN, DHTTYPE);
int button = 8; //버튼은 8번핀
int steps = 2048; // 한바퀴에 해당하는 값 선언
Stepper stepper(steps, 12, 10, 11, 9);
int step_count = 0; //스텝모터 동작 여부 판단을 위한 카운트
/*LED 핀 번호입력
int green = 10;
int red = 11;
int yellow = 12;*/
void setup() {
Serial.begin(9600);
//Serial.println("DHT11 test!");
pinMode(button, INPUT);
lcd.begin(16,2);
dht.begin();
stepper.setSpeed(10); // rpm : 1분당 도는 횟수, 너무 큰값을 하면 안돌아감.
/*LED 출력 핀모드 입력
pinMode(green, OUTPUT);
pinMode(red, OUTPUT);
pinMode(yellow, OUTPUT);*/
}
void loop(){
int buttonValue = digitalRead(button);
if(buttonValue == LOW){ //버튼을 눌렀을때 측정& LCD 출력이 이루어짐
float humi = dht.readHumidity(); //습도 측정
float temp = dht.readTemperature(); //온도 측정
if(26<= temp && temp <= 27 && step_count == 0){ // 26~27 도 + 스텝 카운트가 0 일때에는 1번 구역
stepper.step(steps/360 * 90); //1번구역
step_count = 1;//스텝 카운트 1번으로 구역화 만들어둠
}
else if(temp <= 25 && step_count == 0){ // 25도 이하 + 스텝 카운트 0 일때 2번 구역
stepper.step(steps/360 * 180);//2번 구역
step_count = 2;//이하 동문
}
else if(27 < temp && temp <= 30 && step_count == 0){ // 27~30 + 스텝 카운트 0일때 3번 구역
stepper.step(steps/360 * 270);//3번 구역
step_count = 3;
}
else if(temp > 30 && step_count == 0){ // 30도 초과 + 스텝 카운트 0일때 4번 구역
stepper.step(steps);
step_count = 4;
}
else{
stepper.step(0);// 이외의 경우 스텝 모터는 구동하지 않는다.
}
//센서가 측정하지 못할 경우 측정 종료
if(isnan(humi)||isnan(temp)){
Serial.print("Failed to read from DHT sensor!");
return;
}
//측정된 온도와 습도 출력하기
lcd.backlight(); //LCD 백라이트 켜짐
lcd.clear(); //LCD 출력내용 지우기
lcd.setCursor(0,0);
lcd.print("TEMP : ");
lcd.print(temp);
lcd.print("'C, ");
lcd.setCursor(0,1);
lcd.print("HUMi : ");
lcd.print(humi);
lcd.print("%");
delay(300);
}
else{ //버튼이 꺼진 상태에서는 측정과 출력이 모두 안된다.
lcd.noBacklight();//LCD 백라이트 꺼짐
if(step_count == 1){
stepper.step(-steps/360 * 90); //1번구역 + 이동한 만큼 역회전 , 이하동문
step_count = 0;//스텝 카운트 변수를 버튼을 뗀 상태일때 초기화 해준다. 이하 동문
}
else if(step_count == 2){
stepper.step(-steps/360 * 180); //2번구역
step_count = 0;
}
else if(step_count == 3){
stepper.step(-steps/360 * 270); //3번구역
step_count = 0;
}
else if(step_count == 4){ //4번 구역
stepper.step(-steps);
step_count = 0;
}
else stepper.step(0);//이외의 경우는 스텝모터 작동하지 않는다.
/*digitalWrite(green, LOW);
digitalWrite(red, LOW);
digitalWrite(yellow, LOW);*/
}
/*Serial.print("Humidity:");
Serial.print(h);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(t);
Serial.println(" *C ");*/
}
우선 현재 버튼을 눌렀을 때 온습도 측정값을 LCD 를 통해 출력하고,
요구하는 온도값에 따라 특정 구간의 스텝모터를 구동후 버튼을 떼었을 시 원상복구하는 코드까지 작성을 하였다.
추후, 미세먼지 센서값에 따른 서보모터 동작(마스크 on & off)이 가능하도록 코드를 추가하고, 외관 디자인에 신경을 쓸 계획이다.
728x90
반응형
'공부 > 기초설계' 카테고리의 다른 글
온습도 + 미세먼지 (최종) (0) | 2021.12.22 |
---|---|
온습도 + 미세먼지 (4) (0) | 2021.11.20 |
온습도 + 미세먼지 (3) (0) | 2021.11.18 |
온습도+미세먼지 (2) (0) | 2021.11.16 |