BASIC4MCU | 질문게시판 | 답변 : 아두이노 코드 추가문의
페이지 정보
작성자 master 작성일2018-12-10 12:17 조회6,969회 댓글0건
https://www.basic4mcu.com/bbs/board.php?bo_table=gac&wr_id=6668
본문
// 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_TempTemp=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=OFFelse 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는 0lcd.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,969등록된 댓글이 없습니다.