【Arduino 动手做】Arduino 无用且无聊的盒子2

2025-06-201720
AI 快速预览详细 收起
这个项目是一个装有Arduino的盒子,通过开关控制两个伺服器,实现盖子和手指的互动。主要组件包括Arduino板、微型通用伺服器、电解电容器、电阻、开关等。电路接线简单,手指伺服电机连接到引脚10,门伺服电机连接到引脚9。项目中遇到的一个问题是9V电池无法正常供电,通过将9V电池与连接Arduino的USB线组合使用解决了这个问题。
盒子里有啥???

它在做什么吗???

这会伤害我吗???

伙计们,按下开关吧!!!也许没什么会伤害到你……

说真的,这个项目其实就是一个装着 Arduino 的盒子。它什么也不做,真的。它心情不好,只想一个人待着。你能让它开心起来吗?试试开关吧!

## 步骤1:工作原理

开关连接到Arduino并由Arduino监控。按下开关时,开关状态会发生变化,并设置为“开启”位置。然后,Arduino会激活两个伺服器,一个用于盖子,一个用于手指。手指伸出并触碰到开关,使开关回到“关闭”位置。之后,手指回到盒子里,盖子关闭。

## 步骤2:组件和工具列表

Arduino 板(我使用了 Arduino Nano 3 5V,您可以使用任何您喜欢的)
面包板
2 x 微型通用伺服器
2 x 100μF电解电容器
1 x 10kΩ电阻
1 个小型 SPDT 开关
1 x 简单的开/关开关
连接电线
9V电池
轻木(或任何其他你喜欢的盒子材料)
木胶和钉子
小铰链
喷上你喜欢的任何颜色的油漆(可选)

工具
螺丝刀
剪线钳
管道胶带或电工胶带
烙铁
Dremel工具或分切刀

砂纸

## 步骤3:构建盒子

为了制作这个盒子,我使用了6毫米厚的轻木。尺寸为23 x 11 x 11(宽、深、高)。顶盖由4毫米厚的轻木制成。你可以用电磨或简单的切割机/分切机切割木材,轻木质地柔软。我把所有部件粘在一起,并用钉子钉好了框架部分。

铰链是用螺丝固定在盖子和盒子内侧的,所以会比较隐蔽。拧紧它比较麻烦,而且必须小心,以免损坏盒子。

接下来,你必须在顶盖(固定不动的那个)上为开关打孔。然后用螺丝将开关固定到位。此外,你还需要在这个盖子里放置手指舵机的外壳。制作外壳时,需要将木质部件粘合在一起。确保外壳坚固耐用。我的微型舵机非常结实,我做的第一个外壳就坏了!我加固了外壳,并用钉子和胶水固定,以便更好地承受舵机的功率。

现在该做手指了。关于设计、角度、尺寸和曲线,我有很多想法。我尝试了好几种设计,但唯一合适的是经典的L形设计。它是唯一一个在接触开关时不会断裂的设计。你必须把它做得又黄又厚,否则它碰到开关时会侧弯。不用担心重量,轻木非常轻。我用五块3毫米厚的L形木块粘在一起。它可能不太好看,但效果很好。我还把舵机连接器粘在了手指上。发挥你的创造力,按照你喜欢的方式制作吧!

接下来要做的是制作一根棍子,它要连接到门伺服器上,用来将盖子向上推,这样手指就可以出来了。只需将两块尺寸合适的轻木粘在伺服器上即可。小菜一碟。你唯一需要考虑的是伺服器的高度,以便打开盖子。你可以将轻木块放在伺服器下面,为它做一个底座,这样伺服器的高度就合适了。这里不用花太多时间,只需将剩下的一些木块粘在一起即可。

最后一步是安装一个外部开关,为Arduino供电并节省电池电量。小心地在盒子侧面开一个孔,然后粘上开关。焊接好电缆后,开关就做好了。

盒子做好了!如果你想给它上色,现在就涂,在把电子设备放进去之前。

在制作过程中,尤其是在制作手指的时候,我觉得3D打印机会让整个过程变得简单很多。处理轻木很有趣,但3D打印出你想要的部件,按照你想要的方式制作,效率更高,而且部件也更漂亮。缺点是成本……你自己选择吧……

## 步骤4:接线

如您所见,电路接线非常简单。手指伺服电机连接到引脚 10,门伺服电机连接到引脚 9。SPDT 开关的一个引脚接地,另一个引脚连接到 5V,第三个引脚通过一个 10kΩ 电阻连接到 Arduino 的引脚 2。别忘了连接电容,并注意极性!

## 步骤5:最终组装

最终组装
现在你可以把所有东西都放进盒子里,并将电池连接到 Arduino 板。阳极连接到 Vin 引脚,地连接到 GND 引脚。在放入电子设备时,请小心不要损坏盒子。我的盒子比较窄,所以很难把它们组装起来。

## 步骤6:Arduino代码

无用盒子的代码非常简单。首先,你必须包含伺服器库,然后创建两个伺服器对象(一个用于门,一个用于手指),并在 void setup 函数中将它们连接到 Arduino 的引脚上。void 循环只是一个 if 语句,用于检查开关是否处于开启状态。如果开关处于开启状态,伺服器必须移动并关闭开关。为了增加趣味性,我为伺服器设计了一些不同的动作。你也可以随意添加你的动作!!非常简单,只需查看代码并遵循模式即可!

这是 GitHub 上的代码链接,您可以轻松复制/粘贴并使用它。

## 第七步:问题与思考

在制作盒子的过程中,我遇到了一些问题,想与大家分享。

最烦人的问题是关于电池和电路供电的。不知何故,电路无论如何都无法使用9V碱性电池工作。舵机没有按照预期工作,有时甚至完全不动。因此,我开始排除故障,分别为舵机和Arduino供电。我尝试用9V电压给舵机供电,用6V电压(4节AA电池)给Arduino供电。没有任何变化。我又试了试Arduino UNO,还是不行。几次尝试之后,我发现如果将9V电池与连接Arduino的USB线组合使用,问题就能解决。是不是有点疯狂?不过,这种方法确实有效。问题是,我不想每次玩的时候都把带USB线的盒子挂在外面,然后插到电脑上。在与一些在电子和Arduino方面比我更有经验的人讨论后,我们得出结论,我应该使用锂聚合物电池,因为它们放电速度快,而且电流能力强。最后,在我所在城镇举办的 Arduino Day 15 活动期间,我试用了一款 6600 mAh 的移动电源(用于给智能手机充电),效果非常好!所以,如果你也遇到同样的问题,不妨试试!

我想说的第二件事是关于盒子的材质。轻木是一种非常好的材料,很轻,厚的话也很耐用,但当你需要用它来做非常精细的工作时,就会很麻烦。你甚至可能会毁掉你的整个项目。如果盒子是3D打印的就完美了。至少是用来关开关的那根手指。想想看。

【Arduino 动手做】Arduino 无用且无聊的盒子2图1

【Arduino 动手做】Arduino 无用且无聊的盒子2图3

【Arduino 动手做】Arduino 无用且无聊的盒子2图2

【Arduino 动手做】Arduino 无用且无聊的盒子2图4

【Arduino 动手做】Arduino 无用且无聊的盒子2图5

【Arduino 动手做】Arduino 无用且无聊的盒子2图6

【Arduino 动手做】Arduino 无用且无聊的盒子2图7

【Arduino 动手做】Arduino 无用且无聊的盒子2图9

【Arduino 动手做】Arduino 无用且无聊的盒子2图8

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(2)
驴友花雕
驴友花雕
作者
驴友花雕
驴友花雕
作者
项目代码
[code]#include
Servo doorServo;
Servo fingerServo;
int swPin = 2; //switch on pin 2
int pos = 0;
int selectedMove = 0; //move selector
void setup()
{
pinMode(swPin, INPUT);
doorServo.attach(9); //set door servo on Pin 9 pwm
fingerServo.attach(10); //set finger servo on Pin 10 pwm
doorServo.write(80); //set door to hiding position
fingerServo.write(0); //set finger to hiding position
}
void loop(){
//if the switch is on, move door and finger to switch it off
if(digitalRead(swPin) == HIGH)
{
if (selectedMove > 9) {
selectedMove = 0;
} //when all moves are played, repeat the moves from beginning
if (selectedMove == 0) {
simpleClose();
}
else if (selectedMove == 1) {
simpleClose();
}
else if (selectedMove == 2) {
simpleClose2();
}
else if (selectedMove == 3) {
crazydoor();
}
else if (selectedMove == 4) {
slow();
}
else if (selectedMove == 5) {
serious();
}
else if (selectedMove == 6) {
trollClose();
}
else if (selectedMove == 7) {
simpleClose();
}
else if (selectedMove == 8) {
matrix();
}
else if (selectedMove == 9) {
sneak();
}
selectedMove += 1; //swith to next move
}
}
// Moves
// basic move
void simpleClose()
{
//Moving door
for(pos = 80; pos < 155; pos += 3)
{
doorServo.write(pos);
delay(15);
}
//Moving hand
for(pos = 0; pos < 129; pos += 4)
{
fingerServo.write(pos);
delay(15);
}
//hiding hand
for(pos = 129; pos>=0; pos-=4)
{
fingerServo.write(pos);
delay(15);
}
//hiding door
for(pos = 155; pos>=80; pos-=3)
{
doorServo.write(pos);
delay(15);
}
}
// open and wait, then move finger and wait, then switch of and hide
void simpleClose2()
{
//Moving door
for(pos = 80; pos < 155; pos += 3)
{
doorServo.write(pos);
delay(15);
}
delay(800);
//Moving hand
for(pos = 0; pos < 100; pos += 4)
{
fingerServo.write(pos);
delay(15);
}
delay(1000);
for(pos = 100; pos < 129; pos += 4)
{
fingerServo.write(pos);
delay(15);
}
//hiding hand
for(pos = 129; pos>=0; pos-=5)
{
fingerServo.write(pos);
delay(15);
}
//hiding door
for(pos = 155; pos>=80; pos-=3)
{
doorServo.write(pos);
delay(15);
}
}
//open door then close it many times, wait, then quickly reopen, switch off and hide.
void crazydoor()
{
//Moving door
for(pos = 80; pos < 125; pos += 3)
{
doorServo.write(pos);
delay(15);
}
//hiding door
for(pos = 125; pos>=80; pos-=5)
{
doorServo.write(pos);
delay(15);
}
//Moving door
for(pos = 80; pos < 110; pos += 3)
{
doorServo.write(pos);
delay(15);
}
//hiding door
for(pos = 110; pos>=80; pos-=15)
{
doorServo.write(pos);
delay(15);
}
delay(700);
//Moving door
for(pos = 80; pos < 125; pos += 3)
{
doorServo.write(pos);
delay(15);
}
delay(700);
//hiding door
for(pos = 125; pos>=80; pos-=5)
{
doorServo.write(pos);
delay(15);
}
//Moving door
for(pos = 80; pos < 155; pos += 8)
{
doorServo.write(pos);
delay(15);
}
//Moving hand
for(pos = 0; pos < 129; pos += 3)
{
fingerServo.write(pos);
delay(15);
}
//hiding hand
for(pos = 129; pos>=0; pos-=3)
{
fingerServo.write(pos);
delay(15);
}
//hiding door
for(pos = 155; pos>=80; pos-=15)
{
doorServo.write(pos);
delay(15);
}
}
//open door,move finger very slowly forward and back to hiding very slowly, then quickly close door
void slow()
{
//Moving door
for(pos = 80; pos < 155; pos += 1)
{
doorServo.write(pos);
delay(30);
}
//Moving hand
for(pos = 0; pos < 129; pos += 1)
{
fingerServo.write(pos);
delay(30);
}
//hiding hand
for(pos = 129; pos>=0; pos-=1)
{
fingerServo.write(pos);
delay(30);
}
//hiding door
for(pos = 155; pos>=125; pos-=1)
{
doorServo.write(pos);
delay(30);
}
delay(100);
for(pos = 125; pos>=80; pos-=4)
{
doorServo.write(pos);
delay(15);
}
}
//serious
void serious() {
//Moving door
for(pos = 80; pos < 155; pos += 3)
{
doorServo.write(pos);
delay(15);
}
//Moving hand
for(pos = 0; pos < 70; pos += 1)
{
fingerServo.write(pos);
delay(15);
}
delay(800);
//hiding door
for(pos = 155; pos>=130; pos-=3)
{
doorServo.write(pos);
delay(15);
}
//hiding door
for(pos = 130; pos < 155; pos+=3)
{
doorServo.write(pos);
delay(15);
}
//hiding door
for(pos = 155; pos>=130; pos-=3)
{
doorServo.write(pos);
delay(15);
}
//hiding door
for(pos = 130; pos < 155; pos+=3)
{
doorServo.write(pos);
delay(15);
}
fingerServo.write(40);
delay(1000);
//Moving hand
for(pos = 40; pos < 129; pos += 4)
{
fingerServo.write(pos);
delay(15);
}
//hiding hand
for(pos = 129; pos>=0; pos-=4)
{
fingerServo.write(pos);
delay(15);
}
for(pos = 120; pos>=80; pos -= 1)
{
doorServo.write(pos);
delay(15);
}
}
void trollClose(){
//Moving door
for(pos = 80; pos < 155; pos += 3)
{
doorServo.write(pos);
delay(15);
}
//Moving hand
for(pos = 0; pos < 127; pos += 4)
{
fingerServo.write(pos);
delay(15);
}
//hiding door
for(pos = 155; pos>=130; pos-=3)
{
doorServo.write(pos);
delay(15);
}
delay(2000);
for(pos = 130; pos < 155; pos += 3)
{
doorServo.write(pos);
delay(15);
}
for(pos = 155; pos>=140; pos-=3)
{
doorServo.write(pos);
delay(15);
}
for(pos = 140; pos < 155; pos += 3)
{
doorServo.write(pos);
delay(15);
}
delay(500);
//hiding hand
for(pos = 127; pos>=0; pos-=4)
{
fingerServo.write(pos);
delay(15);
}
//hiding door
for(pos = 155; pos>=80; pos-=3)
{
doorServo.write(pos);
delay(15);
}
}
void matrix()
{
//Moving door
for(pos = 80; pos < 155; pos += 3)
{
doorServo.write(pos);
delay(15);
}
//Moving hand
for(pos = 0; pos < 80; pos += 4)
{
fingerServo.write(pos);
delay(15);
}
for(pos = 80; pos < 129; pos += 1)
{
fingerServo.write(pos);
delay(30);
}
delay(300);
for(pos = 129; pos>=0; pos-=4)
{
fingerServo.write(pos);
delay(10);
}
//hiding door
for(pos = 155; pos>=80; pos-=3)
{
doorServo.write(pos);
delay(15);
}
}
void sneak()
{
//Moving door
for(pos = 80; pos < 130; pos += 1)
{
doorServo.write(pos);
delay(30);
}
delay(2000);
//Moving hand
for(pos = 0; pos < 40; pos += 1)
{
fingerServo.write(pos);
delay(30);
}
delay(500);
for(pos = 130; pos < 155; pos += 4)
{
doorServo.write(pos);
delay(15);
}
delay(100);
for(pos = 40; pos < 90; pos += 4)
{
fingerServo.write(pos);
delay(15);
}
delay(500);
//hiding hand
for(pos = 90; pos>=70; pos-=4)
{
fingerServo.write(pos);
delay(15);
}
delay(100);
for(pos = 70; pos < 90; pos += 4)
{
fingerServo.write(pos);
delay(15);
}
delay(100);
for(pos = 90; pos>=70; pos-=4)
{
fingerServo.write(pos);
delay(15);
}
delay(100);
for(pos = 70; pos < 129; pos += 4)
{
fingerServo.write(pos);
delay(15);
}
for(pos = 129; pos>=0; pos-=4)
{
fingerServo.write(pos);
delay(15);
}
//hiding door
for(pos = 155; pos>=80; pos-=3)
{
doorServo.write(pos);
delay(15);
}
} [/code]
- 没有更多了 -