模拟电压表

来自Microduino Wikipedia
Pkj讨论 | 贡献2014年6月3日 (二) 08:20的版本 程序
跳转至: 导航搜索
Language English

目的

本教程将教大家如何用Microduino做一个模拟电压表,电压表的读数在Processing中显示。

设备

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

原理图

AnalogVoltmeterConnectionDiagram.jpg

原理图使用A2,显示电压读数显示在频道一中,一共四个频道分配对应A0,A1,A2,A3你也可以试试。

程序

https://github.com/Microduino/Microduino_Tutorials/tree/master/Microduino_Processing/AnalogVoltmeter

https://github.com/Microduino/Microduino_Tutorials/tree/master/Microduino_Processing/AnalogVoltmeterProcessing

调试

步骤一:按着原理图搭建硬件环境,像这样:

AnalogVoltmeterConnection.jpg


步骤二:解释一下代码:

本例需要两端的代码,Processing端和Microduino端

Microduino:

//得到电压值后通过串口输出用以Processing端接收

 void loop()
 {
     // take a number of analog samples and add them up
     while (sample_count < NUM_SAMPLES) {
         // sample each channel A2 to A5
         for (l_cnt = 0; l_cnt < 4; l_cnt++) {
             sum[l_cnt] += analogRead(A2 + l_cnt);
         }
         sample_count++;
         delay(10);
     }
     // calculate the voltage for each channel
     for (l_cnt = 0; l_cnt < 4; l_cnt++) {
         voltage[l_cnt] = ((float)sum[l_cnt] / (float)NUM_SAMPLES * V_REF) / 1024.0;
     }
   
     // each voltage is multiplied by the resistor network
     // division factor to calculate the actual voltage
     voltage[0] = voltage[0] * DIV_1;
     voltage[1] = voltage[1] * DIV_2;
     voltage[2] = voltage[2] * DIV_3;
     voltage[3] = voltage[3] * DIV_4;
   
     // send voltages to Processing application via serial port / USB
     // voltage 1 - A (pin A2)
     Serial.print("A ");
     Serial.print(voltage[0], 1);
     Serial.print("V ");
     // voltage 2 - B (pin A3)
     Serial.print("B ");
     Serial.print(voltage[1], 1);
     Serial.print("V ");
     // voltge 3 - C (pin A4)
     Serial.print("C ");
     Serial.print(voltage[2], 1);
     Serial.print("V ");
     // voltage 4 - D (pin A5)
     Serial.print("D ");
     Serial.print(voltage[3], 1);
     Serial.print("V ");
     Serial.println("");
     delay(10);
     // reset count and sums
     sample_count = 0;
     for (l_cnt = 0; l_cnt < 4; l_cnt++) {
         sum[l_cnt] = 0;
     }
 }

Processing:

//得到第一个串口的数据

   println(Serial.list());
   // modify Serial.list()[0] to select correct serial port

   ser_port = new Serial(this, Serial.list()[0], 9600);


函数说明:

// 串口事件函数 void serialEvent(Serial p)

// 显示频道数和电压值 void voltage (int channel, String volts)

//绘制图表轴 void DrawGraphAxis(int pos_x, int pos_y, int width, int height)

//绘制图表 void DrawGraph (String voltage, int channel, int pos_x, int pos_y, int scale)

// 绘制标尺,单选框 void DrawScaleSelect (int x_pos, int y_pos, int scale)


步骤三:下载代码并编译通过。

步骤四:运行后,找个电池之类的,放到上图中红线和黑线之间,看屏幕上的读数。

结果

屏幕上第四频道会显示A5 pin的电压读数,像这样:

AnalogVoltmeterResult.jpg


视频