制作过程:
一、准备材料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通过杜邦线将各模块连接起来,具体连接法在下就不多讲了大家参考使用说明连接就行哈 下图是我小车供大家参考一下
三、完成以上两步小车硬件就完成了接下来就是软件调试了,一下是我的软件,供大家参考
源代码
- #include <Servo.h>
-
- //#define send
-
- Servo myservo;
- int Echo = A1; // Echo回声脚(P2.0)
- int Trig =A0; // Trig 触发脚(P2.1)
- int in1 = 5;
- int in2 = 4;
- int in3 = 3;
- int in4 = 2;
-
- int rightDistance = 0,leftDistance = 0,middleDistance = 0 ;
-
- void forward()
- {
- digitalWrite(in1,HIGH);
- digitalWrite(in2,LOW);
- digitalWrite(in3,HIGH);
- digitalWrite(in4,LOW);
- }
-
- void back()
- {
- digitalWrite(in1,LOW);
- digitalWrite(in2,HIGH);
- digitalWrite(in3,LOW);
- digitalWrite(in4,HIGH);
- }
-
- void turnleft()
- {
- digitalWrite(in1,HIGH);
- digitalWrite(in2,LOW);
- digitalWrite(in3,LOW);
- digitalWrite(in4,HIGH);
- }
-
- void turnright()
- {
- digitalWrite(in1,LOW);
- digitalWrite(in2,HIGH);
- digitalWrite(in3,HIGH);
- digitalWrite(in4,LOW);
- }
- void stop()
- {
- digitalWrite(in1,LOW);
- digitalWrite(in2,LOW);
- digitalWrite(in3,LOW);
- digitalWrite(in4,LOW);
- }
-
- int Distance_test() // 量出前方距离
- {
- digitalWrite(Trig, LOW); // 给触发脚低电平2μs
- delayMicroseconds(2);
- digitalWrite(Trig, HIGH); // 给触发脚高电平10μs,这里至少是10μs
- delayMicroseconds(20);
- digitalWrite(Trig, LOW); // 持续给触发脚低电
- float Fdistance = pulseIn(Echo, HIGH); // 读取高电平时间(单位:微秒)
- Fdistance= Fdistance/58; //为什么除以58等于厘米, Y米=(X秒*344)/2
- // X秒=( 2*Y米)/344 ==》X秒=0.0058*Y米 ==》厘米=微秒/58
- return (int)Fdistance;
- }
-
- void setup()
- {
- myservo.attach(9);
- Serial.begin(9600); // 初始化串口
- pinMode(Echo, INPUT); // 定义超声波输入脚
- pinMode(Trig, OUTPUT); // 定义超声波输出脚
- pinMode(in1,OUTPUT);
- pinMode(in2,OUTPUT);
- pinMode(in3,OUTPUT);
- pinMode(in4,OUTPUT);
-
- stop();
- }
-
- void loop()
- {
- myservo.write(90);
- delay(500);
- middleDistance = Distance_test();
- #ifdef send
- Serial.print("middleDistance=");
- Serial.println(middleDistance);
- #endif
-
- if(middleDistance<=20)
- {
- stop();
- delay(500);
- myservo.write(5);
- delay(1000);
- rightDistance = Distance_test();
-
- #ifdef send
- Serial.print("rightDistance=");
- Serial.println(rightDistance);
- #endif
-
- delay(500);
- myservo.write(90);
- delay(1000);
- myservo.write(175);
- delay(1000);
- leftDistance = Distance_test();
-
- #ifdef send
- Serial.print("leftDistance=");
- Serial.println(leftDistance);
- #endif
-
- delay(500);
- myservo.write(90);
- delay(1000);
- if(rightDistance>leftDistance)
- {
- turnright();
- delay(450);
- }
- else if(rightDistance<leftDistance)
- {
- turnleft();
- delay(450);
- }
- else
- {
- forward();
- }
- }
- else
- forward();
- }
复制代码
本帖转自http://www.Arduino.cn/thread-17702-1-1.html
|
|
|
|
|
|