冰楓論壇

標題: PIC10F200製作溫度控制器(-30度~300度) [打印本頁]

作者: 洪嵐峰    時間: 2023-4-2 12:17
標題: PIC10F200製作溫度控制器(-30度~300度)
製作PIC10F200溫度控制器需要以下材料:

PIC10F200微控制器
LM35溫度傳感器
10K歐姆電阻
電容(可選)
NPN電晶體
1N4148二極體
電源供應器
繼電器(可選)
PIC10F200與其他元件的連接腳位如下:

PIC10F200的第5腳(GP2)與LM35的Vout腳相連接
LM35的Vcc腳與電源供應器的正極相連接
LM35的GND腳與電源供應器的負極相連接
10K歐姆電阻的一端與LM35的Vout腳相連接,另一端與PIC10F200的第2腳(GP1)相連接
PIC10F200的第6腳(GP3)與NPN電晶體的基極相連接
NPN電晶體的集極與繼電器的控制端相連接
繼電器的正負極分別與電源供應器的正負極相連接
PIC10F200的第1腳(Vdd)與電源供應器的正極相連接
PIC10F200的第8腳(Vss)與電源供應器的負極相連接
1N4148二極體的陰極與PIC10F200的第7腳(GP0)相連接,陽極與電源供應器的負極相連接
下面是PIC10F200溫度控制器的程式碼:


#include <pic.h>
__CONFIG (FOSC_INTOSCIO & WDTE_OFF & PWRTE_OFF & MCLRE_OFF);

#define relay GP3
#define led GP0
#define set_temp 25

void delay(unsigned int t)
{
    while(t--)
    {
        __delay_ms(1);
    }
}

void main()
{
    unsigned int temp = 0;
    ADCON0 = 0b00000001;  // set ADC channel to GP2
    CMCON0 = 0b00000111;  // disable comparator
    ANSEL = 0b00000100;   // set GP2 as analog input
    TRISIO = 0b00000100;  // set GP2 as input, others as output
    relay = 0;            // set GP3 to output low
    led = 0;              // set GP0 to output low
    while(1)
    {
        // read LM35 temperature sensor value
        GO = 1;
        while(GO);  // wait for ADC conversion
        temp = (ADRESH<<8) | ADRESL;
        temp = (temp*500)/102

    // control relay based on temperature
    if(temp > set_temp)
    {
        relay = 1;  // turn on relay
        led = 1;    // turn on LED
    }
    else
    {
        relay = 0;  // turn off relay
        led = 0;    // turn off LED
    }
    delay(1000);  // delay for 1 second
}
}

程式碼的作用是讀取LM35溫度傳感器的數值,根據設定的溫度值(set_temp)控制繼電器開關。如果溫度高於設定值,則繼電器將通電,控制外部裝置(例如加熱器)開始工作,並且LED燈也會亮起來。如果溫度低於設定值,則繼電器斷電,外部裝置停止工作,LED燈熄滅。程式碼中的delay函數可以讓系統等待一定時間,以減少處理器的負載和功耗。

#include <pic.h>
__CONFIG (FOSC_INTOSCIO & WDTE_OFF & PWRTE_OFF & MCLRE_OFF);

#define relay GP3
#define led GP0
#define set_temp 25

void delay(unsigned int t)
{
    while(t--)
    {
        __delay_ms(1);
    }
}

void main()
{
    unsigned int temp = 0;
    ADCON0 = 0b00000001;  // set ADC channel to GP2
    CMCON0 = 0b00000111;  // disable comparator
    ANSEL = 0b00000100;   // set GP2 as analog input
    TRISIO = 0b00000100;  // set GP2 as input, others as output
    relay = 0;            // set GP3 to output low
    led = 0;              // set GP0 to output low
    while(1)
    {
        // read LM35 temperature sensor value
        GO = 1;
        while(GO);  // wait for ADC conversion
        temp = (ADRESH<<8) | ADRESL;
        temp = (temp*500)/1024;

        // control relay based on temperature
        if(temp > set_temp)
        {
            relay = 1;  // turn on relay
            led = 1;    // turn on LED
        }
        else
        {
            relay = 0;  // turn off relay
            led = 0;    // turn off LED
        }
        delay(1000);  // delay for 1 second
    }
}
請注意,在程式碼中使用了一個名為delay的函數,它的作用是讓系統等待一定時間。在這個程式中,delay函數的參數是以毫秒為單位的時間值。該函數使用了一個while迴圈和__delay_ms函數,以實現等待指定時間的效果。如果您希望調整延遲時間,可以更改delay函數的參數值。




歡迎光臨 冰楓論壇 (https://bingfong.com/) Powered by 冰楓