基于Arduino智能小车

您所在的位置:网站首页 循迹小车arduino编程 基于Arduino智能小车

基于Arduino智能小车

2024-07-14 06:16| 来源: 网络整理| 查看: 265

基于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 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 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


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3