这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » DIY与开源设计 » 电子DIY » ​[Let'sDo第三期]电子测光表项目成果汇总贴 --完结散花

共6条 1/1 1 跳转至

​[Let'sDo第三期]电子测光表项目成果汇总贴 --完结散花

菜鸟
2024-12-15 22:52:58     打赏

[Let'sDo第三期]电子测光表项目成果汇总贴 --完结散花

开箱贴:https://forum.eepw.com.cn/thread/388279/1

过程贴:https://forum.eepw.com.cn/thread/388467/1

 

喜大普奔!终于迎来了总结贴,工作周期确实有点长,那也没办法,吹毛求疵,眼高手低,尽量把作业做到自己满意的程度,才能安心下一站,耗费时间较多,但是也是值得的,过程中不单只学习传感器的原理,项目代码的组织管理,还有报告的撰写,各种技能都锻炼了一遍,玩就要玩到极致,到时玩不动了,回来看看也不觉得有啥亏欠。

 图片3.png

一、项目总体思路

趁着外出的几天把项目的思路捋了一遍,呈现如下。主要的运作思路在于依赖esp32集成的FreeRTOS (实时操作系统)的任务管理办法思路,将基础硬件封装成类,并建立对应的任务,使得数据采集、舵机自动运转不依赖于主循环而独立运行于后台,为主程序提供服务,在项目中实现了光照强度的连续不间断的采集,舵机自动往返并且可以控制启停,LedMatric的额外的任务负责提供氛围灯效,启动后可以自动演示等离子灯效,这个灯效非常好看,也可以通过蓝牙和微信小程序通信后,更改灯光颜色。 在主循环中,只监测按键是否被按下,按键的功能可模拟拍照和切换曝光模式。UI设计采用了LVGL8.4完成,保持了LVGL的商业风格,运行流畅。 项目提供了多种功能,如曝光参数计算、LED效果、舵机控制等,能够满足较为复杂的应用需求。使得系统具备了更强的适应性和可扩展性,增强了用户体验。 

 图片10.png

项目完成后对文件系统进行了分类整理,使得项目的架构更加清晰和便于理解。

 

/* 文件系统管理/

F:.

|   main.cpp

|   ResourceManager.cpp

|   ResourceManager.hpp

|

+---HalBase

|       BLEManager.cpp

|       BLEManager.h

|       BLEManager.md

|       Button.cpp

|       Button.h

|       LedController.cpp

|       LedController.h

|       LuxHandler.cpp

|       LuxHandler.hpp

|       lvgl_setup.hpp

|       unit_puzzle.hpp

|

+---images

|       adafruit_logo.c

|       bg_map.c

|       DK_logo.c

|       EEPW_logo.c

|

\---UI

        lvgl_animation.cpp

        lvgl_animation.hpp

        TestController.cpp

        TestController.h

        TestView.cpp

        TestView.h

   

补充完整组装照片:

 图片2.png

 一、光照强度管理

在项目过程贴中,已对拍照的三元素和曝光模式的计算核心函数做较为深入的解析。构建了一个库类(LuxHandler,实现了一个自动控制舵机和曝光参数的系统,通过读取光照强度(LUX值)来自动调整曝光参数(光圈、快门、ISO等),同时控制舵机的角度以响应光照变化或其他任务需求。主要包含三个核心功能模块:舵机控制、光照强度检测与自动曝光计算、任务调度与管理。初始化后就可以自动运行,是本项目最为核心内容,经过了大量测测试和优化。

关键的工作流程是:

启动任务调度,分别处理舵机控制和光照强度读取任务。

根据光照强度调整曝光参数。

控制舵机角度在0100度之间反向运动。

可通过 toggleServo 启用或禁用舵机控制。

 图片4.png

 

二、LedMatric灯效管理

LedMatric灯效管理是本项目的支线任务,因为联想到市面上现在有些专门营造拍摄灯光氛围的工具,因此,为了增加观赏性,使用 LedController 类实现了多种LED灯效,包括常亮、彩虹、等离子等效果。核心功能是通过控制画布(canvas)的颜色来实现不同的视觉效果,canvas是来自屏幕驱动lovyanGFX里面的组件,除了屏幕驱动的作用,也灯效提供了底层的作图函数,一举两得。类中提供了控制LED开关、颜色、亮度、效果开关等方法。vTaskLedupdate 任务函数周期性地更新LED显示,根据当前的状态决定显示的内容。使用的等离子效果通过计算像素的动态颜色值来实现波动的效果,而彩虹效果则是通过色轮变化来创建色彩渐变。

 图片5.png

三、UI设计与交互

通过 LVGL 图形库创建动态更新的 UI 界面,能够根据不同的输入动态调整界面的内容,特别是在显示相机曝光模式、光圈、快门等数据时。使用了 TileView 组件来管理界面的布局,适合显示分块内容,提供灵活的滚动方式。表格 lv_table 用于显示信息,支持动态更新,适合展示类似“光圈、快门、ISO”等数据。ExposureMode 枚举变量控制不同的曝光模式,并且通过颜色变化反映在界面上,使得用户能清晰看到当前的曝光模式。

整个界面的逻辑流程如下:

create() 方法中创建并初始化主界面及子组件。

通过 update*() 方法动态更新数据。

通过回调函数定制每个表格项的绘制效果。

使用 load() 方法加载界面并显示。

使用 destroy() 方法销毁界面,释放资源

 图片6.png

 

四、蓝牙控制任务管理

 

实现了一个BLE服务器端,允许通过蓝牙方式连接手机上的微信小程序远程控制相机的设置(光圈、快门速度、ISO)以及RGB LED控制。BLE客户端可以连接服务器并通过不同的特性修改相机设置。每当客户端写入新的设置时,服务器会更新并通知客户端。

 图片7.png

 

 

 图片8.png

项目总结及体会:

1. 模块化设计:本项目采用了模块化设计,确保了不同功能模块(如UIBLELED控制等)的独立性。通过抽象类和接口来实现硬件的控制使得各个模块之间的耦合度低,便于后期的维护和扩展。这种方式使得硬件的操作与具体实现解耦,能够简化硬件平台的切换和移植工作,能够快速定位问题并对模块进行单独优化和替换,项目展现出了较强的可扩展性。 

2. FreeRTOS应用:通过FreeRTOS实现任务调度,项目能够高效地管理多个任务。FreeRTOS作为一种实时操作系统,提供了多任务的优先级管理、时间片分配、任务挂起与恢复等功能,有效提高了系统的实时性和响应速度。高实时性保证了系统能够在较短的时间内响应外部事件,避免了因任务延迟导致的系统性能瓶颈,提升了用户体验和系统稳定性。 

3. LVGL 用户界面设计: 项目使用了 LVGL (Light and Versatile Graphics Library) 库来创建用户界面。LVGL库具有高灵活性和可定制性,该库的可定制性使得开发者能够根据不同应用需求快速调整UI风格和布局,增强了界面的视觉表现力。 

4. 无线通信能力项目通过 BLE (Bluetooth Low Energy) 实现了与外部设备的无线通信,增强了系统的交互能力和可扩展性。BLE使得项目能够与其他智能设备进行实时交互通过BLE,系统不仅能够实现控制,还可以进行数据采集、状态反馈等功能,增加了系统的灵活性和适用场景。

 完整代码地址:https://gitee.com/genvex/eather_servo_final

 项目介绍 B站视频地址【202412152124】 https://www.bilibili.com/video/BV1STBFYQESh/?share_source=copy_web&vd_source=bed775561efaa18e90586ab291600126


图片9.png 

再见2024,你好2025!

 





关键词: 测光     控制     实现     曝光    

专家
2024-12-15 23:29:58     打赏
2楼

感谢分享


专家
2024-12-15 23:34:58     打赏
3楼

感谢分享


专家
2024-12-15 23:40:33     打赏
4楼

感谢分享


专家
2024-12-16 00:02:39     打赏
5楼

感谢楼主分享


高工
2024-12-16 00:15:07     打赏
6楼

感谢楼主分享


共6条 1/1 1 跳转至

回复

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