基于Arduino智能小车

基于Arduino智能小车

在这里插入图片描述

第一步:让车动起来

L298N控制逻辑
void setup() { //完整
  // put your setup code here, to run once:
  // 配置2,3口为输出引脚
  pinMode(2,OUTPUT);// 配置2口为输出引脚
  pinMode(3,OUTPUT);// 配置3口为输出引脚
}

void loop() {
  // put your main code here, to run repeatedly:
  //后退 2接的是IN1,3接的是IN2. 根据官方说明,正转,对应接线后的现象,后退
  digitalWrite(2,HIGH);
  digitalWrite(3,LOW);
  delay(1000);
  //前进 2接的是IN1,3接的是IN2. 根据官方说明,反转,对应接线后的现象,前进
  digitalWrite(2,LOW);
  digitalWrite(3,HIGH);
  delay(1000);
}

第二步:实现前后左右

void setup() {
  // put your setup code here, to run once:
  
   pinMode(2,OUTPUT);// 配置2口为输出引脚
  pinMode(3,OUTPUT);// 配置3口为输出引脚
  
  pinMode(4,OUTPUT);// 配置4口为输出引脚
  pinMode(5,OUTPUT);// 配置5口为输出引脚
}

void loop() {
  // put your main code here, to run repeatedly:

  digitalWrite(2,LOW);
  digitalWrite(3,HIGH);
  digitalWrite(4,HIGH);
  digitalWrite(5,LOW);
  delay(1000);

  digitalWrite(2,HIGH);
  digitalWrite(3,LOW);
  digitalWrite(4,LOW);
  digitalWrite(5,HIGH);
  delay(1000);

  digitalWrite(2,HIGH);
  digitalWrite(3,LOW);
  digitalWrite(4,HIGH);
  digitalWrite(5,LOW);
  delay(1000);

  digitalWrite(2,LOW);
  digitalWrite(3,HIGH);
  digitalWrite(4,LOW);
  digitalWrite(5,HIGH);
  delay(1000);
}

第三步:将小车运动状态封装成函数

void  S(){
  //左轮 后退 正转 IN1 高  IN2 低
  digitalWrite(2,HIGH);
  digitalWrite(3,LOW);
  //右轮 后退 反转 IN3 低  IN4 高
  digitalWrite(4,HIGH);
  digitalWrite(5,LOW);
}

void W(){
  //左轮 前进 反转 IN1 低  IN2 高
  digitalWrite(2,LOW);
  digitalWrite(3,150);
  //右轮 前进 正转 IN3 高  IN4 低
  digitalWrite(4,LOW);
  digitalWrite(5,150);
}

void A(){
  //左轮 停止 IN1 低  IN2 低
  digitalWrite(2,LOW);
  digitalWrite(3,100);
  //右轮 前进 正转 IN3 高  IN4 低
  digitalWrite(4,LOW);
  digitalWrite(5,230);
}

void D(){
  //左轮 前进 反转 IN1 低 IN2 高
  digitalWrite(2,LOW);
  digitalWrite(3,230);
  //右轮 停止 IN3 低 IN4 低
  digitalWrite(4,LOW);
  digitalWrite(5,100);
}

void stop(){
  // 停止
  digitalWrite(2,LOW);
  digitalWrite(3,LOW);
  digitalWrite(4,LOW);
  digitalWrite(5,LOW);
}

第四步:了解串口

void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
   
}

void loop() {
  // put your main code here, to run repeatedly:
  Serial.print("hello");
  Serial.println("!!!");
}

五. 跟随模式开发

首先安装超声波测距模块
型号:HC-SR04

void HC_SR04(){
  //Trig接9,发送触发信号给超声波模块
  pinMode(9,OUTPUT);

  //Echo接8,通过读取8引脚高电平维持时间
  pinMode(8,INPUT);

  Serial.begin(9600);
}

void setup() {
  // put your setup code here, to run once:
  carInit();
  HC_SR04();
  myServo.attach(10);
  
}

超声波测距原理:

在这里插入图片描述


long getDis() {
  // 测距函数
  long t;
  long d;
  // put your main code here, to run repeatedly:
  // 发送一个10us的信号给超声波,9Trig
  digitalWrite(9, HIGH);
  delayMicroseconds(1);
  digitalWrite(9, LOW);
  delayMicroseconds(2);
  digitalWrite(9, HIGH);
  delayMicroseconds(10);
  digitalWrite(9, LOW);//超声波内部开始震荡,准备发送波
  // 关注Echo高电平维持的时间,代表超声波发送到返回的时间,微秒
  t = pulseIn(8,HIGH);
  Serial.println(t);
  
  // 距离(cm) = 时间(s) * 速度340m/s 34000cm/s = cm
  d = t * 0.017;

  return d;
}

六.超声波模块摇头

#include <Servo.h>

Servo  myServo;//因为很多子函数要用这个变量,所以把servo定义成全局变量,作用域是整个代码文件

void setup() {
  // put your setup code here, to run once:
   //定义一个Servo变量
  myServo.attach(10);//把舵机黄色信号线插在arduino的引脚10
}

void loop() {
  // put your main code here, to run repeatedly:
  myServo.write(30);//右方向
  delay(500);
  myServo.write(100);//中间方向
  delay(500);
  myServo.write(170);//左边方向
  delay(500);
  myServo.write(100);//中间方向
  delay(500);
}

七. 超声波摇头避障 (智障模式)


#include<Servo.h>
Servo myServo;

void  S(){
  //左轮 后退 正转 IN1 高  IN2 低
  digitalWrite(2,HIGH);
  digitalWrite(3,LOW);
  //右轮 后退 反转 IN3 低  IN4 高
  digitalWrite(4,HIGH);
  digitalWrite(5,LOW);
}

void W(){
  //左轮 前进 反转 IN1 低  IN2 高
  digitalWrite(2,LOW);
  digitalWrite(3,150);
  //右轮 前进 正转 IN3 高  IN4 低
  digitalWrite(4,LOW);
  digitalWrite(5,150);
}

void A(){
  //左轮 停止 IN1 低  IN2 低
  digitalWrite(2,LOW);
  digitalWrite(3,100);
  //右轮 前进 正转 IN3 高  IN4 低
  digitalWrite(4,LOW);
  digitalWrite(5,230);
}

void D(){
  //左轮 前进 反转 IN1 低 IN2 高
  digitalWrite(2,LOW);
  digitalWrite(3,230);
  //右轮 停止 IN3 低 IN4 低
  digitalWrite(4,LOW);
  digitalWrite(5,100);
}

void stop(){
  // 停止
  digitalWrite(2,LOW);
  digitalWrite(3,LOW);
  digitalWrite(4,LOW);
  digitalWrite(5,LOW);
}

long getDis() {
  // 测距函数
  long t;
  long d;
  // put your main code here, to run repeatedly:
  // 发送一个10us的信号给超声波,9Trig
  digitalWrite(9, HIGH);
  delayMicroseconds(1);
  digitalWrite(9, LOW);
  delayMicroseconds(2);
  digitalWrite(9, HIGH);
  delayMicroseconds(10);
  digitalWrite(9, LOW);//超声波内部开始震荡,准备发送波
  // 关注Echo高电平维持的时间,代表超声波发送到返回的时间,微秒
  t = pulseIn(8,HIGH);
  Serial.println(t);
  
  // 距离(cm) = 时间(s) * 速度340m/s 34000cm/s = cm
  d = t * 0.017;

  return d;
}

void carInit(){
  //串口初始化

  //左轮信号配置
  pinMode(2,OUTPUT);
  pinMode(3,OUTPUT);
  //右轮信号配置
  pinMode(4,OUTPUT);
  pinMode(5,OUTPUT);

 
  
}
void HC_SR04(){
  //Trig接9,发送触发信号给超声波模块
  pinMode(9,OUTPUT);

  //Echo接8,通过读取8引脚高电平维持时间
  pinMode(8,INPUT);

  Serial.begin(9600);
}
void setup() {
  // put your setup code here, to run once:
  carInit();
  HC_SR04();
  myServo.attach(10);
  
}

void loop() {
  // put your main code here, to run repeatedly:
  long youjuli;
  long zhongjuli;
  long zuojuli;
  myServo.write(100);//中间方向
  delay(500);
  zhongjuli = getDis();
  Serial.print("中间距离是:");
  Serial.println(zhongjuli);

  while(zhongjuli<=30){
    S();
    delay(300);
    stop();
    myServo.write(100);//中间方向
    delay(500);
    zhongjuli = getDis();
    delay(500);
  }
  if(zhongjuli<=45){
    stop();
    myServo.write(30);
    delay(500);
    youjuli = getDis();
    
    myServo.write(170);
    delay(500);
    zuojuli = getDis();

    if(zuojuli > youjuli){
      Serial.println("左转");
      A();
      delay(200);
      stop();
      myServo.write(100);//中间方向
      delay(500);
      zhongjuli = getDis();
    }else{
      Serial.println("右转");
      D();
      delay(200);
      stop();
      myServo.write(100);//中间方向
      delay(500);
      zhongjuli = getDis();
    }
  }
  else { //前方无障碍物,小车前进
    W();
  }
}

八.红外循迹模块 TCRT5000

TCRT5000传感器的红外发射二极管不断发射红外线,当发射出的红外线没有被反射回来或被反射回来但强度不够大时,红外接收管一直处于关断状态,此时模块的输出端为高电平,指示二极管一直处于熄灭状态


int leftX = 11;
int rightX = 12;

void carInit()
{
  // put your setup code here, to run once:
  pinMode(2, OUTPUT); // 配置2口为输出引脚
  pinMode(3, OUTPUT); // 配置3口为输出引脚
  //右轮信号方向初始化
  pinMode(4, OUTPUT); // 配置4口为输出引脚
  pinMode(5, OUTPUT); // 配置5口为输出引脚
}
void W() {

  digitalWrite(2, LOW);
  analogWrite(3, 100);
  digitalWrite(4, LOW);
  analogWrite(5, 100);
}

void stop() {

  digitalWrite(2, LOW);
  analogWrite(3, 0);
  digitalWrite(4, LOW);
  analogWrite(5, 0);
}

void A() {

  digitalWrite(2, LOW);
  analogWrite(3, 80); 
  digitalWrite(4, LOW);
  analogWrite(5, 250);
}

void D() {
 
  digitalWrite(2, LOW);
  analogWrite(3, 250); 
  digitalWrite(4, LOW);
  analogWrite(5, 80);
}


void setup() {
  // put your setup code here, to run once:
  carInit();
  pinMode(leftX,INPUT);
  pinMode(rightX,INPUT);
}

void loop() {

  if( digitalRead(leftX) == 1 && digitalRead(rightX) == 0 ){
      A();
  }

  if( digitalRead(leftX) == 0 && digitalRead(rightX) == 1 ){
    D();  
  }

  if( digitalRead(leftX) == 0 && digitalRead(rightX) == 0 ){
    W();  
  }
   if( digitalRead(leftX) == 1 && digitalRead(rightX) == 1 ){
    stop();  
  }
}

花了大概8到9个小时完成,很简单,第一次完嵌入式相关的内容。
大家可以去尝试,跟着四哥的做的。

  • 18
    点赞
  • 177
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
### 回答1: Arduino智能小车是一种基于Arduino控制板的小型智能车辆,它可以通过编程实现自主移动、避障、跟随等功能。一般来说,它主要由Arduino控制板、电机驱动模块、电机、传感器和外壳组成。 在制作Arduino智能小车时,可以通过编程控制电机的转动方向和速度,从而实现小车的前进、后退、左转、右转等运动方式。同时,可以通过超声波传感器等感知模块获取周围环境信息,从而实现避障、跟随等功能。 如果你想进一步了解如何制作Arduino智能小车,可以查看一些相关的教程和视频,了解所需硬件和软件,以及如何进行编程。 ### 回答2: Arduino智能小车是一种基于Arduino开发板的智能车辆,它结合了传感器、电机和编程控制,能够实现多种智能功能和自主导航。 首先,Arduino智能小车通过搭载各种传感器来感知周围环境。通常会使用红外线传感器、超声波传感器、灰度传感器等来检测障碍物、距离和地面颜色等信息。这些传感器可以在遇到障碍物时及时发出信号,避免碰撞,并根据传感器数据做出相应的动作。 其次,Arduino智能小车的动力系统通过电机来驱动。它通常配备直流电机和舵机,可以实现前进、后退、转弯等动作。借助编程控制,可以根据传感器的反馈信号,实现智能巡线、自动避障等功能。 最后,Arduino智能小车的核心是基于Arduino开发板的编程控制。使用Arduino编程语言,可以编写控制逻辑和算法,对小车的各个功能进行编程。通过编程,可以实现自动避障、巡线跟踪、遥控操控、声音和光线控制等多种智能功能。 总结来说,Arduino智能小车是一款结合了传感器、电机和编程控制的智能车辆。它具备感知周围环境、移动驱动和智能控制等功能。这种小车可以在教育、实验和娱乐等领域广泛应用,是学习和体验智能技术的绝佳平台。 ### 回答3: Arduino智能小车是一种基于Arduino控制板的智能机器人小车。它主要由车体、电机、传感器和Arduino板组成。通过编写程序,可以实现小车的自主避障、遥控驾驶、跟随等功能。 首先,小车的车体是由底盘、轮子和电机组成。电机通过Arduino板上的电机驱动模块控制。通过编写代码,可以实现小车的前进、后退、左转、右转等动作。 另外,小车上安装了各种传感器,如红外线传感器、超声波传感器和巡线传感器。红外线传感器可以用于检测前方的障碍物,实现自主避障功能。超声波传感器可以测量小车与障碍物的距离,可以在遥控驾驶模式下帮助驾驶员避免碰撞。巡线传感器可以用于检测地面上的黑线,实现小车的自动跟随功能。 在编写程序方面,可以利用Arduino开发环境进行编程。通过使用Arduino的库函数和API,可以轻松地控制小车的各种动作和功能。例如,使用Serial库可以实现小车与电脑的串口通信,通过模拟信号控制小车的运动。 总之,Arduino智能小车是一个具有自主避障、遥控驾驶和跟随功能的智能机器人。通过编写合适的程序,可以轻松地实现各种有趣的操作和应用。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Tom里的同学

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

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

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

打赏作者

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

抵扣说明:

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

余额充值