步驟1:免責(zé)聲明和法律條款
1。該項(xiàng)目涉及使用線電壓(120-240v)。此外,用于容納控制器的外殼不是水密的,必須注意確保其不會(huì)被弄濕。此外,還有用于加熱水箱中水的裸露加熱元件。我要說(shuō)的是存在潛在的電擊或嚴(yán)重?zé)齻L(fēng)險(xiǎn)。如果您不能承擔(dān)此風(fēng)險(xiǎn),請(qǐng)不要構(gòu)建此項(xiàng)目。
2。未煮熟的食物可能會(huì)嚴(yán)重危害健康。確定合適的食物烹飪溫度時(shí),請(qǐng)查閱食譜和食物標(biāo)簽。
警告:
1。除非將加熱元件浸入水中,否則切勿操作炊具。
2。除非將潛水泵浸入水中,否則切勿操作炊具。
3。請(qǐng)務(wù)必小心,以確保水或其他液體永遠(yuǎn)不要進(jìn)入控制箱。
4。切勿將您的手浸入熱水中。
5。
第2步:零件清單
1。 1 – Arduino Uno 29.00美元
2。 1 – LM35溫度傳感器$ 0.99
3。 1 – SainSmart LCD/鍵盤(pán)保護(hù)罩$ 9.95
4。 1 – SainSmart 2通道固態(tài)繼電器$ 7.95
6。 1個(gè)項(xiàng)目盒子(6“ x4”)5.99美元
7。 2 –2KΩ電阻$ 2.38
8。 2 –200Ω電阻$ 2.38
9。 20規(guī)格連接線(3根線軸,紅色,黑色,綠色)$ 8.39
10。熱縮管$ 2.99
11。 .023塑料管(3英尺)$ 1.23
12。 .023尼龍螺絲$ 0.19
13。 2 –潛水熱水器$ 18.00
14。 1 –潛水泵70 GPH $ 16.99
15。 1 –塑料桶,7加侖$ 7.99
16。 ?英寸支架,1.99美元
17。扭線連接器$ 3.21
總計(jì):$ 123.37
第3步:工具
?焊鐵與焊料
?熱膠槍
?帶有各種尖端的Dremol工具
?螺絲起子
?尖嘴鉗
?鋼絲鉗/壓接鉗
第4步:溫度傳感器子組件
溫度傳感器子組件使用LM35溫度傳感器,一些電阻器和電線。該傳感器需要電路來(lái)提供適當(dāng)?shù)?a target="_blank">信號(hào)。該電路在附圖中有詳細(xì)說(shuō)明:
首先測(cè)量將用于傳感器的連接線。傳感器將位于浸入式炊具的地板上,與加熱元件相反。我這樣做是為了確保獲得所有水的溫度讀數(shù),而不僅僅是加熱元件周?chē)乃?。您需要三根足夠長(zhǎng)的導(dǎo)線以橫穿浴缸的地板和墻壁,再加上三英尺長(zhǎng)才能到達(dá)控制箱。我使用了不同的電線顏色,因?yàn)槟鷮碛幸桓鼐€,5伏特和感應(yīng)線。
首先將連接到傳感器+ VS端子的擴(kuò)展信號(hào)焊接在一起。接下來(lái),將200Ω電阻器焊接到中央(Vout)端子。然后將一個(gè)2KΩ電阻焊接到傳感器的Gnd端子。我的本地RadioShack?沒(méi)有200?或2K?電阻,所以我使用了220?和2.2K?電阻。接下來(lái),我將電阻器的松散端絞在一起。然后,我拿了一個(gè)220a和2.2Ka電阻,將兩端的兩端都捻在一起,基本上如上圖8所示將它們并聯(lián)。添加一條信號(hào)線,并將并聯(lián)電阻的一端扭絞到從LM35傳感器出來(lái)的電阻的扭絞端上。在該連接處涂焊料。最后,將地線焊接到并聯(lián)電阻的其余雙絞端。
下一步,將線束編織起來(lái),這樣您就可以輕松地將電線和傳感器穿過(guò)用于將成為炊具底部的水密溫度傳感器通道。
下一步構(gòu)造水密溫度傳感器通道。首先,使用熱膠槍將尼龍螺絲粘貼到尼龍管中。然后沿著地板的中心和浴缸的側(cè)面粘貼管道。
您應(yīng)該能夠輕松地將溫度傳感器插入上圖所示的水密通道中。修剪浴缸上部邊緣的水密通道。
步驟5:加熱元件子組件
接下來(lái),我們將構(gòu)造加熱元件。我添加了兩個(gè)元素,盡管可以添加其他元素,這將使水更快地達(dá)到溫度。加熱元件幾乎可以在任何五金店或廚房供應(yīng)店購(gòu)買(mǎi)。它們可浸入水中,通常用于加熱杯子中的水以用于咖啡或茶。每個(gè)元件的額定功率為300瓦。使用公式A = W/V,每個(gè)電極將消耗大約2安培的電流,這完全在我們固態(tài)繼電器(SSR)的10安培額定值之內(nèi)。值得注意的是,我最初嘗試使用SainSmart 2安培SSR,但是由于要消耗的安培略大于2安培,所以將它們燒壞了。
需要安裝加熱元件,以使其不接觸外殼側(cè)面。浴缸并融化。為此,我找到了兩個(gè)可以抵消這些元素的硬塑料衣架。我將它們粘合在一起,然后在其上粘合一塊面包板,以提供額外的保護(hù)以防熔化。然后,我使用扎線帶將加熱元件固定在其上。如圖所示。
最后,我用我的Dremel工具在浴缸的側(cè)脊上切出一個(gè)槽,并將倒置的衣架插入槽中以安裝加熱元件。
潛水泵底部應(yīng)有吸盤(pán),并使用這些吸盤(pán)將其簡(jiǎn)單地連接到浴缸的側(cè)壁。然后,我收集了所有的電線,并使用扎帶將它們捆在一起。
步驟6:控制器子組件(第1部分)
現(xiàn)在,我們將注意力轉(zhuǎn)向控制器。對(duì)于控制器,我選擇了三個(gè)主要組件,分別是Arduino Uno控制器,SainSmart LCD/鍵盤(pán)護(hù)罩和SainSmart 10安培雙固態(tài)繼電器(SSR)。首先,在項(xiàng)目框的底部鉆孔,然后將電源端子固定在框上。接下來(lái),從潛水加熱元件和潛水泵的末端切下一定長(zhǎng)度的壁塞,以使其能到達(dá)坐在浴缸旁邊柜臺(tái)上的控制箱。我保留了從插頭到潛水泵的電源,因?yàn)樗哂凶铋L(zhǎng)的長(zhǎng)度,但是您可以使用任何可用的電源線來(lái)實(shí)現(xiàn)此目的。鉆一個(gè)足夠大的孔,以使所有電纜進(jìn)入項(xiàng)目盒的側(cè)面,然后將其布線到接線盒。該孔可以用橡膠墊圈密封。如果需要,可以將終端放置在電源插頭,潛水泵上,以及每個(gè)潛水加熱元件的一根電線上。將電源線的一根電線連接到每個(gè)插排。將一根電纜從潛水泵連接到每個(gè)條帶(潛水泵將連續(xù)運(yùn)行,并且不會(huì)通過(guò)繼電器布線)??蛇x地,電源插頭中的一根電線可以通過(guò)開(kāi)關(guān)進(jìn)行布線,但是我選擇此版本的電磁爐只是為了簡(jiǎn)化操作。最后,將一根導(dǎo)線從每個(gè)潛水加熱元件連接到配電盤(pán)的一側(cè)。使用哪個(gè)條帶都沒(méi)有關(guān)系,但是從每個(gè)加熱元件連接的電線應(yīng)從同一條帶上脫落。請(qǐng)注意,我在項(xiàng)目盒內(nèi)的電源電纜上打了一個(gè)結(jié),以防止其(和其他電纜)從盒內(nèi)的孔中拉回。
下一步,切短兩段(?6“ ),然后將其連接到固定有潛水加熱元件的相對(duì)條上。這些連接如圖所示。
步驟7:控制器子組件(第2部分)
現(xiàn)在讓我們看一下SSR,SSR期望與Arduino板有四個(gè)連接,一個(gè)+ 5v連接,一個(gè)Gnd連接和兩個(gè)數(shù)字信號(hào)連接。我發(fā)現(xiàn)最簡(jiǎn)單的方法是將這些連接焊接到電路板的底部,因?yàn)镾SR每個(gè)繼電器具有三個(gè)螺絲端子,將兩條六英寸的雙絞線剝開(kāi)并擰入中心端子。如圖所示,再接兩條兩條6英寸的雙絞線,然后將它們擰緊到每個(gè)繼電器最左邊的端子中。為了使這些繼電器保持平衡,繼電器將抵靠在項(xiàng)目盒的面板上。
步驟8:控制器子組件(第3部分)
現(xiàn)在,將兩條數(shù)字控制線從SSR焊接到SainSmart LCD/鍵盤(pán)防護(hù)板的數(shù)字端口2和3。將三根六英寸的導(dǎo)線分別焊接到SainSmart LCD/鍵盤(pán)屏蔽的5v,Gnd和模擬端口1。
步驟9:控制器子組件(第4部分)
插入SainSmart LCD/Keypad屏蔽到Arduino Uno中,確保所有銷(xiāo)釘正確接合。通過(guò)USB串行端口將Arduino連接到計(jì)算機(jī),然后編譯并將附件代碼下載到設(shè)備中。如果您希望設(shè)備默認(rèn)使用攝氏溫度運(yùn)行,只需在編譯之前將變量“ iTempMode”從“ FARENHEIT”更改為“ CELSIUS”即可。請(qǐng)注意,可以即時(shí)在攝氏和攝氏之間進(jìn)行切換(請(qǐng)參閱步驟10)。
使用SainSmart LCD/鍵盤(pán)護(hù)罩左上角的小螺釘來(lái)調(diào)節(jié)顯示屏的亮度。有必要的。拔下Arduino,將其關(guān)閉。從SainSmart LCD/鍵盤(pán)護(hù)罩上取下Arduino Uno。
在面板上切開(kāi)/鉆孔,然后用螺釘將SainSmart LCD/鍵盤(pán)護(hù)罩和SainSmart SSR護(hù)罩固定在面板上。
收集紅色溫度傳感器線,將SainSmart LCD/鍵盤(pán)護(hù)罩的5v導(dǎo)線與SainSmart SSR的Vss + 5v導(dǎo)線連接在一起并焊接,并用收縮管保護(hù)它們。對(duì)黑色溫度傳感器導(dǎo)線和兩條Gnd導(dǎo)線執(zhí)行相同的操作。將綠色導(dǎo)線從溫度傳感器連接到模擬端口1導(dǎo)線。使用擰緊的端子連接器將SSR的一根導(dǎo)線固定到一個(gè)加熱元件的一根導(dǎo)線上。對(duì)其余的SSR和加熱元件重復(fù)此步驟。然后將每個(gè)SSR中剩余的導(dǎo)線分別固定到從接線盒中引出的導(dǎo)線上。
將Arduino Uno的插頭插入SainSmart LCD/鍵盤(pán)屏蔽層。我決定不使用單獨(dú)的9伏電源,而是決定使用從RadioShack?購(gòu)買(mǎi)的非處方電源。我通過(guò)項(xiàng)目框側(cè)面的孔將此連接器插入,然后將其插入Arduino Uno。這種布置的缺點(diǎn)是需要兩個(gè)壁式插座來(lái)運(yùn)行炊具。優(yōu)點(diǎn)是您仍可以使用控制器(并檢查包括溫度傳感器的連接),而無(wú)需在加熱元件上施加壁式電源。
最后,將面板固定在項(xiàng)目盒上。您可以插入9伏電源,并且應(yīng)該會(huì)看到設(shè)備啟動(dòng),并讀取默認(rèn)的設(shè)定溫度(130°F)和當(dāng)前溫度(室溫)。如果您將熱水裝滿浴缸,則溫度會(huì)升高。
步驟10:基本操作
要升高或降低設(shè)定溫度,請(qǐng)分別使用“向上”和“向下”鍵。調(diào)節(jié)到所需的溫度后,使用“選擇”鍵設(shè)置新的“設(shè)置”溫度。 SSR應(yīng)響應(yīng)設(shè)置溫度相對(duì)于當(dāng)前溫度的變化而發(fā)出咔嗒聲。如果您想在攝氏下工作,請(qǐng)使用“左”鍵調(diào)出選項(xiàng)菜單。使用“向上”和“向下”鍵在模式之間進(jìn)行選擇,并使用“選擇”鍵進(jìn)行選擇。為了將來(lái),我打算添加一個(gè)時(shí)鐘,時(shí)鐘功能也將是通過(guò)此方法輸入的子菜單。 “ Rst”鍵將重新啟動(dòng)設(shè)備,而“ Right”鍵目前已被忽略。
我強(qiáng)烈建議在連接120v電源之前,將Arduino/SainSmart電路用于測(cè)試驅(qū)動(dòng)器。只需在浴缸中注滿熱水即可。插入Arduino 9v電源。 LCD顯示屏上應(yīng)顯示“ Booting…”(正在引導(dǎo)…)消息,最后顯示“ Immersion Cooker”和軟件版本號(hào)。在引導(dǎo)階段,軟件將實(shí)例化溫度讀取陣列,該陣列用于執(zhí)行信號(hào)平滑。幾秒鐘后,應(yīng)顯示默認(rèn)設(shè)置溫度(130°F)和當(dāng)前溫度。當(dāng)傳感器達(dá)到真實(shí)溫度時(shí),溫度在最初的幾秒鐘內(nèi)可能會(huì)發(fā)生很大變化,但應(yīng)該穩(wěn)定下來(lái)。我在水中使用了模擬烹飪溫度計(jì),以驗(yàn)證溫度傳感器讀數(shù)的正確性。當(dāng)升高或降低設(shè)定溫度時(shí),您應(yīng)該聽(tīng)到SSR的喀噠聲。此外,應(yīng)使用萬(wàn)用表檢查繼電器的導(dǎo)通性,以確保SSR正常工作。我還將使用萬(wàn)用表檢查所有120v連接,以確保沒(méi)有短路。一旦確定所有電氣連接正確,就可以將120v電路連接到主電源。
步驟11:您的第一頓飯
首先,要使用炊具,必須將食物放在真空密封袋中。在第一頓飯中,我調(diào)味了一些蔬菜并用真空密封。接下來(lái),我拿了大約20只大蝦,將它們密封在一個(gè)裝有幾包黃油和一些大蒜的袋子中。最后,將兩塊紐約條狀牛排,用少許鹽,胡椒粉,洋蔥粉和大蒜粉調(diào)味,并用真空袋密封。
我喜歡我的牛排,這種稀有牛排的溫度約為140°F,因此,那是我設(shè)定溫度的地方。蝦將在較低的溫度下烹飪,因此您將在此溫度下過(guò)度烹飪。我將它們放在水中的時(shí)間不超過(guò)30分鐘。同樣,將蔬菜放在水中一小時(shí)以上會(huì)導(dǎo)致蔬菜煮得過(guò)頭。
但是,讓我們談?wù)勥@頓飯的真正意義;那些多汁的紐約牛排。他們可以在水中靜置數(shù)小時(shí),并且永遠(yuǎn)不會(huì)在此溫度下煮熟。我會(huì)讓他們坐至少一個(gè)小時(shí),但他們?cè)跍囟认峦A舻臅r(shí)間越長(zhǎng),它們就會(huì)變得越嫩。
當(dāng)您準(zhǔn)備好吃飯時(shí),只需將牛排從他們的袋子中拉出即可。將它們放在鍋中,放入一些低芥酸菜籽油中加熱,加熱時(shí)間足夠長(zhǎng),足以使它們焦灼。將蝦,蔬菜和牛排放入盤(pán)子。如果您愿意的話,可以減少三杯波特酒,一湯匙牛肉條和一些意大利香料,然后用中火將其減少,直到液體涂滿湯匙,從而減少波特酒。
第12步:接線圖
此項(xiàng)目中的電路在附圖中。
》
步驟13:
/************************** **************************************/
/* */
/*標(biāo)題:電磁爐控制器*/
/*版本:1.0 */
/*版本日期:2012年5月1日*/
/*作者:Edward A Ranzenbach */
/* MCWSM */
/* */
/*說(shuō)明:*/
/*此草圖在Arduino Uno平臺(tái)上運(yùn)行*/
/*,帶有SainSmart 1602 LCD/鍵盤(pán)護(hù)板,*/
/* SainSmart實(shí)體狀態(tài)繼電器設(shè)備和LM35 */
/*溫度傳感器。它旨在控制*/
/*兩個(gè)普通加熱元件和一個(gè)小型*/
/*浸入式炊具中的浸入式泵。 */
/*用戶只需使用*/
/*鍵盤(pán)撥入設(shè)定溫度,contrioller選通*/
/*加熱元件即可達(dá)到并保持設(shè)定水*/
/*溫度。 */
/* */
/*未來(lái):添加計(jì)時(shí)器/時(shí)鐘功能*/
/* */
/*歷史記錄:*/
/* */
/* 2012-05-01-Edward A Ranzenbach */
/*初始編碼*/
/* */
/****************** ******************************************/
#include
#定義VERSION_STRING“ 1.0”
#define btnRIGHT 0
#define btnUP 1
#define btnDOWN 2
#define btnLEFT 3
#define btnSELECT 4
#define btnNONE 5
#define ELEMENT_1 2//元素1控制端口
#define ELEMENT_2 3////元素2控制端口
#define LED_PORT 13
#define THIRTY_SECONDS 30000;//30,000微秒
#define鍵盤(pán)端口0
#define TEMP_PORT 1
#define增加1
#define減小-1
#define NO_CHANGE 0
#define SELECT 999
#define CELSIUS 0
#define FARENHEIT 1
#define TEMP_COUNT 10
#define KEY_BOUNCE_DELAY 333 int iTempMode = FARENHEIT;//默認(rèn)為Farenheit…
int iSetTemp = 130;//iSetTemp是全局的…
int iKeyPressIn = 0; float fTemp [TEMP_COUNT];//全局溫度平滑數(shù)組…
int iCurrentIndex = 0;//iCurrentIndex是臨時(shí)數(shù)組的全局索引…
byte bDegreeSymbol [8] =//°符號(hào)的位掩碼…
{
B11100,
B10100,
B11100,
B00000,
B00000,
B00000,
B00000,
B00000
} ;;字節(jié)bCheckMarkSymbol [8] =//√符號(hào)的位掩碼…
{
B00000,
B00000,
B00000,
B00001,
B00010,
B10100,
B01100,
B01000
} ;;液體液晶lcd(8,9,4, 5、6、7);//使用接口引腳的編號(hào)初始化庫(kù)
void setup()
{
/*************************** **********************************/
/* */
/*模塊:設(shè)置*/
/*版本:1.0 */
/*版本日期:2012年5月1日*/
/*作者:Edward A Ranzenbach */
/*說(shuō)明:*/
/*初始化LCD顯示屏并顯示啟動(dòng)*/
/*屏幕。 */
/*在設(shè)置過(guò)程中,溫度*/
/*平滑陣列初始化為*/
/*讀數(shù)。 */
/* */
/*歷史記錄:*/
/* */
/* 2012-05-01-Edward A Ranzenbach */
/*初始編碼*/
/* */
/******************************************* **************/
字符串strLine1;
字符串strLine2;
字符串strElipses =“。”;
lcd.createChar(0,bDegreeSymbol);//創(chuàng)建LCD字符
lcd.createChar(1,bCheckMarkSymbol);
lcd.begin(16,2);//設(shè)置LCD顯示列,行。..
DisplayLCD(“ Booting 。..”,“”);
for(int iIndex = 0; iIndex {
fTemp [iIndex] = AnalogRead(TEMP_PORT);
fTemp [iIndex] =((fTemp [iIndex] * 3.3)/1023);//10攝氏度/攝氏度
if(iTempMode == FARENHEIT)
{
fTemp [iIndex] = ConvertCelsiusToFarenheit(fTemp [iIndex]);//轉(zhuǎn)換為Farenheit 。..
}
DisplayLCD(“ Booting 。..”,strElipses);
strElipses + =“?!?
delay(100);
}
pinMode(ELEMENT_1,OUTPUT);
pinMode (ELEMENT_2,輸出);
pinMode(LED_PORT,輸出);
strLine1 =“浸入式炊具”;//創(chuàng)建并顯示初始屏幕
strLine2 =“版本:”;
strLine2 + = VERSION_STRING;
DisplayLCD(strLine1,strLine2);
delay(2000);
}
無(wú)效循環(huán)()
{
/****************************************** ***************/
/* */
/*模塊:循環(huán)*/
/*版本:1.0 */
/*版本日期:2012年5月1日*/
/*作者:Edward A Ranzenbach */
/*說(shuō)明:*/
/*獲取新的SetTemp(如果有)。然后,它調(diào)用SetTemp */
/*來(lái)選通加熱元件以調(diào)整*/
/*溫度。然后顯示溫度信息,延遲一秒*/
/*秒,然后返回。該延遲可防止*/
/*固態(tài)繼電器連續(xù)打開(kāi)和關(guān)閉*/
/*。 */
/*歷史記錄:*/
/* */
/* 2012-05-01-Edward A Ranzenbach */
/*初始編碼*/
/* */點(diǎn)擊/************ *******/
字符串strLCDLine0 =“”;
字符串strLCDLine1 =“”; iSetTemp = GetSetTemp(iSetTemp);//查看用戶是否要更改溫度。..
SetTemp(iSetTemp);//控制加熱元件。..
DisplayTemps(iSetTemp,GetCurrentTemp(),‘S’);//顯示溫度…
delay(1000);//不要過(guò)載SSR 。..
}
int GetSetTemp(int iSetTemp)
{
/******************* **************************************/
/* */
/*模塊:GetSetTemp */
/*版本:1.0 */
/*版本日期:2012年5月1日*/
/*作者:Edward A Ranzenbach */
/*說(shuō)明:*/
/*讀取鍵盤(pán)以查看是否正在對(duì)當(dāng)前設(shè)定溫度進(jìn)行*/
/*調(diào)節(jié)。默認(rèn)值為*/
/*,不按下任何鍵。這將從ReadKeypad返回*/
/* btnNone,并導(dǎo)致*/
/*立即返回給調(diào)用者。否則,將適當(dāng)調(diào)整*/
/*設(shè)定溫度和*/
/*新的調(diào)整溫度。 */
/* */
/*此模塊還允許用戶進(jìn)入*/
/*子菜單,該子菜單中可以執(zhí)行諸如更改*/
/*操作等操作從華氏溫度到攝氏溫度的模式。 */
/* */
/*如果用戶按下任何鍵進(jìn)行溫度*/
/*調(diào)整,他們必須按下選擇鍵*/
/*進(jìn)行調(diào)整永久并將*/
/*返回給調(diào)用方。 */
/*歷史記錄:*/
/* */
/* 2012-05-01-Edward A Ranzenbach */
/*初始編碼*/
/* */點(diǎn)擊/************ *******/
int iKeyIn;
int iNewSetTemp;
int iTempDelta;//增加。減小或選擇。..
char cSetTemp [4];
布爾值bSelected = false;
char cTempMode =‘S’;
iNewSetTemp = iSetTemp;//從當(dāng)前溫度開(kāi)始。..
iKeyIn = ReadKeypad();
if(iKeyIn!= btnNONE)//btnNONE =無(wú)需執(zhí)行任何操作,只需返回到調(diào)用方…
{
do//直到bSelected…
{
switch(iKeyIn)
{
case btnUP://調(diào)高溫度…
iNewSetTemp + = 1;
cTempMode =‘A’;//通知用戶正在進(jìn)行調(diào)整。..
中斷;
案例btnDOWN://向下調(diào)整溫度…
iNewSetTemp-= 1;
cTempMode =‘A’;//通知用戶正在進(jìn)行調(diào)整。..
中斷;
案例btnLEFT:
iNewSetTemp = Menu();//選項(xiàng)菜單。..
bSelected = true;//一旦菜單選項(xiàng)完成就退出。..
break;
case btnSELECT://調(diào)整完成…
bSelected = true;
break;
默認(rèn)值://忽略其他鍵。 。.
break;
}
DisplayTemps(iNewSetTemp,GetCurrentTemp(),cTempMode);//顯示每次調(diào)整的時(shí)間。..
delay(KEY_BOUNCE_DELAY);//平滑按鍵彈跳。..
iKeyIn = ReadKeypad();//內(nèi)部讀取循環(huán)。..
} while(!bSelected);
}
return(iNewSetTemp);
}
void SetTemp(int iSetTemp)
{
/******************* ****/
/* */
/*模塊:SetTemp */
/*版本:1.0 */
/*版本日期:05/01/2012 */
/*作者:Edward A Ranzenbach */
/*說(shuō)明:*/
/*此模塊將iSetTemp參數(shù)與*/
/*當(dāng)前溫度進(jìn)行比較。如果*/
/*度的差異大于1,則會(huì)根據(jù)需要打開(kāi)或關(guān)閉加熱元件*/
/*。 */
/*歷史記錄:*/
/* */
/* 2012-05-01-Edward A Ranzenbach */
/*初始編碼*/
/* */點(diǎn)擊/************ *******/
int iCurrentTemp; iCurrentTemp = GetCurrentTemp();//檢查當(dāng)前溫度…
if(abs(iSetTemp-iCurrentTemp)》 = 1)//如果溫度變化超過(guò)1度
{
if(iCurrentTemp》 iSetTemp)//如果溫度過(guò)高,關(guān)閉加熱元件
{
digitalWrite(ELEMENT_1,LOW);
digitalWrite(ELEMENT_2,LOW);
digitalWrite(LED_PORT,LOW);
}
else
{
digitalWrite(ELEMENT_1,HIGH);//如果溫度太低,請(qǐng)打開(kāi)加熱元件
digitalWrite(ELEMENT_2,HIGH);
digitalWrite(LED_PORT,HIGH);
}
}
}
int GetCurrentTemp()點(diǎn)擊{點(diǎn)擊/****************************************** ***********/
/* */
/*模塊:GetCurrentTemp */
/*版本:1.0 */
/*版本日期:05/01/2012 */
/*作者:Edward A Ranzenbach */
/*說(shuō)明:*/
/*此模塊從*/
/*傳感器讀取當(dāng)前溫度并將其存儲(chǔ)到信號(hào)平滑*/
/*數(shù)組。傳感器的溫度以*/
/*攝氏度為單位,并且根據(jù)當(dāng)前操作模式,我們根據(jù)需要將溫度轉(zhuǎn)換為Farenheit */
/*。然后,用戶*/
/*返回一個(gè)表示平滑的*/
/*(即數(shù)組中所有溫度的平均值)*/
/*溫度的整數(shù)。 */
/*歷史記錄:*/
/* */
/* 2012-05-01-Edward A Ranzenbach */
/*初始編碼*/
/* */點(diǎn)擊/************ *******/
int iReturnTemp = 0; float fCumulativeTemp = 0; float fADCIn;
if((iCurrentIndex)== TEMP_COUNT)//保持在數(shù)組范圍內(nèi)。 。
{
iCurrentIndex = 0;
}
fADCIn = AnalogRead(TEMP_PORT);//從傳感器獲取溫度信號(hào)。..
if(iTempMode == CELSIUS)//轉(zhuǎn)換為攝氏溫度。..
{
fTemp [iCurrentIndex] =((((fADCIn * 3.7)/1024)* 100) ;
}
else
{
fTemp [iCurrentIndex] = fADCIn;////直讀以法郎表示。
}
表示(int iIndex = 0; iIndex {
fCumulativeTemp + = fTemp [ iIndex];
}
iReturnTemp =((int)(fCumulativeTemp/TEMP_COUNT));//返回平滑的溫度。..
iCurrentIndex ++;//下次呼叫的凹凸索引。..
return(iReturnTemp);
}
void DisplayTemps(int iSetTemp,int iCurrentTemp,char cTempMode)
{
/***** **********/
/* */
/*模塊:DisplayTemps */
/*版本:1.0 */
/*版本日期:05/01/2012 */
/*作者:Edward A Ranzenbach */
/*說(shuō)明:*/
/*此模塊在LCD顯示屏上顯示兩行溫度*/
/*。第一個(gè)是設(shè)定溫度*/
/*,并根據(jù)我們是在*/
/*進(jìn)行調(diào)節(jié)還是設(shè)定溫度進(jìn)行標(biāo)記。顯示屏的*/
/*第二行始終為當(dāng)前*/
/*溫度。 */
/* */
/*如果連續(xù)調(diào)用此模塊,則*/
/*將閃爍,因此調(diào)用方應(yīng)在*/
/*調(diào)用之間延遲。 */
/*歷史記錄:*/
/* */
/* 2012-05-01-Edward A Ranzenbach */
/*初始編碼*/
/* */點(diǎn)擊/************ *******/
字符串strLine1;
字符串strLine2;
if(cTempMode ==‘A’)//調(diào)整模式。..
{
strLine1 =“調(diào)整:“;
}
else
{
strLine1 =”設(shè)置:“;//設(shè)置模式。..
}
strLine1 + = iSetTemp;
strLine2 = String(“ Current:”);
strLine2 + = iCurrentTemp;
lcd.clear();
lcd.setCursor(0,0);
lcd.print(strLine1);
lcd.write(byte(0));//度數(shù)符號(hào)。..
if(iTempMode == FARENHEIT)
{
lcd.print(“ F”);
}
else
{
lcd。 print(“ C”);
}
lcd.setCursor(0,1);
lcd.print(strLine2);
lcd.write(byte(0));
if (iTempMode == FARENHEIT)
{
lcd.print(“ F”);
}
else
{
lcd.print(“ C”);
}
}
void DisplayLCD(String strLine0,String strLine1)
{
/************************** *******************************/
/* */
/*模塊:DisplayLCD */
/*版本:1.0 */
/*版本日期:2012年5月1日*/
/*作者:Edward A Ranzenbach */
/*說(shuō)明:*/
/*此模塊顯示兩個(gè)在LCD */
/*顯示屏上顯示文本行。 */
/*如果連續(xù)調(diào)用此模塊,則*/
/*將閃爍,因此調(diào)用方應(yīng)在*/
/*調(diào)用之間延遲。 */
/*歷史記錄:*/
/* */
/* 2012-05-01-Edward A Ranzenbach */
/*初始編碼*/
/* */點(diǎn)擊/************ *******/
lcd.clear();
如果(strLine0.length()》 0)
{ lcd.setCursor(0,0);
lcd .print(strLine0);
}
如果(strLine1.length()》 0)
{ lcd.print(strLine1);
}
}
int ReadKeypad()
{
/******************************** *************************//
/* */
/*模塊:ReadKeypad */
/*版本: 1.0 */
/*版本日期:2012年5月1日*/
/*作者:Edward A Ranzenbach */
/*說(shuō)明:*/
/*讀取SainSmart鍵盤(pán)。如果用戶*/
/*按下一個(gè)鍵,則返回一個(gè)值。 */
/*的值可能因設(shè)備而異。因此,我們*/
/*通過(guò)查看我們是否接近*/
/*讀取值來(lái)確定該值。 */
/*歷史記錄:*/
/* */
/* 2012-05-01-Edward A Ranzenbach */
/*初始編碼*/
/* */點(diǎn)擊/************ *******/
int iKeyIn = AnalogRead(KEYBOARD_PORT);
如果(iKeyIn》 1000)//這將是最常見(jiàn)的結(jié)果。..
{
return btnNONE;
}
否則(iKeyIn 《50)
{
delay(KEY_BOUNCE_DELAY);//處理按鍵彈跳。..
return btnRIGHT;
}
否則(iKeyIn 《195)
{
delay(KEY_BOUNCE_DELAY);//處理鍵反彈。..
return btnUP;
}
否則(iKeyIn 《380)
{
delay(KEY_BOUNCE_DELAY);到攝氏
責(zé)任編輯:wv
-
Arduino
+關(guān)注
關(guān)注
190文章
6498瀏覽量
192182
發(fā)布評(píng)論請(qǐng)先 登錄
Arduino與LabVIEW聯(lián)合編程指南
免費(fèi)分享Arduino入門(mén)+進(jìn)階(全套例程+書(shū)籍)

評(píng)論