这三种方式,各有优缺点,第一种每每价格比较便宜,可是温湿度传感器要和采集芯片必须很近才成,而且必需要实现单总线相关的代码,开发和调试相对比较复杂;第二种使用相对最容易,通常状况下直接和PC通讯居多,不过价格也是最高的;第三种价格适中,而且传输的距离也比单总线方式要远的多。spa
AD方式的温湿度传感器和另两种有所不一样,前两种通常温湿度已经处理好,经过协议解析就能够直接获取温湿度的数值。而AD方式采集的只是电压值,须要根据必定的公式进行数据计算,才能获取最终的温湿度值。.net
今天咱们就介绍如何用紫藤207物联网智能网关的AD接口采集AMT1001温湿度传感器的温湿度数值。调试
紫藤207物联网智能网关一共有8路AD通道,对应的管脚为PA4、PA6、PA5、PB1、PA0、PC3、PC2和PC0,分别对应AnalogInput类的0~7通道(AnalogChannel.ANALOG_0~ AnalogChannel.ANALOG_7),固然这个几个管脚除了能够做为AD输入通道外,还能够做为IO入、IO出和PWM输出(仅PB1和PB5两路)。对象
须要说明的是,该AD通道可采集的电压范围是0~3.3V(全部采集通道的总电路不要超过20mA),注意不要超出该范围,以避免对芯片形成永久的损害(具体指标能够参见STM32F207相关数据手册)。blog
下面简单介绍一下AMT1001温湿度传感器(以下图):接口
传感器采用四线方式,5V供电,并提供了一些以供计算的标准参数。对湿度采集来讲,很是简单,相应管脚直接输出0~3V的电压值,而后直接查表就能够很容易计算出湿度值来。而温度采集却不一样,输出的电压范围大概是0~0.8V,变化很是小,而且不能经过这个电压值,直接查表获取温度值,而是间接计算出电阻值,而后再查表获取相关温度值。开发
温度采集除了这些和湿度采集不一样外,还须要外加一个电阻,该电阻的阻值要和传感器模块中的温敏电阻25度时的阻值同样(主要目的是便于计算)。外接电阻和温敏电阻实际上是串联在一块儿,AD采集的就是这10K上的电压值。那么温敏电阻的阻值就能够这样计算:假设10K上的电压值为V,那么温敏电阻上的电压就是5-V(由于模块供电电压为5V),根据等比公式就能够知道当前温敏电阻的值R= (5 - V) / V * R0。get
紫藤207模块和ATM1001模块电路链接图以下(图中的电阻就是10K):源码
相关代码以下:it
//湿度
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);
}
为了便于演示,我把相关的温湿度值除了经过串口输出外,还直接显示在LCD上,其核心代码以下。
screen.DrawRectangle(Color.Black, 0, 60, 70, 200, 200, 0, 0, Color.Black, 0, 0, Color.Black, 0, 0, 255);
screen.DrawText("温度: " + T.ToString("F2") + " ℃?",font, Colors.Green,60,70);
screen.DrawText("湿度: " + H.ToString("F2") + " %", font, Colors.Blue, 60, 120);
screen.Flush();
screen 是一个位图对象(Bitmap)。
程序运行后的最终效果图以下:
本文源码:http://www.sky-walker.com.cn/MFRelease/Sample/YF_AMT1001.rar