超声波摇头避障小车

2015-12-132.6万
AI 快速预览详细 收起
超声波摇头避障小车是一个基于Arduino的项目,主要使用L298n电机驱动模块、LM2596稳压模块、超声波模块和9g舵机等组件。通过这些硬件,小车能够检测前方障碍物并自动避障。项目难度适中,适合初学者和STEM教育场景。最终效果是小车能够在遇到障碍物时自动调整方向,避免碰撞。
制作过程:

一、准备材料
1、L298n电机驱动模块一个,淘宝也就10元一个(如下图
本模块是2路的H桥驱动,所以可以同时驱动两个电机,但是我用的小电机一个模块就能驱动四个电机。当然大家也可以用其他类型的驱动。

2、
LM2596稳压模块一个(如下图)(注意:LM2596稳压模块可以提供3A电流,如用7805的话电流会不够)

3、超声波模块一个(如下图


4、
9g舵机一个(如下图


5、
云台一个(可以自己制作用孔孔板)

6、车底盘一个带四个轮子(可以自己制作用铝板或其他材料)(如图)

7、杜邦线若干


8、
电池一块(要能提供大电流的那种,比如7.4V航模电池,18650电池等 ,当然能提供2A的充电宝也可以的哦)

9、
铜柱(1cm)及螺母和螺丝若干
注:以上模块淘宝都可以买到哈


二、
电路板的安装及模块的连接
1首先大家将各模块通过铜柱用胶水或其他东西安装到小车底盘上
2通过杜邦线将各模块连接起来,具体连接法在下就不多讲了大家参考使用说明连接就行哈
下图是我小车供大家参考一下



三、完成以上两步小车硬件就完成了接下来就是软件调试了,一下是我的软件,供大家参考
源代码
  1. #include <Servo.h>
  2. //#define send
  3. Servo myservo;
  4. int Echo = A1;  // Echo回声脚(P2.0)
  5. int Trig =A0;  //  Trig 触发脚(P2.1)
  6. int in1 = 5;
  7. int in2 = 4;
  8. int in3 = 3;
  9. int in4 = 2;
  10. int rightDistance = 0,leftDistance = 0,middleDistance = 0 ;
  11. void forward()
  12. {
  13. digitalWrite(in1,HIGH);
  14. digitalWrite(in2,LOW);
  15. digitalWrite(in3,HIGH);
  16. digitalWrite(in4,LOW);
  17. }
  18. void back()
  19. {
  20. digitalWrite(in1,LOW);
  21. digitalWrite(in2,HIGH);
  22. digitalWrite(in3,LOW);
  23. digitalWrite(in4,HIGH);
  24. }
  25. void turnleft()
  26. {
  27. digitalWrite(in1,HIGH);
  28. digitalWrite(in2,LOW);
  29. digitalWrite(in3,LOW);
  30. digitalWrite(in4,HIGH);
  31. }
  32. void turnright()
  33. {
  34. digitalWrite(in1,LOW);
  35. digitalWrite(in2,HIGH);
  36. digitalWrite(in3,HIGH);
  37. digitalWrite(in4,LOW);
  38. }
  39. void stop()
  40. {
  41. digitalWrite(in1,LOW);
  42. digitalWrite(in2,LOW);
  43. digitalWrite(in3,LOW);
  44. digitalWrite(in4,LOW);
  45. }
  46. int Distance_test()   // 量出前方距离
  47. {
  48.   digitalWrite(Trig, LOW);   // 给触发脚低电平2μs
  49.   delayMicroseconds(2);
  50.   digitalWrite(Trig, HIGH);  // 给触发脚高电平10μs,这里至少是10μs
  51.   delayMicroseconds(20);
  52.   digitalWrite(Trig, LOW);    // 持续给触发脚低电
  53.   float Fdistance = pulseIn(Echo, HIGH);  // 读取高电平时间(单位:微秒)
  54.   Fdistance= Fdistance/58;       //为什么除以58等于厘米,  Y米=(X秒*344)/2
  55.   // X秒=( 2*Y米)/344 ==》X秒=0.0058*Y米 ==》厘米=微秒/58
  56.   return (int)Fdistance;
  57. }  
  58. void setup()
  59. {
  60.   myservo.attach(9);
  61.   Serial.begin(9600);     // 初始化串口
  62.   pinMode(Echo, INPUT);    // 定义超声波输入脚
  63.   pinMode(Trig, OUTPUT);   // 定义超声波输出脚  
  64.   pinMode(in1,OUTPUT);
  65.   pinMode(in2,OUTPUT);
  66.   pinMode(in3,OUTPUT);
  67.   pinMode(in4,OUTPUT);
  68.   stop();
  69. }
  70. void loop()
  71. {
  72.     myservo.write(90);
  73.     delay(500);
  74.     middleDistance = Distance_test();
  75.     #ifdef send
  76.     Serial.print("middleDistance=");
  77.     Serial.println(middleDistance);
  78.     #endif
  79.      
  80.     if(middleDistance<=20)
  81.     {     
  82.       stop();
  83.       delay(500);                        
  84.       myservo.write(5);         
  85.       delay(1000);      
  86.       rightDistance = Distance_test();
  87.       #ifdef send
  88.       Serial.print("rightDistance=");
  89.       Serial.println(rightDistance);
  90.       #endif
  91.       
  92.       delay(500);
  93.        myservo.write(90);              
  94.       delay(1000);                                                  
  95.       myservo.write(175);              
  96.       delay(1000);
  97.       leftDistance = Distance_test();
  98.       #ifdef send
  99.       Serial.print("leftDistance=");
  100.       Serial.println(leftDistance);
  101.       #endif
  102.       delay(500);
  103.       myservo.write(90);              
  104.       delay(1000);
  105.       if(rightDistance>leftDistance)  
  106.       {
  107.         turnright();
  108.         delay(450);
  109.        }
  110.        else if(rightDistance<leftDistance)
  111.        {
  112.         turnleft();
  113.         delay(450);
  114.        }
  115.        else
  116.        {
  117.         forward();
  118.        }
  119.     }  
  120.     else
  121.       forward();                     
  122. }
复制代码



本帖转自http://www.Arduino.cn/thread-17702-1-1.html

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(4)
稀里糊涂
稀里糊涂
有没有用mind+写的程序,代码看不懂
孙毅
孙毅
最近论坛里是不是有点冷清,还是说因为还不到月末的原因啊 ?!还是说我太忙了忽略的大家。。。吼吼
qq815076543322
qq815076543322
作者
回复孙毅
你冷落了大家 大家都找不到你了
孙毅
孙毅
这个小车跟我的。。。。一个车架子哈。。。吼吼
只不过。。。。我那个搭载了“昂贵滴”艾迪森。。。。。牛!
qq815076543322
qq815076543322
作者
回复孙毅
是书太乱 我可能又仍没了 最近收拾家里扔东西了
孙毅
孙毅回复qq815076543322
我想知道,你家到底多乱。。。?!
共5条回复,已加载2条,点击查看更多共5条回复,已加载全部
丄帝De咗臂
丄帝De咗臂
难道我是沙发
qq815076543322
qq815076543322
作者
回复丄帝De咗臂
恩 是你 就是你 沙发就是你
- 没有更多了 -