使用步进电机和Android App的蓝牙控制迷你升降机

背景知识视频教程

  • 使用App Inventor创建Android应用
  • Arduino微控制器:学习Arduino制作项目
  • Arduino 训练营:通过项目学习

通过使用步进电机可以实现此迷你升降机项目。 电机会根据您想向上还是向下旋转的方向顺时针或逆时针旋转,这由具有蓝牙功能的移动应用程序控制。 另外,TFT LCD显示屏将向用户显示其当前在哪一层以及何时移动。

硬件

软件

库文件

介绍

步进电机NEMA 17

步进电动机,也称为步进电动机或步进电动机,是一种无刷直流电动机。 通过计算机控制的步进可以实现非常精确的定位和速度控制。 因此,步进电机是许多精密运动控制应用的首选电机。

如何工作

步进电机将整个旋转分为多个相等的步长。它们具有多个线圈,这些线圈以称为阶段的组的形式进行组织。通过使用电磁体依次为各相通电,电动机将一次旋转一个步骤。

步进电机驱动器DRV8825

DRV8825步进电机驱动器具有可调电流限制,过流保护,过热保护和六个微步分辨率(低至1/32步)。 它的工作电压为8.2 V至45 V,每相最多可提供约1.5 A的电流,而无需散热片或强制空气流(在具有足够的额外冷却能力的情况下,每个线圈的额定电流高达2.2 A)。

如何工作

步进电机驱动器是控制步进电机工作方式的电路。 它的工作原理是将电流通过各个相位以脉冲形式发送到步进电机。 DRV8825是一种微步进驱动器,通过允许中间步进位置来实现更高的分辨率,而中间步进位置是通过以中等电流水平向线圈通电来实现的。

HC-05蓝牙模块

HC-05蓝牙模块是易于使用的蓝牙SPP(串行端口协议)模块,专为透明的无线串行连接设置而设计。 由于它的低成本和广泛的应用,它是嵌入式项目中使用率最高的无线通信协议之一。

如何工作

串行端口蓝牙模块是完全合格的蓝牙V2.0 + EDR(增强数据速率)3Mbps调制,具有完整的2.4GHz无线电收发器和基带。 它使用具有CMOS技术和自适应跳频功能的CSR Bluecore 04-外部单芯片蓝牙系统。 用外行的话来说,蓝牙技术管理无线通信通道。 蓝牙模块可以无线发送和接收数据。 它通过串行通信进行通信,这是与微控制器接口的简便方法。

2.2英寸TFT液晶显示器ILI9341(240×320)

TFT LCD是薄膜晶体管液晶显示器的缩写。 它是LCD的一种变体,它使用薄膜晶体管技术来改善图像质量,例如可寻址性和对比度。 这些通常用于家用电器,包括计算机显示器,移动电话,手持设备,视频游戏系统,导航系统,投影仪和电视。

如何工作

TFT LCD屏幕上的所有像素均以行和列的格式配置,并且每个像素都附加到一个非常小的硅晶体管上,该晶体管直接位于玻璃面板上。 这种设置允许给每个像素充电,并且即使刷新屏幕以产生新图像也可以保持该电荷。

硬件设置

原理图

2.2英寸TFT LCD显示器连接

重要说明:我们使用的2.2英寸TFT LCD显示屏只能在3.3V逻辑上工作。 与大多数Arduino开发板不同,Arduino Due开发板在3.3V电压下运行,使其成为理想的选择。 当然,只要使用电阻器施加适当的逻辑电平转换,诸如Arduino Uno之类的其他板卡仍然可以使用。

HC-05蓝牙模块连接
步进电机驱动器DRV8825连接
步进电机NEMA 17连接

Android应用设置

对于Android移动应用程序,我们将使用基于云的MIT app inventor。 只需几个步骤,您就可以设置它并开始构建应用程序! 首先,您需要在Android设备上安装App Inventor Companion App。 如果您没有Android设备,则需要在计算机上安装软件,以便可以使用屏幕上的Android模拟器。 单击此处,了解有关初始设置的更多信息。

完成所有操作后,单击“项目”选项卡,然后启动一个新项目并为其命名。 当您进入主界面时,您会在左侧看到一个调色板,在中间看到一个查看器,然后在右侧看到一个组件和属性标签。 将以下组件从面板中相应地并按顺序拖放到查看器屏幕上(左)。 为了使识别组件更容易,请使用下面的(右)重命名按钮将其名称更改为所需的名称。 遵循这种格式并在特定排列中包含特定组件,可以使以后在需要时更容易隐藏或显示一组组件。

您可以根据自己的喜好自定义标签和按钮。 就个人而言,我添加了自己的自定义按钮图像以及在禁用按钮时将使用的灰度版本。 您还可以在Screen1上添加背景图像,使其看起来更漂亮(左)。 此后,取消选中VerticalArrangement3的可见性,使其看起来像一个预先连接的屏幕(右)。

要查看该应用程序在手机上的外观,请通过单击顶部菜单上的“连接”按钮并选择“ AI同伴”,将其连接到App Inventor Companion。 与此代码一起将包含可导入的.aia文件下载,以及用于直接安装的.apk文件。

代码

Arduino 代码


MIT App Inventor代码

代码分解

Arduino代码

预初始化
#include "SPI.h"
#include "Adafruit_ILI9341.h"

在开始之前,我们必须包括要在项目中使用的库。需要Adafruit_ILI9341库来控制TFT LCD显示屏,并且由于它使用并依赖于串行外设接口,因此还包含SPI库。


此后,我们定义步进电机的方向和步进销以及每转的步数。 典型的步进电机为每步1.8度,即每转200步。 接下来,我们为TFT LCD显示器定义DC,CS和复位引脚,并创建带有分配了相应引脚的TFT对象。


接下来,我们初始化将在以后使用的变量。输入是存储输入的输入数据。 lastInput用于存储先前的输入。其他变量将在后面进行解释。

Void Setup()
 

在setup()函数内部,我们将Serial2波特率设置为9600 bps,这是串行通信的默认设置。 Arduino Due有4个串行引脚,我们正在使用位于引脚16和17上的Serial2。我们还初始化TFT并立即调用displayFloor函数(稍后说明)。 接下来,我们将步进电机的引脚设置为输出。

步进电机控制功能

moveUp和moveDown功能非常相似,唯一的区别是方向针设置为HIGH(高)以使电动机顺时针旋转,而LOW(低)以使其为逆时针旋转。 从本质上讲,这是一个for循环,可以将电机调至特定点,delayMicroseconds指示您希望其运行多快。 每转的步数乘以floorDiff即可确定应该旋转多少次,然后再加上补偿值。 如果像我一样对电梯使用单侧滚动皮带方法,则此补偿值很重要,因为随着橡胶皮带滚动,它将累积半径,并且需要较小的旋转才能达到相同的高度。

TFT显示功能

displayFloor函数可在TFT LCD显示屏上打印文本。 首先,将屏幕填充为黑色并旋转90度,使其处于横向视图。 setRotation参数中的1表示90度,您可以在0-3之间进行设置。 然后,将光标设置在特定坐标上,以将要打印的文本显示在屏幕中央。 如果您希望它位于顶部,则光标坐标将为0和0。打印文本的方式与通常在串行监视器中打印的方式类似。 我们使用的库的一个很酷的事情是,我们还可以自定义文本颜色和文本大小。

displayMoving函数是步进电机运动时调用的函数。 它基本上只是显示它从哪一层移动到哪一层。 (char)24和(char)25分别是向上和向下箭头。 像displayFloor函数一样,我尝试通过设置文本颜色和添加临时边框来使其看起来更加精美。

SerialEvent函数

serialEvent函数检查蓝牙串行中是否有数据。 当有可用数据时,它将把这些数据存储在输入变量中,然后将boolean stringComplete设置为true以表示它已成功接收到数据。

Void Loop()
 

在loop()函数内部,我们调用serialEvent,它将告诉我们何时成功接收到数据。 如果已接收到数据,它将进入if语句,并将接收到的数据通过Serial2发送到。 如果最后一个输入小于新输入,则调用moveUp函数,否则,调用moveDown函数。 floorDiff是在此处计算的,因此它知道向上或向下移动多少次。 移动后,它将调用displayFloor函数以显示当前所在层。 此处的延迟是必要的,因此有时间进行通信处理。 接下来,将新输入存储为最后一个输入,并将布尔型stringComplete设置回false以指示它已完成接收数据,并且不再有接收数据。

循环中有一长段代码,我根据橡胶带的滚动量设置校准值,在这里我没有包括(但在可下载文件中),因为这取决于您使用的橡胶带,并且 如果您甚至使用单面滚动皮带方法。

MIT App Inventor代码

连接按钮

由于MIT App Inventor使用代码块,因此应该更容易理解。 单击BluetoothBTN(ListPicker)时,“。BeforePicking”是用户在从特定列表中选择内容之前发生的情况。 在这种情况下,我们想向用户显示附近可以连接的蓝牙设备列表,因此我们将BluetoothBTN的元素设置为。

参阅http://viadean.com/arduino_android_mini_lift.html

你可能感兴趣的:(Arduino,Arduino,蓝牙,迷你升降机)