标签存档: Arduino

做个基于STM32+QMK的茶轴机械数字小键盘,带编码器和OLED屏幕~

之前为了验证 STM32F103 作为键盘 QMK 固件的主控是否可行,顺便学习一下 QMK 固件的配置和开发,做了个带编码器和 OLED 屏幕的数字小键盘。不过因为一直没搞定在 OLED 上显示动画,就一直没发。

周末花了点时间学习了一下终于把在 QMK 里面显示动画搞定了。

对于在 QMK 固件中怎么使用 STM32F103 当主控,可以看之前的文章:整个带屏数字小键盘吧,先搞定 QMK 固件支持 STM32F103 的 I2C Remap

成品效果

为了充分得用嘉立创免费打样券,PCB 的尺寸直接拉满到 10cm * 10cm 了,刚刚好够数字小键盘 + 2 个 EC11 编码器 + 1 个 12832 OLED 屏幕。

stm32-qmk-numpad-1

原理图设计

USB Type-C 连接及电源

这个数字小键盘用了 …

阅读全文 »

不要放过闲置快充头,DIY一个带屏幕显示功率的USB-PD电源诱骗器

之前搞完了基于 CH32V003 的 USB 电流表,并把整个开发过程总结成一个教程《全开源!使用 7 毛钱的单片机 DIY USB 电流表教程,入坑硬件设计、固件开发、外观建模》

在此之前,其实已经了解到了 CH224K 这个芯片,同样也是沁恒出的,可以很简单地通过单电阻或者三个 IO 的方式来控制设备端与 USB PD 充电器通信,并且协商到指定的充电电压,在某些需要特定电压的场合就比较有用。

既然已经完成了 USB 电流表,并且电流表也自带了用户按键,那就是再多加一个功能页面的事,顺便把 PD 诱骗也集成掉吧~

成品照片

主界面

img

PCB

img

功能设计和元件选型

CH224K 介绍

CH224 单芯片集成 USB PD 等多种快充协议,支持 PD3.0/2.0,BC1.2 等升压快充协议,自动检测 VCONN 及模拟 E-Mark 芯片,最高支持 100W 功率,内置 PD 通讯模块,集成度高,外围精简。集成输出电 压检测功能,并且提供过温、过压保护等功能。可广泛应用于各类电子设备拓展高功率输入如无线充电 器、电动牙刷、充电剃须刀、锂电池电动工具等各类应用场合。

主要功能:

  • 支持4V至22V输入电压


阅读全文 »

做键盘必备,抛掉ST-Link,通过USB烧录固件,STM32F103使用STM32duino-bootloader 踩坑记录

前言

之前在 DIY 基于 QMK 固件的键盘的时候,直接借鉴了立创开源平台上的项目,使用了 ATmega32A 作为主控,ATmega32A 本身并没有硬件 USB 接口,把它作为键盘主控是通过使用 USBaspLoader 这样一个 bootloader 来实现的。

但是毕竟是软件实现,在以前复刻时,使用 ATmega32A 的键盘还是能正常配合 MacBook 使用的,但是最近发现在连接到 MacBook 之后,会很快丢掉连接,这下不得不去找一个带硬件 USB 接口的 MCU 了。

这时我就把眼光放到了 STM32F103C8T6 上,玩了这么久的 ESP32、CH32V003 什么的,还是没能逃过 STM32 😃。

而且相对 ATmega32A,STM32F103C8T6 的系统资源就丰富太多了,64KB Flash、20KB RAM 用来烧录一个 QMK 固件那是相当够用了,什么宏、层的数量,都开到最大。

最后的重点,作为习惯了使用 USB 直接烧录固件的人,也希望给 STM32F103C8T6 刷固件时也可以直接通过 USB 刷,这就找到了 STM32duino-bootloader 这个项目。

阅读全文 »

DIY USB 电流表(7):读取和显示 INA219 电流电压数据

在前一篇 《DIY USB 电流表(6):点个屏,使用 I2C 驱动 0.96 寸 OLED》 中,我们已经完成了屏幕显示驱动的开发,并且根据需求,列出了需要展示的数据项,确定了一下最终显示内容的布局。

在之前,显示的内容都是占位的测试数据,在这一节,就可以开始真正去读取 INA219 传感器的数据,将电路中测量的电压、电流等数据显示在屏幕上,这又是一节枯燥的编码工作 🙈。

PS. 我也还是一个初学者,如果文章中有一些错误或不足,还请多多指教。

准备工作

在开始读取 INA219 的数据之前,同样也要准备一些相关的库,例如 INA219 数据的读取、参数的配置,以及在 CH32V003-GameConsole 中所使用的 I2C 封装并未提供读取 I2C 数据方法,另外,为了计算 USB 电流表运行时间内消耗的电量,也需要有相关的计时方法。

I2C 读取方法

在 CH32V003-GameConsole 的代码中,已经有了 i2c_tx.h,提供了 I2C 写入相关的方法,对于一个游戏机来说,拥有写入方法就足够了,它只需要用 I2C 来刷新屏幕,但是在我们的 USB 电流表项目中,还需要使用 I2C 去读取 INA219 的数据,因此需要去封装一个 I2C 读取方法。

在开始编写 …

阅读全文 »

DIY USB 电流表(2):PCB 布局布线

在前一篇 《DIY USB 电流表(1):元件选型和原理图绘制》 中介绍了 DIY 一个 USB 电流表的需求列表,以及将它所需要的元件确定下来,并在立创 EDA 中将整体功能的原理图绘制完成,现在就可以开始在立创 EDA 中进行布局布线了。

PS. 我也还是一个初学者,如果文章中有一些错误或不足,还请多多指教。

布局布线效果预览

pcb preview

转换原理图到 PCB

通过立创 EDA 的 设计>更新/转换原理图到PCB 菜单,就可以将原理图中所有元件放置到 PCB 设计页面中,并且已经都将每个元件的网络配置且连接好。

pcb design 1

布局布线

设计预期外形

我们首先需要做的就是将元件根据用途大概放置到对应的区域,先来根据目标的形态绘制一个草图。

pcb design 2

初步确定布局

首先使用放置板框功能,画一个 PCB 的边框,可以根据实际预期 PCB 大小,将板框设置成那个尺寸,例如这里先设置成 45mm*70mm。

这里可以使用立创 EDA 的交叉选择功能,在原理图中选择对应功能区域的元件,然后按 Shift+X,就可以在 PCB 设计页面中选择对应的元件,方便将归属于同一功能的元件都选中,然后放置到目标位置去。

pcb layout

这样就可以大概将整体布局确定下来,后续就可以在这个基础上进行布线了,当然最终效果会比这个紧凑很多,可以在布线过程中不断调整。

精细调整布局

在初步确定布局之后,就可以根据每个模块的功能,将它们目标的布局确定下来,例如这里 DC-DC 模块,就可以根据一般 DC-DC 模块布局的需求,先把相关电阻、电容、电感的位置放置完毕,再进行最后的布线。

像 …

阅读全文 »

Arduino + ESP32 高分开源项目推荐

作为一个 ESP32 重度用户,并且一直使用 Arduino 框架开发嵌入式应用的爱好者,在过去开发的项目过程中使用过不少开源项目,这里稍微总结一下比较有意思的,以及比较有用的开源项目列表。

其中一些项目不光是固件方面的程序,也包含了对应的硬件设计,可以当作一个电子 DIY 入门的学习项目。

开源项目集合

awesome-esp

项目地址:https://github.com/agucova/awesome-esp

一个国外爱好者收集的 ESP32/ESP8266 开源项目集合,主要偏完整的固件应用。

固件应用

这里是一些完整的固件开源项目,通常也会包含一个完整的硬件项目,不管是用来学习硬件开发,还是学习嵌入式软件开发,都是很好的例子。

ESPHome

ESPHome Logo

项目地址:https://github.com/esphome/esphome

算是最流行的开源智能家居固件之一了,通过编写 YAML 配置文件的方式来快速集成各种传感器、开关、屏幕等设备到一个固件中,并且内置了 Home Assistant 等智能家居平台的支持,可以一键添加到这些平台中。

要使用 ESPHome,基于上只需要了解大概的 GPIO 知识,I2C 以及 SPI 总线的概念就可以上手了,传感器或者其他外设的驱动都已经包含在固件中,并且官方文档也包含了详细的配置教程。

之前就使用 ESPHome 快速搭建了两个应用:

tasmota

项目地址:…

阅读全文 »

万字长文,一个软件工程师的 2023 电子 DIY 总结

在去年这个时候,总结了一下 2022 年重新拾起电子 DIY 的经历《一个软件工程师的 2022 电子 DIY 小结》,翻了翻嘉立创 PCB 订单,今年也打了不少板子,虽然也有一些是取消的订单,但是总体还是打了不少板子,有一些旧的东西,也有一些新的东西。

相比去年,今年在电子 DIY 上又学习了一些新东西,再来总结一下在 2023 年得到的经验。当然这些都是我作为一个新手村玩家得到的经验,只能说在 DIY 这个领域,可以用来应付一些需求,与实际商业化产品开发过程中需要的经验,还是会有比较大的距离,因此这些经验也仅供大家参考。

经过这一年,看见什么数码产品,都想着自己能不能做一个,找找开源项目,找找对应芯片,然后搞出一个半成品 😆。

复刻项目

作为一个新手,2023 年整体还是以复刻为主,得益于立创硬件开源平台,总是可以看到各种很有意思的项目,这其中有一些算是玩具,有一些是开发相关的,有一些则是实际生活中会使用到的数码产品。

在复刻项目过程中,现在能更多地去理解原理图,知道每个部分的作用是什么,以及在它的基础上,是否可以做出一些符合自己需求的修改,例如以下这些基础的修改:

  • 元件封装是否方便手焊,0402 替换为 0603 或 0805
  • 布局是否方便使用加热台一次焊接,双面贴片变更为单片贴片
  • 元件选型是否和现在元件库存匹配,LDO、DCDC 等替换为库存已有型号
  • 主控是否可以替换为更熟悉的型号,例如 ATMEGA 替换为 ESP32

在经历过几个开源项目的复刻过程后,会逐渐对硬件项目的构成有一个更清晰的概念,也能对硬件项目中可能包含的功能模块了解更多一点,例如电源模块、充电模块、电机驱动等。

在知道和了解了硬件项目中的这些模块之后,在后续想要做自己的项目时,就可以参考和使用了,这跟在软件项目中使用开源库的原理也差不多。

SmartKnob - 基于 SimpleFOC 的无刷电机模拟旋钮

2023diy-smartknob1

项目地址:https://github.com/scottbez1/smartknob

关键词:无刷电机,SimpleFOC,PID,ESP32,TMC6300,磁编码器,SK6812…

阅读全文 »

Using INA219 with Arduino to Measure Voltage, Current, and Power in a Circuit

Recently, while working on a DIY project, I needed to measure voltage, current, and power in the circuit. After comparing several chips, I decided to use the INA219 chip from Texas Instruments. Coincidentally, I had previously used an INA219 module to build a simple power meter, which made me …

阅读全文 »

在 Arduino 中使用 INA219 测量电路中电压、电流和功率

前段时间在做一个 DIY 产品的时候,会需要测量电路中电压、电流和功率等数据,在找了一些芯片对比后最终选择了德州仪器的 INA219 芯片,刚好之前也使用过 INA219 模块做了一个简单的功率计,相对还算熟悉。

INA219 的官方介绍如下:

INA219 是一款具备 I2C 或 SMBUS 兼容接口的分流器 和功率监测计。该器件监测分流器电压降和总线电源电 压,转换次数和滤波选项可通过编程设定。可编程校准 值与内部乘法器相结合,支持直接读取电流值(单位: 安培)。通过附加乘法寄存器可计算功率(单位: 瓦)。I2C 或 SMBUS 兼容接口 具有 16 个可编程地 址。

INA219 的使用还是比较简单的,直接通过 I2C 总线即可读取数据,并且支持最大 26V 测量电压,12 位精度,在大多数场合都满足需求了。在立创开源平台,也能看到很多 USB 功率计也是使用的这款芯片。

原理图

using-ina219-in-arduino-schematic

INA219 只需要很少的外围元件即可工作,给电源添加一个旁路电容,再加上一个采样电阻,即可完成。

A0、A1 用于指定通过 I2C 与 INA219 通信时,INA219 的地址,如果电路中只有一个 INA219 芯片,可以直接将这两个引脚接地即可。…

阅读全文 »

ESP32-S3 开发板配套物联网扩展板的设计与制作

在完成之前的 《ESP32-S3 最小开发板》 之后,想到很长一段时间,都是用 ESP32-S3 做物联网相关的应用。在这过程中,又会碰到一些会经常重复使用的模块,例如 LCD 屏幕、I2C 外设等,这个时候如果有一个现成的扩展板,就可以省去很多通过杜邦线连接模块的时间,提升应用开发效率。

在做完 ESP32-S3 最小开发板之后,我就根据自己的需求,并且参考了一些其他扩展板,开始设计一个主要用于物联网领域的扩展板。

设计目标

和 ESP32-S3 最小开发板一样,为了使初学者更容易使用,这次的扩展板也会基于容易焊接的前提去规划,主要使用 0805 元件和 2.54mm 排母插件,其中多数元件以模块的方式来引入,这样可以在淘宝购买对应的模块直插,避免在模块的电路设计上花费太多时间。

整个扩展板以输入模块、输出模块和总线模块三部分组成,对应到物联网开发中的大多数展示以及交互场景。

输入模块

  • 5 个用户按键
    • 接受用户输入,可以作为方向键,也可以模拟鼠标移动和按下操作
  • 多功能按键
    • 常见的手持设备,会提供一个多功能按键来实现向上、向下、按压三种操作
  • TF 读卡器
    • 用于数据文件的保存和读取

输出模块

  • LCD 屏幕
    • 显示界面和数据
  • WS2812 LED
    • 状态指示,灯光效果

总线模块

  • I2C 总线
    • 常见传感器模块都支持 I2C 通信,需要支持多个 I2C 模块同时连接
  • SPI 总线
    • 和屏幕或者 TF 读卡器模块进行通信


阅读全文 »