질문게시판 > 아두이노 변수값 lcd로 출력하기

인기검색어 > 아두이노 센서 ATMEGA128

최신글 질문게시판 동영상강좌 가입하기

▼ BASIC4MCU 후원업체 신제품 정보 ▼

▲ BASIC4MCU 후원업체 신제품 정보 ▲

BASIC4MCU > 질문게시판

아두이노 변수값 lcd로 출력하기

페이지 정보

작성자 월랑 작성일18-12-05 15:16 조회35,988회 댓글8건

본문

#define Temp_set A0 // 온도 설정의 위한 아날로그 입력

#define NTC A1 // 온도 측정의 위한 아날로그 입력

#define Ref_Resistor 10000 // NTC에 연결된 직렬 저항값

#define B_Value 4200 // NTC 10KD-5JB

#define NTC_Nomal_Temp 25 // NTC 10KD-5J의 기준 온도값

#define NTC_Nomal_Resistor 10000 // NTC 10KD-5J의 기준 온도에서의 저항값

#define PWM_out 3 // PWM 출력핀 설정

 

void setup(void) {

Serial.begin(9600); // 시리얼포트 설정

pinMode(PWM_out, OUTPUT); // 디지털 6번핀을 출력모드로 설정.

}

 

void loop(void) {

float Value, Temp; unsigned char PWM_data; unsigned int Temp_set_value;

Temp_set_value = analogRead(Temp_set);// 온도설정값 A/D변환

Temp_set_value /= 10; // 온도설정값/10로 하여 0~51까지 조정되게 함.

Value = analogRead(NTC); // NTCA/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; // 화씨에서 섭씨로 바꿈.

 

unsigned char k = Temp; // floatTemp값을 chark값으로 치환

 

if (k <= Temp_set_value) PWM_data = 0; // 온도설정값 이하일 때, PWM_out = OFF

 

else if (k < (Temp_set_value + 25)) { //온도설정값 이상일 때, PWM_out = k*10,

k -= Temp_set_value;

PWM_data = k * 10;

}

else PWM_data = 255; // 온도설정값+25의 값 이상일 때, PWM_out = 255(최대값)

 

analogWrite(PWM_out, PWM_data); // PWM_outPWM_data만큼의 아날로그 신호 출력

unsigned char Duty_rate = (PWM_data*100)/255; // Duty rate 계산

 

// A/D 변환된 NTC저항값 출력

Serial.print("NTC Value : "); Serial.print(Value, 3); Serial.print("[]" ); Serial.print("\t");

 

// 현재 온도 출력

Serial.print("Temperature : "); Serial.print(Temp); Serial.print("[]"); Serial.print("\t");

 

// 온도 설정값 출력

Serial.print("Temp_Setting_Value : "); Serial.print(Temp_set_value); Serial.print("[]");

Serial.print("\t");

 

// PWMDuty rate값 출력

Serial.print("Duty_rate : "); Serial.print(Duty_rate); Serial.println("[%]");

 

delay(500);

}

 

 

위의 노란색 글자의 소스의 가변저항의 값과 온도값, 듀티비를 lcd에 출력을 하기위하여 알아보던중에


#include <LiquidCrystal.h>

// initialize the library by associating any needed LCD interface pin
// with the arduino pin number it is connected to
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);

void setup() {
  // set up the LCD's number of columns and rows:
  lcd.begin(16, 2);
  // Print a message to the LCD.
  lcd.print("hello, world!");
}

void loop() {
  // set the cursor to column 0, line 1
  // (note: line 1 is the second row, since counting begins with 0):
  lcd.setCursor(0, 1);
  // print the number of seconds since reset:
  lcd.print(millis() / 1000);
}


----------------------------------------------------------------------------------------------

이 프로그램으로 기초적인 헬로우 월드 출력해볼려고 했는데 글자가 꺠져서 나오네요



제일위의 소스에서 받은 가변저항의 값과 온도값 듀티비를 lcd에 출력하고 싶습니다.​


또한 제일위 소스에서 듀티비가 7보다 작을떄는 팬이 동작이 하지 않아 듀티비가 1이상~10이하일때

처음 1초 동안은 10의 듀티비가 출력이 되도록 하고싶습니다.

 

  • BASIC4MCU 작성글 SNS에 공유하기
  • 페이스북으로 보내기
  • 트위터로 보내기
  • 구글플러스로 보내기
  • 카카오톡으로 보내기

댓글 : 8

조회수 : 35,988

월랑님의 댓글

월랑 작성일

아래의 헬로우 월드를 따라해본 사이트는 http://wiki.vctec.co.kr/opensource/arduino/lcdwiring 여기꺼 보고 따라해봤습니다.

master님의 댓글

master 댓글의 댓글작성일

RW는 연결 안되었죠?

월랑님의 댓글

월랑 댓글의 댓글작성일

네 lcd 부분의 rw는 아무것도 연결안되어있습니다.
연결 안되었어서 사이트에 가서 다시 보니 그라운드에 연결되어있어서 연결하니 글자가 나오네요

master님의 댓글

master 작성일

루프 딜레이가 0.5초입니다.
1초동안 듀티비를 특정 조건에서 특정 값으로 변경하는 것은
고작 2번인데 그냥 기다리면 안되는 건가요?

월랑님의 댓글

월랑 댓글의 댓글작성일

#include <LiquidCrystal.h>
#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 출력핀 설정
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);


void setup(void) {
  Serial.begin(9600);            // 시리얼포트 설정
  pinMode(PWM_out, OUTPUT);            // 디지털 6번핀을 출력모드로 설정.
  lcd.begin(16, 2);
 
}

void loop(void) {
  float Value, Temp; unsigned char PWM_data; unsigned int 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;                      // 화씨에서 섭씨로 바꿈.

  unsigned char k = Temp;  // float형 Temp값을 char형 k값으로 치환

  if (k <= Temp_set_value) PWM_data = 0;  // 온도설정값 이하일 때,  PWM_out = OFF

  else if (k < (Temp_set_value + 25)) { //온도설정값 이상일 때, PWM_out = k*10,
    k -= Temp_set_value;
    PWM_data = k * 10;

   
  }
  else PWM_data = 255;  // 온도설정값+25℃의 값 이상일 때, PWM_out = 255(최대값)

  analogWrite(PWM_out, PWM_data);        // PWM_out에 PWM_data만큼의 아날로그 신호 출력
  unsigned char Duty_rate = (PWM_data*100)/255;  // Duty rate 계산

 // A/D 변환된 NTC저항값 출력
  Serial.print("NTC Value : "); Serial.print(Value, 3); Serial.print("[Ω]" ); Serial.print("\t");

 // 현재 온도 출력
  Serial.print("Temperature : "); Serial.print(Temp); Serial.print("[℃]"); Serial.print("\t");

 // 온도 설정값 출력
  Serial.print("Temp_Setting_Value : "); Serial.print(Temp_set_value); Serial.print("[℃]");
  Serial.print("\t");

 // PWM의 Duty rate값 출력
  Serial.print("Duty_rate : "); Serial.print(Duty_rate); Serial.println("[%]");

  delay(500);
  lcd.setCursor(0, 0);
  lcd.print("Temp:");
  lcd.setCursor(5, 0);
  lcd.print(Temp);
  lcd.setCursor(0, 1);
  lcd.print("Duty_rate:");
  lcd.setCursor(10, 1);
  lcd.print(Duty_rate);lcd.print("%");
}
------------------------------------------------------------------------------------------------------------------------------

위의 RW 부분은 고치고 게시물 노란색 부분에 약간의 추가만하여 온도값과 듀티비를 lcd에 출력하는것까지 성공하였습니다.
일단 위의 회로도와 코드는 스마트 선풍기를 만들기위한 코드입니다.
듀티비가 계속 1일떄도 팬이 돌아가야정상인데
12v팬이 돌아가기 위해서는 기동전류가 필요한데 그 듀티비가 1일때는 기동할수 있는 전류가 흐르지 않아 팬이 돌아가지 않는다고하여
작동시켜보니 듀티비가 8~11 정도는 되야 팬이 돌아가더군요
듀티비가 꾸준히 3% 이더라도 처음에 11%였다가 3%로 가더라도 팬은 동작을 하여
처음에 듀티비가 1이상의 되었을 순간에 듀티비를 10정도 줘서 팬이 가동만 되게 만들려고 합니다.
즉 듀티비가 계속 1만 나오더라도 팬이 가동되게 만들고싶습니다.

master님의 댓글

master 작성일

unsigned char Duty_rate = (PWM_data*100)/255;  // Duty rate 계산
듀티는 여기서 만들어지죠?
unsigned char Duty_rate = (PWM_data*100)/255;  // Duty rate 계산
if((Duty_rate>0)&&(Duty_rate<10))Duty_rate==10; // 1~10 사이면 10으로 <--- 이 라인 하나 추가하세요

월랑님의 댓글

월랑 댓글의 댓글작성일

마스터님
답변 감사합니다.
위의 방법으로도 되나 제가 원하는것은 듀티비는 정상값이 출력이되는것을 원합니다
즉 1~10 사이면 1초동안 듀티비가 10이 출력이되고 그후 다시 원래의 듀티비가 나오는 경우 또는
1이상의 듀티비가 나올때는 무조건 처음에 1초동안 듀티비가 10이 출력이되는 경우
제가 원하는 경우는 위 두가지 경우 입니다.
감사합니다.

master님의 댓글

master 작성일

//
int count=0; // 전역변수 추가
//
void loop(void) {


  unsigned char Duty_rate = (PWM_data*100)/255;  // Duty rate 계산
  if((count<2)&&(Duty_rate>0)&&(Duty_rate<10))Duty_rate==10; // 1~10 사이면 10으로 <--- 이 라인 하나 추가하세요


  if(count<4)count++;
}

게시물 검색

BASIC4MCU > 질문게시판 목록

제목 날짜
공지 MCU, AVR, 아두이노 등 전자공학에 관련된 질문은… 스태프  19-01-15
공지 사이트 이용 안내 댓글[29] master  17-10-29
질문 타이머 인터럽트를 이용한 LCD제어 질문입니다. Tell 새글 23-09-27
답변 답변 : 타이머 인터럽트를 이용한 LCD제어 질문입니다… 댓글[1] master 새글 23-09-28
질문 아두이노 무한루프 코드 질문... 댓글[1] vnpaz 새글 23-09-27
질문 질문있습니다ㅠㅠ 부탁드려요 댓글[1] keldeo  23-09-27
질문 0 ~ 99 이중 for문으로 작성하는법! 댓글[2] 상어  23-09-26
질문 리튬배터리로 화면 출력 질문드립니다 ! 댓글[1] 멘탈나간다  23-09-26
질문 lcd,바코드,서보모터, 아두이노 질문 드립니다. ㅠㅠ 댓글[1] 아두이노개발자  23-09-26
질문 stm32에서 변수 값을 유지하는 방법 댓글[1] 라칸  23-09-26
질문 안녕하세요 스위치로 led 제어 관련 질문이 있습니다 댓글[1] 노형빈  23-09-25
질문 16X16 도트 매트릭스 구동방법 질문입니다. 댓글[1] 첨부파일맹균  23-09-25
질문 stm32에서 RTC 시간 함수 쓰는데 의문점 댓글[1] 라칸  23-09-25
질문 GPS 모듈 관련 질문입니다. 댓글[3] 지구과학  23-09-22
질문 아두이노 블루투스와 초음파센서를 이용한 장애물 정지 댓글[2] 둘둘이  23-09-22
답변 답변 : 아두이노 블루투스와 초음파센서를 이용한 장애물… 댓글[1] master  23-09-25
질문 stm32 보드에서 시간설정과 불러오기를 하는데 댓글[5] 라칸  23-09-22
질문 아두이노 인터럽트 질문입니다. 댓글[2] Tell  23-09-21
답변 답변 : 아두이노 인터럽트 질문입니다. 댓글[1] master  23-09-22
질문 아두이노와 거리 감지 센서의 전류 관련 댓글[1] hmkim  23-09-21
질문 아두이노 코딩 질문있습니다. 도와주세요.... 댓글[1] 첨부파일vnpaz  23-09-20
질문 아두이노를 사용한 dc모터 위치제어 댓글[2] 모터위치  23-09-20
질문 stm32 디버깅이나 rst버튼 없이 하는 방법좀 댓글[1] 라칸  23-09-20
질문 LCD에 숫자 표기법을 바꾸고 싶습니 댓글[2] Bs드리프터  23-09-19
질문 알코올 측정기(MQ-3) 관련 질문 소오금  23-09-18
답변 답변 : 알코올 측정기(MQ-3) 관련 질문 master  23-09-19
질문 스텝모터 제어하는 소스파일 수정방법 질문드립니다. Bs드리프터  23-09-15
답변 답변 : 스텝모터 제어하는 소스파일 수정방법 질문드립니… 댓글[1] master  23-09-15
질문 atmega 128을 이용한 악기 튜너기 댓글[1] 아두이노짱  23-09-15
질문 stm32 보드 ip주소 찾는법 댓글[1] 라칸  23-09-13
게시물 검색


Privacy Policy
MCU BASIC ⓒ 2017
PC버전