驴友花雕 发表于 昨天 07:59

【Arduino 动手做】产生 15 种不同运动效果的无用盒子

本帖最后由 驴友花雕 于 2025-6-13 08:06 编辑

一台按下开关的无用机器。它会自行关闭,并产生 15 种不同的运动效果。

又一个没用的盒子。我在网上看到它,就决定自己做一个。做起来和玩起来都很有趣。

旧代码很容易找到,但有一些对我来说有用的小改进。非常感谢编写代码的人,他真的懂乐趣。这是我画的几张图。虽然构造完全可以自定义,但我还是把它们贴出来给感兴趣的人看,因为我找不到类似的入门资料。

电路图也根据我的喜好做了一些调整。我选择使用 USB 电源(手机充电器或移动电源),而不是电池,而是通过一个二极管连接到 5V 引脚。这样可以防止在将开发板插入计算机 USB 进行编程时伺服电机通电,因为电流消耗过高。

电气图
电路图根据我的喜好做了一些调整。我选择使用 USB 电源(手机充电器或移动电源),而不是电池,而是通过一个二极管连接到 5V 引脚。这样可以防止在将开发板插入计算机 USB 进行编程时伺服电机通电,因为电流消耗过高。

也适用于 UNO,无需任何改动。
上传时只需在 Arduino 编辑器中选择合适的开发板即可。
旧代码很容易找到,但有一些对我来说有用的小改进。非常感谢编写代码的人,他真的很有趣。

在 YouTube 上发表评论或给我发送电子邮件(YO3RAK at gmail.com )以获取更多信息,因为该平台不会通知我新的评论。











驴友花雕 发表于 昨天 08:02

【Arduino 动手做】它会自行关闭并产生 15 种不同的运动...

项目代码

#include <Servo.h>

Servo handServo;
Servo boxServo;

int switchStatus=0, action=1, vot, randNumber=0;
const int ledPin = 13;
const int frontSwitchPin = 2;
const int handServoPin = 5;
const int boxServoPin = 6;


void setup()
{
Serial.begin(9600);

pinMode(ledPin, OUTPUT);

handServo.attach(handServoPin);
boxServo.attach(boxServoPin);
handServo.write(180);
boxServo.write(70);

//randomSeed(analogRead(0));
}


void loop()
{
switchStatus = digitalRead(frontSwitchPin);
//action = random(1,16);

if (switchStatus == LOW){
   
    if (action == 1)
    {
      Serial.println("Action 1");
      for (int i = 70; i <= 110; i++)
      {
      boxServo.write(i);
      delay(20);
      }
      for (int i = 180; i >= 35; i--)
      {
      handServo.write(i);
      delay(20);
      }
      delay(1000);
      handServo.write(26);
      delay(200);
      for (int i = 26; i <=180; i++)
      {
      handServo.write(i);
      delay(20);
      }
      for (int i = 110; i >= 70; i--)
      {
      boxServo.write(i);
      delay(20);
      }
      action++;
    }
   
   
    else if (action == 2)
    {
      Serial.println("Action 2");
      for (int i = 70; i <= 110; i++){
      boxServo.write(i);
      delay(6);
      }
      delay(550);
      handServo.write(26);
      delay(1000);
      handServo.write(180);
      delay(550);
      boxServo.write(70);
      delay(1500);
      for (int i = 70; i <= 110; i++){
      boxServo.write(i);
      delay(6);
      }
      delay(3000);
      boxServo.write(70);
      action++;
    }
   
    else if (action == 3)
    {
      Serial.println("Action 3");
      for (int i = 70; i <= 110; i++){
      boxServo.write(i);
      delay(6);
      }
      delay(1000);
      boxServo.write(70);
      delay(2000);
      for (int i = 70; i <= 110; i++){
      boxServo.write(i);
      delay(6);
      }
      handServo.write(26);
      delay(650);
      handServo.write(180);
      delay(500);
      boxServo.write(70);
      action++;
    }
   
    else if (action == 4)
    {
      Serial.println("Action 4");
      for (int i = 70; i <= 110; i++)
      {
      boxServo.write(i);
      delay(20);
      }
      for (int i = 180; i >= 35; i--)
      {
      handServo.write(i);
      delay(20);
      }
      delay(2000);
      handServo.write(26);
      delay(200);
      handServo.write(180);
      delay(400);
      boxServo.write(70);
      action++;
    }
   
    else if (action == 5)
    {
      Serial.println("Action 5");
      for (int i = 70; i <= 110; i++){
      boxServo.write(i);
      delay(6);
      }
      delay(2000);
      handServo.write(65);
      delay(550);
      handServo.write(40);
      delay(200);
      handServo.write(65);
      delay(200);
      handServo.write(40);
      delay(200);
      handServo.write(65);
      delay(200);
      handServo.write(40);
      delay(200);
      handServo.write(65);
      delay(200);
      handServo.write(40);
      delay(200);
      handServo.write(65);
      delay(200);
      handServo.write(40);
      delay(200);
      handServo.write(65);
      delay(2000);
      handServo.write(26);
      delay(400);
      handServo.write(180);
      delay(400);
      boxServo.write(70);
      action++;
    }
   
    else if (action == 6)            
    {
      Serial.println("Action 6");
      for (int i = 70; i <110; i++)
      {
      boxServo.write(i);
      delay(20);
      }
      delay(1000);
      for (int i = 0; i < 12; i++)
      {
      for (int j = 70; j <= 110; j++){
          boxServo.write(j);
          delay(6);
      }
      delay(200);
      }
      for (int i = 180; i >= 35; i--)
      {
      handServo.write(i);
      delay(30);
      }
      handServo.write(26);
      delay(400);
      handServo.write(180);
      delay(400);
      boxServo.write(70);
      delay(1500);
      for (int i = 70; i <= 110; i++){
      boxServo.write(i);
      delay(6);
      }
      delay(3000);
      boxServo.write(70);
      action++;
    }
   
    else if (action == 7)
    {
      Serial.println("Action 7");
      for (int i = 70; i <= 110; i++){
      boxServo.write(i);
      delay(6);
      }
      delay(400);
      handServo.write(26);
      delay(1000);
      for (int i = 0; i < 6; i++)
      {
      for (int j = 70; j <= 110; j++){
          boxServo.write(j);
          delay(6);
      }
      delay(200);
      }
      delay(500);
      handServo.write(180);
      delay(400);
      boxServo.write(70);
      action++;
    }
   
    else if (action == 8)
    {
      Serial.println("Action 8");
      for (int i = 70; i <= 110; i++){
      boxServo.write(i);
      delay(6);
      }
      handServo.write(26);
      delay(2000);
      for (int i = 0; i < 7; i++)
      {
      handServo.write(75);
      delay(100);
      handServo.write(40);
      delay(100);
      }
      delay(500);
      handServo.write(180);
      delay(1000);
      boxServo.write(70);
      action++;
    }
   
    else if (action == 9)
    {
      Serial.println("Action 9");
      for (int i = 70; i <= 105; i++){
      boxServo.write(i);
      delay(6);
      }
      delay(2000);
      boxServo.write(110);
      for (int i = 180; i >=35; i--)
      {
      handServo.write(i);
      delay(40);
      }
      delay(500);
      handServo.write(26);
      delay(200);
      for (int i = 26; i <=180; i++)
      {
      handServo.write(i);
      delay(40);
      }
      boxServo.write(70);
      delay(2000);
      boxServo.write(100);
      delay(3000);
      boxServo.write(70);
      action++;
    }

   
    else if (action == 10)
    {
      Serial.println("Action 10");
      for (int i = 70; i <= 105; i++)
      {
      boxServo.write(i);
      delay(100);
      }
      delay(1000);
      for (int i = 0; i < 10; i++)
      {
      for (int j = 70; j <= 100; j++){
          boxServo.write(j);
          delay(6);
      }
      delay(100);
      }
      boxServo.write(110);
      delay(100);
      handServo.write(26);
      delay(650);
      handServo.write(180);
      delay(400);
      boxServo.write(70);
      action++;
    }
   
    else if (action == 11)
    {
      Serial.println("Action 11");
      for (int i = 70; i <= 110; i++){
      boxServo.write(i);
      delay(6);
      }
      handServo.write(26);
      delay(2000);
      for (int i = 0; i < 3; i++)
      {
      handServo.write(65);
      delay(200);
      handServo.write(40);
      delay(200);
      }
      delay(1500);
      handServo.write(180);
      delay(400);
      boxServo.write(70);
      delay(1500);
      for (int i = 70; i <= 110; i++){
      boxServo.write(i);
      delay(6);
      }
      handServo.write(26);
      delay(3000);
      handServo.write(180);
      delay(400);
      boxServo.write(70);
      action++;
    }
   
    else if (action == 12)
    {
      Serial.println("Action 12");
      for (int i = 70; i <= 110; i++)
      {
      boxServo.write(i);
      delay(50);
      }
      delay(1000);
      for (int i = 180; i >= 26; i--)
      {
      handServo.write(i);
      delay(50);
      }
      delay(2000);
      handServo.write(26);
      delay(200);
      handServo.write(180);
      delay(400);
      boxServo.write(70);
      action++;
    }
   
    else if (action == 13)
    {
      Serial.println("Action 13");
      for (int i = 70; i <= 110; i++){
      boxServo.write(i);
      delay(6);
      }
      delay(2000);
      for (int i = 180; i >= 60; i--)
      {
      handServo.write(i);
      delay(40);
      }
      for (int i = 0; i < 3; i++)
      {
      handServo.write(60);
      delay(200);
      handServo.write(40);
      delay(800);
      }
      handServo.write(26);
      delay(2000);
      handServo.write(180);
      delay(500);
      boxServo.write(70);
      action++;
    }
   
    else if (action == 14)
    {
      Serial.println("Action 14");
      for (int i = 70; i <= 105; i++){
      boxServo.write(i);
      delay(6);
      }
      delay(4000);
      boxServo.write(110);
      handServo.write(26);
      delay(650);
      handServo.write(180);
      delay(500);
      boxServo.write(100);
      delay(4000);
      boxServo.write(70);
      action++;
    }
   
    else if (action == 15)
    {
      Serial.println("Action 15");
      for (int i = 70; i <= 105; i++){
      boxServo.write(i);
      delay(6);
      }
      delay(1000);
      for (int i = 0; i < 3; i++)
      {      
      for (int j = 70; j <= 105; j++){
          boxServo.write(j);
          delay(50);
      }
      for (int j = 105; j >= 70; j--)
      {
          boxServo.write(j);
          delay(50);
      }
      }
      for (int j = 70; j <= 110; j++){
      boxServo.write(j);
      delay(50);
      }
      for (int i = 180; i >= 35; i--)
      {
      handServo.write(i);
      delay(40);
      }
      delay(1000);
      handServo.write(26);
      delay(400);
      handServo.write(180);
      delay(400);
      boxServo.write(70);
      action = 1;
    }
   
}

}

驴友花雕 发表于 昨天 08:06

【Arduino 动手做】它会自行关闭并产生 15 种不同运动效...

附录
【Arduino 动手做】它会自行关闭并产生 15 种不同运动效果的无用盒子
项目链接:https://www.hackster.io/viorelracoviteanu/useless-box-with-arduino-d67b47
项目作者:维奥雷尔拉科维泰亚努

项目视频 :https://www.youtube.com/watch?v=QCohS-ENN_Q
项目代码:https://www.hackster.io/code_files/463257/download



页: [1]
查看完整版本: 【Arduino 动手做】产生 15 种不同运动效果的无用盒子