Fastbond-环境监测之 定时图像采集
在日常的工作生活中,定时图像采集可以发挥非常重要的作用,如农作物的生长情况监测,气象状况监测,天文现象的监测。本产品期望解决用户如下痛点:可编程控制,容量可低成本拓展,长时间供电,性价比高,可控制LED外设
标签
嵌入式系统
MPU
PCB设计
john
更新2021-11-19
2198
项目介绍

在日常的工作生活中,定时图像采集可以发挥非常重要的作用,如农作物的生长情况监测,气象状况监测,天文现象的监测。而常用的可延时摄影的设备多多少少存在痛点,详细可以参考下表。

因而,我们期望得到各方面都优于手机和相机的设备

产品

手机

相机

期望设备

功耗

↓高

↓高

↑低

镜头升级

↓不可升级

↑可升级

↑可升级

编程控制

↑USB/TCP

↓无

↑ USB/TCP/CAN/UART 等2

控制外设

↓不可

↓不可

↑可控制外设

存储容量

↓低

↑高

↑高

户外可用

基本可用

↓低

↑高可用

长时间供电

↓不可

↑可长时间供电

↑可长时间供电

价格

↓高

↑低

基本功能:
  • 基于ESP32-CAM开发的供电+LED恒流驱动扩展板
  • 由ESP32作为主控控制OV2640摄像头采集环境图像数据
  • 控制外设:ADI LTC3245IMSE芯片驱动LED灯珠
  • 长时间供电:Meixin MAX16802AEUA作为供电
  • 编程控制:上位机Raspberry B3或可执行python的脚本,实现定时拍照和图片保存,
  • 容量拓展:将图片存储在上位机因而突破容量限制
  • 镜头升级:通过更换镜头组件即可实现镜头升级
项目环境:
  • Arduino v1.8.16: 一款便捷灵活、方便上手的开源电子原型平台
  • arduino-esp32 v2.0.0: ESP32平台的Arduino开发库
  • Kicad 5.1.10: 是一款用于电子设计自动化(EDA) 的开源软件套件
  • python 3.8: 一款编程语言, 用于
系统框图

FpCqyjWu_ZjyDVXrjUWu2wQHIOnJ

项目用到的板卡、芯片、模块、仪器、设备等介绍
硬件: ESP32-CAM:

是安信可最新发布小尺寸的摄像头模组

电源 LTC3245IMSE#PBF

LTC3245 是ADI公司的一款开关电容器降压-升压型 DC/DC 产生稳压输出(3.3V、5V 或 可调)从 2.7V 到 38V 输入。

数据手册: [https://www.datasheet5.com/part/LTC3245IMSE%23PBF/Linear Technology]

电源 LTC3245IMSE#PBF模型: https://supplyframe.componentsearchengine.com/part.php?partID=234649

LED恒流驱动 MAX16802AEUA+T

来自美信的, MAX16801A/B/MAX16802A/B高亮度(HB) LED 驱动器控制 IC 包含所需的所有电路 用于设计宽输入电压范围的 LED 驱动器 用于一般照明和显示应用。

数据手册:[https://www.datasheet5.com/part/MAX16802AEUA%2BT/Maxim Integrated Products]

LED恒流驱动 MAX16802AEUA+T 模型: https://app.ultralibrarian.com/details/e0fc5c67-10a1-11e9-ab3a-0a3560a4cccc/Maxim-Integrated-Products/MAX16802AEUA-T?uid=538d98e59d318c4a

 

一. 电路设计
导入封装

通过符号编辑器, 创建原件库ESP32-Time-Lapse-Photo, 导入ESP32的元件库

FmZ7LrQUqCUYX-5l5mkwtNYAJSu9

FgJSUBTn5k0WKiJD1Qb_LDToKJSM

Fq_Qxcj0P17qy7jYxv84M4XZ7XF6

FqaHyxBxiTg0MAgrQbDqixmPpTI_

绘制原理图

FpfuFw3g23THR8WPQp8qD1l8T605

分配封装

FqdT0UdCwJu_B-hw5nzhXn3GM8IN

更新到PCB中

FnCLrqdNxrzqwoaUMQmdA1dqmb3C

布局

FhYxamTYEfdpTZtsA51azBuraYuP

铺铜

FtoJrrVqBrzFCecKQ9IDs90bnHLk

布线

FtLT2VTm2c2eDp4CmRPW7ATDxYzP

二. 成品打样

FpvVuwVobZw4Y_JmPfh5JpTzNbdg

Fio2cqnyTQuexUc6-VTjVignw4dZ
三. 如何使用

1. 使用编译好的二进制程序

  • 下载编译好的二进制程序
  • 安装CH340串口驱动
  • 使用Arduino将二进制程序上传到开发开发板上

2. 使用源码编译烧录

  • 设置wifi账号密码const char* SSID     = "sxxx";
    const char* PASSWD = "xxx";
  • 安装CH340串口驱动
  • 使用Arduino编译烧录到开发板上
  1. 上位机软件安装
  • 修改`main.py`, 将IP修改为ESP32-CAM的IP
  • 上位机安装python3.8, 运行程序`python main.py`
  • 程序每分钟会从ESP-32-CAM中下载图片到本机

3. 代码说明

使用ESP32-cam库,连接OV摄像头

  camera_config_t config;
  config.ledc_channel = LEDC_CHANNEL_0;
  config.ledc_timer = LEDC_TIMER_0;
  config.pin_d0 = Y2_GPIO_NUM;
  config.pin_d1 = Y3_GPIO_NUM;
  config.pin_d2 = Y4_GPIO_NUM;
  config.pin_d3 = Y5_GPIO_NUM;
  config.pin_d4 = Y6_GPIO_NUM;
  config.pin_d5 = Y7_GPIO_NUM;
  config.pin_d6 = Y8_GPIO_NUM;
  config.pin_d7 = Y9_GPIO_NUM;
  config.pin_xclk = XCLK_GPIO_NUM;
  config.pin_pclk = PCLK_GPIO_NUM;
  config.pin_vsync = VSYNC_GPIO_NUM;
  config.pin_href = HREF_GPIO_NUM;
  config.pin_sscb_sda = SIOD_GPIO_NUM;
  config.pin_sscb_scl = SIOC_GPIO_NUM;
  config.pin_pwdn = PWDN_GPIO_NUM;
  config.pin_reset = RESET_GPIO_NUM;
  config.xclk_freq_hz = 20000000;
  config.pixel_format = PIXFORMAT_JPEG;
  
  // if PSRAM IC present, init with UXGA resolution and higher JPEG quality
  //                      for larger pre-allocated frame buffer.
  if(psramFound()){
    config.frame_size = FRAMESIZE_UXGA;
    config.jpeg_quality = 10;
    config.fb_count = 2;
  } else {
    config.frame_size = FRAMESIZE_SVGA;
    config.jpeg_quality = 12;
    config.fb_count = 1;
  }
上位机使用python连接ESP32
destination_path = './photo/'
def try_loop(fun):
    while True:
        try:
            fun()
            break
        except Exception as e:
            print(e)
            time.sleep(1)

def on_light():
    requests.get("http://192.168.8.143/on/")
    time.sleep(4)

def off_light():
    requests.get("http://192.168.8.143/off/")


def get_photo():
    r = requests.get("http://192.168.1.143/capture")
    with open("{}{}.jpg".format(destination_path,datetime.now().strftime("%Y%m%d_%H%M%S")),"wb") as f:
        f.write(r.content)


def job():
    print('take photo')
    try_loop(on_light)
    try_loop(get_photo)
    try_loop(off_light)

#schedule.every(1).minutes.do(job)
schedule.every(10).seconds.do(job)
#schedule.every(30).seconds.do(job)
while True:
    schedule.run_pending()
    time.sleep(1)

 
四. 功能演示
  • 开机时ESP-32会连接WIFI, 并在串口监视器中显示本机的IP
  • 上位机中每分钟会下载一张图片, 以时间为文件名

1. 编译日志

项目使用了 722978 字节,占用了 (55%) 程序存储空间。最大为 1310720 字节。 全局变量使用了37348字节,(11%)的动态内存,余留290332字节局部变量。最大为327680字节。 
esptool.py v3.1 Serial port /dev/ttyUSB0 Connecting.... 
Chip is ESP32-S2FH32 Features: 
WiFi, Embedded 4MB Flash, 105C temp rating, ADC and temperature sensor calibration in BLK2 of efuse Crystal is 40MHz MAC: 
7c:df:a1:97:44:da Uploading stub... 
Running stub... 
Stub running... 
Changing baud rate to 460800 Changed. Configuring flash size... 
Auto-detected Flash size: 4MB Flash will be erased from 0x0000e000 to 0x0000ffff... 
Flash will be erased from 0x00001000 to 0x00004fff... 
Flash will be erased from 0x00010000 to 0x000c0fff... 
Flash will be erased from 0x00008000 to 0x00008fff... 
Compressed 8192 bytes to 47... 
Writing at 0x0000e000... 
(100 %) Wrote 8192 bytes (47 compressed) at 0x0000e000 in 0.1 seconds (effective 755.2 kbit/s)... 
Hash of data verified. Compressed 13600 bytes to 9358... 
Writing at 0x00001000... 
(100 %) Wrote 13600 bytes (9358 compressed) at 0x00001000 in 0.4 seconds (effective 274.5 kbit/s)... 
Hash of data verified. Compressed 723360 bytes to 484945... 
Writing at 0x00010000... 
(3 %) Writing at 0x00019c43... 
(6 %) ... Writing at 0x000bd11f... 
(100 %) Wrote 723360 bytes (484945 compressed) at 0x00010000 in 11.4 seconds (effective 505.4 kbit/s)... 
Hash of data verified. Compressed 3072 bytes to 128... 
Writing at 0x00008000... 
(100 %) Wrote 3072 bytes (128 compressed) at 0x00008000 in 0.0 seconds (effective 511.0 kbit/s)... 
Hash of data verified. Leaving...

2. 上位机中运行python

FspjoDOHpSubRU1rFLWP3p8guxBZ

3. LED灯点亮

FsUsx9jR1vC6f3qqzApwT__PSdUN

4. ./photo目录中出现摄像头扑捉到的图片

FkRfgl9gub6HDQCZLznUkV_lAoYf

 

五. 项目中遇到的问题以及解决方案
  • ESP-32CAM 自带的接口无法准确地调整白平衡
    解决方案:使用自动白平衡需要使用视频软件进行后期调整
六. 笔记

1. 项目前瞻

  • 竞争力: 相较于手机来说
    • 接口可完全定义,控制相机拍照更加稳定(手机只能通过ABD进行控制),
    • 功耗更低,可以7*24小时长时间运行
    • 通过上位机下载保存图片,可以跳出容量的限制,增加硬盘容量即可存储更多图片
  • 改进:
    • 可以增加SD卡保存图片以及自动定时拍照的功能,实现脱离上位机自行运行

2. 开发环境的部署

  • 下载Arduino
    https://www.arduino.cc/en/software
  • 安装Python
    https://www.python.org/downloads/

使用KiCad进行PCB绘制,了解了PBC绘制打样的全过程。本身我对PCB的设计非常感兴趣,日常使用中也是觉得单纯通过面包板和杜邦线很难稳定地制作一个产品,现在学会了PCB地设计和打样,对我日后地学习和工作都有不少帮助。

通过学习,我也发现PCB的入门其实并不难,下一步会进一步地了解更多基础电路地知识,了解PCB绘制需要注意地点。创作出更多地作品

附件下载
arduino_cam_code.nio
arduino程序代码
take_photo_esp32.py
python控制代码
gerber.zip
PCB板图
团队介绍
黄煜鑫 阳狮集团星传媒体 Python Engineer
团队成员
john
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号