“第八课--0-5V量程的电压表/zh”的版本间的差异

来自Microduino Wikipedia
跳转至: 导航搜索
(Created page with "{| style="width: 800px;" |- | ==目的== 之前我们介绍过模拟口的读取,然后对应返回0-1024的数值,今天我们就要利用Microduino模拟口,来制作...")
 
 
(未显示1个用户的5个中间版本)
第1行: 第1行:
 +
{{Language|Maple Lesson 08 - A multimeter with the range of 0 to 5 volts}}
 
{| style="width: 800px;"
 
{| style="width: 800px;"
 
|-
 
|-
第19行: 第20行:
 
==原理图==
 
==原理图==
 
[[File:stm32-less0n9-schematic.jpg|center|600px|thumb]]
 
[[File:stm32-less0n9-schematic.jpg|center|600px|thumb]]
 
图上使用1K电阻的目的是在测量端悬空的情况下,将GND的基准电平引导到测量口,避免接口悬空受到干扰。
 
  
 
==程序==
 
==程序==
 
<source lang="cpp">
 
<source lang="cpp">
float temp;   //创建一个浮点型变量temp作为存储空间准备存放数据
+
const int analogInPin = 14;
void setup()
+
{
+
float sensorValue = 0;       // value read from the pot
  Serial.begin(115200);     //使用9600的波特率进行串口通讯
+
float Voltage=0;
 +
 +
void setup() {
 +
    pinMode(analogInPin, INPUT_PULLDOWN);
 +
//采用内部下拉,将GND的基准电平引导到测量口,避免接口悬空受到干扰。
 +
 
 
}
 
}
void loop()
 
{
 
 
   
 
   
  int V1 = analogRead(A0);                   
+
void loop() {
//从A0口读取电压数据存入刚刚创建整数型变量V1,模拟口的电压测量范围为0-5V 返回的值为0-1024
+
    // read the analog in value:
  float vol = V1*(5.0 / 1023.0);              
+
    sensorValue = analogRead(analogInPin);
//我们将 V1的值换算成实际电压值存入浮点型变量 vol
+
    // map it to the range of the analog out:
  if (vol == temp)                           
+
    Voltage = sensorValue*5/4095;
//这部分的判断是用来过滤重复的数据,只有本次的电压值和上次不一时才进行输出
+
  {
+
     SerialUSB.print("Voltage = ");
     temp = vol;                               //比较完成后,将这次的值存入比对比用的变量temp
+
     SerialUSB.print(Voltage);
  }
+
     SerialUSB.println("V ");
  else
+
     delay(500);
  {
 
     Serial.print(vol);                       //串口输出电压值,并且不换行 
 
     Serial.println(" V");                    //串口输出字符V,并且换行
 
    temp = vol;
 
     delay(1000);                           //输出完成后等待1秒钟,用于控制数据的刷新速度。
 
  }
 
 
}
 
}
 
</source>
 
</source>
 +
 +
 +
==串口监视==
 +
 +
用于Maple与STM32之间的通讯。
 +
 +
*点击串口监视监视器按钮,弹出串口监视界面。
 +
[[File:stm32-serialmonitor.jpg|600px|center|thumb]]
 +
[[File:stm32-serialwindow.jpg|600px|center|thumb]]
 +
 +
*SerialUSB可将你需要的值打印出来,便于调试。
 +
**如果你需要打印指定的字符,你可以参考:'''“SerialUSB.print("XXX");”''',XXX为你要打印的字符;
 +
**如果你需要打印变化的字符,你可以参考:'''“SerialUSB.print(XXX);”''',XXX为你要打印的字符;
 +
**如果你需要换行打印,你可以参考:'''“SerialUSB.println(XXX);”'''。
  
 
==结果==
 
==结果==
当被测电压值有改变时每隔1s刷新一次数据,2次的电压值有波动是正常的,因为这毕竟是低精度的测试。要想更加精度测试,
+
当被测电压值有改变时每隔500ms刷新一次数据,2次的电压值有波动是正常的,因为这毕竟是低精度的测试。
  
 
[[File:stm32-lesson9Result.jpg|600px|center|thumb]]
 
[[File:stm32-lesson9Result.jpg|600px|center|thumb]]

2014年11月5日 (三) 07:22的最新版本

Language English

目的

之前我们介绍过模拟口的读取,然后对应返回0-1024的数值,今天我们就要利用Microduino模拟口,来制作一个0-5V的电压表。

注意:本实验电路设计没有相对复杂的保护电路,所以,千万别使用超过两节以上的AA电池,并且不要用来测量锂电池或者其他电源!!

设备

Microduino-CoreSTM32是采用 STM32F103CBT6芯片的ARM开发板,采用独特的Upin7接口,大小与一枚一元硬币差不多大,完全兼容Microduino其他扩展模块。

  • 其他硬件设备
    • 面包板跳线 一盒
    • 面包板 一块
    • 1k电阻 一个
    • USB数据连接线 一根

原理图

程序

const int analogInPin = 14;
 
float sensorValue = 0;        // value read from the pot
float Voltage=0;
 
void setup() {
    pinMode(analogInPin, INPUT_PULLDOWN);
//采用内部下拉,将GND的基准电平引导到测量口,避免接口悬空受到干扰。

}
 
void loop() {
    // read the analog in value:
    sensorValue = analogRead(analogInPin);
    // map it to the range of the analog out:
    Voltage = sensorValue*5/4095;
 
    SerialUSB.print("Voltage = ");
    SerialUSB.print(Voltage);
    SerialUSB.println("V ");
    delay(500);
}


串口监视

用于Maple与STM32之间的通讯。

  • 点击串口监视监视器按钮,弹出串口监视界面。
  • SerialUSB可将你需要的值打印出来,便于调试。
    • 如果你需要打印指定的字符,你可以参考:“SerialUSB.print("XXX");”,XXX为你要打印的字符;
    • 如果你需要打印变化的字符,你可以参考:“SerialUSB.print(XXX);”,XXX为你要打印的字符;
    • 如果你需要换行打印,你可以参考:“SerialUSB.println(XXX);”

结果

当被测电压值有改变时每隔500ms刷新一次数据,2次的电压值有波动是正常的,因为这毕竟是低精度的测试。

视频