如何构建定制Android应用程序Arduino项目使用麻省理工学院App Inventor

在这个Arduino教程中,我们将学习如何使用MIT App Inventor Online应用程序来构建用于控制Arduino的自定义Android应用程序。您可以观看以下视频或阅读下面的书面教程。

概述


对于本教程,我们有两个例子。第一示例是控制简单的LED,第二个例子是使用智能手机控制步进电机。在我的以前的教程我们已经学会了如何在Arduino板和智能手机之间制作蓝牙通信使用HC-05蓝牙模块并解释了第一个示例所需的Arduino代码。

Arduino Code.


下面是该代码的快速概述。因此,通过串口我们接收来自智能手机的输入数据,并将其存储在“状态”变量中。如果我们收到字符' 0 ',这是从智能手机发送时,按下' LED: OFF '按钮,我们将关闭LED,并发送回智能手机字符串“LED: OFF”。另一方面,如果我们收到字符' 1 ',我们将打开LED并发送返回字符串" LED: On "。

/ * Arduino和HC-05蓝牙模块教程* *由Dejan Nedelkovski,www.www.kuaixg.com * * / 亚搏手机版官方下载#define Ledpin 7 int state = 0;void setup(){pinmode(LEDPIN,输出);DigitalWrite(LEDPIN,低);Serial.Begin(38400);//蓝牙模块的默认通信率} void循环(){if(serial.available()> 0){//检查数据是否从串行端口状态= serial.read();//从串行端口读取数据}如果(state =='0'){digitalwrite(LEDPIN,LED);//关闭LED elfial.println(“LED:OFF”);//发送回电话,字符串“LED:ON”状态= 0;}如果(state =='1'){digitalwrite(LEDPIN,高);serial.println(“LED:ON”);; state = 0; } }

所以现在我们需要构建我们的自定义Android应用程序,当按下特定按钮时,它将发送这些字符'0'和'1',以及从Arduino接收传入字符串。

麻省理工学院应用程序发明家


来自麻省理工学院应用程序发明家网站我们需要通过点击“创建应用程序”登录在线构建应用程序。按钮。要登录我们需要拥有Gmail帐户。我们现在登录后,我们可以创建我们的第一个项目。以下是设计窗口的外观,现在我们可以开始构建我们的应用程序。

麻省理工学院App Inventor设计窗口

但在此之前,我们可以将我们的智能手机连接到这个项目,这样我们就可以看到该应用程序是如何直接在我们的智能手机上实时成形的。为了做到这一点,我们首先必须从Play Store下载MIT AI2 Companion应用程序,并将其安装到我们的智能手机上。然后从在线编辑器的连接菜单中,我们将选择AI伴侣和条形码将出现,我们只需要扫描它或将代码插入智能手机应用程序和在线编辑器和智能手机应用程序之间的连接将建立。

MIT App Inventor和智能手机连接

举个例子,如果我们在在线编辑器的屏幕上插入一个按钮,这个按钮也会实时出现在智能手机上。类似地,如果你不想在构建应用程序时使用智能手机,你可以在你的电脑上安装Android模拟器,并以相同的方式使用。你可以在他们的网站上找到更多关于如何设置模拟器的细节。

构建应用程序-例1


现在,我们已经准备好构建第一个示例。我们将从程序的布局开始。首先,我们将从布局面板中添加一些horizontalarrangement,并设置它们的属性,如高度,宽度和对齐,以匹配我们的程序想要的外观。然后,我们将从UserInterface Palette中添加一个ListPicker,并将图像附加到它上面。ListPicker将用于选择我们的智能手机将连接到的蓝牙设备。

构建Android应用程序示例01

接下来,我们将添加另一个水平arrumentement,我们将放置一个标签。此标签将指示智能手机是否已连接或不连接到蓝牙模块,这就是为什么我们将此标签的初始文本设置为“未连接”。下一个标签将用于显示LED的状态,无论是否已关闭或打开。初始状态将是“LED:OFF”。接下来,我们将添加两个按钮,“打开”和“关闭”,以控制LED。此时,重命名组件很好,以便我们更容易识别并在块编辑器中稍后在块编辑器中使用它们。现在留下了什么是添加蓝牙链接,这是一个不可见的组件以及时钟,它将用于连接状态的实时指示。

块编辑器


现在在Blocks编辑器中,我们已经准备好赋予程序生命了。从左边我们得到了与之前添加的组件相关的所有块和函数。

示例01

我们将从BluetoothList ListPicker开始。从那里开始,我们将添加“Preaspicking”块,并将其附加到“设置蓝牙元素”块。然后从BluetoothClient块中,我们将添加“BluetoothClient AddressISAndNames”块。这套块将确实设置了一系列蓝牙设备列表,这些设备已经与手机配对,以便在ListPicker“Connect”按钮“时,所有配对设备的列表将显示出来。

前挑选块

接下来,我们必须设置在我们选择或选择我们特定的蓝牙模块后会发生的事情。从BluetoothClient块中,我们将添加“呼叫蓝色链表.Connect地址”块,并将块“蓝牙列表选择”添加到它,这意味着我们的手机将连接到我们之前选择的蓝牙地址。

AfterPicking块

接下来从时钟块我们将添加“。计时器”块中。在这个区块中,我们将使用标签中名为“connected”的“set Text”区块实时显示手机是否连接到蓝牙模块。

时钟块

接下来,我们需要为两个按钮提供生命。因此,当点击“TurnOn_Button”时,我们将使用蓝牙客户端功能“send1bytenumber”将数字发送到Arduino蓝牙模块。在我们的情况下,根据ASCII表对应于角色'1'的数字49,并将打开LED。在此之后,我们将使用“ReceiveText”BluetoothClient函数来接收从Arduino发送回电话的传入字符串。此字符串设置为“LED_STATUS”标签。

按钮块

同样的过程适用于“TurnOff_Button”,其中发送数字应该被更改为48,对应字符' 0 '。现在剩下的就是在我们的智能手机上下载并安装这个程序。我们可以从“构建”菜单保存到我们的电脑,然后转移到我们的手机或扫描二维码在线下载程序。这是示例的演示。

以下是上述MIT App Inventor项目的下载文件:

步进电机控制例


现在让我们看看第二个例子,控制步进电机。在屏幕的顶部,我们有与前面示例相同的用于蓝牙连接的组件。接下来,我们有一个画布组件,用于绘制和插入图像。我插入了两个我之前画的透明图像。第一个是一个固定的仪表的图像,第二个是一个旋转的指针的图像。下一步我们有一个检查按钮,用于切换手动和自动或连续运行模式和一个按钮,用于改变旋转方向。在按钮上,我们有一个滑块,用来改变步进电机的转速。

Android应用程序块步进电机控制

以下是此示例背后的块和arduino代码。因此,再次在块编辑器中,我们具有与前一个示例的蓝牙连接相同的块。

步进电机控制示例块01

现在,用于旋转指针图像,我们使用ImagesPrite函数“.PointIndection”,其将图像从0°的位置旋转到触摸帆布的X和Y坐标。同时,我们将旋转的图像普通标签设置为上面的文本标签。之后,我们调用定制的程序,或实际上是10米秒的函数。

最后,我们使用“Sendtext”蓝牙功能将标题值作为文本发送到Arduino。该值将由Arduino接受,它将相应地旋转步进电机。

步进电机控制示例块04

接下来是复选框块。因此,如果检查复选框,我们将将文本“自动”发送给Arduino,该arduino将激活步进电机连续旋转。虽然我们处于此模式,但如果我们按“反向”按钮,我们将将文本“反向”发送给Arduino,这将改变电机的旋转方向。此外,在我们处于此模式的同时,我们可以改变旋转速度。如果我们更改滑块的位置,滑块位置的当前值将被发送到Arduino,这将改变步进器的旋转速度。如果我们取消选中该复选框,我们将回到手动模式。这是示例的演示。

步进电机控制示例块05

以下是上述MIT应用程序Inventor项目的下载文件,以及项目中使用的两个图像:

这是第二个例子的Arduino代码:

/ *步进电机控制通过HC-05蓝牙模块* * by dejan nedelkovski,www.www.kuaixg.com * * ///定义变量亚搏手机版官方下载const int steppin = 7;Const Int Dirpin = 6;字符串状态=“”;int currentheading = 0;int turperangle = 0;int lastangle = 0;int角度= 0;int rotate = 0;int runco​​ntinually = 0;字符串模式=“手动”; boolean dirRotation = HIGH; int rotSpeed = 1500; void setup() { // Sets the two pins as Outputs pinMode(stepPin,OUTPUT); pinMode(dirPin,OUTPUT); Serial.begin(38400); // Default communication rate of the Bluetooth module } void loop() { delayMicroseconds(1); if(Serial.available() > 0){ // Checks whether data is comming from the serial port state = Serial.readString(); // Reads the data from the serial port } // When Auto Button is pressed if (mode == "Auto") { if (state == "Reverse") { delay(10); if (dirRotation == HIGH) { dirRotation = LOW; } else { dirRotation = HIGH; } digitalWrite(dirPin,dirRotation); delay(10); state = ""; } rotSpeed = state.toInt(); if (rotSpeed >= 300 && rotSpeed <= 3000) { digitalWrite(stepPin,HIGH); delayMicroseconds(rotSpeed); digitalWrite(stepPin,LOW); delayMicroseconds(rotSpeed); } else { digitalWrite(stepPin,HIGH); delayMicroseconds(1500); digitalWrite(stepPin,LOW); delayMicroseconds(1500); } if (state == "Manual"){ mode = state; } } // When Program is in Manual mode else if (mode == "Manual"){ currentHeading = state.toInt(); //Serial.println(angle); //Serial.println(state); if (currentHeading < 0 ){ currentHeading = 360+currentHeading; } currentAngle = map(currentHeading,0,359,0,200); digitalWrite(dirPin,HIGH); // Enables the motor to move in a particular direction // Makes 200 pulses for making one full cycle rotation if (currentAngle != lastAngle){ if(currentAngle > lastAngle){ rotate = currentAngle - lastAngle; for(int x = 0; x < rotate; x++) { digitalWrite(stepPin,HIGH); delayMicroseconds(500); digitalWrite(stepPin,LOW); delayMicroseconds(500); } } if(currentAngle < lastAngle){ rotate = lastAngle - currentAngle; digitalWrite(dirPin,LOW); //Changes the rotations direction for(int x = 0; x < rotate; x++) { digitalWrite(stepPin,HIGH); delayMicroseconds(500); digitalWrite(stepPin,LOW); delayMicroseconds(500); } } } lastAngle = currentAngle; if (state == "Auto"){ mode = state; } } }

39回复

  1. Joabe Alexandre.

    你好,非常好你的视频课程。我试着把你做的那些程序混合起来。我想做一个雷达,就像你在处理器中使用的那样,和app inventor一起,可能吗?我没有找到任何关于如何在AI2中做到这一点的信息。是否需要另一个应用程序来创建雷达?哪个应用程序?

    AI2将获得从Arduino开始的值,读取数据(角度和距离)将通过蓝牙发送。

    有可能做到吗?我对AI2的了解不多,但是我可以学到更多。

    谢谢你!

    回复
  2. 加布里埃尔

    你好,谢谢你真的很好!我如何创建一个应用程序和草图,但使用以太网盾?你能帮我吗?我想创建一个Android应用程序和Arduino pin远程管理。非常感谢!

    回复
  3. 亚马尤

    你好,

    伟大的教程。使用应用程序发明家2,我做了相同的应用,但有问题。在我的手机上运行应用程序后,它将显示未连接的消息,但之后它显示了一个数字(-65536)。所以我不知道设备是否已连接?

    回复
  4. Aasif沙

    你好。谢谢你这个令人敬畏的教程。我需要在我的项目中做类似的事情。我想在应用程序上显示信号(作为图形)。将信号馈送到Arduino模拟输入。有没有办法做到这一点?我在编程中并不那么擅长,因此AppInventor似乎简单地制作了一个应用程序。
    谢谢!

    回复
  5. Rishi.

    如果我使用不同版本的HC-05蓝牙模块,这将仍然工作或我必须使用在本教程中使用的确切的蓝牙模块?

    回复
  6. 托萨尔兰泽普拉德山

    Hello SIR,这个项目真的很好。我从这个网站安装了.apk文件,为LED Tonurial。it打开并与我的蓝牙连接。当我打开LED时,我的LED不是闪烁的。手机挂起。我还在我的另一个Android设备中重复了此过程..在移动和蓝牙之间也是成功的。但是LED不眨眼(移动工作正常)......请帮我解决这个项目......

    回复
      • 托萨尔兰泽普拉德山

        是的先生我上传同一个arduino代码,&,连接在sae引脚上的所有内容

  7. subhasis

    你好先生,你可以提供一个教程,在visual studio中创建一个软件,连接和控制arunio和显示传感器数据,如温度,湿度,伺服电机转速,引导off.............

    回复
  8. 斯瓦特•沙玛

    你好先生,这是一个伟大的项目,我将为我的大学项目......但我想有一个视频关于如何连接arduino与蓝牙和步进电机在这个项目.......如果你能上传一个关于如何连接硬件的视频,那就太好了.....谢谢你!

    回复
  9. 巴克麦娜

    您好,我在比较数据中有问题
    从Arduino接收到手机,但是当我需要比较数据有问题时。示例Arduino发送:“A”,Android再次和比较:“A”=“1”我在标签上没有响应

    回复
  10. 斯瓦特•沙玛

    先生,请您能为步进电机控制项目提供电路图和连接教程

    回复
  11. konrad.

    我用这个教程做了自己的.apk,但是当我打开我的应用时,只有“没有连接”,那么我有错误代码“-3407872”。问题出在哪儿。?你帮我了吗?

    回复
  12. konrad.

    在“Blocks”中有一个错误,导致奇怪的状态(-65536错误)而不是“Not Connected”。在YT视频和教程中的第一张照片(“块”结构)的文本颜色(红色和蓝色)设置为“文本”类型。它应该是TextColor。

    回复
    • 理查德。

      谢谢康拉德,接得好!我也遇到过同样的问题,但因为我是麻省理工学院App Inventor的新手,所以我完全没有意识到这个错误。很高兴你发表了评论。

      回复
  13. 肯特伐木子

    主席先生,请您可以创建一个关于如何构建用于控制RC汽车电机的Android应用程序的教程?只是一个应用程序,可以将汽车移动到向前和向后移动,然后向右和向左。我只想使用Arduino和蓝牙模块建立智能手机控制的RC汽车,但我没有关于如何启动它的任何初始想法。非常感谢您的帮助。谢谢你!

    回复
    • 德扬Nedelkovski

      你应该能够弄清楚如何让自己使用这个基本教程。我不能仅仅创造一个特定的应用,因为项目本身需要考虑许多因素。

      回复
  14. 塔哈

    亲爱的Dejan Nedelkovoski先生也请给教程
    ==>RFID MFRC522一个廉价的13.56MHz模块与标签和钥匙链。
    ==>以太网屏蔽Wiznet W5100。
    ==>WiFi ESP8266-01(esp-01)一个便宜的WiFi与MCU全TCP/IP堆栈和512KB(蓝色)/1MB(黑色)内置射频在PCB上腐蚀天线使用3.3Volt(给外部而不是Arduino,因为它不运行,因为它需要更多电流)。

    回复
  15. Plinio

    你好,Dejan,非常感谢你的教程,他们太棒了!!我只是想评论一些事情。在这种情况下,有时你会加速视频,这使得它很难跟上。
    在跟踪每一步后,我仍然不工作,所以经过几个小时的故障排除,我看到,当你调用底部(在麻省理工学院的APP)你使用功能发送一个号码,这是不工作的我。当我使用另一个功能(调用bluetoothClient。sendText " 1 ")然后它最终工作。希望它能帮助到一些人。再次感谢!

    回复
  16. hjt

    嗨德国
    我对步进电机的描述中提到了相同,但不幸的是我无法让步进电机移动!

    我使用Arduino UNO, DRV8825,我连接DIR - > D6和STEP - >D7。RESET和SLEEP设置为High - >5V。电源电压12 v
    我使用您的代码和您的应用程序。而且我可以看到Arduino上的Tx LED每次在App中移动天使或使用滑块栏时都会闪烁,但电机不会移动。您是否对案例有什么建议?
    (步进电机和电线校正正确连接)

    回复
  17. h

    我用的是Arduino UNO,请问步进电机的代码和Mega和UNO有什么不同吗?

    回复
  18. 史蒂夫

    嗨,你是正确的;感谢您指出了这一点。我不知道为什么我得到这些数字,但现在它有意义。此外,我修改了代码来使用Mega的软件序列。引脚10和11。

    回复
  19. Mariselvan

    你好,
    非常好的教程。
    但是,当我们按下手机应用程序上的开启或关闭按钮时,该程序响应备用消息(“LED:OFF”和“LED:ON”)。
    我纠正了程序使用不同的值的状态变量以外的条件。它让我解决了那个问题。现在它工作得很好。

    回复
    • 阿兰

      可能的替代方案可以是从TurnOn_Button和Turnoff_Button控件中删除动作集(LED_STATUS.TEXT)到...并将其插入计时器的末尾:

      当Clock1。计时器

      如果 …
      如果 …
      如果调用(bluetoothclient1.bytesavailableToreceive> 0)则设置(LED_STATUS.TEXT)到...

      但是,如果您在2个按钮之间替代,则会导致另一个问题!

      回复

发表评论

您的电子邮件地址不会被公开。

受到推崇的

2019年初学者和爱好者的最佳进入级示波器

最适合初学者和爱好者的示波器

受到推崇的

2019年初学者的8个最佳Arduino Starter Kits

8个最好的arduino初学者工具包

受到推崇的

最佳3D打印机初学者和爱好者- 3D打印

初学者和爱好者的最佳3D打印机