这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » 基础任务成果

共3条 1/1 1 跳转至

基础任务成果

菜鸟
2024-11-02 18:13:36     打赏

按照老师的教程。以及老师提供的2个公式
基础任务我做了下面这个帖子。

1. 计算曝光值 (EV)

image.png

2. 从 EV 计算光圈 (F) 和快门速度 (T)


image.png

查询了一些资料,了解到一个新知识,“曝光三角形”

它描述了光圈(F)、快门速度(T)和ISO感光度三者之间的关系。理解这些公式的背景,有助于更好地掌握摄影曝光的原理。


EV

曝光值(EV)是一个表示光照强度和相机设置的相对值。EV的高低直接影响照片的亮度。


ISO的影响

根据前面的公式推出新的公式

image.png

光圈(F):控制镜头开口大小,直接影响光的进入量。光圈越大(F值越小),进入的光线越多。

快门速度(T):控制快门开启的时间,影响光线的曝光时间。快门速度越慢,曝光时间越长。

ISO:控制相机感光元件对光的敏感度,ISO值越高,相机对光的敏感度越强。

感谢EEPW给这种机会让我可以学习到这三个参数的意思(以上内容查询自网络整理所得)


根据前面这些基础知识,我写了如下代码

#include <Adafruit_GFX.h>
#include <Adafruit_ST7789.h>
#include <Wire.h>
#include <M5_DLight.h> // 使用 DLight 传感器库

// 显示屏和传感器设置
#define TFT_CS        7       // CS 引脚
#define TFT_DC        39      // DC 引脚
#define TFT_RST       40      // RESET 引脚
#define TFT_BACKLIGHT 45      // 背光控制引脚

Adafruit_ST7789 tft = Adafruit_ST7789(TFT_CS, TFT_DC, TFT_RST);
M5_DLight sensor;

// 按钮引脚
const int buttonA_PIN = 12; // 按钮 A 引脚
const int buttonB_PIN = 13; // 按钮 B 引脚

// ISO 级别
int isoLevels[] = {100, 200, 300, 400, 500, 600};
int isoIndex = 0;
int currentISO = isoLevels[isoIndex];

// EV 相关变量
float F; // 光圈
float T; // 快门速度
uint16_t lux; // 光照强度

void setup() {
    Serial.begin(115200);
    pinMode(TFT_BACKLIGHT, OUTPUT);
    digitalWrite(TFT_BACKLIGHT, HIGH); // 打开背光

    // 初始化屏幕
    tft.init(135, 240); // 根据屏幕分辨率初始化
    tft.setRotation(3); // 设置屏幕方向
    tft.fillScreen(ST77XX_BLACK); // 背景色设为黑色

    // 按钮引脚设置为输入
    pinMode(buttonA_PIN, INPUT_PULLUP);
    pinMode(buttonB_PIN, INPUT_PULLUP);

    // 初始化传感器
    sensor.begin();
    sensor.setMode(CONTINUOUSLY_H_RESOLUTION_MODE);
}

void loop() {
    lux = sensor.getLUX(); // 获取光照强度
    float ev = 2 + log10(lux / 10.0); // 计算 EV 值
    float evWithISO = ev - log2(currentISO / 100.0); // 根据 ISO 调整 EV 值

    // 计算光圈和快门速度
    T = pow(2, evWithISO - 2); // 初始光圈为 2.8,可根据需要调整
    F = sqrt(pow(2, evWithISO) * T);

    // 更新按钮状态
    if (digitalRead(buttonA_PIN) == LOW) { // 按下按钮 A 增加 ISO
        isoIndex = (isoIndex + 1) % 6;
        currentISO = isoLevels[isoIndex];
        delay(200); // 防抖延时
    }
    if (digitalRead(buttonB_PIN) == LOW) { // 按下按钮 B 减少 ISO
        isoIndex = (isoIndex - 1 + 6) % 6;
        currentISO = isoLevels[isoIndex];
        delay(200); // 防抖延时
    }

    // 显示信息
    tft.fillScreen(ST77XX_BLACK);
    tft.setTextColor(ST77XX_WHITE);
    tft.setCursor(10, 10);
    tft.setTextSize(2);
    tft.print("ISO: ");
    tft.println(currentISO);

    tft.setCursor(10, 40);
    tft.print("Lux: ");
    tft.println(lux);

    tft.setCursor(10, 70);
    tft.print("F: ");
    tft.println(F, 2);

    tft.setCursor(10, 100);
    tft.print("T: ");
    tft.println(T, 4);

    delay(1000); // 1 秒更新一次
}

展示视频入下链接

https://www.bilibili.com/video/BV1cYDAY1Eis/




关键词: 基础     任务     成果    

院士
2024-11-02 20:37:58     打赏
2楼

光圈(F)、快门速度(T)和ISO感光度三者之间的关系,待科普。


专家
2024-11-03 00:20:10     打赏
3楼

谢谢分享


共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]