-
아두이노 프로젝트 | 휴대용 냉각기Technology/Arduino 2024. 11. 23. 16:19
1. 휴대용 냉각기
일상에서 쉽게 발견할 수 있는 아이스박스를 아두이노 플랫폼을 이용해 휴대용 냉각기로 개조해보자. 구현하고자 하는 휴대용 냉각기는 펠티어 열전소자, 열전소자 발열 해소와 냉각기 내부 냉기 순환을 위한 DC 12V 냉각팬 2개, 이들을 제어하기 위한 DC 5V 릴레이 모듈로 구성되어 있다. 사용자가 냉각 온도를 직접 선택할 수 있도록 가변저항과 열전대, LCD 모듈이 추가되어 있다. 사용자가 가변저항을 조작해 원하는 냉각 온도를 선택하면 상온에서 해당 온도에 도달할 때까지 펠티어 열전소자와 냉각팬을 동작한다. 설정한 온도에 도달한 뒤에는 냉각기 내부 온도가 설정 온도보다 높을 때에만 열전소자가 동작하도록 프로그램을 작성해보자.
2. 프로젝트
2.1. 회로 구성
2.2. 프로그램 작성
#include <Adafruit_MAX31856.h> // MAX31856 모듈 라이브러리 추가 #include <LiquidCrystal_I2C.h> // LCD I2C 라이브러리 추가 // maxThermo라는 이름의 MAX31856 객체 생성 // CS, MOSI, MISO, SCLK 순서로 디지털 핀 정의 Adafruit_MAX31856 maxThermo = Adafruit_MAX31856(10, 11, 12, 13); // LCD라는 이름의 LCD I2C 객체 생성 LiquidCrystal_I2C LCD(0x20, 16, 2); // I2C 주소, 열과 행의 개수 입력 const int relayFan = 4; // 정수형 변수 선언 후 디지털 핀 번호 4로 초기화 const int relayPeltier = 5; int value; // 정수형 변수 선언 float targetTemp; // 실수형 변수 선언 float TC_Temp; void setup(void) { pinMode(A0, INPUT); // 아날로그 입력 A0번 핀을 입력(INPUT) 모드로 설정 pinMode(relayFan, OUTPUT); // 디지털 4번 핀을 출력(OUTPUT) 모드로 설정 pinMode(relayPeltier, OUTPUT); // MAX31856 모듈 SPI 통신 시작 while (!Serial) delay(10); maxThermo.begin(); maxThermo.setThermocoupleType(MAX31856_TCTYPE_K); // 열전대 종류 설정: K타입 Serial.print("Thermocouple type: "); switch (maxThermo.getThermocoupleType()) { case MAX31856_TCTYPE_B: Serial.println("B Type"); break; case MAX31856_TCTYPE_E: Serial.println("E Type"); break; case MAX31856_TCTYPE_J: Serial.println("J Type"); break; case MAX31856_TCTYPE_K: Serial.println("K Type"); break; case MAX31856_TCTYPE_N: Serial.println("N Type"); break; case MAX31856_TCTYPE_R: Serial.println("R Type"); break; case MAX31856_TCTYPE_S: Serial.println("S Type"); break; case MAX31856_TCTYPE_T: Serial.println("T Type"); break; case MAX31856_VMODE_G8: Serial.println("Voltage x8 Gain mode"); break; case MAX31856_VMODE_G32: Serial.println("Voltage x8 Gain mode"); break; default: Serial.println("Unknown"); break; } delay(1000); LCD.init(); // LCD 사용 시작 LCD.backlight(); // LCD 백라이트 켜기 LCD.clear(); LCD.print("Temperature:"); } void loop(void) { // 아날로그 입력 A0번 핀으로부터 아날로그 신호를 입력 받은 후 변수에 저장 value = analogRead(A0); targetTemp = (float)map(value, 0, 1023, 20, 0); // 아날로그 신호 변환 후 실수형 변수에 저장 TC_Temp = maxThermo.readThermocoupleTemperature(); // 열전대 온도값을 변수에 저장 // 온도값 오류 확인 uint8_t fault = maxThermo.readFault(); if (fault) { if (fault & MAX31856_FAULT_CJRANGE) Serial.println("Cold Junction Range Fault"); if (fault & MAX31856_FAULT_TCRANGE) Serial.println("Thermocouple Range Fault"); if (fault & MAX31856_FAULT_CJHIGH) Serial.println("Cold Junction High Fault"); if (fault & MAX31856_FAULT_CJLOW) Serial.println("Cold Junction Low Fault"); if (fault & MAX31856_FAULT_TCHIGH) Serial.println("Thermocouple High Fault"); if (fault & MAX31856_FAULT_TCLOW) Serial.println("Thermocouple Low Fault"); if (fault & MAX31856_FAULT_OVUV) Serial.println("Over/Under Voltage Fault"); if (fault & MAX31856_FAULT_OPEN) Serial.println("Thermocouple Open Fault"); } LCD.setCursor(0, 1); // LCD 커서를 0열 1행으로 이동 LCD.print(Temperature); // LCD에 변수에 저장된 온도값을 입력 LCD.print(" Celsius"); delay(500); // 500 ms 대기 LCD.setCursor(0, 1); LCD.print(" "); // 설정 온도와 현재 온도 비교 if (targetTemp < TC_Temp) { // 현재 온도가 설정 온도보다 높을 경우, 펠티어 열전소자와 냉각팬 가동 digitalWrite(relayFan, HIGH); // 디지털 4번 핀에 디지털 신호 HIGH 출력 digitalWrite(relayPeltier, HIGH); } else { // 펠티어 열전소자와 냉각팬 중지 digitalWrite(relayFan, LOW); digitalWrite(relayPeltier, LOW); } }
[함께 읽으면 좋은 페이지]
반응형'Technology > Arduino' 카테고리의 다른 글
아두이노 | BLDC모터 (0) 2024.11.25 아두이노 라이브러리 | 서보모터 정밀 제어 (0) 2024.11.24 아두이노 | 펠티어 열전소자 (0) 2024.11.22 아두이노 SPI 통신 | 열전대 써모커플 증폭 모듈 MAX31856 (0) 2024.11.21 아두이노 라이브러리 | 다중 스텝모터 동시 제어 (1) 2024.11.20