带调速功能的arduino摇头避障小车

在这里插入图片描述
一、材料同上篇文章;
二、接线同上篇文章。
在这里插入图片描述
L298N红板有两个使能端口ENA和ENB,这两个端口默认是有跳线帽的,也就是接5V的,此时输出就是HIGH或者LOW。摘掉跳线帽,将外边端口分别接arduino的PWM接口就好,本文接的是3和11,可以在0~255间调整。
在这里插入图片描述
三、MIXLY代码
在这里插入图片描述
在这里插入图片描述
四、arduino代码

#include <Servo.h>               //  控制舵机的头文件
Servo myservo;  // 创建伺服对象控制伺服

const int TrigPin = 12;          //超声波
const int EchoPin = 13;         // 超声波

unsigned int distance; 
unsigned char pos = 90;         //  舵机伺服的位置

int right_distance = 0;      // 右边测距的距离
int left_distance = 0;      //左边测距的距离

const int L298pin1 = 5;   // 模块控制信号
const int L298pin2 = 6;
const int L298pin3 = 9;
const int L298pin4 = 10;
const int ENA = 3;
const int ENB = 11;


void setup() 
{ 
    pinMode(L298pin1,OUTPUT);
    pinMode(L298pin2,OUTPUT);
    pinMode(L298pin3,OUTPUT);
    pinMode(L298pin4,OUTPUT);
    pinMode(ENA,OUTPUT);
    pinMode(ENB,OUTPUT);
  // 初始化串口通信及连接SR04的引脚
    Serial.begin(9600); 
    pinMode(TrigPin, OUTPUT); 
    pinMode(EchoPin, INPUT); 
   // Serial.println("Ultrasonic sensor:");
    myservo.attach(7);  //  使用第11脚控制舵机伺服位置
} 
void loop() 
{ 
      
      myservo.write(pos);  // 舵机伺服控制初始化
      delay(200);
      int temp = dis();
      if(temp >=  50)
      {
        go();
      }
       else
       {
             back();//加了倒退500毫秒完美运行
             delay(50);
             stops();    //  小车停止
             myservo.write(0);  //右边测距
             delay(600);
             right_distance = dis();
             myservo.write(180);  //左边测距
             delay(600);
             left_distance = dis();
             if(right_distance >= left_distance)   //  右边的距离是否大于左边
                 {
                        right();    //右转
                        delay(300);
                 } else
                     {
                         left();    //  小车左转
                         delay(300);
                     }
          }
}

unsigned int dis()  // 测距
{  
      // 产生一个10us的高脉冲去触发TrigPin 
        digitalWrite(TrigPin, LOW); 
        delayMicroseconds(2); 
        digitalWrite(TrigPin, HIGH); 
        delayMicroseconds(10);
        digitalWrite(TrigPin, LOW);
    // 检测脉冲宽度,并计算出距离
        distance = pulseIn(EchoPin, HIGH);
        distance=distance/58;
     //   Serial.println(distance); 
        return distance;   // 返回数据
}
void go()    // 小车前进
{
  digitalWrite(L298pin1,HIGH);
  digitalWrite(L298pin2,LOW);
  digitalWrite(L298pin3,HIGH);
  digitalWrite(L298pin4,LOW);
  analogWrite(ENA,100);
  analogWrite(ENB,100);
}
void back()   //小车后退
{
  digitalWrite(L298pin1,LOW);
  digitalWrite(L298pin2,HIGH);
  digitalWrite(L298pin3,LOW);
  digitalWrite(L298pin4,HIGH);
  analogWrite(ENA,100);
  analogWrite(ENB,100);
  
}
void left()    //  小车左转
{
  digitalWrite(L298pin1,LOW);
  digitalWrite(L298pin2,HIGH);
  digitalWrite(L298pin3,HIGH);
  digitalWrite(L298pin4,LOW);
  analogWrite(ENA,0);
  analogWrite(ENB,100);
  
}
void right()    //  小车右转
{
  digitalWrite(L298pin1,HIGH);
  digitalWrite(L298pin2,LOW);
  digitalWrite(L298pin3,LOW);
  digitalWrite(L298pin4,HIGH);
  analogWrite(ENA,100);
  analogWrite(ENB,0);
   
}
void stops()    //  小车停止   暂停
{
  digitalWrite(L298pin1,LOW);
  digitalWrite(L298pin2,LOW);
  digitalWrite(L298pin3,LOW);
  digitalWrite(L298pin4,LOW);
  analogWrite(ENA,0);
  analogWrite(ENB,0);
    
}
Arduino超声波智能避障⼩车完整代码 // Arduino超声波 智能避障⼩车(不含舵机) #include <LiquidCrystal.h> //申明1602液晶的函数库 LiquidCrystal lcd(11,2,3,4,7,8); //4数据⼝模式连线声明, //=============================================================== //LCD的接⼝:各个引脚连接的I/O⼝编号,格式为 // LiquidCrystal(rs, enable, d4, d5, d6, d7) // LiquidCrystal(rs, rw, enable, d4, d5, d6, d7) // LiquidCrystal(rs, enable, d0, d1, d2, d3, d4, d5, d6, d7) // LiquidCrystal(rs, rw, enable, d0, d1, d2, d3, d4, d5, d6, d7) //=============================================================== int Echo = A0; // Echo回声脚(P2.0) int Trig =A1; // Trig 触发脚(P2.1) int Distance = 0; int L_motor_back=5; //左电机后退(IN1) int L_motor_go=6; //左电机前进(IN2) int R_motor_go=9; // 右电机前进(IN3) int R_motor_back=10; // 右电机后退(IN4) void setup() { Serial.begin(9600); // 初始化串⼝ //初始化电机驱动IO为输出⽅式 pinMode(L_motor_go,OUTPUT); // PIN 5 (PWM) pinMode(L_motor_back,OUTPUT); // PIN 6 (PWM) pinMode(R_motor_go,OUTPUT);// PIN 9 (PWM) pinMode(R_motor_back,OUTPUT);// PIN 10 (PWM) //初始化超声波引脚 pinMode(Echo, INPUT); // 定义超声波输⼊脚 pinMode(Trig, OUTPUT); // 定义超声波输出脚 lcd.begin(16,2); //初始化1602液晶⼯作 模式 //定义1602液晶显⽰范围为2⾏16列字符 } //=======================智能⼩车的基本动作========================= void run() // 前进 { analogWrite(R_motor_go,200);//右电机前进,PWM⽐例0~255调速,左右轮差异略增减 analogWrite(R_motor_back,0); analogWrite(L_motor_go,200);// 左电机前进,PWM⽐例0~255调速,左右轮差异略增减 analogWrite(L_motor_back,0); } void brake() //刹车,停车 { digitalWrite(R_motor_go,LOW); digitalWrite(R_motor_back,LOW); digitalWrite(L_motor_go,LOW); digitalWrite(L_motor_back,LOW); } void left() //左转(左轮不动,右轮前进) { analogWrite(R_motor_go,200); //右电机前进,PWM⽐例0~255调速 analogWrite(R_motor_back,0); digitalWrite(L_motor_go,LOW); //左轮不动 digitalWrite(L_motor_back,LOW); } void spin_left() //左转(左轮后退,右轮前进) { analogWrite(R_motor_go,200); //右电机前进,PWM⽐例0~255调速 analogWrite(R_motor_back,0); analogWrite(L_motor_go,0); analogWrite(L_motor_back,200);//左轮后退PWM⽐例0~255调速 } void right() //右转(右轮不动,左轮前进) { digitalWrite(R_motor_go,LOW); //右电机不动 digitalWrite(R_motor_back,LOW); analogWrite(L_moto
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值