답변 : 아두이노 코드 추가문의
페이지 정보
작성자 master 작성일18-12-10 12:17 조회6,074회 댓글0건본문
// MCU BASIC: https://www.basic4mcu.com
// DateTime : 2018-12-10 오후 12:22:19
// by Ok-Hyun Park
//
#include <LiquidCrystal.h>
LiquidCrystal lcd(7,8,9,10,11,12);
#define Temp_set A0 // 온도 설정의 위한 아날로그 입력
#define NTC A1 // 온도 측정의 위한 아날로그 입력
#define Ref_Resistor 10000 // NTC에 연결된 직렬 저항값
#define B_Value 4200 // NTC 10KD-5J의 B값
#define NTC_Nomal_Temp 25 // NTC 10KD-5J의 기준 온도값
#define NTC_Nomal_Resistor 10000 // NTC 10KD-5J의 기준 온도에서의 저항값
#define PWM_out 3 // PWM 출력핀 설정
int Buzzer=13;
int Sensor=4;
int val;
unsigned char first=0;
//
void setup(void){
pinMode(Buzzer,OUTPUT);
pinMode(Sensor,INPUT);
pinMode(PWM_out,OUTPUT);
lcd.begin(16,2);
Serial.begin(9600);
}
//
void loop(void){
float Value,Temp; float PWM_data; float Temp_set_value;
Temp_set_value=analogRead(Temp_set); // 온도설정값 A/D변환
Temp_set_value/=10; // 온도설정값/10로 하여 0~51까지 조정되게 함.
Value=analogRead(NTC); // NTC값 A/D변환
Value=Ref_Resistor/(1023/Value-1); // A/D값은=x*1023/5로 전압값 구함.
// Stein Hart 방정식에 의한 온도값 산출
Temp=Value/NTC_Nomal_Resistor; //(R/Ro)
Temp=log(Temp); // log(R/Ro)
Temp/=B_Value; // 1/B*log(R/Ro)
Temp+=1.0/(NTC_Nomal_Temp+273.15); //{ 1/B*log(R/Ro)}+(1/To),To=273.15+NTC_Nomal_Temp
Temp=1.0/Temp; // 역수 취함.
Temp-=273.15; // 화씨에서 섭씨로 바꿈.
float k=Temp; // float형 Temp값을 char형 k값으로 치환
//
val=digitalRead(Sensor); // 센서값 읽어옴
if(val){ // 장애물 감지가 안되면
noTone(13); // 버저가 울리지 않는다
if(k<=Temp_set_value){ PWM_data=0; first=0; } // 온도설정값 이하일 때,PWM_out=OFF
else if(k<(Temp_set_value+25)){ //온도설정값 이상일 때,PWM_out=k*10,
if(first==0){
analogWrite(PWM_out,200);
delay(300);
first=1;
}
k-=Temp_set_value;
PWM_data=k*10;
}
else PWM_data=255; // 온도설정값+25℃의 값 이상일 때,PWM_out=255(최대값)
}
else{ // 장애물이 감지되면
tone(13,200); // 버저가 울린다
PWM_data=0; // 255는 0
lcd.clear(); // lcd화면 깨끗이
lcd.setCursor(0,0); lcd.print("Warning");
}
analogWrite(PWM_out,PWM_data); // PWM_out에 PWM_data만큼의 아날로그 신호 출력
float Duty_rate=(PWM_data*100)/255; // Duty rate 계산
Serial.print("NTC Value: "); Serial.print(Value,3); Serial.print("[Ω]\t");
Serial.print("Temperature: "); Serial.print(Temp); Serial.print("[℃]\t");
Serial.print("Temp_Setting_Value: "); Serial.print(Temp_set_value); Serial.print("[℃]\t");
Serial.print("Duty_rate: "); Serial.print(Duty_rate); Serial.println("[%]");
delay(500);
if(Duty_rate>0.1){ // 듀티비가 출력이 될때 lcd화면 코드
lcd.clear();
lcd.setCursor(0,0); lcd.print("Temp: "); lcd.setCursor( 5,0); lcd.print(Temp); lcd.setCursor(13,0); lcd.print("ON");
lcd.setCursor(0,1); lcd.print("Duty_rate: "); lcd.setCursor(10,1); lcd.print(Duty_rate,2); lcd.print("%");
}
else{ // 듀티비가 출력이 안될때 lcd화면 코드
lcd.clear();
lcd.setCursor(0,0); lcd.print("Temp: "); lcd.setCursor(5,0); lcd.print(Temp); lcd.setCursor(13,0); lcd.print("OFF");
lcd.setCursor(0,1); lcd.print("Duty_rate: "); lcd.setCursor(10,1); lcd.print(Duty_rate,2); lcd.print("%");
}
}
//--------------------------------------------------------------------------------------------------------
first는 fan의 on/off 입니다
위에 빨강색의 코드로 기동전압보다 적게 흐를때 팬이 돌아가도록하는 소스인데
팬이 돌아가는중 적외선센서에 물체가 감지되어 팬이 멈추고 적외선센서에 다시 물체가 감지안되었을경우
빨강색 코드처럼 처음에 높은 값을 한번 주는 코드를 알고싶습니다.
댓글 : 0
조회수 : 6,074
등록된 댓글이 없습니다.