在前面的文章中,我們已經學習並且利用Intel Galileo開發板和Windows on Device制作了火焰報警器、感光燈和PWM調光燈。在這個項目中,我們來利用溫度傳感器和直流電機,完成一個簡單的智能風扇的制作。
1. 溫度傳感器
LM35 是很常用且易用的溫度傳感器元件,在傳統的Arduino項目中,只需要一個LM35元件和一個模擬接口就可以實現,難點在於算法上的將讀取的模擬值轉換為實際的溫度。但是針對Galileo就不行,因為Galileo對噪聲和波動更加敏感,需要額外添加電阻和濾波電容。詳細請參考下面的硬件連接一節。
2. 直流電機
這里使用普通的5V供電的直流電機就可以,關鍵在於,Galileo的驅動能力有限,需要使用一個三極管來驅動直流電機。詳細可以參考下面的硬件連接一節。
3. 元器件和硬件連接
這次實踐項目需要使用的元器件有:
•溫度傳感器:LM35 一個
•5V直流電機:一個
•電阻:220歐姆、330歐姆各一個
•二極管:一個
•三極管:9013 一個
•連接線:若干
•面包板:一塊
1)溫度傳感器的連接
LM35有三個引腳,分別是GND、Vout和Vs,連接地、Galileo的A0和5V引腳。這里需要在Vout輸入和地之間加入一個220歐姆的電阻,同時需要在LM35電源輸入的引腳附近加一個0.1uF的瓷片電容,用於濾除電源的干擾。
2)直流電機的連接
三極管9013的集電極上接直流電機,用Galileo的數字引腳11來控制三極管的基極,射級直接接地。需要注意的是,在直流電機兩端放一個二極管,用於在斷電后,剩余能量的釋放。
最終,其硬件連接如下圖所示。
4. 實驗原理
Galileo的A0口不斷采集溫度,對返回值進行判斷,如果超過一定范圍,就開啟直流電機。如果溫度沒有超過設定值,就關閉直流電機。其流程如下。
5. 源代碼解析
#include "stdafx.h"
#include "arduino.h"
int _tmain(int argc, _TCHAR* argv[])
{
return RunArduinoSketch();
}
int MOTOR_PIN = 11; //定義數字接口11 控制直流電機
int TEMP_PIN = A0; //定義模擬接口0 連接LM35 溫度傳感器
void init_motor()
{
pinMode(MOTOR_PIN, OUTPUT);
analogWrite(MOTOR_PIN, 0);
}
void setup()
{
// TODO: Add your code here
init_motor(); // 初始化直流電機控制引腳
}
// the loop routine runs over and over again forever:
void loop()
{
// TODO: Add your code here
int val;//定義變量
int dat;//定義變量
val = analogRead(TEMP_PIN);// 讀取傳感器的模擬值並賦值給val
dat = (125 * val) >> 8;//溫度計算公式
Log(L"Tep:");
Log(L"%d", dat);//顯示dat 變量數值
Log(L"C\r\n");
if (dat > 21) //溫度判斷,根據實際情況設定
{
Log(L"Start DC Motor\r\n");
analogWrite(MOTOR_PIN, 100);
delay(3000);
}
else
{
Log(L"Stop DC Motor\r\n");
analogWrite(MOTOR_PIN, 0);
delay(3000);
}
}
6. 調試結果
啟動Galileo,利用TelNet建立連接,然后點擊調試。程序就會通過網口下載到Galileo上。在溫度沒有達到設定的閾值之前,風扇不轉,溫度超標以后,風扇工作。調試圖片如下。