电路

如何构建另一台无用的机器:易于制作,难以使用!:9个步骤(带图片)

A æ u å æ ø i æ å

A æ u å æ ø i æ å

目录:

Anonim

建造了许多无用的机器,为什么要建造另一台呢?简单地说,它真的很有趣:),有趣的构建和有趣的玩法。
我试图给这个版本一个角色,因为我一直觉得有人“在盒子里面思考”,所以在这里我试过,我希望我成功地给了她“生命”!
我很高兴与您分享所有的步骤,希望您能够轻松地建立自己的步伐,并赋予它一个苦涩或更好的性格!我的版本基于Arduino,你可能认为这是一种矫枉过正,但鉴于它给我的灵活性,我认为这是值得的。
这是一个放在一起的所有内容的视频。稍后,我们将进入零件,步骤,原理图和代码
如果有的话,请告诉我您的意见和/或问题。
希望你喜欢!
F。

供应:

第1步:它是如何工作的?

一切都连接到Arduino板,电路板等待,直到开关设置为逻辑高电平,也就是说,当您轻弹开关时,​​电路板发出信号,指示两个伺服电机以特定方式移动(稍后会详细介绍),之后,连接到“手”的伺服将把开关轻弹回到OFF位置,然后返回到盒子里,接着是“门”伺服。然后一切都重复了。
如果您看到上面的视频,每次切换开关时,机器都会以不同的方式响应,这可以通过简单地在Arduino代码中使用不同的时序编写不同的函数来完成(我称之为“移动”)。每次切换开关时,我都会调用一个新动作,直到完成所有操作,我重新开始。请注意,在步骤9中,我提供了另一个版本的代码,用于选择随机移动而不是顺序移动。只要你在Arduino上有足够的内存,就可以根据需要添加任意数量的移动。
Arduino始终处于开启状态,这就是我为电池添加了一个开关,以便在机器不使用时节省一些电量。我已经计划在开关上使用中断,而不是当前的简单HIGH / LOW检测,并将其与睡眠模式耦合。这可以在机器不使用时节省电量,并且还可以随时使用(但这也会使代码复杂化)所以,现在,它只是一个简单的ON / OFF开关,电路板总是通电。

第2步:零件

你会需要:
强制性:
1.一个盒子
2.任何带有PWM输出的Arduino板(我碰巧有一个旧的,Diecimila)
3.两个标准RC伺服电机(我使用的是Futaba-S3003,它们有3,2 Kg / cm的扭矩,足以移动门或手)
4.一个6-12伏的电池(我使用的是我的AR无人机电池,它是11.1伏/ 1000毫安)
3.触发器的SPTT或SPST开关(基本上,任何适合您的开关!)
5.另一个电池开关
6.一个按钮,用于重置Arduino,以防您想从顶部重新启动移动/代码。
7.一些跳线

可选的:
如果你想设计一个移动包括移动框(如视频中的最后一步),那么你可以得到:
1.一个Arduino电机屏蔽,这对其他项目也很方便(或者你可以自己设计一个H桥,搜索出来)
一辆便宜的遥控车,所以你可以带它的直流电机和齿轮箱
此外,仍然在“可选”部分,我已经构建了一个硬件去抖动电路,以便在开关打开/关闭时具有干净的触发。这可以跳过,并且可以使用延迟或定时器在arduino软件中轻松实现。我做了硬件去抖,因为我很快就会改变代码使用中断,并且因为后者不允许在例程中可靠地使用延迟/定时器功能,所以我不得不构建一个简单的去抖动电路以备将来使用。如果你想跳过这个部分,那么只需将一个简单的开关/电阻连接到arduino的引脚2并实现软件去抖动程序。
对于硬件去抖:
1. 10mF电解电容器
2. 10K电阻
3.逻辑非门,即逆变器(芯片74HC04)这有六个逆变器,但您只需要一个。
让我们构建它……

第3步:构建盒子

您可以使用任何合适的盒子。我建造了我的,也许不完美,但仍然很个人:)
1.我使用了2张5mm BALSA木材,使用刀具非常容易使用,并且由于其令人难以置信的轻量化而相对较强。
2.消耗了5管氰基丙烯酸酯胶(又名强效速效胶)
这里是:
一个 22 x 14 x 14厘米

第4步:原理图

以上是原理图(使用Fritzing绘制),显示:
上半部分: arduino主板,2个伺服和交换机连接。请注意,如前所述,您可以使用简单的电阻/开关替换整个去抖(右上)电路。
“门”和“手”伺服系统都直接由Arduino上的5v引脚供电。信号线分别连接到引脚9和10。这些引脚支持PWM,因此我使用它们来控制伺服的角度/位置(最大0到180度)。
注意:红色按钮只是一个复位(类似于arduino板面上的复位)。我添加它可以随时快速访问重置电路板/软件而无需打开盒子。只需将RESET引脚连接到地即可进行复位。
底部: 如果您想使用直流电机并移动机器,则需要。这是arduino电机屏蔽,它安装在Arduino的顶部,因此两个电路板的所有引脚都相互连接。为了清楚起见,我在下面将它们显示为分开,希望如此!该屏蔽可以轻松控制多达2个直流电机(2个通道A / B)。我现在只用一个。它允许在代码中设置任何可用的2个通道/电机的方向,速度和中断。我正在使用频道B,如下图所示。哪个引脚
13为方向,销11为速度,销8为制动控制。
电池为11.1 / 1000 mA,连接到屏蔽层,从而为直流电机,主电路板和伺服电机供电。如果你没有使用屏蔽,那么你可以直接将电池连接到主arduino板上的电源桶。

第5步:修理舵机

这是安装的手和门伺服:
您首先需要将伺服器安装在正确的位置,这需要一些试验和错误,直到您获得所需的运动。您可以使用arduino IDE中提供的伺服示例来测试伺服系统和每个伺服系统所需的偏转量,从而确定门和手动伺服系统的最终定位和臂长。
手臂简单地用轻木制成,我把它做得更厚,可以承受一些撕裂。
以下是我的表现。关于手动伺服的一个注意事项。您需要将伺服轴直接放在盖子的边缘下方(如下图所示),这样可以避免在制作能够成功敲击开关的手时遇到困难,并且还能够重新进入盒子。


第6步:连接Switch,Servos和Arduino

在原理图步骤中看到所有连接,并尝试将所有连接放在框内,类似于上面显示的内容:

步骤7:可选:直流电机和电池

以上是我如何放置直流电机齿轮箱(取自便宜的遥控车),还显示了电池和开关的位置。
确保将齿轮尽可能放在中心以平衡盒子,你可能需要在盒子内放一些重量以便在最后组装后更多地平衡它,因为我使用的电池有点重(100克)并引起一些摆动切换或移动盒子时。
请注意直流电机 速度 由针控制 11, 方向 通过别针 13,和 刹车 在针上 8, 这些被认为是arduino电机屏蔽上的通道B.
通过组装我试图隐藏所有电线开关和其他组件,以便有一个简单的正宗盒子。这适用于车轮,因此我在它们周围制作了一个轮圈,它可以容纳车轮和电池,还可以使用红色复位按钮。

第8步:准则

为了编写arduino的代码,你需要arduino IDE(在这里下载)
我使用的是1.0.5版本,只需确保从IDE中选择正确的COM端口(窗口)和电路板类型,然后使用下面的代码,然后点击上传。
注意:考虑到伺服系统的定位,轴和角度,我在代码中用来设置伺服系统最大偏差的值完全针对此框进行。我通过试验得到了这个。因此,您需要根据您的方框设计自己的价值观 伺服放置.
作为参考,下面是我用于每个伺服的最小/最大值,因为您将在代码中看到它们:
门:
80隐藏,155完全开放
手:
0隐藏,129推开关

这是代码(最好下载附加到此步骤的文件,而不是从下面复制/粘贴):
#包括
伺服门伺服;
伺服handServo;
int switch_pin = 2; //在引脚2上设置开关
//运动变量
int motorThrottle = 11;
int motorDirection = 13;
int motorBrake = 8;
int pos = 0;
int selectedMove = 0; //移动选择器
int Testmove = 0; //测试模式:设置为移动数字以仅测试一个选定的移动
//(设置为零以正常运行,即:amm上的roundrobbin移动)
void setup()
{
Serial.begin(9600);
pinMode(switch_pin,INPUT);
doorServo.attach(9); //在9号针上设置门伺服
handServo.attach(10); //在Pin 10 pwm上设置手动伺服
doorServo.write(80); //设置门到隐藏位置
handServo.write(0); //设置手到隐藏位置

//设置通道B,(因为通道A由门和手伺服保留,不能同时使用)
pinMode(motorDirection,OUTPUT); //启动电机通道B引脚
pinMode(motorBrake,OUTPUT); //启动制动通道B引脚

}

void loop()
{
if(Testmove!= 0){
selectedMove = Testmove;
}

//如果开关打开,则移动门和手将其关闭……
if(digitalRead(switch_pin)== HIGH)
{

if(selectedMove> 10){selectedMove = 0; } //播放所有动作时,从头开始重复动作
//下面是我到目前为止设计的所有“Moves”,每个都是一个函数,下面写在代码中,执行名称,abit奇怪?是的,因为有些是用阿拉伯语写的
if(selectedMove == 0){switchoff(); }
else if(selectedMove == 1){switchoff(); }
else if(selectedMove == 2){switchoffbitaraddod(); }
else if(selectedMove == 3){crazydoor(); }
else if(selectedMove == 4){crazyslow(); }
else if(selectedMove == 5){m7anika7anika(); }
else if(selectedMove == 6){m3alla2(); }
else if(selectedMove == 7){switchoff(); }
else if(selectedMove == 8){matrix(); }
else if(selectedMove == 9){sneak(); }
else if(selectedMove == 10){zee7(); }

if(Testmove == 0){
selectedMove ++; //如果不是在测试模式下,则切换到下一步
}
}
}

//动作库
//基本动作
void switchoff()
{
//移动门
for(pos = 80; pos <155; pos = 3)
{
doorServo.write(POS);
延迟(15);
}

//动手
for(pos = 0; pos <129; pos = 4)
{
handServo.write(POS);
延迟(15);
}

//隐藏手
for(pos = 129; pos> = 0; pos- = 4)
{
handServo.write(POS);
延迟(15);
}

//藏门
for(pos = 155; pos> = 80; pos- = 3)
{
doorServo.write(POS);
延迟(15);
}
}

//移动3:打开并等待,然后移动手等待,然后切换并隐藏
void switchoffbitaraddod()
{
//移动门
for(pos = 80; pos <155; pos = 3)
{
doorServo.write(POS);
延迟(15);
}
延迟(800);
//动手
for(pos = 0; pos <100; pos = 4)
{
handServo.write(POS);
延迟(15);
}
延迟(1000);
for(pos = 100; pos <129; pos = 4)
{
handServo.write(POS);
延迟(15);
}

//隐藏手
for(pos = 129; pos> = 0; pos- = 5)
{
handServo.write(POS);
延迟(15);
}

//藏门
for(pos = 155; pos> = 80; pos- = 3)
{
doorServo.write(POS);
延迟(15);


}

}

//移动4:打开门然后关闭它多次,等待,然后快速重新关闭并关闭并隐藏。

void crazydoor()
{

//移动门
for(pos = 80; pos <125; pos = 3)
{
doorServo.write(POS);
延迟(15);
}

//藏门
for(pos = 125; pos> = 80; pos- = 5)
{
doorServo.write(POS);
延迟(15);
}
//移动门
for(pos = 80; pos <110; pos = 3)
{
doorServo.write(POS);
延迟(15);
}

//藏门
for(pos = 110; pos> = 80; pos- = 15)
{
doorServo.write(POS);
延迟(15);
}
延迟(700);
//移动门
for(pos = 80; pos <125; pos = 3)
{
doorServo.write(POS);
延迟(15);
}
延迟(700);
//藏门
for(pos = 125; pos> = 80; pos- = 5)
{
doorServo.write(POS);
延迟(15);
}

// ---- ----切换----
//移动门
for(pos = 80; pos <155; pos = 8)
{
doorServo.write(POS);
延迟(15);
}

//动手
for(pos = 0; pos <129; pos = 3)
{
handServo.write(POS);
延迟(15);
}

//隐藏手
for(pos = 129; pos> = 0; pos- = 3)
{
handServo.write(POS);
延迟(15);
}

//藏门
for(pos = 155; pos> = 80; pos- = 15)
{
doorServo.write(POS);
延迟(15);
}

}

//移动5:打开门,然后非常缓慢地向前移动并慢慢地向后隐藏,然后快速关闭门
void crazyslow()
{
//移动门
for(pos = 80; pos <155; pos = 1)
{
doorServo.write(POS);
延迟(30);
}

//动手
for(pos = 0; pos <129; pos = 1)
{
handServo.write(POS);
延迟(30);
}

//隐藏手
for(pos = 129; pos> = 0; pos- = 1)
{
handServo.write(POS);
延迟(30);
}

//藏门
for(pos = 155; pos> = 125; pos- = 1)
{
doorServo.write(POS);
延迟(30);
}
延迟(100);
for(pos = 125; pos> = 80; pos- = 4)
{
doorServo.write(POS);
延迟(15);
}

}
//移动6:
void m7anika7anika(){
//移动门
for(pos = 80; pos <155; pos = 3)
{
doorServo.write(POS);
延迟(15);
}

//动手
for(pos = 0; pos <70; pos = 1)
{
handServo.write(POS);
延迟(15);
}
延迟(800);


//藏门
for(pos = 155; pos> = 130; pos- = 3)
{
doorServo.write(POS);
延迟(15);
}

//藏门
for(pos = 130; pos <155; pos = 3)
{
doorServo.write(POS);
延迟(15);
}
//藏门
for(pos = 155; pos> = 130; pos- = 3)
{
doorServo.write(POS);
延迟(15);
}
//藏门
for(pos = 130; pos <155; pos = 3)
{
doorServo.write(POS);
延迟(15);
}

handServo.write(40);
延迟(1000);

//动手
for(pos = 40; pos <129; pos = 4)
{
handServo.write(POS);
延迟(15);
}

//隐藏手
for(pos = 129; pos> = 0; pos- = 4)
{
handServo.write(POS);
延迟(15);
}


for(pos = 120; pos> = 80; pos - = 1)
{
doorServo.write(POS);
延迟(15);
}



}
void m3alla2(){
//移动门
for(pos = 80; pos <155; pos = 3)
{
doorServo.write(POS);
延迟(15);
}

//动手
for(pos = 0; pos <127; pos = 4)
{
handServo.write(POS);
延迟(15);
}
//藏门
for(pos = 155; pos> = 130; pos- = 3)
{
doorServo.write(POS);
延迟(15);
}
延迟(2000);

for(pos = 130; pos <155; pos = 3)
{
doorServo.write(POS);
延迟(15);
}

for(pos = 155; pos> = 140; pos- = 3)
{
doorServo.write(POS);
延迟(15);
}
for(pos = 140; pos <155; pos = 3)
{
doorServo.write(POS);
延迟(15);
}
延迟(500);
//隐藏手
for(pos = 127; pos> = 0; pos- = 4)
{
handServo.write(POS);
延迟(15);
}

//藏门
for(pos = 155; pos> = 80; pos- = 3)
{
doorServo.write(POS);
延迟(15);
}
}

void matrix()
{
//移动门
for(pos = 80; pos <155; pos = 3)
{
doorServo.write(POS);
延迟(15);
}

//动手
for(pos = 0; pos <80; pos = 4)
{
handServo.write(POS);
延迟(15);
}

for(pos = 80; pos <129; pos = 1)
{
handServo.write(POS);
延迟(30);
}
延迟(300);

for(pos = 129; pos> = 0; pos- = 4)
{
handServo.write(POS);
延迟(10);
}

//藏门
for(pos = 155; pos> = 80; pos- = 3)
{
doorServo.write(POS);
延迟(15);
}

}
void sneak()
{
//移动门
for(pos = 80; pos <130; pos = 1)
{
doorServo.write(POS);
延迟(30);
}
延迟(2000);

//动手
for(pos = 0; pos <40; pos = 1)
{
handServo.write(POS);
延迟(30);
}

延迟(500);

for(pos = 130; pos <155; pos = 4)
{
doorServo.write(POS);
延迟(15);
}
延迟(100);

for(pos = 40; pos <90; pos = 4)
{
handServo.write(POS);
延迟(15);
}
延迟(500);
//隐藏手
for(pos = 90; pos> = 70; pos- = 4)
{
handServo.write(POS);
延迟(15);
}
延迟(100);
for(pos = 70; pos <90; pos = 4)
{
handServo.write(POS);
延迟(15);
}
延迟(100);
for(pos = 90; pos> = 70; pos- = 4)
{
handServo.write(POS);
延迟(15);
}
延迟(100);

for(pos = 70; pos <129; pos = 4)
{
handServo.write(POS);
延迟(15);
}

for(pos = 129; pos> = 0; pos- = 4)
{
handServo.write(POS);
延迟(15);
}
//藏门
for(pos = 155; pos> = 80; pos- = 3)
{
doorServo.write(POS);
延迟(15);
}
}


void zee7()
{
//移动门
for(pos = 80; pos <155; pos = 3)
{
doorServo.write(POS);
延迟(15);
}
延迟(2000);
//向左转半速
digitalWrite(motorDirection,LOW); //建立通道B的右方向
digitalWrite(motorBrake,LOW); //松开B通道的制动器
analogWrite(motorThrottle,100); //全速旋转通道B上的电机
延迟(300);
digitalWrite(motorBrake,HIGH); //为通道B调整制动器
延迟(2000);

//向后@半速向右
digitalWrite(motorDirection,HIGH); //建立通道B的LEFT方向
digitalWrite(motorBrake,LOW); //松开B通道的制动器
analogWrite(motorThrottle,100); //以半速将电机旋转到通道B上
延迟(300);
digitalWrite(motorBrake,HIGH); //为通道B调整制动器
延迟(1000);

//动手
for(pos = 0; pos <129; pos = 4)
{
handServo.write(POS);
延迟(15);
}

//隐藏手
for(pos = 129; pos> = 0; pos- = 4)
{
handServo.write(POS);
延迟(15);
}

//藏门
for(pos = 155; pos> = 80; pos- = 3)
{
doorServo.write(POS);
延迟(15);
}
}


第9步:可选更新:移动检测

我今天有一个接近传感器(GP2Y0A21),所以现在我可以用它来移动机器,如果用户接近拨动开关:)
对于这个额外的步骤,我假设您已经构建了轮子以允许移动(参见可选步骤8)。现在剩下的就是添加传感器并在代码中进行一些修改以进行运动检测。
传感器有3根线,黄色信号线连接到 针3 关于arduino,而 红色 黑色 连接到 V5 地面 分别在板上​​。
我已将传感器隐藏在门下,如图所示,因此只有在门打开时才能“看到”用户的动作。正是我需要的!
我还要稍微改变代码(这里)来实现一个运动检测程序(参见代码,在函数中) zee7() ),当检测到移动时,盒子将首先向右移动,然后向左移动,然后用手翻转开关并隐藏。代码评论很多,我希望我没有过头!
您可以在下面找到更新后的代码,还要注意我已经让机器随机选择了移动,只需设置即可将其更改为顺序 boolean randomize = false;
谢谢大家的好建议!
代码 (最好下载附加到此步骤的文件,而不是从下面复制/粘贴):
#包括
伺服门伺服;
伺服handServo;
无符号长TimerA,TimerB; //运动检测程序的计时器
int switch_pin = 2; //在引脚2上设置开关
//运动变量
int motorThrottle = 11;
int motorDirection = 13;
int motorBrake = 8;
//距离变量
int motionPin = 3; //模拟0上的运动传感器引脚
int lastDist = 0; //记住最后的距离
int currentDist = 0;
int thresh = 200; //移动阈值(将其设置为可以获得所需的运动检测感应)

int pos = 0;
int selectedMove = 0; //移动选择器
int Testmove = 0; //测试模式:设置为移动数字以仅测试一个选定的移动
//(设置为零以正常运行,即:所有移动中的roundrobbin)
boolean randomize = true; //如果为true,则框将随机执行,如果设置为false,则移动将按顺序从1到10完成

void setup()
{
Serial.begin(9600);
pinMode(switch_pin,INPUT);
doorServo.attach(9); //在9号针上设置门伺服
handServo.attach(10); //在Pin 10 pwm上设置手动伺服
doorServo.write(80); //设置门到隐藏位置
handServo.write(0); //设置手到隐藏位置
//设置通道B,因为通道A由门和手伺服器保留,不能同时使用
pinMode(motorDirection,OUTPUT); //启动电机通道B引脚
pinMode(motorBrake,OUTPUT); //启动制动通道B引脚

}

void loop()
{
//如果开关打开,则移动门和手将其关闭……
if(digitalRead(switch_pin)== HIGH)
{

if(Testmove == 0)
{

if(randomize == false)
{
if(selectedMove> 10)
{
selectedMove = 0; //播放所有动作时,从头开始重复动作
}
}
其他
{
selectedMove = random(11);
}
}
其他
{
selectedMove = Testmove;
}
Serial.println(selectedMove);
if(selectedMove == 0){switchoff(); }
else if(selectedMove == 1){switchoff(); }
else if(selectedMove == 2){switchoffbitaraddod(); }
else if(selectedMove == 3){crazydoor(); }
else if(selectedMove == 4){crazyslow(); }
else if(selectedMove == 5){m7anika7anika(); }
else if(selectedMove == 6){m3alla2(); }
else if(selectedMove == 7){switchoff(); }
else if(selectedMove == 8){matrix(); }
else if(selectedMove == 9){sneak(); }
else if(selectedMove == 10){zee7(); }

if(Testmove == 0 && randomize == false){
selectedMove ++; //如果不处于测试模式,请切换到下一步
}
}
}
//动作库
//基本动作
void switchoff()
{
//移动门
for(pos = 80; pos <155; pos = 3)
{
doorServo.write(POS);
延迟(15);
}

//动手
for(pos = 0; pos <129; pos = 4)
{
handServo.write(POS);
延迟(15);
}

//隐藏手
for(pos = 129; pos> = 0; pos- = 4)
{
handServo.write(POS);
延迟(15);
}

//藏门
for(pos = 155; pos> = 80; pos- = 3)
{
doorServo.write(POS);
延迟(15);
}
}

//移动3:打开并等待,然后移动手等待,然后切换并隐藏
void switchoffbitaraddod()
{
//移动门
for(pos = 80; pos <155; pos = 3)
{
doorServo.write(POS);
延迟(15);
}
延迟(800);
//动手
for(pos = 0; pos <100; pos = 4)
{
handServo.write(POS);
延迟(15);
}
延迟(1000);
for(pos = 100; pos <129; pos = 4)
{
handServo.write(POS);
延迟(15);
}

//隐藏手
for(pos = 129; pos> = 0; pos- = 5)
{
handServo.write(POS);
延迟(15);
}

//藏门
for(pos = 155; pos> = 80; pos- = 3)
{
doorServo.write(POS);
延迟(15);


}

}

//移动4:打开门然后关闭它多次,等待,然后快速重新关闭并关闭并隐藏。

void crazydoor()
{

//移动门
for(pos = 80; pos <125; pos = 3)
{
doorServo.write(POS);
延迟(15);
}

//藏门
for(pos = 125; pos> = 80; pos- = 5)
{
doorServo.write(POS);
延迟(15);
}
//移动门
for(pos = 80; pos <110; pos = 3)
{
doorServo.write(POS);
延迟(15);
}

//藏门
for(pos = 110; pos> = 80; pos- = 15)
{
doorServo.write(POS);
延迟(15);
}
延迟(700);
//移动门
for(pos = 80; pos <125; pos = 3)
{
doorServo.write(POS);
延迟(15);
}
延迟(700);
//藏门
for(pos = 125; pos> = 80; pos- = 5)
{
doorServo.write(POS);
延迟(15);
}

// ---- ----切换----
//移动门
for(pos = 80; pos <155; pos = 8)
{
doorServo.write(POS);
延迟(15);
}

//动手
for(pos = 0; pos <129; pos = 3)
{
handServo.write(POS);
延迟(15);
}

//隐藏手
for(pos = 129; pos> = 0; pos- = 3)
{
handServo.write(POS);
延迟(15);
}

//藏门
for(pos = 155; pos> = 80; pos- = 15)
{
doorServo.write(POS);
延迟(15);
}

}

//移动5:打开门,然后非常缓慢地向前移动并慢慢地向后隐藏,然后快速关闭门
void crazyslow()
{
//移动门
for(pos = 80; pos <155; pos = 1)
{
doorServo.write(POS);
延迟(30);
}

//动手
for(pos = 0; pos <129; pos = 1)
{
handServo.write(POS);
延迟(30);
}

//隐藏手
for(pos = 129; pos> = 0; pos- = 1)
{
handServo.write(POS);
延迟(30);
}

//藏门
for(pos = 155; pos> = 125; pos- = 1)
{
doorServo.write(POS);
延迟(30);
}
延迟(100);
for(pos = 125; pos> = 80; pos- = 4)
{
doorServo.write(POS);
延迟(15);
}

}
//移动6:
void m7anika7anika(){
//移动门
for(pos = 80; pos <155; pos = 3)
{
doorServo.write(POS);
延迟(15);
}

//动手
for(pos = 0; pos <70; pos = 1)
{
handServo.write(POS);
延迟(15);
}
延迟(800);


//藏门
for(pos = 155; pos> = 130; pos- = 3)
{
doorServo.write(POS);
延迟(15);
}

//藏门
for(pos = 130; pos <155; pos = 3)
{
doorServo.write(POS);
延迟(15);
}
//藏门
for(pos = 155; pos> = 130; pos- = 3)
{
doorServo.write(POS);
延迟(15);
}
//藏门
for(pos = 130; pos <155; pos = 3)
{
doorServo.write(POS);
延迟(15);
}

handServo.write(40);
延迟(1000);

//动手
for(pos = 40; pos <129; pos = 4)
{
handServo.write(POS);
延迟(15);
}

//隐藏手
for(pos = 129; pos> = 0; pos- = 4)
{
handServo.write(POS);
延迟(15);
}


for(pos = 120; pos> = 80; pos - = 1)
{
doorServo.write(POS);
延迟(15);
}



}
void m3alla2(){
//移动门
for(pos = 80; pos <155; pos = 3)
{
doorServo.write(POS);
延迟(15);
}

//动手
for(pos = 0; pos <127; pos = 4)
{
handServo.write(POS);
延迟(15);
}
//藏门
for(pos = 155; pos> = 130; pos- = 3)
{
doorServo.write(POS);
延迟(15);
}
延迟(2000);

for(pos = 130; pos <155; pos = 3)
{
doorServo.write(POS);
延迟(15);
}

for(pos = 155; pos> = 140; pos- = 3)
{
doorServo.write(POS);
延迟(15);
}
for(pos = 140; pos <155; pos = 3)
{
doorServo.write(POS);
延迟(15);
}
延迟(500);
//隐藏手
for(pos = 127; pos> = 0; pos- = 4)
{
handServo.write(POS);
延迟(15);
}

//藏门
for(pos = 155; pos> = 80; pos- = 3)
{
doorServo.write(POS);
延迟(15);
}
}

void matrix()
{
//移动门
for(pos = 80; pos <155; pos = 3)
{
doorServo.write(POS);
延迟(15);
}

//动手
for(pos = 0; pos <80; pos = 4)
{
handServo.write(POS);
延迟(15);
}

for(pos = 80; pos <129; pos = 1)
{
handServo.write(POS);
延迟(30);
}
延迟(300);

for(pos = 129; pos> = 0; pos- = 4)
{
handServo.write(POS);
延迟(10);
}

//藏门
for(pos = 155; pos> = 80; pos- = 3)
{
doorServo.write(POS);
延迟(15);
}

}
void sneak()
{
//移动门
for(pos = 80; pos <130; pos = 1)
{
doorServo.write(POS);
延迟(30);
}
延迟(2000);

//动手
for(pos = 0; pos <40; pos = 1)
{
handServo.write(POS);
延迟(30);
}

延迟(500);

for(pos = 130; pos <155; pos = 4)
{
doorServo.write(POS);
延迟(15);
}
延迟(100);

for(pos = 40; pos <90; pos = 4)
{
handServo.write(POS);
延迟(15);
}
延迟(500);
//隐藏手
for(pos = 90; pos> = 70; pos- = 4)
{
handServo.write(POS);
延迟(15);
}
延迟(100);
for(pos = 70; pos <90; pos = 4)
{
handServo.write(POS);
延迟(15);
}
延迟(100);
for(pos = 90; pos> = 70; pos- = 4)
{
handServo.write(POS);
延迟(15);
}
延迟(100);

for(pos = 70; pos <129; pos = 4)
{
handServo.write(POS);
延迟(15);
}

for(pos = 129; pos> = 0; pos- = 4)
{
handServo.write(POS);
延迟(15);
}
//藏门
for(pos = 155; pos> = 80; pos- = 3)
{
doorServo.write(POS);
延迟(15);
}
}

//如果在开关附近检测到,此移动将打开门并等待移动,
//该框将首先向右移动,然后向左移动,最后手移动并关闭开关
void zee7()
{

//开门
for(pos = 80; pos <155; pos = 3)
{
doorServo.write(POS);
延迟(15);
}
延迟(1200); //打开门后等待稳定传感器读数

//设置计时器并读取传感器
//等待超过阈值的移动或者如果计时器到期(5秒),
lastDist = analogRead(motionPin);
TimerA = millis();

while(millis() - TimerA <= 5000)
{
currentDist = analogRead(motionPin);

//当前距离是否偏离最后一个距离超过阈值?
//如果是,则将框移到右侧
if((currentDist> lastDist thresh || currentDist <lastDist - thresh)|| currentDist> 300)
{
//向左前进@半速(选择速度和延迟
//(根据您的盒子和电池电压延迟(300),以便移动投掷是可取的)
digitalWrite(motorDirection,LOW); //建立通道A的右方向
digitalWrite(motorBrake,LOW); //松开B通道的制动器
analogWrite(motorThrottle,100); //全速旋转通道B上的电机
延迟(300);
digitalWrite(motorBrake,HIGH); //为通道B调整制动器
打破;
}
lastDist = currentDist;
}

//设置计时器并读取传感器
//等待超过阈值的移动或者如果计时器到期(5秒),
延迟(1200); //打开门后等待稳定传感器读数
lastDist = analogRead(motionPin);
TimerB = millis();
while(millis() - TimerB <= 5000)
{
currentDist = analogRead(motionPin);
//框是否已经向右移动,当前距离偏离最后一个距离超过阈值?
//如果是,则移至左侧
if((currentDist> lastDist thresh || currentDist <lastDist - thresh)|| currentDist> 300)
{
//向后@半速向右(选择速度和延迟
//(根据您的盒子和电池电压延迟(300),以便移动投掷是可取的)
digitalWrite(motorDirection,HIGH); //建立通道B的LEFT方向
digitalWrite(motorBrake,LOW); //松开B通道的制动器
analogWrite(motorThrottle,100); //以半速将电机旋转到通道B上
延迟(300);
digitalWrite(motorBrake,HIGH); //为通道B调整制动器
打破;
}

lastDist = currentDist;

}
延迟(100);
//动手
for(pos = 0; pos <130; pos = 4)
{
handServo.write(POS);
延迟(15);
}

//隐藏手
for(pos = 130; pos> = 0; pos- = 4)
{
handServo.write(POS);
延迟(15);
}

//藏门
for(pos = 155; pos> = 80; pos- = 3)
{
doorServo.write(POS);
延迟(15);
}
}

3个人做了这个项目!

  • AndyC159成功了!

  • SamL84成功了!

  • melton1313成功了!

你做这个项目了吗?与我们分享!

建议

  • 螺丝分选机

  • PCB BOT(线路跟踪,障碍避免和单个PCB中的蓝牙控制机器人)

  • 物联网类

  • 彩虹比赛的颜色

  • 粉丝竞赛

  • 派对挑战

194讨论

0

你在试吗

4年前的介绍

谢谢你!我根据这个教练制作了我的第一个Arduino项目:一条无用的龙!

4回复 0

Ajann你在试吗

回复3年前

你的龙机很棒。 !艺术的

0

TJAOkevin你在试吗

回复3年前

真棒!!!!!

0

riachi你在试吗

回复4年前的介绍

你太棒了 :) !!!

龙的伟大个性!我希望你可以重做视频,同时龙直接面向相机(顶视图),我觉得这将是热闹的,所以看到舌头偷偷溜出来!

感谢您分享您的视频,并感到高兴我的帮助

0

你在试吗riachi

回复4年前的介绍

我在早期阶段尝试了顶视图,但它没有用(看到太多杂乱的内部)所以我在拍摄这个视频时就把它解雇了。我认为你是对的:在最后阶段它会看起来很棒!不幸的是,我已经把龙带走了……所以进入下一个项目!

0

br1pro

在4年前

好玩!努力修理伺服系统并设计手部。谢谢你这个教练!

1回复 0

riachibr1pro

回复4年前的介绍

伟大的工作人!真的很好:)任何视频?

0

clincoln

5年前

首先观看视频,然后大笑你

1回复 0

TobiasVclincoln

回复4年前的介绍

我知道我做到了! :d

0

rileyw

5年前

超级酷的视频使它看起来像是有自己的想法

0

Elitekilla117

5年前的介绍

我的无用的机器与arduino和riachis代码!由Dr.who制造的tardis。 :)
http://www.youtube.com/watch?v=aDs0T52o6-M

2回复 0

riachiElitekilla117

回复5年前的介绍

爱它!!!! :))真的做得很好的男人,很高兴看到你的炸弹箱活着!我也是戏剧化和音乐:如果我可能,我就不能阻止自己提出3个小修改:)?
- 将机器放在站立位置会很棒,我知道这会使重力失去帮助关闭门,但一个简单的解决方案就是在一侧将2个橡皮筋连接到门内侧,在另一端的盒子内侧,当门伺服关闭时,这将使门关闭…检查我的构建步骤,你将看到步骤6中的橡皮筋……
- 如何用黑色画手,它会更加偷偷摸摸和光滑
!此外,手尖可以涂成血红色或装饰着疯狂的脸或类似的东西。
- 删除最后一步,因为它没有任何反应(应该是移动框的那个)并写下你自己的动作……
然而,忘记建议,我爱你的机器!感谢非常感谢的人,请你减少它们并将视频集中在机器上:)
希望你的gf喜欢它!

0

Elitekilla117riachi

回复5年前的介绍

哈哈谢谢你的赞美:)我实际上想要做更多的事情,但由于时间紧迫我无法适应我想要的很多细节。我想为武器添加一些颜色,但没有时间。而且我想用一个尖锐的手臂画一个脸,但它已经被包裹起来,准备送给她过圣诞节。呵呵呵。我想她会喜欢它。我也确实希望它站起来,但担心橡皮筋会给伺服器带来太多的重量。门已经很重了。我保留的最后一步,因为它让你陷入悬念,等待它弹出。哈哈哈,但我感谢所有帮助我的朋友!绝对值得!

0

chuckletushy

5年前

我必须这样做……真棒

0

wrs715

5年前的介绍

这是我见过的第一个使用Arduino的项目,我想,“是的,这是值得的。现在我必须得到一个。”太棒了!

0

siliconghost

5年前的介绍

哇,很棒的共同项目!喜欢你的旋转让它更有趣!

0

bob3030

5年前

一个人无用的装置是另一个非常棒的装置,在这个世界之外,我们会想到,有趣,有许多无用的设备令人垂涎。感谢您对该项目的更新。谢谢发帖。

0

摇摆

5年前的介绍

思想1:使用Arduino就是荒谬的矫枉过正
思考2​​:观看视频后 - 使用Arduino就是纯粹的天才!
我鞠躬你的创造力!

0

stumitch

5年前的介绍

多数民众赞成认真!有点让我想起了Wall-E的个性。谢谢你这么棒的项目!

0

gazillabytes

5年前的介绍

真的没用!很好'。我很有灵感,需要为我的桌子建一个。谢谢。