在前面的文章中,我们已经学习并且利用Intel Galileo开发板和Windows on Device制作了火焰报警器、感光灯和PWM调光灯。在这个项目中,我们来利用温度传感器和直流电机,完成一个简单的智能风扇的制作。
LM35 是很常用且易用的温度传感器元件,在传统的Arduino项目中,只需要一个LM35元件和一个模拟接口就可以实现,难点在于算法上的将读取的模拟值转换为实际的温度。但是针对Galileo就不行,因为Galileo对噪声和波动更加敏感,需要额外添加电阻和滤波电容。详细请参考下面的硬件连接一节。
这里使用普通的5V供电的直流电机就可以,关键在于,Galileo的驱动能力有限,需要使用一个三极管来驱动直流电机。详细可以参考下面的硬件连接一节。
这次实践项目需要使用的元器件有:
•温度传感器:LM35 一个 •5V直流电机:一个 •电阻:220欧姆、330欧姆各一个 •二极管:一个 •三极管:9013 一个 •连接线:若干 •面包板:一块
LM35有三个引脚,分别是GND、Vout和Vs,连接地、Galileo的A0和5V引脚。这里需要在Vout输入和地之间加入一个220欧姆的电阻,同时需要在LM35电源输入的引脚附近加一个0.1uF的瓷片电容,用于滤除电源的干扰。
三极管9013的集电极上接直流电机,用Galileo的数字引脚11来控制三极管的基极,射级直接接地。需要注意的是,在直流电机两端放一个二极管,用于在断电后,剩余能量的释放。
最终,其硬件连接如下图所示。
Galileo的A0口不断采集温度,对返回值进行判断,如果超过一定范围,就开启直流电机。如果温度没有超过设定值,就关闭直流电机。其流程如下。
#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); }
}
启动Galileo,利用TelNet建立连接,然后点击调试。程序就会通过网口下载到Galileo上。在温度没有达到设定的阈值之前,风扇不转,温度超标以后,风扇工作。调试图片如下。