arduino 读取内部温度传感器.
本帖最后由 帕米 于 2015-6-26 17:47 编辑在看datasheet. 发现MCU居然还带温度测量. 精确度为 +/- 10°C.(好吧! 这误差.... 总比没带强...) , 还有随着驱动 IO电流变大时.温度会跟着往上飘.
有内部温度传感器的 AVR 芯片:
[*]ATmega168A : Yes
[*]ATmega168P : Yes
[*]ATmega328 : Yes
[*]ATmega328P : Yes
[*]ATmega1280 (Arduino Mega) : No
[*]ATmega2560 (Arduino Mega 2560) : No
[*]ATmega32U4 (Arduino Leonardo) : Yes
硬件: 1arduino 328P + 1 USB线. 其它无..
tips: 先确定所在的环境温度,再慢慢修正 偏移量,
不得不提一下, 这次的 arduino IDE 1.6.5 版本更新的不错.. Linux 版本.字体比以前好看多了. 还能写中文注释.. 括号匹配时还带个动画一跳一跳的. {:soso_e142:}
Code...
double getTemp(void) {
uint16_t wADC;
double t;
// 设置内部参考电压 1.1 和选择多路复用ADC8 (AVR内部温度传感器)
ADMUX = (_BV(REFS1) | _BV(REFS0) | _BV(MUX3));
ADCSRA |= _BV(ADEN);// 使能 ADC 功能
delay(20); // 等待 AREF 电压变得稳定。
ADCSRA |= _BV(ADSC);// 开启 ADC 转换
// 检测ADC转换结束
while (bit_is_set(ADCSRA,ADSC));
// 读寄存器值
wADC = ADCW;
//Serial.println(wADC);
// 偏移量 324.31 可能是错的, 它是只是例子。 可以先确定所在的环境温度,再得出偏移量
t = (wADC - 320.31) / 1.11;
// 返回摄氏度
return (t);
}
void setup() {
Serial.begin(9600);
Serial.println("Arduino Internal Temperature Sensor.");
}
void loop() {
// 显示温度
Serial.println(getTemp(), 1);
delay(1000);
}
山寨以下..
http://playground.arduino.cc/Main/InternalTemperatureSensor 我也试一下 这个误差 基本上也可以忽略了
要知道一般芯片工作温度区间也就是-20°C-90°C 误差居然能达到+/-10°C 你确定这个温度不是猜出来的?
感觉比人手感知还不靠谱 疲倦的黄昏 发表于 2015-6-26 11:09 static/image/common/back.gif
厉害。。。
:loveliness: jikecyatmcn 发表于 2015-6-25 19:12 static/image/common/back.gif
居然还有这功能
呵呵, AVR还是挻强大的.:lol 厉害。。。:D :funk:居然还有这功能
页:
[1]