智能寻迹避障清障机器人设计(第四章)

4 Arduino介绍与手机蓝牙APP开发

4.1 Arduino介绍

在Arduino出现之前,意大利一所高科技技术学校的学生常常抱怨市面上的微控处理器基本上操作复杂,性价比低,无法同时适应多种复杂多变的微传感器。至此,2005年的某一天,该校的老师马西莫·班兹和来这所学校研究的学者大卫·卡泰尔斯一起讨论了现下微控制器的相关问题。于是,两人设计了自己的电路板,马西莫·班兹的学生Banzi设计该电路板的编程语言。该电路板从硬件设计到软件语言编译仅仅只用3天便完成,并根据马西莫·班兹的生活爱好把该电路板命名Arduino,意在怀念自己常去的一个地方。

Arduino单片机属于AVR单片机,可使用C语言来编程。此外,Arduino把一些简单的参数模块化,使其开发难度大大降低,并支持Windows、Mac OS、Linux、甚至还有的用安卓系统,通过连接手机开发,可见Arduino跨平台能力强。其Arduino相关的MCU型号,以及一些I/O口的相关作用说明如表4.1 Arduino常见版本。

表4.1 Arduino常见版本

|-------------------------------------|--------------------------------|--------------------|--------------------------------|--------------------------------|--------------------|--------------------|------------------------------|
| MCU | ATmega168/32 8 | ATmega328 | ATmega168/32 8 | ATmega168/32 8 | ATmega32u4 | ATmega2560 | AT91SAM3x8E |
| 工作电压/ IO 电压 | 5v | 5v | 5v | 5v | 5v | 5v | 3.3V |
| 数字IO | 14 | 14 | 14 | 14 | 20 | 14 | 14 |
| 模拟 IO | 6 | 6 | 6 | 6 | 12 | 16 | 12 |
| 时钟频率 | 16Hz | 16Hz | 16Hz | 16Hz | 16Hz | 16Hz | 84Hz |
| Flash | 16KB/32KB | 32KB | 16KB/32KB | 16KB/32KB | 32KB | 256KB | 512KB |
| SRAM | 1KB/2KB | 2KB | 1KB/2KB | 1KB/2KB | 2.5KB | 8K | 96KB |
| EEPRO M | 512bytes/1KB | 1KB | 512bytes/1KB | 512bytes/1KB | 1KB | 4KB | - |
| USB芯片 | FTDIFT232RL | ATmega16u2 | FTDIFT232RL | - | - | ATmega16u2 | - |
| 其它特点 | 早起Arduino版本现已停产 | 目前使用人数最多的型号适合初学者使用 | 功能和 Duemilanove一致但更为小巧 | 最小的Arduino控制器但下载程序得搭配外部的下载器 | 可以模拟键盘鼠标等USB设备 | 配置最高的8位Arduino控制器 | 32位Arduino控制器带有模拟输出引脚2个CAN总线 |

本课题使用的Arduino UNO用的芯片型号便是Atmega 328,根据表4.1不能发现该Arduino的数字I/O口以及模拟I/O口数,以及一些实验中需要注意的参数等等。

4.1.1 Arduino UNO R3管脚图

如图4.1.1所示,Arduino拥有6路数字I/O口可以直接使用PWM输出;并且Arduino支持SPI通信;模拟I/O口D18、D19可以使用I2C总线连接OLED显示屏的SDA和SCL;Arduino板还可以进行异步全双工通信,大大解决了很多单片机只能发送或者接收的缺陷,使得该单片机进行一边发送数据一边接收数据。

图4.1.1 Arduino UNO管脚图

4.1.2 Arduino UNO R3实物图

如图4.1.2所示,Arduino UNO R3主板拥有14个数字I/O口,并且多数I/O口都拥有二个及其以上特定输出。如:有的数据I/O口不仅可以用来直接输出PWM信号,而且可以用来做SPI通信插口,可见其I/O口的功能强大。除此之外,该主板还有6个模拟I/O口,支持TX/RX全双工通信,可以通过USB口或者外接电源口供电,也可以经过VIN与GND或者VCC与GND供电,其Arduino输出电压可以选择3.3V的DC电压或者5V的DC电压,可直接通过USB口载代码,相对方便。

图4.1.2 Arduino UNO R3实物图

4.1.3 Arduino编程介绍

虽然说Arduino的编程和很多类型单片机的编程差不多,都是使用常见的C语言编译,但同时也要学会区分于其他编程,Arduino在使用时常常要使用封装函数,从而减轻其工作量,在其书写时还应注意其格式。如所要使用引脚的引脚以及其引脚模式要在void setup()函数里面注明,而主函数要写进void loop()函数里面才能连续运行。由于Arduino很多库函数都是开源的,一些常见的功能可直接调用库函数,要实现一些拓展功能也可以在网上下载其库函数来调用,如:红外控制函数库,舵机控制函数库以及LCD函数库等等。

4.2 手机蓝牙APP的开发

本课题开始只使用了红外遥控器控制,但由于实验红外遥控与小车所设置的PWM信号产生影响,对实验中很多数据产生了一定的影响,故而使用了简单易学的AppInventor开发了一款蓝牙遥控APP,该AppInventor支持在线编译,编译完成即可以直接直接打包APK,然后通过扫码下载到手机里面安装即可。现在简单的讲述一下如何在AppInventor开发APP,首先通过QQ登录AppInventor官网,创建新的项目,先是设计前端页面,可直接把需要的布局、按键、标签、滑动模块、计时器、蓝牙客户端等拉进编辑页面,根据所需要的效果改动按键、标签、布局的大小形状等,编辑好前端,下面便是后端逻辑层,逻辑层首先要确定APP运行的先后问题,以及APP在手机上面显示时的布局大小、形状、点击按键时运行哪一步都要有明确的顺序问题。如本课题的蓝牙APP很简单,主要二个页面便完成,一个是按键选择页面,一个是蓝牙选择页面。当打开APP进入的是按键选择页面,其大多数按键标签等的布局前端设计好了,后端主要对按键的点击状态做出判断,先要初始化按键以及蓝牙的状态,并设置好需要用到的按键、列表、计时器的状态;设置按下按键时显示蓝牙选择列表;当选择列表里对应的蓝牙对应的蓝牙时,显示对应的连接状态;并通过计算器定时获取接收到的信息并在标签中显示出来,下面便主要是调用相应的按键状态发送设置好的字符串,编程主要代码如图4.2.1所示。

图4.2.1 蓝牙APP主要编程代码

最终,根据本课题所需要的功能做了如图4.2.2所示的手机蓝牙APP,该APP可以通过发送指令控制智能小车,也可以通过按键来控制小车的运动以及速度,通过接收的数据可以观看智能小车的实时状况如小车运动状态、运动模式、以及测距距离等等。

图4.2.2 蓝牙APP手机展示效果图

4.3 本章小结

本章讲述了Arduino的发展历程以及Arduino一些引脚的功能利用;并对Arduino的一些相关编程规则做出了介绍;还描述了如何使用AppInventor开发蓝牙APP,并对该APP的使用及其能实现的功能作出一系列的介绍。

相关推荐
chenkangck5033 分钟前
AI大模型之旅--milvus向量库安装
人工智能·aigc·milvus
学习前端的小z36 分钟前
【AI视频】Runway:Gen-2 图文生视频与运动模式详解
人工智能·aigc·音视频
小珑也要变强37 分钟前
队列基础概念
c语言·开发语言·数据结构·物联网
SpikeKing2 小时前
LLM - 理解 多模态大语言模型(MLLM) 的 指令微调(Instruction-Tuning) 与相关技术 (四)
人工智能·语言模型·指令微调·数据调整·自指令·数据混合·instruction
开MINI的工科男3 小时前
【笔记】自动驾驶预测与决策规划_Part3_路径与轨迹规划
人工智能·笔记·自动驾驶·预测与决策
咩咩大主教4 小时前
C++基于select和epoll的TCP服务器
linux·服务器·c语言·开发语言·c++·tcp/ip·io多路复用
时光飞逝的日子4 小时前
多重指针变量(n重指针变量)实例分析
c语言·指针·多重指针·双重指针·n重指针·指针变量
xuanyu226 小时前
Linux常用指令
linux·运维·人工智能
Ylucius6 小时前
动态语言? 静态语言? ------区别何在?java,js,c,c++,python分给是静态or动态语言?
java·c语言·javascript·c++·python·学习
凡人的AI工具箱6 小时前
AI教你学Python 第11天 : 局部变量与全局变量
开发语言·人工智能·后端·python