프로그래밍언어(Program. Language)

온도컨트롤러 프로그래밍

arirangled 2024. 9. 11. 00:01

PIC16F676을 사용하여 온도 제어기를 만드는 프로젝트는 흥미로운 작업입니다.
아래는 기본적인 C코드와 회로도에 대한 설명을 제공하겠습니다.

C 코드 예제
#include <xc.h>
#include <stdio.h>
#include "lcd.h" // LCD 라이브러리 포함

#define _XTAL_FREQ 4000000 // 4MHz 크리스탈 주파수

// 핀 정의
#define HEATER_PIN RA0
#define LED_PIN RA1
#define UP_BUTTON RB0
#define DOWN_BUTTON RB1
#define ENTER_BUTTON RB2

// LM35DZ 핀
#define LM35_PIN 0x00 // 아날로그 핀

// 전역 변수
float setTemperature = 25.0; // 목표 온도
float currentTemperature = 0.0; // 현재 온도

void main(void) {
    // 초기화
    TRISA = 0b11111110; // RA0, RA1 출력, 나머지 입력
    TRISB = 0b00000011; // RB0, RB1 입력, 나머지 출력
    ADCON1 = 0x06; // 아날로그 핀 설정
    ADCON2 = 0xA9; // ADC 설정
    LCD_Init(); // LCD 초기화

    while (1) {
        // 온도 읽기
        currentTemperature = ReadLM35(); // LM35에서 온도 읽기
        DisplayTemperature(currentTemperature); // LCD에 온도 표시

        // 버튼 입력 처리
        if (UP_BUTTON == 0) {
            __delay_ms(200); // 디바운스
            setTemperature += 1.0; // 목표 온도 증가
        }
        if (DOWN_BUTTON == 0) {
            __delay_ms(200); // 디바운스
            setTemperature -= 1.0; // 목표 온도 감소
        }
        if (ENTER_BUTTON == 0) {
            __delay_ms(200); // 디바운스
            // 목표 온도 설정 완료
        }

        // 히터 제어
        if (currentTemperature < setTemperature) {
            HEATER_PIN = 1; // 히터 ON
            LED_PIN = 1; // LED ON
        } else {
            HEATER_PIN = 0; // 히터 OFF
            LED_PIN = 0; // LED OFF
        }
    }
}

float ReadLM35() {
    // LM35에서 아날로그 값을 읽고 섭씨 온도로 변환
    // ADC 변환 코드 추가
    return (float)adcValue * (5.0 / 1023.0) * 100.0; // 예시 변환
}

void DisplayTemperature(float temperature) {
    char buffer[16];
    sprintf(buffer, "Temp: %.1f C", temperature);
    LCD_Clear();
    LCD_Print(buffer);
}
회로도 설명
PIC16F676: MCU의 중심으로 사용됩니다.
LM35DZ: 온도 센서로, 아날로그 출력을 제공합니다. 이 출력은 PIC의 아날로그 입력 핀에 연결됩니다.
LED: RA1 핀에 연결되어, 히터가 작동할 때 점등됩니다.
히터: RA0 핀에 연결되어, 온도가 설정값보다 낮을 때 작동합니다.
버튼: RB0, RB1, RB2 핀에 연결되어 각각 온도 증가, 감소 및 설정 완료 기능을 수행합니다.
LCD: 온도를 표시하기 위해 사용됩니다. LCD 라이브러리를 사용하여 연결합니다.
회로도
회로도를 그리는 것은 텍스트 기반의 환경에서는 어렵지만, 아래와 같은 구성으로 회로를 설계할 수 있습니다.

PIC16F676
RA0: 히터 제어 (MOSFET 또는 릴레이를 통해 히터 연결)
RA1: LED
RB0: UP 버튼
RB1: DOWN 버튼
RB2: ENTER 버튼
LM35DZ: 아날로그 핀에 연결 (예: AN0)
이 회로를 기반으로 PCB 설계 소프트웨어를 사용하여 회로도를 그릴 수 있습니다.

이 코드는 기본적인 구조를 제공하며, 실제 하드웨어와의 통합 시에는 추가적인 디버깅과 조정이 필요할 수 있습니다.


반응형