极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: 迷你强

Arduino入门教程--第十课--用Arduino做简单温度计

  [复制链接]
发表于 2013-1-6 13:31:46 | 显示全部楼层
我到反倒有个新问题,为啥atmega手册里面写的是1024,而不是1023,因为平时用atmega8A的芯片就够了,8A片内基准源电压是2.56V=2560mV 确实除以1024等于2.5,转换出来的电压正好。而如果除以1023的话,后面是有小数位的,按照平时思维确实应该除以1023,但为啥手册写的是1024呢,难道还手册错了不成?看图。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2013-1-9 21:24:51 | 显示全部楼层
范例用热敏电阻是不是更简单点儿
回复 支持 反对

使用道具 举报

发表于 2013-1-10 10:59:18 | 显示全部楼层
jrqzy 发表于 2013-1-6 13:31
我到反倒有个新问题,为啥atmega手册里面写的是1024,而不是1023,因为平时用atmega8A的芯片就够了,8A片内 ...

恩,是1024,强子教程里面原来写错了。。已经改正过来了。
回复 支持 反对

使用道具 举报

发表于 2013-1-10 22:37:16 | 显示全部楼层
不对呀,强子的原话是:
因本程序算法问题造成的测量值偏大问题已经纠正,源算法中 float vol = n * 0.48828125; 被替换为 float vol = n * (5.0 / 1024.0*100);  特此说明

0.48828125不就等于 (5.0 / 1024.0*100)么? 何错之有阿
回复 支持 反对

使用道具 举报

发表于 2013-1-10 23:16:16 | 显示全部楼层
jrqzy 发表于 2013-1-10 22:37
不对呀,强子的原话是:
因本程序算法问题造成的测量值偏大问题已经纠正,源算法中 float vol = n * 0.48828 ...

我也不明白??
回复 支持 反对

使用道具 举报

发表于 2013-1-10 23:41:27 | 显示全部楼层
本帖最后由 弘毅 于 2013-1-10 23:46 编辑
jrqzy 发表于 2013-1-10 22:37
不对呀,强子的原话是:
因本程序算法问题造成的测量值偏大问题已经纠正,源算法中 float vol = n * 0.48828 ...


因为。。原来除以1024是对的,但是发现温度与实际温度有偏差,不准。所以手工修正了下。。除以1023刚好差不多了。其实真实原因是因为5V供电有偏差,导致ADC基准不准,进而导致ADC的结果不准。所以除以1024是正确的,但是结果不正确。。。修正时,修错了地方。

这个问题,在后面调用内部基准帖子上,进行了详细解释~~
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-1-11 11:35:28 | 显示全部楼层
pww999 发表于 2013-1-10 23:16
我也不明白??


我悄悄改了。。。。。。。。。{:soso_e149:}
回复 支持 反对

使用道具 举报

发表于 2013-1-20 20:49:20 | 显示全部楼层
学习了,谢谢
回复 支持 反对

使用道具 举报

发表于 2013-1-31 17:44:42 | 显示全部楼层
ttyp 发表于 2012-10-6 10:45
http://wiki.geek-workshop.com/doku.php?id=arduino:arduino_language_reference:map

很好,又多学了一个函数,谢谢~
回复 支持 反对

使用道具 举报

发表于 2013-1-31 18:01:16 | 显示全部楼层
电阻怎么可能接反 - -
回复 支持 反对

使用道具 举报

发表于 2013-1-31 21:33:03 | 显示全部楼层
ladywent 发表于 2012-7-25 11:06
假如n=1023,那vol=1024*0.48828125=500度?

我觉得vol=n*100/1024=n*0.09766


vol=n*100/1024=n*0.09766
好像你这个算法才是对的吧?
等待你的回复。
回复 支持 反对

使用道具 举报

发表于 2013-2-20 08:51:35 | 显示全部楼层
float vol = n * (5.0 / 1024.0*100);   这样测量出来的温度应该偏高,正确的计算公式最好是: 电压=模拟读数/1024*5,  温度=(电压-0.5)*100
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-2-20 21:43:58 | 显示全部楼层
这样吧。。各种偏高,偏低的问题,是因为基准电压5V精度不够造成的。后面有教程使用1.1V芯片内部基准源测温的教程,所以,不要纠结了。。因为参考电平的误差造成的误差。
回复 支持 反对

使用道具 举报

发表于 2013-3-4 14:36:30 | 显示全部楼层
本帖最后由 <一一巛 于 2013-3-5 10:17 编辑

交作业,温度一直在跳
18.57
19.06
18.57

  1. void setup() {
  2.   Serial.begin(9600);         //使用9600速率进行串口通讯
  3. }
  4. void loop() {
  5.   float vol = analogRead(A4) * 500.0 / 1023.0;   //使用浮点数存储温度数据,温度数据由电压值换算得到
  6.   Serial.println(vol);                   //串口输出温度数据
  7.   delay(2000);  
  8. }
复制代码
回复 支持 反对

使用道具 举报

发表于 2013-3-23 21:41:42 | 显示全部楼层
我按照这些步骤做,怎么总是显示500.0啊?那儿出错了??连线与代码都一样啊!!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-27 11:43 , Processed in 0.046251 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表