使用拟合方法实现光敏电阻传感器数值与光照强度的近似转换

这次来分享一次突发奇想的经历。文章主要是要实现将ADC模块获取的光敏电阻数值转换成标准单位勒克斯的光照强度,虽然说由于实验方法和实验环境,最终结果并不是很准确,但也算是一次创意小实验。
最终的代码可以来这里下载:
Android端
MCU端

一、前言(无关技术的废话,可以跳过)

最近在项目搞STM32和光敏电阻传感器,辛辛苦苦地找了厂家客服和很多资料,发现都没有光敏电阻阻值或者电压转换成光照强度的公式。
百度了一下,发现我还是太高估了光敏电阻的精确度了,大多数光敏电阻传感器只是提供一个大概的明暗程度的判断,有一些三线的光敏电阻传感器只是提供一个DO口,输出就是1位二进制表示的明和暗。四线的光敏电阻传感器就有提供一个AO口,输出的是12位二进制表示的电压,相比来说就准确了许多,但是不同厂家甚至是同一个厂家的不同光敏电阻,对于光照强度的转换相去甚远,所以基本上找不到一条符合所有光敏电阻的转换公式。如果要更加精准的光照强度,更多的是使用光敏二极管或者是数字照度仪等。
但是,我不甘心呀,项目需要的是光照强度,而到手的光敏电阻传感器我也不想就这么地废了。所以我就想:能不能自己给光敏电阻传感器测试一下,计算出属于它的公式。实际上,我只要有一个能够测光照强度的东西就可以实现。突然想到,手机不就有这个玩意吗?虽然手机的也不够精准,但还是值得一试的,于是,我就有一个大胆的思路:

  1. 开发一个可以获取手机光线传感器数据并且存入数据库的APP;
  2. 将手机和我的光敏电阻传感器同步同向测试,获取两者的数据;
  3. 将手机获取的以勒克斯(lx)作为单位的数据,和光敏电阻的数据进行拟合,获得两者之间的转换公式。

二、具体实现思路

具体实现思路

三、实验设备和环境

1.软件

  • Keil uVision5
  • Android Studio 3.6.3
  • 串口调试助手
  • SQLite Expert Personal
  • Excel 2016

2.硬件

  • 光敏电阻传感器(4线)
  • STM32F103C8T6
  • ST-Link
  • CH340(USB转TTL)
  • 手机(使用Android系统的)

3.其它

  • 绝缘胶带
  • 手机支架(方便测试而已,没有的话可以不用)
  • 光源(比如:手电筒、台灯之类,本文用的是另一个手机的手电筒)

四、Android端开发

1.搭建界面

首先在Android Studio中创建一个空白工程,因为本实验比较简单,所以只需要一个MainActivity就可以了。在activity_main.xml中添加简单的文字说明、两个按钮(开始和删除数据)以及ListView(用于展示数据)。
搭建界面
除此之外还要完成一个listview_item.xml的界面,这个就是用在ListView的每个item中的界面,在Adapter中适配。
搭建界面2

2.搭建SQLite数据库

2.1创建类

这里虽然我们要存储的数据很简单,只有光照强度这一个浮点数值,但是为了方便操作数据库,还是要创建一个类,同时为了和MCU端收集的数据进行匹配,也添加了一个自增的变量id。

package com.peanuo.lighttest;

public class Light {
   

    private int id;
    private double lux;

    public double getLux() {
   
        return lux;
    }

    public int getId() {
   
        return id;
    }

    public void setLux(double lux) {
   
        this.lux = lux;
    }

    public void setId(int id) {
   
        this.id = id;
    }
}

2.2创建数据库Helper

这里继承了SQLiteOpenHelper类来完成我们自定义的数据库的创建。在构造方法中创建数据库,在重写的onCreate方法中使用SQL语句创建数据表。然后是增加两个方法insertData和deleteData来方便操作数据库。最后的query方法是查询数据表的中全部,也就是用来给ListView展示数据的。

package com.peanuo.lighttest.database;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

import com.peanuo.lighttest.Light;

import java.util.ArrayList;
import java.util.List;


public class LightHelper extends SQLiteOpenHelper {
   
    private SQLiteDatabase sqLiteDatabase;

    public LightHelper(Context context) {
   
        super(context,"lightDB",null, 1);
        sqLiteDatabase = this.getWritableDatabase();
    }


    @Override
    public void onCreate(SQLiteDatabase db) {
   
        db.execSQL("CREATE TABLE light(id INTEGER PRIMARY KEY AUTOINCREMENT, light REAL)")
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值