上回开箱贴里说到,由于收到的主控屏幕有点问题所以办理了换货,预计明年初才可以完成,谁知,12月初就收到了更换回来的产品,这次产品经测试没有同样的问题,所以作业还得继续做呀!
一、制作Grove扩展板
本次任务为羽毛板制作了一个扩展板,下图是扩展板设计图。Grove制式的接口是M5stack和Seeed两大国内嵌入式系统创客生态的巨头,他们所生产的传感器都是基于grove接口的,那么这样羽毛板通过这样的方式就可以无缝连接地使用这两家公司所以千计的各种各样的传感器了。另外,本次活动所推荐购买的配套产品都是Grove制式的,该扩展板提供了2个I2C接口,1个UART接口,2个普通IO接口,2组舵机接口。特别是在舵机接口的设计上,考虑到舵机启动电压必须是5v或更高,因此在电源考虑上,简单的接入usb口的5v电源,一定程度上减少是pcb在电源管理方面的难度和成本。该扩展板完全是为完成本次活动所设计,完全避免了繁杂的杜邦线来回的穿梭,优雅地为实现各项功能奠定了基础。
设计文档可在文末获取。
二、驱动屏幕及移植LVGL
本项目中使用LovyanGFX图形驱动库来驱动羽毛板板载的ST7789屏幕,这款屏幕也是嵌入式系统领域朋友们的“老朋友”。而LovyanGFX(简称lgfx)库的知名度和接受度还不是很高,(岛国大神的产品,学术不分国界吧吧),lgfx受TFT_eSPI启发,深度改造而来,提供丰富高性能的作图函数,在纯手动作图的年代是极其好有的工作。即使历史的车轮滚滚向前年代,优秀更加现代化的LVGL图形库出现了,lgfx可以作为LVGL的基础刷图函数优秀工具。LVGL(Light and Versatile Graphics Library)的出现给嵌入式开发在最终产品呈现上提供了一种更优雅的解决方案。LVGL相对于传统图形库更适合用于嵌入式系统,它在性能、资源占用和灵活性方面都有一定的优势。但是LVGL易学难精,也是让很多人望而却步,没有其他的什么更好的建议,只有不断地使用,从简单的组件开始,慢慢地搭建自己的UI,基础扎实了,“建筑”就会越来越漂亮。
期间遇到了一个非常棘手的问题,在开启LVGL模式后,舵机就无法正常驱动,我用肉眼发现了舵机的工作频率受到了影响,但是就是不知道发生了什么事情。如果不能同时使用就要放弃其中一个,这是我不愿意看到的。
三、测光表核心工作函数实现
摄影中的互易律,即曝光三要素(光圈、快门速度、感光度)之间的互易关系。(深入学习可以参考:https://mp.weixin.qq.com/s/maiJ-5yP133eW3DxtmXdqw)
光圈:开大曝光增加,背景虚化;缩小曝光减少,背景清晰。
快门速度:调慢曝光增加,可拍摄慢门;调快曝光减少,适合拍摄运动物体。
感光度:调高曝光增加,噪点越多;调低曝光减少,画质越好。
当曝光量确定时,一个参数调整增加曝光量,其他两个参数需调整减少相应曝光量;反之,一个参数调整减少曝光量,其他两个参数需调整增加相应曝光量,以保持最终曝光量不变。 这就是互易律的概念。
根据授课老师提示:
计算核心原理主要基于:
1、自动曝光模式
实现了一个自动曝光计算函数 calculateAutoExposure,其根据输入的光照度 (lux) 来选择合适的光圈(aperture)、快门速度(shutter)和ISO值,最终返回一个包含这些参数的 ExposureParams 对象。
该函数基于预定义的光照度区间进行参数选择。通过简洁且高效的方式根据不同光照度(lux)自动计算合适的曝光参数(光圈、快门速度、ISO)。通过将光照度(lux)分为多个固定的区间,每个区间对应一组曝光参数(光圈、快门速度、ISO),使得自动曝光的计算变得非常简单。光照度与曝光参数之间的映射关系通过预定义的数组 luxIntervals、apertures、shutters 和 iso 来实现。通过区间映射的方式,程序能够根据光照度智能选择合适的曝光参数(光圈、快门速度、ISO),从而确保拍摄的图像获得合适的曝光效果。
2、光圈优先模式
实现了一个基于光照度 (lux) 和目标光圈 (targetAperture) 的自动曝光计算,以预设光圈值为基础,自动调整快门速度和ISO,以满足曝光需求。较大的光圈(即较小的 f 值)会让更多的光线进入,因此可以用较快的快门速度。pow(2, ev):曝光值(EV)通常与光圈和快门速度的关系是指数关系,曝光值变化对快门速度的影响,EV 值增加 1,快门速度需要减半。
3、快门优先模式
实现了一个基于快门优先的曝光计算方式,根据已知的目标快门速度和光照度传感器实时获得的光强数据,计算出合适的光圈,并根据光圈选择合适的 ISO 设置。它通过使用标准的光圈档位、合理的曝光值计算方法和 ISO 调整策略,实现了较为智能的曝光计算。
小结:
项目过程中遇到了很多问题,经过了反复的测试总结,排查。lvgl和舵机的冲突的问题,最后发现是舵机控制的PWM和屏幕的背光控制PWM干扰,所以屏幕的背光直接点亮,不用PWM进行亮度控制。这个现象只在本次任务中遇到。
让我们继续期待项目总结的情况吧。
谢谢!
扩展板嘉立创设计文件:ProDoc_FeatherWing-tft_2024-12-09.zip