3.基于Arduino的循迹小车

2023-11-04

前言:长期以来一直把arduino看为一款比较弱智简单的单片机,好像事实也是如此,小学生基本不会去学51单片机,但是却在学习arduino单片机,因为相当于傻瓜编程,网上程序一扎一大堆,甚至小学生比有的大学生玩的还溜

arduino使用的是专用的编译器arduino IDE,注意使用时下程序前需要选择芯片型号和串口号,此软件自带串口监视器,也就是串口助手,入口在编辑界面的右上角,使用的是C++作为编程语言,有C语言的功底完全可以胜任

循迹小车是单片机项目中,中低级的一个项目,也是一种很好的练手项目,除了需要电机驱动、电池供电、核心板电路板,最重要的是传感器的方案,在本文中,主要介绍传感器的电路和编程,对电机电路,降压电路等等不予介绍

传感器是小车的眼睛,循线的方式有很多种,其中有电磁循线,单条黑胶带循线,双黑胶带循线等等,具体的其他等等可以参考飞思卡尔智能车竞赛,最简单也是成本最低的是使用单条黑胶带循线,使用的传感器是红外黑白传感器,某宝一搜就能见到,传感器模块前有两个二极灯珠,一个是发送端,一个是接收端,后面有滑动变阻器可以调节检测距离,当下面照着的是白色是高电平,当下面是黑色是高电平,不同模块电平可能是反着的,一个能循线的小车最少需要装两个传感器才能识别并且循线

下面就是程序如何编写了,看你是几驱的电机然后写什么样的程序,但是写程序前都要想好思路,程序如何运行,我们写的程序就是告诉小车,传感器检测到什么样的信号时你要对应做出什么动作。比如一种策略(两个传感器),写程序前首先描述出这种策略,有几种运行状况:1.两边都是白色,直行  2.左黑右白,左行  3.左白右黑,右行  4.左检测到黑,右检测到黑之前,一直左拐直到右检测到黑  5.反方向全都对应反过来,使用标志位来记录运行状态

下面列一下三个传感器的程序:

 sensorS=digitalRead(sensorP);
 if ((digitalRead(tracker_sensor_right) == 0)&& (digitalRead(tracker_sensor_left) == 0)&& (digitalRead(tracker_sensor_straight) == 1) && flag1 ==0 && flag2==0)    {moveForward() ;  a=1;}
 if ((digitalRead(tracker_sensor_right) == 1)&& (digitalRead(tracker_sensor_left) == 0) && flag1 ==0 && flag2==0)    {moveRight();a=2;}
 if ((digitalRead(tracker_sensor_right) == 0)&& (digitalRead(tracker_sensor_left) == 1) && flag1 ==0 && flag2==0)   { moveLeft(); a=3;}

 if ((digitalRead(tracker_sensor_right) == 0)&& (digitalRead(tracker_sensor_left) == 0)&& (digitalRead(tracker_sensor_straight) == 0) && flag1 ==0 && flag2==0)    
   {
   if(a==1)moveForward() ;
   if(a==2)moveRight() ;
   if(a==3)moveLeft() ;
   }
 
 if (digitalRead(tracker_sensor_right) == 1&& digitalRead(tracker_sensor_left) == 1&& digitalRead(tracker_sensor_straight) == 1) { flag1 = 1;}     //装货
 if (sensorS==LOW)   { delay(500);flag1 = 0; }       //装货结束
 if(flag1==1 || flag2 ==1) {delay(5); moveStop();}//过了线再停车
 if (sensorS==LOW)   { flag1 = 0; }       //装货结束

 if (digitalRead(tracker_sensor_rightside) == 1 && digitalRead(tracker_sensor_leftside) == 0)
    {
      flag2 = 1; 
     myservo.write(55);
     delay(1000);
     myservo.write(150);
     delay(2000);
     myservo.write(55);
     flag2 = 0;
     }

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

3.基于Arduino的循迹小车 的相关文章

  • 蓝牙 HC-05 发送错误 1F 仅适用于 INQ 命令

    我的新蓝牙 HC 05 模块有问题 在 AT 模式下 它可以与我需要的所有命令完美配合 除了 INQ 我已经尝试事先发送一大堆其他命令 AT INIT OK AT ORGL OK AT ROLE 1 OK AT CLASS 0 OK 他们都
  • Mac OS 10.9 不显示 Arduino 的 USB 调制解调器

    我正在尝试选择 dev tty usbmodem on my Arduino Lenardo设备 操作系统是Mac OSX 10 9 问题是它没有显示 我什至尝试安装FTDI http www ftdichip com Drivers VC
  • 如何使用arduino从sim900模块的RTC读取日期和时间数据?

    include SIM900 h include
  • 如何在 Arduino 上比较 __FlashStringHelper* 和 char*?

    我有一个将文本行输出到串行的板 我需要将这些文本行与我所知道的文本进行比较 本质上 我想做strcmp thestring F knownstring 但是似乎没有一个采用 FlashStringHelper 类型的 strcmp 版本 有
  • PySerial 从 Arduino 读取线路的延迟

    我正在使用带有基本 DigitalReadSerial 设置的 arduino uno 如下所述 http arduino cc en Tutorial DigitalReadSerial http arduino cc en Tutori
  • 如何将 ASCII char 转换为其 ASCII int 值?

    我想将 char 转换为它的ASCII http en wikipedia org wiki ASCIIint 值 我可以用所有可能的值填充一个数组并与其进行比较 但这对我来说似乎不正确 我想要类似的东西 char mychar k pub
  • sim800L GPRS 发布请求

    我一直在研究 LoNet 迷你 GSM 模块 SIM800L 并将其与 Arduino 连接 我已插入 SIM 移动卡并且可以连接互联网 通过串行监视器 我可以毫无问题地与它通信 但是当向网络服务器页面发出 GET 或 POST 请求时 它
  • ESP32 Arduino-ide如何获取唯一id

    我试图自动为每个 esp32 设置一个唯一的 id 在我使用提供该方法的 ESP IDF 框架对设备进行编程之前esp efuse mac get default 这将返回一个 8 字节值 该值在我手上的所有设备上都是唯一的 在arduin
  • 如何实现Android Open Accessory模式即服务?

    我一直在研究 Android 开放配件开发套件 依照指示Google 提供的 DemoKit 示例 http developer android com guide topics usb accessory html 我在使解决方案适应我的
  • Arduino 的 C++ 类文件中的字符串无法编译

    我正在用 C 为 Arduino 编写一个堆栈类sketch http www arduino cc en Tutorial Sketch 我相信它完全符合AVR 如果这就是它的名字 我记不清了 编译器 我都用过malloc and fre
  • Arduino:连接字符串时崩溃和错误

    我尝试将 AES 256 加密的输出连接到一个字符串 将此字符串与从 Android 手机发送的加密字符串进行比较 基本上 连接似乎有效 但在几次运行后会出现错误 不可读的字符 字符串变得更短而不是更长 或崩溃 它是可重现的 重启后在同一点
  • pySerial 与 python 2.7 和 3.4 的差异

    我正在开发一个项目 需要通过串口将一些数字从 Windows 10 中的 python 发送到 arduino uno 作为一个简单的测试 我只想通过发送 2 来打开 LED 并通过从命令提示符发送 4 来关闭 LED 尽管我希望最终能够将
  • Arduino 上的 Serial 和 Stream 有什么区别,Serial.write 是如何实现的?

    我很难理解串行和流这两个术语之间的区别 串行不是流的一种吗 我对作业有一些我不明白的问题 计算机通过使用 流或串行 读取 彼此发送的数据来确定每个字节的含义 Also Serial write 我也很困惑 它返回一个字节的数据 对吗 一个字
  • 使用 Java 控制 Arduino

    我正在寻找一个LED http en wikipedia org wiki Light emitting diode用Java程序打开和关闭 我用 C 完成了这个项目大约 5 分钟 但用 Java 似乎更具挑战性 我让 Arduino 等待
  • 通过iPhone音频插孔读取数据

    我正在寻找一种方法来读取通过 iPhone 的音频插孔从 Arduino 发送的原始数据 我搜索了很多并发现this https github com sanjibahmad Is Headphone Plugged In tree mas
  • Arduino 高低

    我有一个 Arduino 我想知道到底是什么HIGH and LOW意思是 就实际值而言 它们是否有符号ints unsigned ints unsigned char是 他们的价值观是什么 我猜HIGH and LOW可能是unsigne
  • Arduino 错误:未命名类型?

    我已经编写了一个库 但遇到错误未命名类型的问题 我已经尝试了一切 搜索了几个小时 但没有运气 库放置在arduino sketch文件夹的 libraries 文件夹中 请帮忙 我使用的是 OSX 但 Windows 上也出现同样的问题 这
  • Arduino 串行输出丢弃字符

    当我尝试为我的 Arduino Uno 编写一些代码时 我遇到了一个奇怪的串行输出 我有这个原始代码 MyClass myclass void setup Serial Begin 9600 Serial println Starting
  • 如何将 Android 应用程序正确连接到支持蓝牙的 Arduino 微控制器上的 RFCOMM 套接字?

    我正在与我大学的一些学生合作开发一个简单的蓝牙 Android 应用程序 该应用程序将用于与连接有蓝牙模块的 Arduino 微控制器进行串行通信 RFCOMM 据我所知 我正在使用正确的蓝牙地址和 UUIDRFCOMM SPP 00001
  • PHP 通过 TCP/IP 发送消息

    我尝试通过 TCP IP 从 PHP 网站向 Arduino 发送消息 使用以下代码我可以从 php 网站发送消息 问题是 当第一次调用该网站时 消息不会立即发送 网站刷新几次后 消息就会到达 但逻辑上很多次 就像网站刷新量一样 已经尝试将

随机推荐

  • spring源码之@Autowired属性注入

    注入现象 当我们在属性上面加上 Autowired的时候 spring就要根据Type来注入实例了 那么到底会找哪个实例的如果有多个怎么办 今天就来实验一下 多接口注入 当注入的属性接口下有多个实现 这个时候运行的话是 public cla
  • npm link实操详细指南

    准备 首先我们需要有两个npm包 一个作为依赖包 一个作为应用包 依赖包 deps 应用包 app 然后仔仔细细的看一下依赖包的包名和输出路径 如main 好几次用法不对都是因为main字段配置的路径有问题 如我的依赖包package js
  • 多线程(Threading)和多进程(Multiprocessing)

    多线程和多进程 线程和进程是什么 进程间通信方式 线程间通信方式 死锁 Python多线程 Threading 什么是多线程 基本方法函数 join Queue 继承使用线程 同步 GIL锁 锁 Python多进程 多核 Multiproc
  • java.lang.ClassCastException的java类型转换异常解决方案

    在项目中 需要使用XStream将xml string转成相应的对象 却报出了java lang ClassCastException com model test cannot be cast to com model test的错误 原
  • 钟汉良日记:什么副业最好?可以持续带来复利效应的技能,写作!

    2022年9月3日 周六 大晴天 看到一些人做抖音 做自媒体发财了 你是不是也挺羡慕的 可是真要你也去拍摄短视频 做直播真人出镜 大多数人又做不到 怎么办 我觉得 大家还是要认识到一点 打铁还需自身硬 你如果没有足够的对应的能力 只能做一个
  • 【从零开始的Java开发】2-10-2 Servlet入门:Servlet开发步骤、请求参数的发送与接收、Get和Post、注解

    文章目录 概述 软件结构发展史 Tomcat与Servlet Servlet 第一个Servlet JavaWeb工程结构 Servlet开发步骤 请求参数的发送与接收 Get和Post请求方法 Servlet生命周期 使用注解简化配置 启
  • 在Unity中双击打不开vs脚本文件

    从官网下载软件后 创建新项目后 容易漏掉这个设置 导致双击脚本打不开 解决方法 点击找到Edit gt Preferences gt External Tool gt External Script Editor 将对应设置改成你所下载的v
  • 11. TypeScript 条件类型

    TypeScript 条件类型 1 条件类型基本使用 可以使用extends关键字和三元表达式 实现条件判断 interface Fish name1 string interface Water name2 string interfac
  • River Jumping【贪心+模拟】

    题目链接 我们可以贪心的从前往后 每次选最接近的且满足条件的这样的贪心 然后从后往前的时候 就是直接用倒着一个个判断是否合法即可 include
  • 2023百度云智大会:科技与创新的交汇点

    这次的百度云智大会 可谓是亮点云集 发布了包含42个大模型 41个数据集 10个精选应用范式的全新升级千帆大模型平台2 0 发布首个大模型生态伙伴计划 而且也预告了文心大模型4 0的发布 大模型服务的成绩单也非常秀 月活企业数已近万家 覆盖
  • 【已解决】Docker启动失败,报错Cannot connect to the Docker daemon at unix:///var/run/docker.sock.

    报错原因 无法与Docker守护进程建立连接 守护进程负责管理Docker容器和镜像 并提供对Docker API的访问 解决措施 输入以下代码 重启docker服务 service docker start 验证成功 1 输入以下代码 则
  • 如何避免爬虫IP被屏蔽

    各位爬友们好 作为一名专业的爬虫代理提供者 我要和大家分享一些避免爬虫IP被屏蔽的实用技巧 你知道吗 当我们爬取数据的时候 很容易被目标网站识别出来并封禁我们的IP地址 导致无法继续爬取数据 这个问题困扰了很多爬虫程序员 但别担心 今天我就
  • jetbrains IDE设置 phpstorm

    PhpStorm插件 进入 File gt Settings gt Plugins gt Browse repositories 搜索你想要的插件 PHP插件 Symfony Plugin 支持 Symfony 2 3 4 Laravel
  • vue+element-ui el-table组件二次封装实现虚拟滚动,解决数据量大渲染DOM过多而卡顿问题

    一 此功能已集成到TTable组件中 二 最终效果 三 需求 某些页面不做分页时 当数据过多 会导致页面卡顿 甚至卡死 四 虚拟滚动 一 固定一个可视区域的大小并且其大小是不变的 那么要做到性能最大化就需要尽量少地渲染 DOM 元素 而这个
  • stm32电机控制之控制两路直流电机!看完你会了吗

    小车使用的电机是12v供电的直流电机 带编码器反馈 这样就可以采用闭环速度控制 这里电机使用PWM驱动 速度控制框图如下 由以上框图可知 STM32通过定时器模块输出PWM波来控制两个直流电机的转动 通过改变PWM占空比的大小可以改变电机的
  • 【分享】科大讯飞星火认知大模型(初体验)

    前言 哈喽 大家好 我是木易巷 随着人工智能技术的迅猛发展 自然语言处理 NLP 成为了热门话题 在众多NLP模型中 科大讯飞星火认知大模型成为了一个备受瞩目的新秀 今天我们来了解一下这个由科大讯飞公司开发的人工智能模型 内测方法在文末 5
  • 智齿科技:更坚定地迈出“全面国际化”战略步伐

    2月28日 智齿科技召开了以 领航出海 联络世界 为主题的媒体沟通会 近二十家出海媒体 ToB行业媒体代表参与了此次会议 会上 智齿科技联合创始人 CEO徐懿公布了国际化战略实施情况 自2021年底开展国际化战略至今 智齿科技已初步构建了国
  • java异常处理

    1 概念 在我们的程序运行时经常会出现一些操作会使我们的程序无法继续运行下去 用户的非正常输入或者程序本身逻辑上的错误等 这些都会导致我们程序无法继续进行下去 但我们想要这个程序继续执行 就需要进行处理 1 1 在java中 运行时的错误会
  • Qt-QLabel的创建使用和修改属性

    一 QLabel的 创建 方法1 QLabel lable1 new QLabel 默认位置 0 0 lable1 gt setText 这是一个QLabel1 设置文本 lable1 gt setParent this 设置parent
  • 3.基于Arduino的循迹小车

    前言 长期以来一直把arduino看为一款比较弱智简单的单片机 好像事实也是如此 小学生基本不会去学51单片机 但是却在学习arduino单片机 因为相当于傻瓜编程 网上程序一扎一大堆 甚至小学生比有的大学生玩的还溜 arduino使用的是