18浏览
查看: 18|回复: 2

[项目] 【Arduino 动手做】Arduino 无用且无聊的盒子2

[复制链接]
盒子里有啥???

它在做什么吗???

这会伤害我吗???

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

说真的,这个项目其实就是一个装着 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

驴友花雕  中级技神
 楼主|

发表于 5 小时前

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

项目代码

  1. #include <Servo.h>
  2. Servo doorServo;
  3. Servo fingerServo;
  4. int swPin = 2;               //switch on pin 2
  5. int pos = 0;
  6. int selectedMove = 0;             //move selector
  7. void setup()
  8. {
  9.   pinMode(swPin, INPUT);
  10.   doorServo.attach(9);           //set door servo on Pin 9 pwm
  11.   fingerServo.attach(10);          //set finger servo on Pin 10 pwm
  12.   doorServo.write(80);           //set door to hiding position
  13.   fingerServo.write(0);            //set finger to hiding position
  14. }
  15. void loop(){
  16.   //if the switch is on, move door and finger to switch it off
  17.   if(digitalRead(swPin) == HIGH)
  18.   {
  19.    
  20.     if (selectedMove > 9) {
  21.     selectedMove = 0;
  22.     } //when all moves are played, repeat the moves from beginning
  23.    
  24.     if (selectedMove == 0) {
  25.     simpleClose();
  26.     }
  27.     else if (selectedMove == 1) {
  28.     simpleClose();
  29.     }   
  30.     else if (selectedMove == 2) {
  31.     simpleClose2();
  32.     }
  33.     else if (selectedMove == 3) {
  34.     crazydoor();
  35.     }
  36.     else if (selectedMove == 4) {
  37.     slow();
  38.     }
  39.     else if (selectedMove == 5) {
  40.     serious();
  41.     }
  42.     else if (selectedMove == 6) {
  43.     trollClose();
  44.     }
  45.     else if (selectedMove == 7) {
  46.     simpleClose();
  47.     }
  48.     else if (selectedMove == 8) {
  49.     matrix();
  50.     }
  51.     else if (selectedMove == 9) {
  52.     sneak();
  53.     }
  54.      
  55.    selectedMove += 1;         //swith to next move
  56.    
  57.   }
  58. }
  59. // Moves
  60.    // basic move
  61.    void simpleClose()
  62.    {   
  63.    //Moving door
  64.     for(pos = 80; pos < 155; pos += 3)   
  65.     {                                   
  66.     doorServo.write(pos);              
  67.     delay(15);                       
  68.     }
  69.    
  70.     //Moving hand
  71.     for(pos = 0; pos < 129; pos += 4)  
  72.     {                                   
  73.     fingerServo.write(pos);               
  74.     delay(15);                       
  75.     }  
  76.    
  77.     //hiding hand
  78.     for(pos = 129; pos>=0; pos-=4)      
  79.     {                                
  80.     fingerServo.write(pos);               
  81.     delay(15);                        
  82.     }
  83.       
  84.     //hiding door
  85.     for(pos = 155; pos>=80; pos-=3)     
  86.     {                                
  87.     doorServo.write(pos);              
  88.     delay(15);                     
  89.     }
  90.    }
  91.      
  92.    // open and wait, then move finger and wait, then switch of and hide  
  93.     void simpleClose2()
  94.    {
  95.   //Moving door
  96.     for(pos = 80; pos < 155; pos += 3)   
  97.     {                                   
  98.     doorServo.write(pos);              
  99.     delay(15);                       
  100.     }
  101.     delay(800);
  102.     //Moving hand
  103.     for(pos = 0; pos < 100; pos += 4)  
  104.     {                                   
  105.     fingerServo.write(pos);               
  106.     delay(15);                       
  107.     }
  108.     delay(1000);
  109.     for(pos = 100; pos < 129; pos += 4)  
  110.     {                                   
  111.     fingerServo.write(pos);               
  112.     delay(15);                       
  113.     }   
  114.    
  115.     //hiding hand
  116.     for(pos = 129; pos>=0; pos-=5)      
  117.     {                                
  118.     fingerServo.write(pos);               
  119.     delay(15);                        
  120.     }
  121.       
  122.     //hiding door
  123.     for(pos = 155; pos>=80; pos-=3)     
  124.     {                                
  125.     doorServo.write(pos);              
  126.     delay(15);                    
  127.      
  128.      
  129.    }
  130.      
  131.    }
  132.   
  133.    //open door then close it many times, wait, then quickly reopen, switch off and hide.
  134.   
  135.    void crazydoor()
  136.   {
  137.    
  138.    //Moving door
  139.     for(pos = 80; pos < 125; pos += 3)   
  140.     {                                   
  141.     doorServo.write(pos);              
  142.     delay(15);                       
  143.     }
  144.   
  145.     //hiding door
  146.     for(pos = 125; pos>=80; pos-=5)     
  147.     {                                
  148.     doorServo.write(pos);              
  149.     delay(15);                     
  150.     }
  151.    //Moving door
  152.     for(pos = 80; pos < 110; pos += 3)   
  153.     {                                   
  154.     doorServo.write(pos);              
  155.     delay(15);                       
  156.     }
  157.   
  158.     //hiding door
  159.     for(pos = 110; pos>=80; pos-=15)     
  160.     {                                
  161.     doorServo.write(pos);              
  162.     delay(15);                     
  163.     }
  164.     delay(700);
  165.    //Moving door
  166.     for(pos = 80; pos < 125; pos += 3)   
  167.     {                                   
  168.     doorServo.write(pos);              
  169.     delay(15);                       
  170.     }
  171.     delay(700);
  172.     //hiding door
  173.     for(pos = 125; pos>=80; pos-=5)     
  174.     {                                
  175.     doorServo.write(pos);              
  176.     delay(15);                     
  177.     }
  178.   //Moving door
  179.     for(pos = 80; pos < 155; pos += 8)   
  180.     {                                   
  181.     doorServo.write(pos);              
  182.     delay(15);                       
  183.     }
  184.    
  185.     //Moving hand
  186.     for(pos = 0; pos < 129; pos += 3)  
  187.     {                                   
  188.     fingerServo.write(pos);               
  189.     delay(15);                       
  190.     }  
  191.    
  192.     //hiding hand
  193.     for(pos = 129; pos>=0; pos-=3)      
  194.     {                                
  195.     fingerServo.write(pos);               
  196.     delay(15);                        
  197.     }
  198.       
  199.     //hiding door
  200.     for(pos = 155; pos>=80; pos-=15)     
  201.     {                                
  202.     doorServo.write(pos);              
  203.     delay(15);                     
  204.     }   
  205.    
  206.   }   
  207. //open door,move finger very slowly forward and back to hiding very slowly, then quickly close door
  208. void slow()
  209. {
  210. //Moving door
  211.     for(pos = 80; pos < 155; pos += 1)   
  212.     {                                   
  213.     doorServo.write(pos);              
  214.     delay(30);                       
  215.     }
  216.    
  217.     //Moving hand
  218.     for(pos = 0; pos < 129; pos += 1)  
  219.     {                                   
  220.     fingerServo.write(pos);               
  221.     delay(30);                       
  222.     }  
  223.    
  224.     //hiding hand
  225.     for(pos = 129; pos>=0; pos-=1)      
  226.     {                                
  227.     fingerServo.write(pos);               
  228.     delay(30);                        
  229.     }
  230.       
  231.     //hiding door
  232.     for(pos = 155; pos>=125; pos-=1)     
  233.     {                                
  234.     doorServo.write(pos);              
  235.     delay(30);                     
  236.     }
  237.     delay(100);
  238.     for(pos = 125; pos>=80; pos-=4)     
  239.     {                                
  240.     doorServo.write(pos);              
  241.     delay(15);                     
  242.     }     
  243.    
  244. }
  245. //serious
  246. void serious() {
  247. //Moving door
  248.     for(pos = 80; pos < 155; pos += 3)   
  249.     {                                   
  250.     doorServo.write(pos);              
  251.     delay(15);                       
  252.     }
  253.      
  254.     //Moving hand
  255.     for(pos = 0; pos < 70; pos += 1)  
  256.     {                                   
  257.     fingerServo.write(pos);               
  258.     delay(15);                       
  259.     }
  260.     delay(800);
  261.    
  262.    
  263.     //hiding door
  264.     for(pos = 155; pos>=130; pos-=3)     
  265.     {                                
  266.     doorServo.write(pos);              
  267.     delay(15);
  268.     }
  269.    
  270.     //hiding door
  271.     for(pos = 130; pos < 155; pos+=3)     
  272.     {                                
  273.     doorServo.write(pos);              
  274.     delay(15);
  275.     }
  276.      //hiding door
  277.     for(pos = 155; pos>=130; pos-=3)     
  278.     {                                
  279.     doorServo.write(pos);              
  280.     delay(15);
  281.     }   
  282.     //hiding door
  283.     for(pos = 130; pos < 155; pos+=3)     
  284.     {                                
  285.     doorServo.write(pos);              
  286.     delay(15);
  287.     }
  288.      
  289.     fingerServo.write(40);
  290.     delay(1000);
  291.       
  292.     //Moving hand
  293.     for(pos = 40; pos < 129; pos += 4)  
  294.     {                                   
  295.     fingerServo.write(pos);               
  296.     delay(15);                       
  297.     }
  298.    
  299.     //hiding hand
  300.     for(pos = 129; pos>=0; pos-=4)      
  301.     {                                
  302.     fingerServo.write(pos);               
  303.     delay(15);                        
  304.     }
  305.    
  306.       
  307.     for(pos = 120; pos>=80; pos -= 1)   
  308.     {                                   
  309.     doorServo.write(pos);              
  310.     delay(15);                       
  311.     }
  312.    
  313.    
  314.      
  315. }
  316. void trollClose(){
  317. //Moving door
  318.     for(pos = 80; pos < 155; pos += 3)   
  319.     {                                   
  320.     doorServo.write(pos);              
  321.     delay(15);                       
  322.     }
  323.    
  324.     //Moving hand
  325.     for(pos = 0; pos < 127; pos += 4)  
  326.     {                                   
  327.     fingerServo.write(pos);               
  328.     delay(15);                       
  329.     }
  330.     //hiding door
  331.     for(pos = 155; pos>=130; pos-=3)     
  332.     {                                
  333.     doorServo.write(pos);              
  334.     delay(15);                     
  335.     }   
  336.     delay(2000);
  337.    
  338.     for(pos = 130; pos < 155; pos += 3)   
  339.     {                                   
  340.     doorServo.write(pos);              
  341.     delay(15);                       
  342.     }
  343.    
  344.     for(pos = 155; pos>=140; pos-=3)     
  345.     {                                
  346.     doorServo.write(pos);              
  347.     delay(15);
  348.     }
  349.     for(pos = 140; pos < 155; pos += 3)   
  350.     {                                   
  351.     doorServo.write(pos);              
  352.     delay(15);                       
  353.     }
  354.     delay(500);
  355.     //hiding hand
  356.     for(pos = 127; pos>=0; pos-=4)      
  357.     {                                
  358.     fingerServo.write(pos);               
  359.     delay(15);                        
  360.     }
  361.       
  362.     //hiding door
  363.     for(pos = 155; pos>=80; pos-=3)     
  364.     {                                
  365.     doorServo.write(pos);              
  366.     delay(15);                     
  367.     }
  368. }
  369.    
  370. void matrix()
  371. {
  372. //Moving door
  373.     for(pos = 80; pos < 155; pos += 3)   
  374.     {                                   
  375.     doorServo.write(pos);              
  376.     delay(15);                       
  377.     }
  378.    
  379.     //Moving hand
  380.     for(pos = 0; pos < 80; pos += 4)  
  381.     {                                   
  382.     fingerServo.write(pos);               
  383.     delay(15);                       
  384.     }
  385.    
  386.     for(pos = 80; pos < 129; pos += 1)  
  387.     {                                   
  388.     fingerServo.write(pos);               
  389.     delay(30);                       
  390.     }  
  391.     delay(300);
  392.    
  393.     for(pos = 129; pos>=0; pos-=4)      
  394.     {                                
  395.     fingerServo.write(pos);               
  396.     delay(10);                        
  397.     }
  398.       
  399.     //hiding door
  400.     for(pos = 155; pos>=80; pos-=3)     
  401.     {                                
  402.     doorServo.write(pos);              
  403.     delay(15);                     
  404.     }
  405.   
  406. }
  407. void sneak()
  408.    {   
  409.    //Moving door
  410.     for(pos = 80; pos < 130; pos += 1)   
  411.     {                                   
  412.     doorServo.write(pos);              
  413.     delay(30);                       
  414.     }
  415.     delay(2000);
  416.    
  417.     //Moving hand
  418.     for(pos = 0; pos < 40; pos += 1)  
  419.     {                                   
  420.     fingerServo.write(pos);               
  421.     delay(30);                       
  422.     }  
  423.         
  424.     delay(500);
  425.    
  426.     for(pos = 130; pos < 155; pos += 4)   
  427.     {                                   
  428.     doorServo.write(pos);              
  429.     delay(15);                       
  430.     }
  431.     delay(100);
  432.    
  433.     for(pos = 40; pos < 90; pos += 4)  
  434.     {                                   
  435.     fingerServo.write(pos);               
  436.     delay(15);                       
  437.     }  
  438.     delay(500);
  439.     //hiding hand
  440.     for(pos = 90; pos>=70; pos-=4)      
  441.     {                                
  442.     fingerServo.write(pos);               
  443.     delay(15);                        
  444.     }
  445.     delay(100);
  446.     for(pos = 70; pos < 90; pos += 4)  
  447.     {                                   
  448.     fingerServo.write(pos);               
  449.     delay(15);                       
  450.     }
  451.     delay(100);
  452.     for(pos = 90; pos>=70; pos-=4)      
  453.     {                                
  454.     fingerServo.write(pos);               
  455.     delay(15);                        
  456.     }
  457.     delay(100);
  458.       
  459.     for(pos = 70; pos < 129; pos += 4)  
  460.     {                                   
  461.     fingerServo.write(pos);               
  462.     delay(15);                       
  463.     }
  464.    
  465.     for(pos = 129; pos>=0; pos-=4)      
  466.     {                                
  467.     fingerServo.write(pos);               
  468.     delay(15);                        
  469.     }   
  470.     //hiding door
  471.     for(pos = 155; pos>=80; pos-=3)     
  472.     {                                
  473.     doorServo.write(pos);              
  474.     delay(15);                     
  475.     }
  476.    }
复制代码


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 5 小时前

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

【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-chant ... ster/UselessBox.ino

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

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4 备案 沪公网安备31011502402448

© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail