冰楓論壇

 找回密碼
 立即註冊
搜索
查看: 581|回覆: 0
打印 上一主題 下一主題

[討論] PIC10F200製作溫度控制器(-30度~300度)

[複製鏈接]

2609

主題

0

好友

1003

積分

金牌會員

Rank: 6Rank: 6

UID
373967
帖子
9003
主題
2609
精華
0
積分
1003
楓幣
0
威望
980
存款
35860
贊助金額
0
推廣
0
GP
1205
閱讀權限
70
在線時間
460 小時
註冊時間
2023-1-12
最後登入
2024-12-21

2023端午節紀念勳章 2023中秋節紀念勳章 2023聖誕節紀念勳章

跳轉到指定樓層
1
發表於 2023-4-2 12:17:10 |只看該作者 |倒序瀏覽
製作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函數的參數值。
收藏收藏0 推0 噓0


把本文推薦給朋友或其他網站上,每次被點擊增加您在本站積分: 1鑰匙
複製連結並發給好友,以賺取推廣點數
簡單兩步驟,註冊、分享網址,即可獲得獎勵! 一起推廣文章換商品、賺$$
高級模式
B Color Image Link Quote Code Smilies |上傳

廣告刊登意見回饋關於我們管群招募本站規範DMCA隱私權政策

Copyright © 2011-2024 冰楓論壇, All rights reserved

免責聲明:本網站是以即時上載留言的方式運作,本站對所有留言的真實性、完整性及立場等,不負任何法律責任。

而一切留言之言論只代表留言者個人意見,並非本網站之立場,用戶不應信賴內容,並應自行判斷內容之真實性。

小黑屋|手機版|冰楓論壇

GMT+8, 2024-12-21 14:34

回頂部