极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13132|回复: 0

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

[复制链接]
发表于 2017-7-24 19:03:20 | 显示全部楼层 |阅读模式

在使用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”,校准结束。

本帖子中包含更多资源

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

x
回复

使用道具 举报

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

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

Archiver|联系我们|极客工坊

GMT+8, 2024-4-20 12:08 , Processed in 0.072407 second(s), 19 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

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