![SkinTemperatureSensor]()
简介
你是否想过iPhone 8的Home按键,MacBook的触控板在按下的时候是如何触发反馈的?如果你在iPhone, Mac没电的时候再按下它们,你会发现Home按键/触控板是无法被真正按下的。在按下时候得到的触觉反馈都得益于LRA(线性谐振执行器)型电机,这类电机通过电磁线圈驱动质量块直线运动,精准控制振动方向和强度。非常适合用于实现触觉反馈的效果。
DFRobot最新推出的Gravity: 振动电机驱动器采用了TM6605芯片,这类芯片专为LRA型电机(线性马达)设计,通过I2C通讯,可以快速设置内置的44种振动模式。无论是智能家居的触控反馈、教育机器人的互动设计,还是游戏手柄的沉浸式震动体验,Gravity 振动电机驱动均可通过简洁的代码实现细腻的触觉控制。
注:此驱动专为LRA型电机设计,并不能适用于ERM(偏心旋转质量)型电机。
产品特性
- 内置44中不同的振动模式
- 自动谐振追踪,可自动检测并且追踪最佳的换向频率
- Gravity I2C接口,附赠LRA电机。2分钟快速部署,告别复杂电路调试
规格参数
- 供电电压:2.7V-5.2V
- 工作温度:-40~85℃
- 支持的LRA频率:140~220Hz
- 工作电流:9.5μA(休眠时),电机振动时的电流由电机决定
- 尺寸:30 * 20mm
- 安装孔尺寸:φ3.0mm
引脚说明
引脚 |
功能描述 |
VCC |
DC 3.3V-5.5V输入 |
GND |
接地 |
C |
I2C时钟线 |
D |
I2C数据线 |
使用教程
软硬件准备
硬件准备
软件准备
接线图
示例代码
- 烧录以下示例代码后,振动电机会每两秒切换振动效果。
- 串口监视器中可以看到当前振动模式
/*!
* @file demo.ino
* @brief This demo showcases all the vibration effects of the TM6605.
* @copyright Copyright (c) 2025 DFRobot Co.Ltd (http://www.dfrobot.com)
* @license The MIT License (MIT)
* @author [fary](feng.yang@dfrobot.com)
* @version V1.0
* @date 2025-04-08
* @url https://github.com/DFRobot/DFRobot_TM6605
*/
#include "DFRobot_TM6605.h"
DFRobot_TM6605 TM6605;
DFRobot_TM6605::eEffect_t effects[] = {
DFRobot_TM6605::eSharpClick, DFRobot_TM6605::eInstantClick, DFRobot_TM6605::eLightTap, DFRobot_TM6605::eDoubleClick,
DFRobot_TM6605::eLightPulse, DFRobot_TM6605::eStrongAlert, DFRobot_TM6605::eMediumDurationAlert, DFRobot_TM6605::eSharpClick2,
DFRobot_TM6605::eMediumClick, DFRobot_TM6605::eFlashStrike, DFRobot_TM6605::eDoubleHighClickShort, DFRobot_TM6605::eDoubleMediumClickShort,
DFRobot_TM6605::eDoubleFlashStrikeShort, DFRobot_TM6605::eDoubleInstantClickLong, DFRobot_TM6605::eDoubleMediumInstantClickLong,
DFRobot_TM6605::eDoubleFlashStrikeLong, DFRobot_TM6605::eAlert, DFRobot_TM6605::eToggleClick, DFRobot_TM6605::eLongSlowFadeTransition1,
DFRobot_TM6605::eLongSlowFadeTransition2, DFRobot_TM6605::eMediumSlowFadeTransition1, DFRobot_TM6605::eMediumSlowFadeTransition2,
DFRobot_TM6605::eShortSlowFadeTransition1, DFRobot_TM6605::eShortSlowFadeTransition2, DFRobot_TM6605::eLongFastFadeTransition1,
DFRobot_TM6605::eLongFastFadeTransition2, DFRobot_TM6605::eMediumFastFadeTransition1, DFRobot_TM6605::eMediumFastFadeTransition2,
DFRobot_TM6605::eShortFastFadeTransition1, DFRobot_TM6605::eShortFastFadeTransition2, DFRobot_TM6605::eLongSlowBoostTransition1,
DFRobot_TM6605::eLongSlowBoostTransition2, DFRobot_TM6605::eMediumSlowBoostTransition1, DFRobot_TM6605::eMediumSlowBoostTransition2,
DFRobot_TM6605::eShortSlowBoostTransition1,DFRobot_TM6605::eShortSlowBoostTransition2, DFRobot_TM6605::eLongFastBoostTransition1,
DFRobot_TM6605::eLongFastBoostTransition2, DFRobot_TM6605::eMediumFastBoostTransition1, DFRobot_TM6605::eMediumFastBoostTransition2,
DFRobot_TM6605::eShortFastBoostTransition1,DFRobot_TM6605::eShortFastBoostTransition2, DFRobot_TM6605::eLongAlert, DFRobot_TM6605::eSoftNoise,
DFRobot_TM6605::eSleepCommand
};
void setup() {
Serial.begin(115200);
while(!Serial);
Serial.print("TM6605 init...");
while(TM6605.begin()!=0){
Serial.print("failed,Not found TM6605!");
}
Serial.println("successed");
TM6605.play();
}
void loop() {
// Traverse all effects
for (auto effect : effects) {
Serial.print("Playing: ");
Serial.print(getEffectName(effect));
Serial.print(" (ID:");
Serial.print(effect);
Serial.println(")");
if(effect==TM6605.eSleepCommand)
continue;
TM6605.selectEffect(effect);
TM6605.play();
delay(2000); // Each effect is displayed for 2 seconds.
if(effect==TM6605.eLongAlert)
delay(8000);
TM6605.stop(); // Stop the current effect.
delay(500); // The effect interval is 500ms.
}
}
const char* getEffectName(uint8_t effect) {
switch(effect) {
case TM6605.eSharpClick: return "Sharp Click";
case TM6605.eInstantClick: return "Instant Click";
case TM6605.eLightTap: return "Light Tap";
case TM6605.eDoubleClick: return "Double Click";
case TM6605.eLightPulse: return "Light Pulse";
case TM6605.eStrongAlert: return "Strong Alert";
case TM6605.eMediumDurationAlert: return "Medium Alert";
case TM6605.eSharpClick2: return "Sharp Click2";
case TM6605.eMediumClick: return "Medium Click";
case TM6605.eFlashStrike: return "Flash Strike";
case TM6605.eDoubleHighClickShort: return "Double High Click (Short)";
case TM6605.eDoubleMediumClickShort: return "Double Medium Click (Short)";
case TM6605.eDoubleFlashStrikeShort: return "Double Flash Strike (Short)";
case TM6605.eDoubleInstantClickLong: return "Double Instant Click (Long)";
case TM6605.eDoubleMediumInstantClickLong: return "Double Medium Instant Click (Long)";
case TM6605.eDoubleFlashStrikeLong: return "Double Flash Strike (Long)";
case TM6605.eAlert: return "Alert";
case TM6605.eToggleClick: return "Toggle Click";
case TM6605.eLongSlowFadeTransition1: return "Long Slow Fade 1";
case TM6605.eLongSlowFadeTransition2: return "Long Slow Fade 2";
case TM6605.eMediumSlowFadeTransition1: return "Medium Slow Fade 1";
case TM6605.eMediumSlowFadeTransition2: return "Medium Slow Fade 2";
case TM6605.eShortSlowFadeTransition1: return "Short Slow Fade 1";
case TM6605.eShortSlowFadeTransition2: return "Short Slow Fade 2";
case TM6605.eLongFastFadeTransition1: return "Long Fast Fade 1";
case TM6605.eLongFastFadeTransition2: return "Long Fast Fade 2";
case TM6605.eMediumFastFadeTransition1: return "Medium Fast Fade 1";
case TM6605.eMediumFastFadeTransition2: return "Medium Fast Fade 2";
case TM6605.eShortFastFadeTransition1: return "Short Fast Fade 1";
case TM6605.eShortFastFadeTransition2: return "Short Fast Fade 2";
case TM6605.eLongSlowBoostTransition1: return "Long Slow Boost 1";
case TM6605.eLongSlowBoostTransition2: return "Long Slow Boost 2";
case TM6605.eMediumSlowBoostTransition1: return "Medium Slow Boost 1";
case TM6605.eMediumSlowBoostTransition2: return "Medium Slow Boost 2";
case TM6605.eShortSlowBoostTransition1: return "Short Slow Boost 1";
case TM6605.eShortSlowBoostTransition2: return "Short Slow Boost 2";
case TM6605.eLongFastBoostTransition1: return "Long Fast Boost 1";
case TM6605.eLongFastBoostTransition2: return "Long Fast Boost 2";
case TM6605.eMediumFastBoostTransition1: return "Medium Fast Boost 1";
case TM6605.eMediumFastBoostTransition2: return "Medium Fast Boost 2";
case TM6605.eShortFstBoostTransition1: return "Short Fast Boost 1";
case TM6605.eShortFastBoostTransition2: return "Short Fast Boost 2";
case TM6605.eLongAlert: return "Long Alert";
case TM6605.eSoftNoise: return "Soft Noise";
case TM6605.eSleepCommand: return "Sleep Command";
default: return "Unknown Effect";
}
}
振动效果参数
参数 |
效果 |
耗时(ms) |
参数 |
效果 |
耗时(ms) |
eSharpClick |
猛力触击 |
65 |
eInstantClick |
瞬击 |
45 |
eDoubleClick |
两次触击 |
200 |
eLightPulse |
轻脉冲 |
215 |
eMediumDurationAlert |
中时长警报 |
730 |
eSharpClick2 |
猛力触击2 |
90 |
eFlashStrike |
闪击 |
20 |
eDoubleHighClickShort |
短间隔两次高强度点击 |
120 |
eDoubleFlashStrikeShort |
短间隔两次闪击 |
100 |
eDoubleInstantClickLong |
长间隔两次瞬击 |
150 |
eDoubleFlashStrikeLong |
长间隔两次闪击 |
100 |
eAlert |
警报 |
240 |
eLongSlowFadeTransition1 |
长间隔缓慢减弱过渡1 |
390 |
eLongSlowFadeTransition2 |
长间隔缓慢减弱过渡 |
620 |
eMediumSlowFadeTransition2 |
中间隔缓慢减弱过渡2 |
650 |
eShortSlowFadeTransition1 |
短间隔缓慢减弱过渡1 |
410 |
eLongFastFadeTransition1 |
长间隔迅速减弱过渡1 |
340 |
eLongFastFadeTransition2 |
长间隔迅速减弱过渡2 |
390 |
eMediumFastFadeTransition2 |
中间隔迅速减弱过渡2 |
360 |
eShortFastFadeTransition1 |
短间隔迅速减弱过渡1 |
340 |
eLongSlowBoostTransition1 |
长间隔缓慢增强过渡1 |
320 |
eLongSlowBoostTransition2 |
长间隔缓慢增强过渡2 |
650 |
eMediumSlowBoostTransition2 |
中间隔缓慢增强过渡2 |
640 |
eShortSlowBoostTransition1 |
短间隔缓慢增强过渡1 |
320 |
eLongFastBoostTransition1 |
长间隔迅速增强过渡1 |
290 |
eLongFastBoostTransition2 |
长间隔迅速增强过渡2 |
615 |
eMediumFastBoostTransition2 |
中间隔迅速增强过渡2 |
590 |
eShortFastBoostTransition1 |
短间隔迅速增强过渡1 |
330 |
eLongAlert |
长时间警报 |
10000 |
eSoftNoise |
柔和噪声 |
480 |
参数 |
效果 |
耗时(ms) |
eLightTap |
轻撞击 |
130 |
eStrongAlert |
剧烈警报 |
190 |
eMediumClick |
中强度触击 |
65 |
eDoubleMediumClickShort |
短间隔两次中强度点击 |
120 |
eDoubleMediumInstantClickLong |
长间隔两次中强度瞬击 |
150 |
eToggleClick |
切换触击 |
620 |
eMediumSlowFadeTransition1 |
中间隔缓慢减弱过渡1 |
400 |
eShortSlowFadeTransition2 |
短间隔缓慢减弱过渡2 |
490 |
eMediumFastFadeTransition1 |
中间隔迅速减弱过渡1 |
310 |
eShortFastFadeTransition2 |
短间隔迅速减弱过渡2 |
350 |
eMediumSlowBoostTransition1 |
中间隔缓慢增强过渡1 |
310 |
eShortSlowBoostTransition2 |
短间隔缓慢增强过渡2 |
460 |
eMediumFastBoostTransition1 |
中间隔迅速增强过渡1 |
320 |
eShortFastBoostTransition2 |
短间隔迅速增强过渡2 |
470 |
eSleepCommand |
休眠指令 |
|
常见问题
更多资料
WIKI文档修改历史
文档版本号 |
修改时间 |
修改人 |
修改内容 |
V1.0 |
2025.4.27 |
叶紫彬 |
第一版发布 |
产品修改历史
产品版本号 |
修改时间 |
修改人 |
产品修改内容 |
V1.0 |
2025.4.27 |
叶紫彬 |
第一版发布 |
DFRobot商城链接