本示例是NetDIY智能主控板上的第二个应用程序。html
本示例经过AM1001模块采集温湿度数据,并经过模拟量输出。工具
智能主控板照片以下。
url
AM1001模块如图所示:spa
该AD通道可采集的电压范围是0~3.3V(全部采集通道的总电路不要超过20mA),注意不要超出该范围,以避免对芯片形成永久的损害(具体指标能够参见STM32F207相关数据手册)。调试
传感器采用四线方式,5V供电,并提供了一些以供计算的标准参数。对湿度采集来讲,相应管脚直接输出0~3V的电压值,而后直接查表就能够很容易计算出湿度值来。而温度采集却不一样,输出的电压范围大概是0~0.8V,变化很是小,而且不能经过这个电压值,直接查表获取温度值,而是间接计算出电阻值,而后再查表获取相关温度值。orm
温度采集除了这些和湿度采集不一样外,还须要外加一个电阻,该电阻的阻值要和传感器模块中的温敏电阻25度时的阻值同样(主要目的是便于计算)。外接电阻和温敏电阻实际上是串联在一块儿,咱们已经对AM1001模块进行相应调整,已经将外接电阻集成到AM1001内部,电阻阻值为10KΩ,AD采集的就是这10K上的电压值。那么温敏电阻的阻值就能够这样计算:假设10K上的电压值为V,那么温敏电阻上的电压就是5-V(由于模块供电电压为5V),根据等比公式就能够知道当前温敏电阻的值R= (5 - V) / V * R0。htm
其中湿度采集部分代码以下:开发
//湿度get
static double ConvertHumidity(double value)
{
double V = (value / 4096) * 3.3;
return DataTransition(V, AMT1001_Voltage, AMT1001_Humidityvalue);
}
湿度采集部分代码以下:
//温度
static double ConvertTemperature(double value)
{
double V = (value / 4096) * 3.3;
double R = (5 - V) / V * AMT1001_R;
return DataTransition(R, AMT1001_Resistance, AMT1001_Temperaturevalue);
}
主方法中的代码以下:
AnalogInput AI1 = new AnalogInput(Mainboard.ADC.Channel0);
//模拟量输入通道为channel0,对应CPU管脚PA7,温湿度传感器的黄线
AnalogInput AI2 = new AnalogInput(Mainboard.ADC.Channel1);
//模拟量输入通道为channel1,对应CPU管脚PA6,温湿度传感器的白线
double H, //湿度
T; //温度
string info = "";
while (true)
{
info = "H=";
H = ConvertHumidity(AI1.ReadRaw());
//读取湿度值
T = ConvertTemperature(AI2.ReadRaw());
//读取温度值
info += H.ToString("F2") + "% ; T=" + T.ToString("F2") + "℃";
Debug.Print(info);
//在输出窗口中打印结果
Thread.Sleep(1000);
}
采用MFDeploy.exe调试工具,程序运行结果以下图所示: