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

[项目] 【Arduino 动手做】基于 Arduino 的 28BYJ-48 升降机械臂

[复制链接]
Just Another Marble Robot (JAMR) 是一款非常简单的基于 Arduino 的 3 轴机器人,您可以将其构建为学校项目或与孩子一起构建的有趣项目。这个机器人会让你的大理石轨道更加有趣。
尽管体积小,但它具有大型机器人的所有步进功能,包括高精度。具有斜坡上升和下降功能,它的运动比伺服控制的机器人要平稳得多。

该机器人基于廉价的 28BYJ-48 12V 步进电机,带有 ULN2003 驱动器,您可以以每套 4 欧元/美元左右的价格购买。结合 Arduino Uno,该项目的总成本约为 32 欧元/美元,-.
在此页面上,您将找到开始构建机器人所需的所有信息。

该机器人所需的零件是:
• 6 x 28BYJ-48 12V 步进电机
• 6 x ULN2003 驱动程序
• 1 个 Arduino Uno
• 1 x 10k 电阻器
• 1 x BC547 晶体管
• 1 x 线圈,来自 12V 继电器
• 一些 M4 螺纹尼龙棒
• 一些 M4 尼龙螺母和粗体
• 电子元件外壳
• 一些 0,14mm2/26AWG 电线

【Arduino 动手做】基于 Arduino 的 28BYJ-48 升降机械臂图3

【Arduino 动手做】基于 Arduino 的 28BYJ-48 升降机械臂图5

【Arduino 动手做】基于 Arduino 的 28BYJ-48 升降机械臂图1

【Arduino 动手做】基于 Arduino 的 28BYJ-48 升降机械臂图2

【Arduino 动手做】基于 Arduino 的 28BYJ-48 升降机械臂图4

【Arduino 动手做】基于 Arduino 的 28BYJ-48 升降机械臂图6

【Arduino 动手做】基于 Arduino 的 28BYJ-48 升降机械臂图7

【Arduino 动手做】基于 Arduino 的 28BYJ-48 升降机械臂图8



驴友花雕  中级技神
 楼主|

发表于 5 小时前

【Arduino 动手做】基于 Arduino 的 28BYJ-48 升降机械臂

项目代码

  1. int speedSetting;
  2. int stepCounter;
  3. int calibrationSpeed = 5;
  4. int bottomArmPosition, middleArmPosition, topArmPosition;
  5. byte incommingByte;
  6. void setup() {
  7.   Serial.begin(57600);
  8.   //Magnet
  9.   pinMode (A0, OUTPUT); //Magnet coil
  10.   //Bottom arm
  11.   pinMode(2, OUTPUT); //IN1
  12.   pinMode(3, OUTPUT); //IN2
  13.   pinMode(4, OUTPUT); //IN3
  14.   pinMode(5, OUTPUT); //IN4
  15.   //Middle arm
  16.   pinMode(6, OUTPUT); //IN1
  17.   pinMode(7, OUTPUT); //IN2
  18.   pinMode(8, OUTPUT); //IN3
  19.   pinMode(9, OUTPUT); //IN4
  20.   //Top arm
  21.   pinMode(10, OUTPUT); //IN4
  22.   pinMode(11, OUTPUT); //IN3
  23.   pinMode(12, OUTPUT); //IN2
  24.   pinMode(13, OUTPUT); //IN1
  25.   digitalWrite(2, HIGH);
  26.   digitalWrite(6, HIGH);
  27.   digitalWrite(10, HIGH);
  28.   digitalWrite(A0, LOW);
  29.   delay(5000);
  30.   calibrateArms();
  31.   bottomArmMove(120);
  32.   middleArmMove(-290);
  33.   topArmMove(170);
  34.   bottomArmMove(-46);
  35. }
  36. void loop() {
  37.   Serial.print("B=");
  38.   Serial.print(bottomArmPosition);
  39.   Serial.print(" M=");
  40.   Serial.print(middleArmPosition);
  41.   Serial.print(" T=");
  42.   Serial.print(topArmPosition);
  43.   Serial.print(" C=");
  44.   Serial.println(digitalRead(A0));
  45.   digitalWrite(A0, HIGH);
  46.   delay(500);
  47.   bottomArmMove(79);
  48.   middleArmMove(70);
  49.   bottomArmMove(-45);
  50.   digitalWrite(A0, LOW);
  51.   topArmMove(120);
  52.   middleArmMove(-70);
  53.   topArmMove(-120);
  54.   bottomArmMove(-34);
  55.   if (Serial.available()) {
  56.     incommingByte = Serial.read();
  57.     if (incommingByte == '7')bottomArmMove(10);
  58.     if (incommingByte == '1')bottomArmMove(-10);
  59.     if (incommingByte == '8')middleArmMove(10);
  60.     if (incommingByte == '2')middleArmMove(-10);
  61.     if (incommingByte == '9')topArmMove(10);
  62.     if (incommingByte == '3')topArmMove(-10);
  63.     if (incommingByte == '4')digitalWrite(A0, HIGH);
  64.     if (incommingByte == '6')digitalWrite(A0, LOW);
  65.     Serial.print("B=");
  66.     Serial.print(bottomArmPosition);
  67.     Serial.print(" M=");
  68.     Serial.print(middleArmPosition);
  69.     Serial.print(" T=");
  70.     Serial.print(topArmPosition);
  71.     Serial.print(" C=");
  72.     Serial.println(digitalRead(A0));
  73.     delay(100);
  74.     while (Serial.available())incommingByte = Serial.read();
  75.   }
  76. }
  77. void topArmMove(int steps) {
  78.   topArmPosition += steps;
  79.   speedSetting = 20;
  80.   if (steps == 0)return;
  81.   digitalWrite(10, HIGH);
  82.   if (steps > 0) {
  83.     for (stepCounter = 0 ; stepCounter < steps; stepCounter ++) {
  84.       digitalWrite(10, LOW);
  85.       digitalWrite(11, HIGH);
  86.       delay(speedSetting);
  87.       digitalWrite(11, LOW);
  88.       digitalWrite(12, HIGH);
  89.       delay(speedSetting);
  90.       digitalWrite(12, LOW);
  91.       digitalWrite(13, HIGH);
  92.       delay(speedSetting);
  93.       digitalWrite(13, LOW);
  94.       digitalWrite(10, HIGH);
  95.       delay(speedSetting);
  96.       if (stepCounter > steps - 20 && speedSetting < 20)speedSetting += 2;
  97.       if (speedSetting > 4)speedSetting --;
  98.     }
  99.   }
  100.   else {
  101.     steps *= -1;
  102.     for (stepCounter = 0 ; stepCounter < steps; stepCounter ++) {
  103.       digitalWrite(10, LOW);
  104.       digitalWrite(13, HIGH);
  105.       delay(speedSetting);
  106.       digitalWrite(13, LOW);
  107.       digitalWrite(12, HIGH);
  108.       delay(speedSetting);
  109.       digitalWrite(12, LOW);
  110.       digitalWrite(11, HIGH);
  111.       delay(speedSetting);
  112.       digitalWrite(11, LOW);
  113.       digitalWrite(10, HIGH);
  114.       delay(speedSetting);
  115.       if (stepCounter > steps - 20 && speedSetting < 20)speedSetting += 2;
  116.       if (speedSetting > 4)speedSetting --;
  117.     }
  118.   }
  119.   digitalWrite(11, LOW);
  120.   digitalWrite(12, LOW);
  121.   digitalWrite(13, LOW);
  122. }
  123. void middleArmMove(int steps) {
  124.   middleArmPosition += steps;
  125.   speedSetting = 20;
  126.   if (steps == 0)return;
  127.   digitalWrite(3, HIGH);
  128.   if (steps > 0) {
  129.     for (stepCounter = 0 ; stepCounter < steps; stepCounter ++) {
  130.       digitalWrite(3, LOW);
  131.       digitalWrite(5, HIGH);
  132.       delay(speedSetting);
  133.       digitalWrite(2, LOW);
  134.       digitalWrite(4, HIGH);
  135.       delay(speedSetting);
  136.       digitalWrite(5, LOW);
  137.       digitalWrite(3, HIGH);
  138.       delay(speedSetting);
  139.       digitalWrite(4, LOW);
  140.       digitalWrite(2, HIGH);
  141.       delay(speedSetting);
  142.       if (stepCounter > steps - 20 && speedSetting < 20)speedSetting += 2;
  143.       if (speedSetting > 4)speedSetting --;
  144.     }
  145.   }
  146.   else {
  147.     steps *= -1;
  148.     for (stepCounter = 0 ; stepCounter < steps; stepCounter ++) {
  149.       digitalWrite(2, LOW);
  150.       digitalWrite(4, HIGH);
  151.       delay(speedSetting);
  152.       digitalWrite(3, LOW);
  153.       digitalWrite(5, HIGH);
  154.       delay(speedSetting);
  155.       digitalWrite(4, LOW);
  156.       digitalWrite(2, HIGH);
  157.       delay(speedSetting);
  158.       digitalWrite(5, LOW);
  159.       digitalWrite(3, HIGH);
  160.       delay(speedSetting);
  161.       if (stepCounter > steps - 20 && speedSetting < 20)speedSetting += 2;
  162.       if (speedSetting > 4)speedSetting --;
  163.     }
  164.   }
  165.   digitalWrite(3, LOW);
  166.   digitalWrite(4, LOW);
  167.   digitalWrite(5, LOW);
  168. }
  169. void bottomArmMove(int steps) {
  170.   bottomArmPosition += steps;
  171.   speedSetting = 20;
  172.   if (steps == 0)return;
  173.   digitalWrite(7, HIGH);
  174.   if (steps > 0) {
  175.     for (stepCounter = 0 ; stepCounter < steps; stepCounter ++) {
  176.       digitalWrite(7, LOW);
  177.       digitalWrite(9, HIGH);
  178.       delay(speedSetting);
  179.       digitalWrite(6, LOW);
  180.       digitalWrite(8, HIGH);
  181.       delay(speedSetting);
  182.       digitalWrite(9, LOW);
  183.       digitalWrite(7, HIGH);
  184.       delay(speedSetting);
  185.       digitalWrite(8, LOW);
  186.       digitalWrite(6, HIGH);
  187.       delay(speedSetting);
  188.       if (stepCounter > steps - 20 && speedSetting < 20)speedSetting += 2;
  189.       if (speedSetting > 4)speedSetting --;
  190.     }
  191.   }
  192.   else {
  193.     steps *= -1;
  194.     for (stepCounter = 0 ; stepCounter < steps; stepCounter ++) {
  195.       digitalWrite(6, LOW);
  196.       digitalWrite(8, HIGH);
  197.       delay(speedSetting);
  198.       digitalWrite(7, LOW);
  199.       digitalWrite(9, HIGH);
  200.       delay(speedSetting);
  201.       digitalWrite(8, LOW);
  202.       digitalWrite(6, HIGH);
  203.       delay(speedSetting);
  204.       digitalWrite(9, LOW);
  205.       digitalWrite(7, HIGH);
  206.       delay(speedSetting);
  207.       if (stepCounter > steps - 20 && speedSetting < 20)speedSetting += 2;
  208.       if (speedSetting > 4)speedSetting --;
  209.     }
  210.   }
  211.   digitalWrite(7, LOW);
  212.   digitalWrite(8, LOW);
  213.   digitalWrite(9, LOW);
  214. }
  215. void calibrateArms(void) {
  216.   //Set top arm position
  217.   for (stepCounter = 0 ; stepCounter < 300; stepCounter ++) {
  218.     digitalWrite(10, LOW);
  219.     digitalWrite(13, HIGH);
  220.     delay(calibrationSpeed);
  221.     digitalWrite(13, LOW);
  222.     digitalWrite(12, HIGH);
  223.     delay(calibrationSpeed);
  224.     digitalWrite(12, LOW);
  225.     digitalWrite(11, HIGH);
  226.     delay(calibrationSpeed);
  227.     digitalWrite(11, LOW);
  228.     digitalWrite(10, HIGH);
  229.     delay(calibrationSpeed);
  230.   }
  231.   //Set middle arm position
  232.   for (stepCounter = 0 ; stepCounter < 300; stepCounter ++) {
  233.     digitalWrite(2, LOW);
  234.     digitalWrite(5, HIGH);
  235.     delay(calibrationSpeed);
  236.     digitalWrite(5, LOW);
  237.     digitalWrite(4, HIGH);
  238.     delay(calibrationSpeed);
  239.     digitalWrite(4, LOW);
  240.     digitalWrite(3, HIGH);
  241.     delay(calibrationSpeed);
  242.     digitalWrite(3, LOW);
  243.     digitalWrite(2, HIGH);
  244.     delay(calibrationSpeed);
  245.   }
  246.   //Set bottom arm position
  247.   for (stepCounter = 0 ; stepCounter < 300; stepCounter ++) {
  248.     digitalWrite(6, LOW);
  249.     digitalWrite(7, HIGH);
  250.     delay(calibrationSpeed);
  251.     digitalWrite(7, LOW);
  252.     digitalWrite(8, HIGH);
  253.     delay(calibrationSpeed);
  254.     digitalWrite(8, LOW);
  255.     digitalWrite(9, HIGH);
  256.     delay(calibrationSpeed);
  257.     digitalWrite(9, LOW);
  258.     digitalWrite(6, HIGH);
  259.     delay(calibrationSpeed);
  260.   }
  261. }
复制代码


回复

使用道具 举报

驴友花雕  中级技神
 楼主|

发表于 5 小时前

【Arduino 动手做】基于 Arduino 的 28BYJ-48 升降机械臂

【Arduino 动手做】基于 Arduino 的 28BYJ-48 升降机械臂
项目链接:http://www.brokking.net/JAMR.html
项目作者:Joop Brokking

项目视频 :https://www.youtube.com/watch?v=DWgC4vC-IGg
项目代码:http://www.brokking.net/images/jamr/JAMR_Arduino_code.zip
3D 文件:http://www.brokking.net/images/jamr/JAMR_parts.zip

【Arduino 动手做】基于 Arduino 的 28BYJ-48 升降机械臂图1

回复

使用道具 举报

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

本版积分规则

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

硬件清单

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

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

mail