极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

楼主: 迷你强

Arduino入门教程--第九课--用Arduino做0-5V量程的电压表

  [复制链接]
 楼主| 发表于 2013-2-19 16:30:42 | 显示全部楼层
computerboyk 发表于 2013-2-7 19:28
我想问下并联1k欧的电阻,是一定是用1k欧么?还是220的也可以?电路知识不太好,麻烦解释一下
这个1k欧的作 ...

下拉电阻一般取值1k-10k
回复 支持 反对

使用道具 举报

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

交作业
  1. float temp;   //创建一个浮点型变量temp作为存储空间准备存放数据
  2. void setup()
  3. {
  4.   Serial.begin(9600);     //使用9600的波特率进行串口通讯
  5. }
  6. void loop()
  7. {
  8.   float vol = analogRead(A4)*5/1023.0;
  9.   if (vol != temp)  
  10.   {   
  11.     Serial.print(vol);          //串口输出电压值,并且不换行  
  12.     Serial.println(" V");         //串口输出字符V,并且换行
  13.     delay(1000);                   //输出完成后等待1秒钟,用于控制数据的刷新速度。
  14.   }
  15.    temp = vol;
  16. }
复制代码
回复 支持 反对

使用道具 举报

发表于 2013-4-15 13:48:27 | 显示全部楼层
学习 嘿嘿..好东西
回复 支持 反对

使用道具 举报

发表于 2013-5-9 21:27:38 | 显示全部楼层
如何使结果更精确,我定义了float a=1.234;Serial.print(a);但结果显示1.23,这是为什么?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-5-10 09:44:34 | 显示全部楼层
孤独舰 发表于 2013-5-9 21:27
如何使结果更精确,我定义了float a=1.234;Serial.print(a);但结果显示1.23,这是为什么?

默认两位小数
Serial.print(a,4);
就能显示4位小数了
回复 支持 反对

使用道具 举报

发表于 2013-5-10 16:59:09 | 显示全部楼层
原理如此,哈哈十分感谢!
回复 支持 反对

使用道具 举报

发表于 2013-5-24 19:32:44 | 显示全部楼层
本帖最后由 hdragon627 于 2013-5-24 22:14 编辑

交作业嘻嘻,我补充个用外部基准的方法

  1. #include <Wire.h>
  2. #include <LiquidCrystal_I2C.h>

  3. LiquidCrystal_I2C lcd(0x27, 16, 2);                //用的是转成i2c的lcd1602
  4. float temp = 5.5;                //赋个值,analog口都加了10k下拉电阻,防止lcd不显示

  5. void setup()
  6. {
  7.   lcd.init();
  8.   lcd.backlight();
  9. }

  10. void loop()
  11. {
  12.   int vf = analogRead(A0);                //连接外部基准
  13.   int va = analogRead(A3);
  14.   float volf = vf*(4.6 / 1023.0);                //4.6是用万用表测的电源电压,不影响计算被测电压,只是显示当前基准电压
  15.   float vola = va*(2.56 / vf);                //2.56就是外部基准的标定的电压,影响计算

  16.   if (vola == temp)
  17.   {
  18.         ;
  19.   }
  20.   else
  21.   {
  22.     lcd.clear();
  23.     lcd.print("vf=");
  24.     lcd.print(volf, 3);
  25.     lcd.print(" rf=2.56");
  26.     lcd.setCursor(0, 1);
  27.     lcd.print("v=");
  28.     lcd.print(vola, 3);
  29.     lcd.print("V");
  30.     temp = vola;
  31.     delay(300);
  32.   }
  33. }
复制代码
回复 支持 反对

使用道具 举报

发表于 2013-5-24 20:28:33 | 显示全部楼层
不过有个问题就是 uno的 analog只有6个,一个基准用,二个给i2c占用了,只剩下三个analog通道
回复 支持 反对

使用道具 举报

发表于 2013-8-9 21:22:55 | 显示全部楼层
本帖最后由 chaoser 于 2013-8-9 21:44 编辑

大家都喜欢交作业,我也来,嘻嘻。

烦恼于极其微小的波动也会输出,导致监控窗口上一大列“0.00 V”,所以增加了一个判断,可以自行调节变化幅度。

此外,加了个小东西,可以直观看到波动变化哦,光看数字多枯燥:

  1. /* 程序功能:使用arduino模拟口测量电压,作为0~5V电压表 */

  2. float vSave=9.99;

  3. void setup() {Serial.begin(9600);}       // 使用9600的波特率进行串口通讯

  4. void loop() {
  5.   float vReal= analogRead(A0)*5.0/1023.0;  //从A0口读取电压值,并换算成实际电压值
  6.   if (abs(vReal-vSave)<=0.01) return;      // 仅当电压值发生变化较大时才输出
  7.   Serial.print(vReal,4);                  // 串口输出电压值,不换行
  8.   Serial.print(" V   ");                  // 输出单位符号V,换行
  9.   float n=vReal*100.0;
  10.   while (n>=2.0) {
  11.     Serial.print("*");
  12.     n=n-2.0;
  13.   }
  14.   Serial.println("*");
  15.   delay(1000);                             // 每秒测量一次
  16.   vSave=vReal;                             // 保存当前值,以便与下次比较
  17. }
复制代码
回复 支持 反对

使用道具 举报

发表于 2013-8-18 18:10:12 | 显示全部楼层
chaoser 发表于 2013-8-9 21:22
大家都喜欢交作业,我也来,嘻嘻。

烦恼于极其微小的波动也会输出,导致监控窗口上一大列“0.00 V”,所 ...

very good ! 哈哈哈, 新手测试成功
回复 支持 反对

使用道具 举报

发表于 2013-8-18 18:23:00 | 显示全部楼层
实验是成功了,不过整体感觉几个实验下来,原理性的东西收获不是很多哈。有几个疑问:

1. 为啥不推荐锂电池等? 貌似很多锂电池电压不高哈? 是因为有些电压稍微高于 5V 还是什么别的原因?

2. 以我高中学的知识理解,象是个并流电路,1k欧的线路和板子的线路并联? 这时候板子的电阻多大哦?有嗲理解不上去了,板子本身也接入了电源了,这种双电源供电似的... 没学过。

这里倒不涉及电压电流电阻公式来换算。 以我的理解是不是可以再串联几个 1K 欧姆的电阻,然后就可以根据公式换算,以便测量更高的电压了?
回复 支持 反对

使用道具 举报

发表于 2013-8-18 18:23:42 | 显示全部楼层
hick 发表于 2013-8-18 18:23
实验是成功了,不过整体感觉几个实验下来,原理性的东西收获不是很多哈。有几个疑问:

1. 为啥不推荐锂电 ...

现在不把握,没人指导的话等我玩差不多了再冒险实验,黑恶hi
回复 支持 反对

使用道具 举报

发表于 2013-9-25 15:02:01 | 显示全部楼层
弘毅 发表于 2012-10-31 07:57
每个人的底子不同,水平不同。
开源、分享本身就是朝着分享更多、收获更多的目标走,玩Arduino的人本身 ...

小白来了。。。 就这句不明白。。

if (vol == temp)
{
temp = vol;
}

temp不是空的吗?怎么比较?


回复 支持 反对

使用道具 举报

发表于 2013-10-13 20:27:19 | 显示全部楼层
实验成功感谢楼主教程
回复 支持 反对

使用道具 举报

发表于 2013-10-15 16:30:54 | 显示全部楼层
为什么不使用PinMode(A0,INPUT);是它默认为输入吗?还有arduino默认是高电平,还是低电平?
回复 支持 反对

使用道具 举报

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

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

Archiver|联系我们|极客工坊

GMT+8, 2024-4-19 15:30 , Processed in 0.049844 second(s), 25 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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