基于Arduino的巡线小车

简介: 巡线小车

本文是基于Ardino的两轮循迹小车源码。

由于学校的要求于是进行了相应的小车开发,由于结构过于简单,在此就不再赘述,直接附上当时比赛的源代码。

intLeft_motor_go=8;     //左电机前进(IN1)intLeft_motor_back=9;     //左电机后退(IN2)intRight_motor_go=10;    // 右电机前进(IN3)intRight_motor_back=11;    // 右电机后退(IN4)constintSensorRight1=6;     //右循迹红外传感器(P3.2 OUT1)constintSensorRight2=3;    //右循迹红外传感器constintSensorLeft1=4;       //左循迹红外传感器(P3.3 OUT2)constintSensorLeft2=5;       //左循迹红外传感器(P3.3 OUT2)intSL1;    //左循迹红外传感器状态 intSL2;    //左循迹红外传感器状态intSR1;    //右循迹红外传感器状态intSR2;    //右循迹红外传感器状态voidsetup()
{
//初始化电机驱动IO为输出方式pinMode(Left_motor_go,OUTPUT); // PIN 8 (PWM)pinMode(Left_motor_back,OUTPUT); // PIN 9 (PWM)pinMode(Right_motor_go,OUTPUT);// PIN 10 (PWM) pinMode(Right_motor_back,OUTPUT);// PIN 11 (PWM)//  pinMode(key,INPUT);//定义按键接口为输入接口// pinMode(beep,OUTPUT);pinMode(SensorRight1, INPUT); //定义右循迹红外传感器为输入pinMode(SensorRight2, INPUT);
pinMode(SensorLeft1, INPUT); //定义左循迹红外传感器为输入pinMode(SensorLeft2, INPUT);
}
//=======================智能小车的基本动作=========================voidruns()
{
digitalWrite(Right_motor_go,HIGH);  // 右电机前进digitalWrite(Right_motor_back,LOW);     
analogWrite(Right_motor_go,100);//PWM比例0~255调速,左右轮差异略增减analogWrite(Right_motor_back,0);
digitalWrite(Left_motor_go,LOW);  // 左电机前进digitalWrite(Left_motor_back,HIGH);
analogWrite(Left_motor_go,0);//PWM比例0~255调速,左右轮差异略增减analogWrite(Left_motor_back,100);
//delay(time * 100);   //执行时间,可以调整  }
voidrun()
{
digitalWrite(Right_motor_go,HIGH);  // 右电机前进digitalWrite(Right_motor_back,LOW);     
analogWrite(Right_motor_go,100);//PWM比例0~255调速,左右轮差异略增减analogWrite(Right_motor_back,0);
digitalWrite(Left_motor_go,LOW);  // 左电机前进digitalWrite(Left_motor_back,HIGH);
analogWrite(Left_motor_go,0);//PWM比例0~255调速,左右轮差异略增减analogWrite(Left_motor_back,100);
//delay(time * 100);   //执行时间,可以调整  }
//void left(int time)         //左转(左轮不动,右轮前进)voidspin_left()
{
digitalWrite(Right_motor_go,HIGH);  // 右电机前进digitalWrite(Right_motor_back,LOW);
analogWrite(Right_motor_go,90); 
analogWrite(Right_motor_back,0);//PWM比例0~255调速digitalWrite(Left_motor_go,HIGH);   //左轮后退digitalWrite(Left_motor_back,LOW);
analogWrite(Left_motor_go,75); 
analogWrite(Left_motor_back,0);//PWM比例0~255调速//delay(time * 100);  //执行时间,可以调整  }
voidspin_lefts()
{
digitalWrite(Right_motor_go,HIGH);  // 右电机前进digitalWrite(Right_motor_back,LOW);
analogWrite(Right_motor_go,140.3); 
analogWrite(Right_motor_back,0);//PWM比例0~255调速digitalWrite(Left_motor_go,HIGH);   //左轮后退digitalWrite(Left_motor_back,LOW);
analogWrite(Left_motor_go,0); 
analogWrite(Left_motor_back,140);//PWM比例0~255调速///delay(time * 100);  //执行时间,可以调整  }
//void right(int time)        //右转(右轮不动,左轮前进)voidspin_right()
{
digitalWrite(Right_motor_go,LOW);   //右电机后退digitalWrite(Right_motor_back,HIGH);
analogWrite(Right_motor_go,0); 
analogWrite(Right_motor_back,75);//PWM比例0~255调速digitalWrite(Left_motor_go,LOW);//左电机前进digitalWrite(Left_motor_back,HIGH);
analogWrite(Left_motor_go,0); 
analogWrite(Left_motor_back,90);//PWM比例0~255调速//delay(time * 100);  //执行时间,可以调整  }
voidspin_rights()
{
digitalWrite(Right_motor_go,LOW);   //右电机后退digitalWrite(Right_motor_back,HIGH);
analogWrite(Right_motor_go,140); 
analogWrite(Right_motor_back,0);//PWM比例0~255调速digitalWrite(Left_motor_go,LOW);//左电机前进digitalWrite(Left_motor_back,HIGH);
analogWrite(Left_motor_go,0); 
analogWrite(Left_motor_back,140.3);//PWM比例0~255调速//delay(time * 100);  //执行时间,可以调整  }
voidloop()
{ 
// keysacn();//调用按键扫描函数  while(1)
  {
//有信号为LOW  没有信号为HIGH   检测到黑线  输出高  检测到白色区域输出低SR1=digitalRead(SensorRight1);//有信号表明在白色区域,车子底板上L1亮;没信号表明压在黑线上,车子底板上L1灭SR2=digitalRead(SensorRight2);
SL1=digitalRead(SensorLeft1);//有信号表明在白色区域,车子底板上L2亮;没信号表明压在黑线上,车子底板上L2灭SL2=digitalRead(SensorLeft2);
if (SL1==LOW&&SL2==LOW&&SR1==LOW&&SR2==LOWorSL2==HIGH&&SL1==HIGH&&SR2==HIGH&&SR1==LOWorSL2==LOW&&SL1==HIGH&&SR2==HIGH&&SR1==HIGHorSL2==LOW&&SL1==HIGH&&SR2==HIGH&&SR1==LOW   )
run();   //调用前进函数elseif (SR1==LOW&&SL2==LOW&&SL1==HIGH&&SR2==LOW)
spin_right();
elseif (SL1==LOW&&SR2==LOW&&SL2==HIGH&&SR1==LOW)
spin_rights();
elseif (SL1==HIGH&&SL2==HIGH&&SR1==LOW&&SR2==LOW)
spin_rights();
elseif (SL1==LOW&&SR1==HIGH&&SR2==LOW&&SL2==LOW) 
spin_lefts();
elseif (SR1==LOW&&SR2==HIGH&&SL2==LOW&&SL1==LOW)
spin_left();
elseif (SL1==LOW&&SL2==LOW&&SR1==HIGH&&SR2==HIGH)
spin_lefts();
elseif (SL1==HIGH&&SL2==HIGH&&SR1==HIGH&&SR2==HIGHorSR1==HIGH&&SR2==LOW&&SL1==HIGH&&SL2==LOWorSL1==LOW&&SL2==HIGH&&SR1==LOW&&SR2==HIGH )
runs();
  }
  }
相关文章
|
计算机视觉
使用计算机视觉实战项目精通 OpenCV:1~5
使用计算机视觉实战项目精通 OpenCV:1~5
950 0
|
机器学习/深度学习 人工智能 自然语言处理
人工智能应用领域有哪些
本文全面探讨了人工智能(AI)的应用领域和技术核心,涵盖医疗、交通、金融、教育、制造、零售等多个行业,并分析了AI技术的局限性及规避策略。同时,介绍了生成式人工智能认证项目的意义与展望。尽管AI发展面临数据依赖和算法可解释性等问题,但通过优化策略和经验验证,可推动其健康发展。未来,AI将在更多领域发挥重要作用,助力社会进步。
|
机器学习/深度学习 数据采集 人工智能
YOLOv8手势识别项目实战-石头剪刀布实时检测系统
本项目结合了 YOLOv8 检测模型 和 PyQt5 图形界面工具,成功实现了石头剪刀布手势的实时识别。支持摄像头、图片、视频等多种输入方式,能够快速识别并显示实时结果。配套完整的源码和训练流程说明,帮助你快速部署并定制自己的手势识别系统
YOLOv8手势识别项目实战-石头剪刀布实时检测系统
|
JavaScript 前端开发 网络协议
Vue.js 与 WebSocket 的惊世联姻!实时数据通信的震撼变革,你敢错过?
【8月更文挑战第30天】在现代Web开发中,实时数据通信至关重要。Vue.js作为流行前端框架,结合WebSocket技术,实现了高效实时的数据交互。本文简要介绍了WebSocket原理及其在Vue.js项目中的应用方法,包括建立连接、监听事件及数据处理等步骤,展示了如何利用二者结合轻松应对实时聊天、股票更新等多种场景,为开发者提供了实用指南。希望本文能帮助您更高效地实现Web应用的实时通信功能。
736 0
|
并行计算 算法 安全
面试必问的多线程优化技巧与实战
多线程编程是现代软件开发中不可或缺的一部分,特别是在处理高并发场景和优化程序性能时。作为Java开发者,掌握多线程优化技巧不仅能够提升程序的执行效率,还能在面试中脱颖而出。本文将从多线程基础、线程与进程的区别、多线程的优势出发,深入探讨如何避免死锁与竞态条件、线程间的通信机制、线程池的使用优势、线程优化算法与数据结构的选择,以及硬件加速技术。通过多个Java示例,我们将揭示这些技术的底层原理与实现方法。
1098 3
|
Kubernetes 容器 Perl
kubernetes强制删除pod、namespace等资源
kubernetes强制删除pod、namespace等资源
1845 0
|
Go 开发者
一文详解Go语言接口嵌套组合的精髓!
一文详解Go语言接口嵌套组合的精髓!
673 0
|
Web App开发 搜索推荐 Unix
Linux系统之MobaXterm远程连接centos的GNOME桌面环境
【10月更文挑战第21天】Linux系统之MobaXterm远程连接centos的GNOME桌面环境
3565 5
Linux系统之MobaXterm远程连接centos的GNOME桌面环境
|
人工智能 搜索推荐 数据挖掘
AI教育的评估方法有哪些?
【6月更文挑战第2天】AI教育的评估方法有哪些?
970 2