单片机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 34|回复: 0
打印 上一主题 下一主题
收起左侧

用arduino nano做的蜘蛛机器人 手机APP蓝牙遥控+超声波避障

[复制链接]
跳转到指定楼层
楼主
(新手)用arduino nano做的简易蜘蛛机器人,可通过手机APP蓝牙串口控制,也可用超声波避障行走。实物图看起来有点粗糙,毕竟是寒门子弟在家操手做的,但效果还是可以的。


1、蓝牙使用的是HC-05,串口软件用的是SPP(附件里有)

2、电机是常见的130小电机,带减速箱。驱动也是常见的L298N.
3、电池用的是两节串联的18650锂电池(电压7.4v)
4、结构部分是从某宝上20块买来的益智拼装玩具蜘蛛机器人,由于单个电机驱动不能实现拐弯,
  自己改成了两个电机驱动
5、超声波使用的是常见的4引脚SR04,舵机用的是9g小舵机。


为方便小伙伴们的交流,源代码已贴出,新手水平有限,望笑纳。
  1. #include <Servo.h>
  2. int ENA=3,ENB=9;
  3. int IN1=4;
  4. int IN2=5;
  5. int IN3=7;
  6. int IN4=8;

  7. int trig=A0,echo=A1;//发射、接收
  8. unsigned int juli;//距离
  9. Servo dj;//舵机
  10. void setup()
  11. {
  12.   pinMode(ENA,OUTPUT);
  13.   pinMode(ENB,OUTPUT);
  14.   pinMode(IN1,OUTPUT);
  15.   pinMode(IN2,OUTPUT);
  16.   pinMode(IN3,OUTPUT);
  17.   pinMode(IN4,OUTPUT);
  18.   Serial.begin(9600);
  19.   

  20.   pinMode(trig,OUTPUT);
  21.   pinMode(echo,INPUT);
  22.   dj.attach(11);//舵机引脚
  23.   dj.write(90);//角度
  24. }
  25. void ceju()
  26. {
  27.   digitalWrite(trig,LOW); //测距
  28. delayMicroseconds(2); //延时2微秒
  29. digitalWrite(trig,1);
  30. delayMicroseconds(20);
  31. digitalWrite(trig,0);
  32. int distance = pulseIn(echo,1); //读取高电平时间.pulseIn函数用于读取引脚脉冲的时间长度,脉冲可以是HIGH或LOW。如果是HIGH,函数将先等引脚变为高电平,然后开始计时,一直到变为低电平为止。返回脉冲持续的时间长短, 单位为ms。如果超时还没有读到的话, 将返回0。
  33. distance = distance/58; //按照公式计算
  34. juli = distance; //把值赋给S
  35. Serial.println(juli); //向串口发送S的值,可以在显示器上显示距离
  36. if (juli<30)
  37. {
  38. delay(50); //延时
  39. }
  40.   }
  41.   void chaoshengbo()
  42.   {
  43.     dj.write(90);
  44.     ceju();
  45.     if(juli<10)
  46.     {
  47.       houtui();
  48.       delay(300);
  49.       }
  50.       if(juli>10&&juli<=40)
  51.      { turn();
  52.     }
  53.     if(juli>40)
  54.     {
  55.       qianjin();
  56.       }
  57.   }
  58.   
  59.   void turn()
  60.   { //判断转向函数
  61. ting(); //停止所用电机
  62. dj.write(170); //舵机转到170度既左边(角度与安装方式有关)
  63. delay(500); //留时间给舵机转向
  64. ceju(); //运行测距函数
  65. dj.write(90); //测距完成,舵机回到中位
  66. delay(600); //留时间给舵机转向
  67. if (juli>30) {qianzuo();} //判断左边障碍物距离,如果距离充足,运行左转
  68. else {
  69. dj.write(10); //否则,舵机转动到10度,测右边距离
  70. delay(600);
  71. ceju(); //测距
  72. dj.write(90); //中位
  73. delay(600);
  74. if(juli>30){qianyou();
  75. } //右转
  76. else{ houtui(); //判断右边距离,距离充足右转否则后退
  77. int x=random(1); //产生一个0到1的随机数
  78. if (x=0){qianyou();}
  79. else{qianzuo();} //判断随机数
  80. } //否则后退,并随机转向
  81. }
  82. }
  83. void qianjin()
  84. {
  85.   analogWrite(ENA,250);
  86.   analogWrite(ENB,250);
  87.    digitalWrite(IN1,1);
  88.     digitalWrite(IN2,0);
  89.      digitalWrite(IN3,1);
  90.       digitalWrite(IN4,0);
  91.   }
  92.   void houtui()
  93. {
  94.   analogWrite(ENA,250);
  95.   analogWrite(ENB,250);
  96.    digitalWrite(IN1,0);
  97.     digitalWrite(IN2,1);
  98.      digitalWrite(IN3,0);
  99.       digitalWrite(IN4,1);
  100.   }
  101.   void qianzuo()
  102. {
  103.   analogWrite(ENA,0);
  104.   analogWrite(ENB,200);
  105.    digitalWrite(IN1,0);
  106.     digitalWrite(IN2,0);
  107.      digitalWrite(IN3,1);
  108.       digitalWrite(IN4,0);
  109.   }
  110.   void qianyou()
  111. {
  112.   analogWrite(ENA,200);
  113.   analogWrite(ENB,0);
  114.    digitalWrite(IN1,1);
  115.     digitalWrite(IN2,0);
  116.      digitalWrite(IN3,0);
  117.       digitalWrite(IN4,0);
  118.   }
  119.   void houzuo()
  120. {
  121.   analogWrite(ENA,0);
  122.   analogWrite(ENB,200);
  123.    digitalWrite(IN1,0);
  124.     digitalWrite(IN2,0);
  125.      digitalWrite(IN3,0);
  126.       digitalWrite(IN4,1);
  127.   }
  128.   void houyou()
  129. {
  130.   analogWrite(ENA,200);
  131.   analogWrite(ENB,0);
  132.    digitalWrite(IN1,0);
  133.     digitalWrite(IN2,1);
  134.      digitalWrite(IN3,0);
  135.       digitalWrite(IN4,0);
  136.   }
  137.   void shunshi()
  138. {
  139.   analogWrite(ENA,250);
  140.   analogWrite(ENB,250);
  141.    digitalWrite(IN1,1);
  142.     digitalWrite(IN2,0);
  143.      digitalWrite(IN3,0);
  144.       digitalWrite(IN4,1);
  145.   }
  146.   void nishi()
  147. {
  148.   analogWrite(ENA,250);
  149.   analogWrite(ENB,250);
  150.    digitalWrite(IN1,0);
  151.     digitalWrite(IN2,1);
  152.      digitalWrite(IN3,1);
  153.       digitalWrite(IN4,0);
  154.   }
  155.   void ting()
  156. {
  157.    digitalWrite(IN1,0);
  158.     digitalWrite(IN2,0);
  159.      digitalWrite(IN3,0);
  160.       digitalWrite(IN4,0);
  161.   }
  162.   
  163. void loop() {
  164.   
  165.   if(Serial.available())
  166.   {
  167.     char i=Serial.read();
  168.     switch(i)
  169.     {
  170.       case'b':qianzuo();break;
  171.       case'c':qianjin();break;
  172.       case'd':qianyou();break;
  173.       case'e':nishi();break;
  174.       case'f':ting();break;
  175.       case'g':shunshi();break;
  176.       case'h':houzuo();break;
  177.       case'i':houtui();break;
  178.       case'j':houyou();break;
  179.       case'a':chaoshengbo();break;
  180.       //case'k':gunf();break;
  181.       //case'l':gunt();break;
  182.       }
  183.     }
  184. }
复制代码

全部资料51hei下载地址:
自制蜘蛛机器人.zip (6.87 MB, 下载次数: 4)

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 转播转播 分享分享 分享淘帖 顶 踩
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|单片机论坛 |51黑电子论坛技术交流 管理员QQ:125739409;技术交流QQ群636986012

Powered by 单片机教程网

快速回复 返回顶部 返回列表