盒子里有啥???
它在做什么吗???
这会伤害我吗???
伙计们,按下开关吧!!!也许没什么会伤害到你……
说真的,这个项目其实就是一个装着 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打印的就完美了。至少是用来关开关的那根手指。想想看。









项目代码
#include <Servo.h>
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);
}
}
【Arduino 动手做】Arduino 无用且无聊的盒子2
项目链接:https://www.instructables.com/Arduino-Useless-Box/
项目作者:Vagelis Chantzis
项目视频 :https://www.youtube.com/watch?v=H3Y0pF5AOKA
https://www.youtube.com/watch?v=B5SkeB26bc4
项目代码:https://github.com/vagelis-chantzis/UselessBox/blob/master/UselessBox.ino

评论