如何制作每5分钟振动一次的手表

电子说

1.2w人已加入

描述

第1步:准备零件和工具

手表

以下是零件和这个项目你需要的工具。有些是可选的,它们的使用将在整个教学中得到解释。

电子部分:

ATTiny85

圆盘振动电机(或任何类型的振动电机,寻找低功率电机)

CR2032电池(或任何类型的纽扣电池)

1N4001二极管(或任何其他通用二极管)

PN2222A晶体管(或任何类型的通用NPN晶体管)

47欧姆电阻(1/4瓦)

100欧姆电阻器(可选)

其他部件:

纽扣电池座

面包板

Perfboard

连接线

滑动开关

压接线端子(可选但推荐)

8针芯片插座(可选但推荐)

工具:

使用Arduino的ATTiny85程序员(或者其他程序员,如果你有的话)

Multitester

剥线器

烙铁

S电线

双面胶带

步骤2:在面包板上构建电路

手表

手表

手表

按照上图和上图显示电路。请特别注意方向,否则电路可能无法正常工作。请务必查看上图中的注释,了解有关具体细节的更多信息。

完成构建后,您会注意到什么都不会发生。这是因为ATTiny85尚未编程。我们将在下一步做到这一点。

电路说明:

ATTiny85在引脚5上向NPN晶体管(Q1)发出一个信号,作为产生电流的开关流过电机。

电阻器(R1)降低电机电压,使振动强度降低。

电阻器(R2)降低晶体管基极的电压。

二极管(D1)作为反激二极管,可以保护电路免受电压从电机切断的电压尖峰的影响。

提示这一步:

我个人更喜欢切断电线,使它们在面包板上平放。如果出现任何问题,这会使电路板看起来更清晰,更容易进行可视化调试。

注意:

请注意我建造的面包板的图片可能会注意到滑动开关丢失了。我拍照时忘了添加它。这是可以的,因为电路在没有它的情况下仍然可以工作。

步骤3:使用Arduino编程ATTiny85

手表

手表

在电路工作之前,我们需要使用程序员对ATTIny85进行编程。

如果你还没有程序员,你可以通过以下方法之一轻松制作一个instructables:如果你想快速拥有一个程序员,一个是面包板版本。另一个是arduino盾牌的形式,它将来会更加永久使用。这两个中的任何一个都可以工作。

复制下面的代码并使用程序员上传:

#include

#include

#include

#include

const byte motorPin = 0;

volatile unsigned long wdCounter = 0; // Volatile tells compiler to reload each time instead of optimizing

unsigned long motorDuration = 500000;

unsigned long waitDuration = 0;

unsigned long wdCounterTarget = 75;

unsigned long timeDelayStarted = 0;

bool isInDelay = false;

void setup () {

pinMode ( motorPin, OUTPUT );

ADCSRA = 0; // Turn off the ADC

startMotorSequence(); // Run the motor once on startup

sleepNow();

}

void loop () {

if ( wdCounter == wdCounterTarget ) { // Check if counter has reached target.

wdCounter = 0;

timeDelayStarted = micros();

isInDelay = true; // Now in delay mode

}

// Continue to loop until enough time has passed to reach waitDuration

if ( isInDelay

&& micros() - timeDelayStarted 》= waitDuration) {

startMotorSequence(); // Run the motor sequence

wdCounter = 0;

isInDelay = false; // End delay mode

}

if ( !isInDelay ) {

sleepNow();

}

}

void startMotorSequence() {

digitalWrite( motorPin, HIGH );

_delay_us(motorDuration); // Blocking function delay

digitalWrite ( motorPin, LOW );

}

void sleepNow () {

set_sleep_mode ( SLEEP_MODE_PWR_DOWN ); // set sleep mode to Power Down. The most energy efficient setting.

power_all_disable (); // Turn power off to TIMER 1, TIMER 2, and Serial Interface

noInterrupts (); // Turn off interrupts as a precaution. Timed sequence follows

resetWatchDog (); // Reset watchdog, making sure every flag is properly set

sleep_enable (); // Allows the system to be commanded to sleep

interrupts (); // Turn on interrupts. Guarantees next instruction is executed

sleep_cpu (); // Goodnight, ATTiny85

sleep_disable (); // Returns here after Watchdog ISR fires.

power_all_enable (); // Turn on power to TIMER1, TIMER 2, and Serial Interface

}

void resetWatchDog () {

MCUSR = 0; // Clear various “reset” flags

WDTCR = bit ( WDCE ) | bit ( WDE ) | bit ( WDIF ); // Allow changes, disable reset, clear existing interrupt

WDTCR = bit ( WDIE ) | 1 《《 WDP3 | 0 《《 WDP2 | 0 《《 WDP1 | 0 《《 WDP0; // 4s timeout

wdt_reset (); // Reset the watchdog using the parameters

}

ISR ( WDT_vect ) {

wdt_disable(); // Disable the watchdog timer

wdCounter++; // Increase the watchdog firing counter.

}

代码成功升级后,重新插入ATTiny85芯片面包板。振动电机应开始振动约0.5秒。然后它会倒计时大约5分钟,然后再次振动。

代码说明:

为降低功耗,代码利用ATTiny85的看门狗定时器进行倒计时,直到下次需要振动。请注意,这不是看门狗定时器的用途,但许多人已经使用它来实现低功耗(但不准确)的延迟。如果您不知道它是什么,请在此处获取更多信息。

电路需要每5分钟或300秒振动一次。因此看门狗使用4秒间隔并触发75次(4 * 75 = 300)。请注意,如果要更改延迟,则还需要更改计算。

倒计时结束时,代码的其他部分很简单。触发电机0.5秒,然后通过触发看门狗重新开始倒计时。

此步骤的提示:

如果存在上传错误,请务必仔细检查程序员的连接。要帮助进行故障排除,只需从Arduino中复制错误代码并搜索答案。

如果有任何意外行为,请确保您下载的代码没有任何更改。

如果仍有问题,请考虑上传一个简单的闪烁电路,以测试您的程序员是否按预期工作。

如果电机没有振动或连续振动,请务必仔细检查上一步的连接。您也可以尝试切断电源并使用滑动开关将其重新打开以重新启动程序。

步骤4:获取监视案例

手表

找一个能容纳你电路的表壳。您需要很多空间,因为除了电线之外,您将在面包板中安装所有组件。如果您愿意,也可以3D打印自己的盒子。

在我的最后,我使用了一个里面有很多空间的破碎儿童手表。我删除了所有现有组件,挖空了它,并试图估计空间是否足以让所有东西都适合它。

此步骤的提示:

为了帮助估算您的电路是否适合您的情况,请尝试构建下一步中找到的电路,而无需焊接组件然后将电路安装在里面。

至少,您需要的尺寸不会小于您的CR2032电池。

步骤5:准备Perfboard布局

手表

手表

使用标尺测量所选案例中可用空间的尺寸。根据这些测量结果切断一块穿孔板。

上图中的图表/布局与我们使用面包板制作的电路相同,只是更紧凑。它有10个水平孔和6个垂直孔。这是我能提出的这个电路的最小版本。如果此布局不符合您选择的案例,那么您可能需要自行更改布局,或找到更大的案例。

此步骤的提示:

在开始焊接之前,如图所示弯曲组件的支脚,使其保持在原位。

如果电路板紧密贴合,可以选择用砂纸打磨电路板的两侧。

步骤6:焊接组件放置

手表

手表

手表

现在是时候开始焊接了。如果您按照电路图,这应该是直截了当的。

如果您不知道如何焊接,这是一个可以解决的问题。

注意:

显示上述电路图的第一张图片使用自上而下的视图。这意味着,如果您要从下面焊接组件,则方向将翻转,如第二张图像所示。很容易混淆!

此步骤的提示:

在切断腿之前先将组件焊接到位。

确保用万用表检查连接的连续性。

如果您不想使用过多的焊料,您可以使用最近切割成直线的组件的支腿,如上图所示。

步骤7:连接电池和开关

手表

手表

手表

为了能够将电池与我们的电路连接,我们首先需要使用电池座。我们可以使用我们在面包板上制作电路时使用的电池座,但这可能不适合您选择的情况。

一种解决方案是将电线末端连接到压接线端子,如图所示在上面的第一张图片中。制作其中两个,然后让它们与电池的正极和负极接触,并用电工胶带包好。

将电线焊接到电路和滑动开关上。务必通过触发滑动开关测试电路。就像上次一样,振动电机应运行0.5秒,表示您的连接正确且正常工作。

此步骤的提示:

使用万用表检查电线末端是否从电池读取电压。

请务必仔细检查您的联系人是否牢固到位。

注意:

压接线端子有助于使接触点更大并且更容易固定到位。

如果您没有压接电线端子,只需剥去电线末端并使用它,因为接触仍然有效。

您可能已经注意到滑动开关位于电池的负极线上。无论是积极的还是消极的,这仍然有效。我做了后者,因为它放在我自己的表壳里面是有意义的。

步骤8:将电路放在表壳中并盖上盖子

手表

测试你构建的电路,看看是否一切正常。然后小心地将电路放置在您选择的表壳上,用双面胶带将组件固定到位。

将其盖住,加上表带,戴上表格,就完成了!

此步骤的提示:

在添加电路之前,不要忘记为表壳涂漆。我选择了黑色,因为粉红色并不是我的风格。

使用厚而柔软的胶带,特别是将粘性电机固定到位。我发现它能够承受振动并保持电机就位。

步骤9:最终注释

手表

手表

以下是有关该项目的最终说明。如果你想知道我为什么在这个项目中做出某些决定,那就很重要了。它还包括有关如何根据自己的喜好修改和改进电路的说明:

代码经过优化,可以尽可能少地使用电源。有关我如何在这里做的更多信息。

我目前正在佩戴的手表已经运行了2周(在2019-03-26,我会随时更新此声明)。我希望手表可以使用至少3个月。

R1 100欧姆电阻用于降低通过振动电机的电流。这使电机变弱但节省电池寿命。如果您觉得在所选外壳内部振动太弱,可以取下此电阻并用电线更换。

我在其中一个步骤中提到振动之间的延迟是“大约”5分钟。这个项目依赖于ATTiny85的内部时钟进行定时,这不是很准确(相信我,我测试过它)。预计每5分钟偏移100ms至1s,但这取决于房间的当前温度和电池的当前电压。尽管如此,不要为此烦恼。我发现准确性并不重要。请记住,这个项目告诉我们时间的流逝,而不是当前的确切时间。如果它仍然困扰你,可以考虑在电路中添加一个外部晶体。

通过修改代码可以改变5分钟的等待时间。只有了解代码并且知道自己在做什么,才能执行此操作。对于那些有足够信心的人,请查看变量 waitDuration 和 wdCounterTarget ,以及第71行,其中设置了看门狗超时。

请务必查看Github存储库以获取此代码的最新版本,以防万一有更新或改进。

最后,查看并关注项目页面。我为这个项目计划了很多改进,例如使用SMD元件使手表更小,并添加外部晶体以获得更准确的时序。所以要留意这一点。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分