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

共2条 1/1 1 跳转至

Let'sdo第三期[电子测光表]成果贴

菜鸟
2024-12-04 22:39:57     打赏

本次项目使用硬件包括Adafruit的feather开发板,舵机、bh1750数字光传感器和按键实现了测光表和远程快门的功能。

本次项目的主控板为Feather TFT ESP32-S3,使用ESP32 S3 MINI模组作为主控,开发板自带一个可编程按键,一颗NeoPixel LED,一片240*135 tft显示屏,MCP73831和MAX17048实现了锂电池的充电管理和电量检测,同时还留了一个空焊盘方便焊接bmp280传感器。开发板自带PH2.0接口,可直接使用锂电池供电,自带一个立贴的sh1.0 4pin接口,方便链接所有Steema QT接口的iic传感器。

Adafruit为feather系列开发板开发了非常丰富的扩展板,为了更优雅地完成本次项目,我充分使用了这些扩展板。

首先我使用了Feather2*2的底板,这块板提供了多达4块Feather开发板的连接孔位,方便链接多个外设以丰富功能

4253-04.jpg

因为要控制舵机,我使用了舵机驱动Featherwing,此块开发板使用PCA9685芯片,基于IIC通信,最多可以驱动8路舵机。

2928-19.jpg 

Bh1750数字光传感器和按键因为使用的Grove接口,我使用了Grove Featherwing,此块开发板引出了6个Grove接口, 其中3个为模拟/数字连接器、1 个为UART连接器和2个 I2C连接器.

 5862-03.jpg

本项目硬件流程图如下

 屏幕截图 2024-12-04 222159.pngFeather开发板和两片Featherwing基于底板实现电路链接,舵机连接在舵机驱动班上(使用iic驱动),按键和bh1750数字光传感器连接在Grove Featherwing上(按键链接A2,A3,数字光传感器使用iic驱动)。所有电路全部基于接插件连接,没有焊接,非常优雅。

 项目最终实现了实时读取光传感器数值、按键状态,并将数据显示在开发板的TFT屏幕上,同时按键按下可以控制舵机运行,模拟按下快门动作。

首先是屏幕初始化代码

  // turn on backlite
  pinMode(TFT_BACKLITE, OUTPUT); 
  digitalWrite(TFT_BACKLITE, HIGH);  
  // turn on the TFT / I2C power supply  
  pinMode(TFT_I2C_POWER, OUTPUT);  
  digitalWrite(TFT_I2C_POWER, HIGH);  
  delay(10);  
  // initialize TFT  
  display.init(135, 240); 
  // Init ST7789 240x135  
  display.setRotation(3);  
  display.fillScreen(ST77XX_BLACK);

此块开发板比较特殊,因为考虑到了低功耗应用,外设单独使用一颗LDO,没有和MCU共用,当要使用iic外设或点亮TFT屏幕,需要先将LDO使能引脚拉高:digitalWrite(TFT_I2C_POWER, HIGH);,之后就是比较常规的基于屏幕参数初始化屏幕

初始化代码较为简单,此处就不粘贴了,要看完整代码可以看附件

主循环中,每次循环开始先读取BH1750的示数,并基于老师给到的iso100下的转换公式进行数学运算

屏幕截图 2024-12-04 223235.png

然后读取按键状态,并判断状态是否有变化,若判断是按下了按键,则执行相应的舵机动作

a=digitalRead(BUTTON_A);  
b=digitalRead(BUTTON_B);  
if(a != lasta) {    
if (a) {      
Serial.println("A UP");            
display.fillRect(90, 75, 120, 20, ST77XX_BLACK);      
display.setCursor(40, 75);      
display.setTextColor(ST77XX_BLUE);      
display.setTextSize(2);      
display.println("BUTTON A UP");    
} else {      
Serial.println("A DOWN");            
display.fillRect(90, 75, 120, 20, ST77XX_BLACK);      
display.setCursor(40, 75);      
display.setTextColor(ST77XX_BLUE);      
display.setTextSize(2);      
display.println("BUTTON A DOWN");      
for (uint16_t pulselen = SERVOMIN; pulselen < SERVOMAX; pulselen++) {        
pwm.setPWM(servonum, 0, pulselen);      
}    
}    
lasta=a;  }

至此代码的基础逻辑已经描述完毕了,还是一个相对轻松的任务。

最后感谢EEPW论坛和得捷电子,Adafruit一直是我很喜欢的硬件厂商,本次算是深入体验了Adafruit Feather产品线的各种功能,非常开心。期待以后得活动。

LightMeter.rar



院士
2024-12-05 12:55:16     打赏
2楼

楼主这照片效果真棒!

太出色了


共2条 1/1 1 跳转至

回复

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