适合新手的详细arduino超声波避障小车教程-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

楼主: GT610

适合新手的详细arduino超声波避障小车教程

  [复制链接]
发表于 2018-9-16 20:08 | 显示全部楼层
我根据自己的需要改了一下程序~~~ 可以帮我验证下是哪里错了吗? L298N的out1和out2接口连接的电机无法运转。
#include <Servo.h>
int in1=7; //左边轮子
int in2=6;
int ENA=10;
int in3=9; //右边轮子
int in4=8;
int ENB=5;
Servo s; //超声波转向舵机
int trig=4; //发射信号
int echo=3; //接收信号
unsigned int S; //距离存储
void setup() {
Serial.begin(9600); //设置波特率
pinMode(trig,OUTPUT); //设置引脚模式
pinMode(echo,INPUT);
pinMode(in1,OUTPUT);
pinMode(in2,OUTPUT);
pinMode(in3,OUTPUT);
pinMode(in4,OUTPUT);
pinMode(ENA,OUTPUT);
pinMode(ENB,OUTPUT);

s.attach(2); //定义舵机所用引脚
s.write(90); //初始化舵机角度
tone(12,800,500);
delay(2000); //开机延时m
}

void loop() { //主函数
s.write(90); //舵机中位
range(); //执行测距函数
if(S<10){ //判断障碍物距离,距离太近
back(); //后退
delay(300); //后退时间
}
if(S<=40&&S>10){ //距离中等
turn(); //运行转向判断函数
}
if(S>40){ //距离充足
line(); //运行直行函数
}
}


void turn(){ //判断转向函数
lull(); //停止所用电机
s.write(170); //舵机转到170度既左边(角度与安装方式有关)
delay(500); //留时间给舵机转向
range(); //运行测距函数
s.write(90); //测距完成,舵机回到中位
delay(600); //留时间给舵机转向
if (S>30) {L();} //判断左边障碍物距离,如果距离充足,运行左转
else {
s.write(10); //否则,舵机转动到10度,测右边距离
delay(600);
range(); //测距
s.write(90); //中位
delay(600);
if(S>30){ R();
} //右转
else{ back(); //判断右边距离,距离充足右转否则后退
int x=random(1); //产生一个0到1的随机数
if (x=0){R();}
else{L();} //判断随机数
} //否则后退,并随机转向
}
}


void range(){ //测距函数
digitalWrite(trig,LOW); //测距
delayMicroseconds(2); //延时2微秒
digitalWrite(trig,HIGH);
delayMicroseconds(20);
digitalWrite(trig,LOW);
int distance = pulseIn(echo,HIGH); //读取高电平时间
distance = distance/58; //按照公式计算
S = distance; //把值赋给S
Serial.println(S); //向串口发送S的值,可以在显示器上显示距离
if (S<30){
tone(12,800,50);
delay(50); //延时
}
}


void line(){

digitalWrite(in1,1);
digitalWrite(in2,0);
analogWrite(ENA,240);
digitalWrite(in3,1);
digitalWrite(in4,0);
analogWrite(ENB,240);
}

void L(){

digitalWrite(in1,0);
digitalWrite(in2,1);
analogWrite(ENA,150);
digitalWrite(in3,1);
digitalWrite(in4,0);
analogWrite(ENB,150);


lull(); //暂停所有电机
}
void R(){

digitalWrite(in1,1);
digitalWrite(in2,0);
analogWrite(ENA,150);
digitalWrite(in3,0);
digitalWrite(in4,1);
analogWrite(ENB,150);

lull();
}


void back(){ //后退函数

digitalWrite(in1,0);
digitalWrite(in2,1);
analogWrite(ENA,150);
digitalWrite(in3,0);
digitalWrite(in4,1);
analogWrite(ENB,150);

}

void lull(){
digitalWrite(in1,0);
digitalWrite(in2,0);
analogWrite(ENA,0);
digitalWrite(in3,0);
digitalWrite(in4,0);
analogWrite(ENB,0);
}
发表于 2018-9-17 01:07 来自手机 | 显示全部楼层
经典教程  
发表于 2018-9-17 01:07 来自手机 | 显示全部楼层
多谢分享  
发表于 2019-10-30 10:23 | 显示全部楼层
你好,你现在还在线吗?我想问问关于这小车的问题
发表于 2019-11-18 16:14 | 显示全部楼层
你的图挂了~ 看不到图很了~
发表于 2019-11-21 18:58 | 显示全部楼层
很不错。也开视频了。开始的时候duang的一下把我乐坏了。不过我是新手。这个贴纸很适合我学习
发表于 2019-11-22 14:03 | 显示全部楼层
有详细组装过程吗
发表于 2021-4-18 08:47 | 显示全部楼层
给全套图呀!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 00:29 , Processed in 0.099455 second(s), 13 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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