基于arduino的基础循迹小车(含代码)

目录

供电控制:

PWM连线实例

 硬件:

基础函数

代码


大学生第一次写博客,想帮助大家更好的入门单片机的实际开发,如有错误,欢迎评论区改正

        驱动采用L298N

供电控制:

        只需要在12V供电处接上7-12V电压,供电GND处与单片机共地即可,5V供电处会输出一个5V的电压,可以用于给单片机供电,做小车时最常用的就是这种方式。使用这种方式时,板载5V使能不用管。 

PWM连线实例

L298N电源
12V电源12V
GND电源负
L298NUNO
OUT1和OUT2电机1的两个端子
OUT3和OUT4电机2的两个端子
ENA5
ENB9
IN1和IN26和7
IN3和IN410和11
VSS5V
GNDGND

L298N详细信息大家可以看电机驱动----L298N,这里就不再重复了。

 硬件:

        单片机选用UNO或ESP32(本文代码是UNO的,ESP32改个引脚就好)。

      

基础函数

pinMode(引脚,状态)        //(INPUT输入,OUTPUT输出)

analogWrite(引脚,PWM(0-255))        //PWM函数

digitalWrite(引脚, 高低电平);        //引脚设置

digitalRead(引脚)        //读取引脚高低电平

代码

#include <Arduino.h>

int ENA=5, IN1=6, IN2=7, ENB=9, IN3=10,IN4=11;    //电机驱动
int L1=2, L2=4, R1=12, R2=13;    //循迹模块
int La, Lb, Ra, Rb;

void setup() {
  pinMode(L1, INPUT);
  pinMode(L2, INPUT);
  pinMode(R1, INPUT);
  pinMode(R2, INPUT);

  pinMode(IN1, OUTPUT);
  pinMode(IN2, OUTPUT);
  pinMode(IN3, OUTPUT);
  pinMode(IN4, OUTPUT);
}

// the loop routine runs over and over again forever:
void loop() {
  La = digitalRead(L1);
  Lb = digitalRead(L2);
  Ra = digitalRead(R1);
  Rb = digitalRead(R2);

  if (La == 0 && Lb == 0 && Ra == 0 && Rb == 0) {
      analogWrite(ENA, 50);
      digitalWrite(IN1, 1);
      digitalWrite(IN2, 0);
      analogWrite(ENB, 50);
      digitalWrite(IN3, 1);
      digitalWrite(IN4, 0);
  }
  if (La == 1 && Lb == 0 && Ra == 0 && Rb == 0) {
      analogWrite(ENA, 80);
      digitalWrite(IN1, 1);
      digitalWrite(IN2, 0);
      analogWrite(ENB, 80);
      digitalWrite(IN3, 0);
      digitalWrite(IN4, 1);
      delay(150);
  }
  if (La == 0 && Lb == 1 && Ra == 0 && Rb == 0) {
      analogWrite(ENA, 60);
      digitalWrite(IN1, 1);
      digitalWrite(IN2, 0);
      analogWrite(ENB, 50);
      digitalWrite(IN3, 1);
      digitalWrite(IN4, 0);
  }
  if (La == 0 && Lb == 0 && Ra == 1 && Rb == 0) {
      analogWrite(ENA, 50);
      digitalWrite(IN1, 1);
      digitalWrite(IN2, 0);
      analogWrite(ENB, 60);
      digitalWrite(IN3, 1);
      digitalWrite(IN4, 0);
  }
  if (La == 0 && Lb == 0 && Ra == 0 && Rb == 1) {
      analogWrite(ENA, 80);
      digitalWrite(IN1, 0);
      digitalWrite(IN2, 1);
      analogWrite(ENB, 80);
      digitalWrite(IN3, 1);
      digitalWrite(IN4, 0);
      delay(150);
  }
  if (La == 1 && Lb == 1 && Ra == 0 && Rb == 0) {
      analogWrite(ENA, 80);
      digitalWrite(IN1, 1);
      digitalWrite(IN2, 0);
      analogWrite(ENB, 80);
      digitalWrite(IN3, 0);
      digitalWrite(IN4, 1);
  }
  if (La == 0 && Lb == 0 && Ra == 1 && Rb == 1) {
      analogWrite(ENA, 80);
      digitalWrite(IN1, 0);
      digitalWrite(IN2, 1);
      analogWrite(ENB, 80);
      digitalWrite(IN3, 1);
      digitalWrite(IN4, 0);
  }
  if (La == 1 && Lb == 1 && Ra == 1 && Rb == 1) {
      analogWrite(ENA, 60);
      digitalWrite(IN1, 1);
      digitalWrite(IN2, 0);
      analogWrite(ENB, 60);
      digitalWrite(IN3, 1);
      digitalWrite(IN4, 0);  
  }
  if (La == 1 && Lb == 0 && Ra == 0 && Rb == 1) {
      analogWrite(ENA, 60);
      digitalWrite(IN1, 1);
      digitalWrite(IN2, 0);
      analogWrite(ENB, 60);
      digitalWrite(IN3, 1);
      digitalWrite(IN4, 0);  
  }
  delay(1);
}

正常应该封装模块化的,但我觉得这样其实也行(毕竟我是写好一个判断就开始Ctrl+v了)

代码有问题欢迎指正

下面有一个UNO循迹小车的照片和ESP32小车(因为我真的做了两个车...)

UNO小车战损版

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值