Moved ESP32 to main branch

This commit is contained in:
Xun Zhang 2023-12-24 18:40:11 -08:00
parent 86168388b8
commit 0056f09789
10 changed files with 485 additions and 61 deletions

View file

@ -4,41 +4,55 @@
![Taiko Drum Controller](./images/banner-taiko.png)
# 太鼓达人控制器 - Arduino/ESP32
# Taiko Drum Controller - Arduino (ATmega32U4/ESP32)
开源硬件程序,用于制作自己的太鼓达人PC控制器。
开源硬件程序,帮助你制作自己的太鼓达人PC控制器。
## 关于这个项目
## 关于项目
该项目旨在帮助您在家中开发自己的**硬件太鼓**
本项目旨在帮助你在家制作自己的硬件太鼓
*本程序仅限个人和非商业用途。*
**该程序仅供个人和非商业用途。**
## 你需要什么
## 你需要准备
1. 一个Arduino Micro或Leonardo微控制器其他兼容板可能也可以工作但您需要验证它们是否支持键盘模拟
1. 一个Arduino Micro/Leonardo (ATmega32U4) 板或一个Arduino Nano ESP (ESP32) 板。
如果你用的是ESP32开发板请切换到“ESP32”分枝。ESP32相比ATmega32要快得多而且可以通过蓝牙无线连接电脑
大多数ATmega32U4板都可以工作但你需要验证它们是否支持键盘模拟像Arduino Uno这样的ATmega328P板则不行
2. 4个压电传感器
强烈推荐使用ESP32因为它比ATmega32U4强大得多。该项目使用了ESP32-WROOM-32板。
2. 4个压电传感器。
3. 必要的电子组件面包板、电阻、LED、跳线等
3. 8个100kΩ电阻。
4. 如果您需要从头开始制作鼓还需要木板和切割工具。如果您有一个市售的太鼓或Big Power Lv.5鼓,您可以直接使用它们。
4. 可选4个桥式整流器芯片比如[DB107](https://www.diodes.com/assets/Datasheets/products_inactive_data/ds21211_R5.pdf)(详见附加说明部分)。
5. 可选一些红色和蓝色的LED灯。
6. 必要的电子组件面包板、LED灯、跳线等
7. 木板和切割工具仅在你需要从头开始制作实体太鼓时使用。如果你有市售太鼓或大力鼓Lv.5,可以直接使用。
## 制作控制器的步骤
1. 制作鼓并将4个压电传感器牢固地粘贴到鼓上。参考图片以了解传感器的首选位置。
1. 制作鼓并将4个压电传感器牢固地粘贴鼓上。参考图片以了解传感器的首选位置。
![控制器方案](./images/piezo_locations.png)
![传感器设置](./images/piezo_locations.png)
2. 按照以下方式将压电传感器和其他组件连接到控制器(压电传感器的极性无关紧要);
2. 按照以下方案将压电传感器和其他组件连接到控制器(压电传感器的极性无关紧要);
以下方案适用于Arduino Micro板。如果你使用不同的板请参考其文档了解连接信息。
![控制器方案](./images/scheme.png)
3. 将固件刷新到板上。
如果你选择添加桥式整流器,请使用以下方案:
您可能需要微调一些参数,如`SAMPLE_CACHE_LENGTH``HIT_THRES``RESET_THRES``sensitivity`。有关详细信息,请参见下一节。
![带桥式整流器的控制器方案](./images/scheme_bridge.png)
3. 将固件刷写到板上。
你可能需要微调一些参数,如`SAMPLE_CACHE_LENGTH``HIT_THRES``RESET_THRES``sensitivity`。详见下一节。
4. 玩得开心!
@ -46,20 +60,34 @@
1. 击打和重置阈值
设置`DEBUG 1`(这将禁用键盘输出并从串行端口发送信号值刷新固件在鼓的4个区域之一上滚奏并从串行监视器的输出中可视化图表。击打阈值应小于鼓上的最重击打重置阈值应大于两个波峰之间的波谷值。重置值也应低于击打值。
设置`DEBUG 1`(这会禁用键盘输出并从串行端口发送信号值刷写固件在鼓的4个区域之一上滚动然后从串行监视器的输出中查看图表。击打阈值应低于你在鼓上的最重击打重置阈值应高于连续击打之间的低谷。重置值也应低于击打值。
其余3个区域重复此过程并找到适合所有区域的最佳值。
剩下的3个区域重复此过程并找到适合所有区域的最佳值。
![控制器方案](./images/tune_hit_reset.png)
![设置击打和重置值](./images/tune_hit_reset.png)
2. 采样长度
为了最大运行速度,`cache.h`库已优化可与2的幂次方的`SAMPLE_CACHE_LENGTH`窗口大小一起工作。这意味着2、8、16和32等。实际上16对于Arduino来说是最佳值但如果您有一个强大的微控制器其采样输入速度至少为4000Hz或更高则可以将值更改为32以获得更平滑换句话说更少噪声的曲线。
为了最大化运行速度,`cache.h`库已优化为支持2的幂次方窗口大小的`SAMPLE_CACHE_LENGTH`。这意味着2、8、16、32等。实际上对于Arduino来说16是最佳值但如果你有一个能以至少4000Hz或更高速度采样输入的强大微控制器你可以将值改为32以获得更平滑换句话说更少噪声的曲线。
3. 灵敏度
并非所有压电传感器都相同由于安装错误4个传感器捕获的信号可能会有显著差异。灵敏度值是用来标准化差异的乘数。在以下示例中右边的“咚”区域产生的值比其余3个区域高得多因此您可以调整`sensitivity``{1.0, 1.0, 0.5, 1.0}`以消除这个问题。
并非所有压电传感器都相同由于安装错误4个传感器捕获的信号可能有显著差异。灵敏度值是用来规范这些差异的乘数。在以下示例中右边的don区域产生的值比其余3个区域高得多所以你可以调整`sensitivity``{1.0, 1.0, 0.5, 1.0}`来解决这个问题。
![控制器方案](./images/tune_sensitivities.png)
![设置灵敏度值](./images/tune_sensitivities.png)
请注意,传感器的安装非常关键。您应确保传感器牢固地附着在木头上并放置在适当的位置。
请注意,传感器的安装非常关键。你应该确保传感器牢固地贴在木头上,并且位置适当。
## 附加说明
1. 为什么使用桥式整流器
如果不对压电传感器的电压进行偏置,它们的输出电压范围约为-5V到+5V。然而模拟输入的ADC只接受正电压值ESP32为0-3.3VATmega32U4为0-5V。当它们接收到负电压时通常会被简单地截断为0。
对于普通的电子鼓来说,这通常没问题,因为我们只是失去了一半的输入能量,而这并不影响我们计算击打时间的方式。但是对于*太鼓*鼓来说特别是像ATmega32U4这样的慢处理器可能会造成问题。
在太鼓鼓中所有4个振动部件都连接在一起这意味着如果你击打左边的don处理器也会接收到左边的kat、右边的don和右边的kat的信号。如果左边的don压电传感器一开始就产生负电压并被ADC截断它将导致约3到4毫秒的轻微“延迟”处理器可能会错误地将这次击打视为右边的don、左边的kat甚至右边的kat取决于哪个发送了最高的正值。
使用桥式整流器,所有负值都转换为正值。换句话说,就像`abs()`函数,确保我们不会丢失任何负电压。
![为什么使用桥式整流器](./images/bridge_signal.png)