abuzcty 发表于 2017-7-24 19:03:20

ARDUINO模拟输入实现一元线性回归校准


在使用arduino的analogRead()函数时,经常会遇到校准问题,就是将实际检测量和ARDUINO模拟输入量联系起来。
使用一元线性回归是一种比较好用的校准方式。
我写了一个实现半自动校准的库,发上来给大家分享。

程序用到了LCD1602,矩阵键盘这两个外设。
用到<LiquidCrystal.h><Keypad.h><EEPROM.h>三个ARDUINO官方库。

使用时请注意接线问题。

注意:
1.输入量个数不大于30,在库里可以更改。
2.需要提前定义一个长度为3的double数组用于存放a,b,r(按顺序存放)。
3.EEPROM默认存储地址从开始。(库里可以更改)
4.输入量不能大于1000.0,大于1000.0默认校准结束
5.注意屏幕上的提示。
6.不知道为什么,单片机计算出的线性回归结果与电脑计算出的略有不同,一般在有效数字第7,8位开始不一样,因此不影响使用。
7.EEPROM存储也会在有效数字7,8位开始与实际值有差别。

校准流程:

1.屏幕打印:"1:calib ELSE:pass"
输入“1”开始校准;
输入其他任意键不进行校准,使用上次校准结果(校准结果写入EEPROM,掉电不会丢失)


2.屏幕打印:“input value 1 ”
输入当前实际值,如何操作矩阵键盘见 http://www.geek-workshop.com/thread-29116-1-1.html

3.输入结束,单片机自动记录当前analogRead()读到的值,并在屏幕显示1s。

4.输入第二个数据。。。

5.。。。

6.如果想要结束输入,只要输入值大于1000.0即可,程序会自动舍弃该次测量结果。

7.自动计算a,b,r,显示并保存。

8.屏幕打印“write success”,校准结束。

页: [1]
查看完整版本: ARDUINO模拟输入实现一元线性回归校准