标签:
在前面的文章中,我们已经学习并且利用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上。在温度没有达到设定的阈值之前,风扇不转,温度超标以后,风扇工作。调试图片如下。
Windows on Device 项目实践 4 - 智能风扇制作
标签:
原文地址:http://www.cnblogs.com/dearsj001/p/WindowsOnDevice_4.html