当前位置:首页 > 工业控制 > 电路设计项目集锦
[导读]许多 Arduino 项目采用完整的开发板,而本项目则采用不同的方法,将 ATmega328P-AUR 直接集成在电路板上。其目的是展示如何利用一个常见的 AVR 微控制器作为独立数据采集系统的主控核心。

环境监测是小型嵌入式系统中一项实用的应用。数据记录仪可用于车间、储藏室、温室或实验室中记录温度、湿度和光照情况。

许多 Arduino 项目采用完整的开发板,而本项目则采用不同的方法,将 ATmega328P-AUR 直接集成在电路板上。其目的是展示如何利用一个常见的 AVR 微控制器作为独立数据采集系统的主控核心。

ATmega328P-AUR 为该应用提供了充足的存储空间和外设接口。TWI 接口连接 OLED 显示屏和 BH1750FVI 光感传感器,SPI 接口连接 MicroSD 卡,DHT22 传感器通过单条数字数据线进行通信。

系统工作原理

微控制器由外部晶振驱动,运行频率为 16 MHz。稳定的 3.3 V 电源为 ATmega328P-AUR 及其外围设备供电。

DHT22 用于测量温度和相对湿度。BH1750FVI 通过其 I2C 接口测量环境光,OLED 屏幕显示最新的传感器读数。

每 10 秒,固件会生成一个包含当前时间、温度、湿度和光照强度的 CSV 记录,并将该记录追加到 MicroSD 卡上名为 ENVLOG.CSV 的文件中。

用户可通过按钮立即保存测量数据。成功写入后,状态指示灯会短暂闪烁。

为何使用独立式 ATmega328P-AUR?

ATmega328P 广泛应用于 Arduino 兼容的设计,但定制 PCB 可减少不必要的板级硬件,使设计更易于集成到大型产品中。

AUR 版本采用 TQFP-32 封装,适合紧凑型 PCB 设计。它具备与其他 ATmega328P 封装版本相同的主控器功能,并根据封装提供相应的引脚布局。

数据记录格式

该项目以简单的 CSV 格式存储数据:

时间字段为秒级经过的时间计数,不是实际的日历时间戳,因为设计中未包含实时时钟。

电路搭建

首先使用ATmega328P-AUR电源、晶振、复位电路和ICSP接口进行测试。在添加传感器之前,需确认电源电压及基本的编程连接。

OLED显示屏和BH1750FVI共用同一根I2C总线。MicroSD卡使用SPI接口,DHT22则连接到独立的数字输入端口。

电路应分阶段进行测试:先确认微控制器能否成功编程,然后分别检查OLED显示屏、传感器读数以及MicroSD卡。

测试

使用数字万用表检查3.3 V电源,并在通电前排查短路情况。

将DHT22传感器与已知的室温和湿度值进行比对。如果可用,可将BH1750FVI的读数与独立的光度计读数进行比较。

对于MicroSD卡,将其格式化为FAT32,并验证固件能否创建并追加ENVLOG.CSV文件。

当传感器环境发生变化时,应检查记录数据是否出现合理的变化。本项目不保证实验室级精度或经过校准的环境测量结果。

可能的改进方案

可进一步扩展项目功能,例如:

- 使用DS3231实时时钟实现日历时间戳;

- 添加可充电电池供电;

- 实现低功耗睡眠模式;

- 集成无线通信模块;

- 更大的OLED显示屏;

- 增加其他模拟传感器;

- 添加网页仪表板以查看记录的数据;

- 设计定制外壳用于户外监测。

电路原理图与接线图

该电路采用3.3 V稳压电源。ATmega328P-AUR支持1.8 V至5.5 V的工作电压范围,因此3.3 V电源适用于此设计。

电源

•ATmega328P-AUR VCC → 3.3 V。

•ATmega328P-AUR AVCC → 3.3 V。

•ATmega328P-AUR GND → 公共地。

•VCC 与 GND 之间连接一个 100 nF 电容。

•AVCC 与 GND 之间连接一个 100 nF 电容。

•AREF → 连接一个 100 nF 电容 → GND。

•3.3 V 与 GND 之间连接一个 10 µF 电容。

•MCP1700-3302E/TO 提供稳定的 3.3 V 电源。

时钟与复位

•XTAL1 → 16 MHz 晶振 → XTAL2。

•XTAL1 → 22 pF 电容 → GND。

•XTAL2 → 22 pF 电容 → GND。

•RESET → 连接一个 10 kΩ 电阻 → 3.3 V。

•RESET → 推按钮 → GND。

DHT22 温湿度传感器

•DHT22 VCC → 3.3 V。

•DHT22 GND → GND。

•DHT22 DATA → PD2 / Arduino 数字引脚 2。

•DATA 与 3.3 V 之间连接一个 1 kΩ 电阻。

BH1750FVI 光电传感器

•BH1750FVI VCC → 3.3 V。

•BH1750FVI GND → GND。

•BH1750FVI SDA → PC4 / A4。

•BH1750FVI SCL → PC5 / A5。

I2C总线需要上拉电阻。如果传感器和OLED模块未自带,需在SDA与3.3V之间、SCL与3.3V之间使用4.7 kΩ电阻。

SSD1306 OLED显示屏

•OLED VCC → 3.3 V。

•OLED GND → GND。

•OLED SDA → PC4 / A4。

•OLED SCL → PC5 / A5。

OLED与BH1750FVI共用同一I2C总线。

MicroSD卡

•MicroSD VCC → 3.3 V。

•MicroSD GND → GND。

•MicroSD MOSI → PB3 / Arduino数字引脚11。

•MicroSD MISO → PB4 / Arduino数字引脚12。

•MicroSD SCK → PB5 / Arduino数字引脚13。

•MicroSD CS → PB2 / Arduino数字引脚10。

请使用专为3.3V工作设计的MicroSD模块。切勿在未确认接口要求的情况下,将仅支持5V的SD模块直接连接至3.3V的ATmega328P电源。

状态指示灯

•PD6 / Arduino数字引脚6 → 330 Ω电阻 → LED阳极。

•LED阴极 → GND。

数据写入成功后,指示灯会闪烁。

按钮

•PD7 / Arduino数字引脚7 → 按钮 → GND。

固件会启用内部上拉电阻。

ICSP接口

ICSP信号

ATmega328P-AUR连接方式

•MISO

•PB4

•MOSI

•PB3

•SCK

•PB5

•重置

•重置

•VCC

•3.3 V

•GND

•GND

ICSP引脚用于对微控制器进行编程,也可用于安装引导程序。

代码

以下Arduino代码用于读取DHT22和BH1750FVI传感器,更新OLED显示屏,并将CSV数据写入MicroSD卡。

代码说明

固件使用Arduino AVR平台进行ATmega328P开发。16 MHz时钟设置必须与实际晶振及电路板配置相匹配。

OLED显示屏的地址设置为0x3C。部分SSD1306模块使用不同的地址,如果显示屏无响应,请检查模块文档。

DHT22传感器的数据线上需要连接合适的上拉电阻,部分扩展模块已内置该电阻。

MicroSD卡应格式化为FAT32。若文件夹中不存在ENVLOG.CSV,则固件会自动创建该文件。

记录的时间为经过的秒数计数,而非实时时间。如需日历时间戳,可添加DS3231模块。

结论

本项目展示了ATmega328P-AUR如何作为独立型环境数据记录仪的主控制器。它利用微控制器的I2C、SPI、GPIO和定时器资源,连接多个实用外设。

该设计适用于学习、原型开发以及基于定制PCB的监控系统开发。同时,它也可作为需要低功耗、无线通信或实时时钟支持的更高级数据记录项目的起点。

对于内存、处理能力和外设接口均能满足需求的小型嵌入式应用而言,ATmega328P仍然是一个实用的选择。在进行新设计时,工程师还应参考Microchip当前推荐的产品,并将其与ATmega328P进行比较,再决定是否采用长期生产的设计方案。

本文编译自hackster.io

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
关闭