智能小车项目开发(Arduino)

智能小车项目开发(Arduino)

注意: 具体每个元器件的使用原理在此不做介绍,需要去单独学习,此章我只介绍具体的程序编写

三个功能的代码学起来很简单,,重要的是其中开发逻辑的一个认知。(每个都会用,联动起来就蒙了哈哈哈哈)

循迹小车

1.项目器件

2个红外循迹模块,1个L298N,智能小车套件,arduino mega2560开发板

2.项目实现

//1.引脚需要后期自己换
//2.其次里面涉及到了PWM调速,不会的可以先去了解一下,方便理解
//3.里面用的是控速转弯
#define leftTrail     1
#define rightTrail    2
#define leftWheel01   3
#define leftWheel02   4
#define rightWheel01  5
#define rightWheel02  6
void Trail_init()
{
    pinMode(leftTrail,INPUT);
    pinMode(rightTrail,INPUT);
}
void car_init()
{
    pinMode(leftWheel01,OUTPUT);
    pinMode(leftWheel02,OUTPUT);
    pinMode(rightWheel01,OUTPUT);
    pinMode(rightWheel02,OUTPUT);
}
//具体是前后左右,需要根据自己的接线调试
void go_forword()
{
    digitalWrite(leftWheel01,LOW);
    analogWrite(leftWheel02,200);
    digitalWrite(rightWheel01,LOW);
    analogWrite(rightWheel02,200);
}
void nogo()
{
    digitalWrite(leftWheel02,LOW);
    analogWrite(leftWheel01,0);
    digitalWrite(rightWheel02,LOW);
    analogWrite(rightWheel01,0);
}
void turn_left()
{
    digitalWrite(leftWheel01,LOW);
    analogWrite(leftWheel02,100);
    digitalWrite(rightWheel01,LOW);
    analogWrite(rightWheel02,220);
}
void turn_right()
{
    digitalWrite(leftWheel01,LOW);
    analogWrite(leftWheel02,220);
    digitalWrite(rightWheel01,LOW);
    analogWrite(rightWheel02,100 );
}
void setup()
{
    Trail_init();
    car_init();
}

void loop()
{ 
    //有黑线灯会熄灭,呈现出高电平
    if(analogRead(leftTrail)==1 && analogRead(rightTrail)==0)
    {
        turn_left();
    }
    if(analogRead(leftTrail)==0 && analogRead(rightTrail)==1)
    {
        turn_right();
    }
    if(analogRead(leftTrail)==1 && analogRead(rightTrail)==1)
    {
        nogo();
    }
    if(analogRead(leftTrail)==0 && analogRead(rightTrail)==0)
    {
        go_forword();
    }
}

跟随小车

1.项目器件

超声波模块,智能小车套件,L298N电机驱动,arduino mega2560开发板

2.项目实现

关于电机驱动都是通用的,所有直接上面的代码也可以

//超声波相关的代码
#define Echo D5	//吸收
#define Tirg D6	//发射,,给一个10us的高电平,触发
unsigned long dis;//unsigned的作用是:声明无符号的整数类型。
double dis;//也可以这样定义这个变量 
/**写一个检测高电平触发时间*/
unsigned long init_time()
{
    digitalWrite(Tirg,HIGH);
    delayMicroseconds(10);
    digitalWrite(Tirg,LOW);
    return pulseln(Echo,HIGH);
}

void setup(){
    pinMode(Echo,INPUT);
    pinMode(Tirg,OUTPUT);
    Serial.begin(115200);
}
void loop(){
    /*我感觉这个是换算起来比较麻烦的一个
    dis = init_time()/58;*/
        /还有一种计算方法就是,路程 =时间 * 速度(340m/s),,,2dis = time * 340m/s,这个时间是微秒,所以换算得0.017
    dis = init_time()*0.017;
    Serial.print(dis);
    Serial.println("cm");    //字符要加引号
    delay(1200);//写一个延迟
}
//根据超声波反馈回来的距离来判断小车的前进亦或者后退
#define leftWheel01   1
#define leftWheel02   2
#define rightWheel01  3
#define rightWheel02  4
#define Trig          5
#define Echo          6
unsigned long dis;//unsigned的作用是:声明无符号的整数类型。
unsigned long init_time()
{
    digitalWrite(Tirg,HIGH);
    delayMicroseconds(10);
    digitalWrite(Tirg,LOW);
    return pulseln(Echo,HIGH);
}
void wave_init()
{
    pinMode(Echo,INPUT);
    pinMode(Tirg,OUTPUT);
}
void car_init()
{
    pinMode(leftWheel01,OUTPUT);
    pinMode(leftWheel02,OUTPUT);
    pinMode(rightWheel01,OUTPUT);
    pinMode(rightWheel02,OUTPUT);
}
//具体是前后左右,需要根据自己的接线调试
void go_forword()
{
    digitalWrite(leftWheel01,LOW);
    analogWrite(leftWheel02,200);
    digitalWrite(rightWheel01,LOW);
    analogWrite(rightWheel02,200);
}
void stop()
{
    digitalWrite(leftWheel02,LOW);
    analogWrite(leftWheel01,0);
    digitalWrite(rightWheel02,LOW);
    analogWrite(rightWheel01,0);
}
void goback()
{
    digitalWrite(leftWheel02,LOW);
    analogWrite(leftWheel01,200);
    digitalWrite(rightWheel02,LOW);
    analogWrite(rightWheel01,200);
}
void turn_left()
{
    digitalWrite(leftWheel01,LOW);
    analogWrite(leftWheel02,100);
    digitalWrite(rightWheel01,LOW);
    analogWrite(rightWheel02,220);
}
void turn_right()
{
    digitalWrite(leftWheel01,LOW);
    analogWrite(leftWheel02,220);
    digitalWrite(rightWheel01,LOW);
    analogWrite(rightWheel02,100 );
}
void setup()
{
    car_init();
    wave_init()}

void loop()
{ 
    delay(50);每次得出来的超声波数据放缓50ms,为了使更顺畅
	dis = init_time()*0.017;//单位是cm
    if(dis >= 10 && dis <=40)
    {
        go_forword();
    }
    if(dis <= 10 && dis >= 0)
    {
        goback();
    }
     if(dis >= 40)
    {
        stop();
    }
}

避障小车

1.项目器件

超声波模块,舵机,智能小车套件,L298N电机驱动,arduino mega2560开发板

2.项目实现

//根据超声波反馈回来的距离来判断小车的前进亦或者后退
#include <Servo.h>		//包含舵机的头文件
#define PIN_SERVO D5	//定义一个舵机引脚
Servo myservo;			//给自己的舵机起一个名字
#define leftWheel01   1
#define leftWheel02   2
#define rightWheel01  3
#define rightWheel02  4
#define Trig          5
#define Echo          6
unsigned long dis;//unsigned的作用是:声明无符号的整数类型。
unsigned long init_time()
{
    digitalWrite(Tirg,HIGH);
    delayMicroseconds(10);
    digitalWrite(Tirg,LOW);
    return pulseln(Echo,HIGH);
}
void wave_init()
{
    pinMode(Echo,INPUT);
    pinMode(Tirg,OUTPUT);
}
void car_init()
{
    pinMode(leftWheel01,OUTPUT);
    pinMode(leftWheel02,OUTPUT);
    pinMode(rightWheel01,OUTPUT);
    pinMode(rightWheel02,OUTPUT);
}
//具体是前后左右,需要根据自己的接线调试
void go_forword()
{
    digitalWrite(leftWheel01,LOW);
    analogWrite(leftWheel02,200);
    digitalWrite(rightWheel01,LOW);
    analogWrite(rightWheel02,200);
}
void nogo()
{
    digitalWrite(leftWheel02,LOW);
    analogWrite(leftWheel01,0);
    digitalWrite(rightWheel02,LOW);
    analogWrite(rightWheel01,0);
}
void goback()
{
    digitalWrite(leftWheel02,LOW);
    analogWrite(leftWheel01,200);
    digitalWrite(rightWheel02,LOW);
    analogWrite(rightWheel01,200);
}
void turn_left()
{
    digitalWrite(leftWheel01,LOW);
    analogWrite(leftWheel02,100);
    digitalWrite(rightWheel01,LOW);
    analogWrite(rightWheel02,220);
}
void turn_right()
{
    digitalWrite(leftWheel01,LOW);
    analogWrite(leftWheel02,220);
    digitalWrite(rightWheel01,LOW);
    analogWrite(rightWheel02,100 );
}
void setup()
{
    car_init();
    wave_init();
    myservo.attach(PIN_SERVO);//连接舵机
}

void loop()
{ 
    delay(50);每次得出来的超声波数据放缓50ms,为了使更顺畅
	dis = init_time()*0.017;//单位是cm
  sssss.write(0);
  delay(1000);
  sssss.write(180);
  delay(1000);
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
当然可以!Arduino智能小车循迹避障代码是用于控制小车在行驶过程中能够自动避开障碍物并按照指定的轨迹行驶的代码。以下是一个简单的示例代码: ```cpp // 引入所需的库 #include <AFMotor.h> // 定义电机引脚 AF_DCMotor motor1(1); // 左电机 AF_DCMotor motor2(2); // 右电机 // 定义传感器引脚 int leftSensor = A0; // 左传感器 int middleSensor = A1; // 中传感器 int rightSensor = A2; // 右传感器 void setup() { // 初始化串口通信 Serial.begin(9600); // 设置电机速度 motor1.setSpeed(200); motor2.setSpeed(200); } void loop() { // 读取传感器数值 int leftValue = analogRead(leftSensor); int middleValue = analogRead(middleSensor); int rightValue = analogRead(rightSensor); // 输出传感器数值 Serial.print("Left: "); Serial.print(leftValue); Serial.print(" Middle: "); Serial.print(middleValue); Serial.print(" Right: "); Serial.println(rightValue); // 判断传感器数值,进行相应的动作 if (leftValue > 500 && middleValue > 500 && rightValue > 500) { // 前进 motor1.run(FORWARD); motor2.run(FORWARD); } else if (leftValue > 500 && middleValue < 500 && rightValue > 500) { // 左转 motor1.run(BACKWARD); motor2.run(FORWARD); } else if (leftValue < 500 && middleValue > 500 && rightValue > 500) { // 直行 motor1.run(FORWARD); motor2.run(FORWARD); } else if (leftValue > 500 && middleValue > 500 && rightValue < 500) { // 右转 motor1.run(FORWARD); motor2.run(BACKWARD); } else { // 停止 motor1.run(RELEASE); motor2.run(RELEASE); } } ``` 这段代码使用了AFMotor库来控制电机的运动,通过读取传感器数值来判断小车的位置,然后根据不同的情况进行相应的动作控制。你可以根据实际情况进行修改和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

橘猫0.o

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值