在第2条(1,2),我们向您介绍的组成和设置的基本特征NR05 “数字实验室”,从一系列“字母的电子产品。”
我们已经反复说过,招聘的可能性不仅限于包括培训手册在内的经验和项目。套装的可能性要广泛得多!让我们考虑一下如何使用数字实验室从智能手机或平板电脑实施对执行设备的控制。智能手机和扩展板上安装的Arduino模块之间的通信将使用蓝牙技术实现。当然,这将限制无线控制约10米距离的能力,但在家中通常不需要更多。基于此技术,您可以成功控制简单的机器人或家庭自动化设备,而您的手机或智能手机将作为免费的通用控制面板,可以轻松地对其进行重新编程,以最好地解决任务。在互联网上,您可以找到几个项目,这些项目可以让您通过蓝牙将Arduino与手机连接,这些项目无疑将有助于掌握此类通信的原理,但是它们的主要缺点是无法使控制程序的功能及其外观适应用户的特定需求。我们将遵循更复杂但更通用的路径-我们将自己编写用于电话和Arduino的程序。这将帮助您了解编写此类应用程序的原理,并在您的开发中使用它。首先,让我们解释一下我们将使用的连接基于什么原理。如您所知,当Arduino模块连接到计算机时,将在计算机上配置虚拟串行端口(COM端口)。它用于将草图上载到Arduino,以及在计算机和Arduino微控制器之间交换信息。同样在Arduino板上,有两个触点与引脚D1和D0组合在一起,分别指定为RX和TX-标准UART接口的发送(Receive)和接收(Transmit)。将Bluetooth-UART适配器连接到这些触点(原来是HC-05模块供我们使用,它不包含在套件中),我们获得了通过蓝牙连接到适配器的设备与Arduino之间的硬件通信通道。因此,将信息从一台设备写入串行端口并从另一台设备读取(这可以从两个方向完成),我们可以组织设备之间的信息交换。在使用HC-05模块的情况下,Arduino与智能手机之间的这种交换速度为57600波特。为了清楚起见,我们使用RGB LED和伺服驱动器,两者均由PWM信号控制。这是项目组件的连接图:
为了控制执行元素,我们将从智能手机传送一个确定该命令要使用的元素的字母以及一个与命令参数相对应的数字。该参数可以是确定是否应打开或关闭任何执行器的图形,也可以是定义PWM参数的图形。我们给出了Arduino的程序文本。该程序从Bluetooth适配器接收数据,解密并执行必要的操作:打开或关闭LED,调整其亮度或伺服轴的旋转角度。文本中包含了足够多的注释,以了解程序的逻辑:扰流板// LCD-
#include <Servo.h>
#include <LiquidCrystal.h>
// 5
// get_key
#define NUM_KEYS 5
int adcKeyVal[NUM_KEYS] = {30, 150, 360, 535, 760};
// LCD-
LiquidCrystal lcd(A1, A2, A3, 2, 4, 7);
//
Servo servo;
int btValue; // BT-
char command; // , COM-
void setup() {
// COM- bluetooth, , -
Serial.begin(57600);
Serial.flush();
Serial.setTimeout(4);
// LCD (16 , 2 )
lcd.begin(16, 2);
lcd.clear();
lcd.print(«Master Kit-READY»);
delay(2000);
lcd.clear();
// 3-
servo.attach(3);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(9, OUTPUT);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(9, LOW);
}
void loop() {
int key = get_key(); // ,
// , COM-
//
if (key > 0){
Serial.print(key);
delay(500);
}
// , bluetooth,
if (Serial.available() > 0) {
// ()
command = Serial.read();
// ( )
btValue = Serial.parseInt();
// LCD , bluetooth
lcd.setCursor(0,0);
lcd.print(command);
lcd.print(' ');
lcd.print(btValue);
lcd.print(" ");
delay(10);
switch (command) {
case 'P': // P,
pinSwitch(btValue);
break;
case 'S': // S — c 1 ( )
pwm5(btValue);
break;
case 'M': // — 2 ( )
servo3(btValue);
break;
}
}
}
//
void pinSwitch(int Pin){
digitalWrite(Pin, !digitalRead(Pin));
}
// 5 ( )
void pwm5(int pwmValue){
analogWrite(5, pwmValue);
}
// 3
void servo3(int angleValue){
int angle = map(angleValue, 0, 180, 5, 180);
servo.write(angle);
}
//
int get_key()
{
int input = analogRead(A6);
int k;
for(k = 0; k < NUM_KEYS; k++)
if(input < adcKeyVal[k])
return k + 1;
return 0;
}
现在,让我们为智能手机设计一个程序,该程序应该传输带有参数的命令。为此,我们将使用MIT App Inventor项目的功能。MIT App Inventor是由麻省理工学院(MIT)开发的编程环境。它用于为在Android操作系统上运行的移动设备(智能手机和平板电脑)开发应用程序。从公认的意义上来说,这不是一种编程语言;使用它时,您不需要以行的形式编写文本代码。该程序以显示在屏幕上的块的形式形成,只需像拼图一样将其拖动并堆叠即可。如果这些块根据程序逻辑装配在一起,则它们“粘在一起”;如果它们不合适,则无法连接。最初,这种编程方法是为了教育学生而开发的,因此学习起来非常简单。当然,就像每种语言一样,它也有自己的微妙之处和技巧,但是该站点上有足够的信息和示例来掌握该语言。该站点上有许多公共领域的程序。为了使用ai2.appinventor.mit.edu上可用的App Inventor编程环境,您必须在项目网站上拥有一个获得您授权的Google帐户。该程序是在任何浏览器中创建的。运行此浏览器的计算机必须始终连接到Internet。将安装使用App Inventor创建的程序的智能手机或平板电脑的Android OS版本必须至少为4.0。在浏览器中,以块的形式创建设计(外观)和程序的逻辑,在同一位置将完成的项目编译为带有apk扩展名的可执行文件。可以通过多种方式下载此文件并在移动设备上运行。这些方法中最方便的也许是在移动设备上安装MIT AI2 Companion应用程序(在Play市场上)。 App Inventor会生成一个QR码,其中包含指向您创建的应用程序的链接,并且AI2 Companion会读取并安装(或更新)该应用程序。您甚至可以绘制并上传自己的图标以启动应用程序。因此,App Inventor允许您为Android创建功能齐全且直观的应用程序。尽管他们的代码不是最优的,但是很方便,在许多情况下,创建此类应用程序的简便性和速度可以弥补这一缺点。在我们的项目中工作的应用程序以BToothHC05的名称上传到MIT AI2 Appiventor画廊。该应用程序允许您查找蓝牙设备,将其连接到蓝牙设备,生成带有参数的命令并将其发送到所连接的设备,从该设备读取数据并显示在扩展板上按下的按钮的编号。屏幕设计按照下图显示:
有些元素(绿色方块代表插入的图像)不具有功能性,但可以用作分隔符以改善外观。如果您访问了AppInventor网站,并且处于设计器模式下的编程环境中,那么当您右键单击相应的设计元素时,将在右侧看到其属性。切换到“块”模式后,您可以看到正在开发的应用程序的所有块。实际上,几乎所有的块都是事件处理程序:按下触摸屏上的按钮,移动滑块,触发计时器,更改手机的倾斜度(是的,几乎所有移动设备的传感器都可以在App Inventor中使用!)。考虑每个块的功能目的。
在此块中,当您单击“连接/断开连接”屏幕按钮(Button4Connect.Click事件)时,如果蓝牙设备已连接(BluetoothClient1.IsConnected),则该蓝牙设备已断开连接(调用BluetoothClient1.Disconnect),按钮上的文本更改为“ Disconnected”,其颜色更改为灰色,如果没有连接,则调用可能连接的设备列表(ListPicker1.Open)。如您所见,即使是新手程序员,该块也很容易阅读!
在这三个块中(从上到下):-分配一个全局变量(所有块都会“看到”它)switch1来切换操作模式:滑块或倾斜;-调用设备列表ListPicker1进行连接时,我们要显示其地址和名称;-从ListPicker1列表中选择设备时,请连接至该设备,更改按钮颜色并显示“已连接至设备名称”文本。设备名称由长字符序列组成;从18号开始取8个字符。
上述三个模块通过已建立的连接发送字符“ P5”,“ P9”和“ P6”,这两个字符应分别打开或关闭红色,绿色或蓝色LED。
当控制LED红色颜色的滑块Slider1发生位移时,此块将发送符号“ S”和与滑块位置相对应的数字。
切换控制伺服器的Slider2时,如果相应模式打开(开关1 = 0),我们将发送字符M和滑块的位置。
如果打开了倾斜传感器的操作模式,则本机发送M和+ 90度的倾斜角以控制伺服驱动器。
该单元从滑块或倾斜传感器切换伺服的操作模式,并相应地更改按钮上的文本(文本)及其颜色(BackgroundColor)。
这两个块由计时器事件触发。每隔0.1秒(此间隔在Clock1计时器的属性中设置)的第一个块(Clock1)检查是否已按下扩展板上的按钮的数据。如果按下了按钮,则在1秒钟内(第二个块-Clock2)在智能手机屏幕上显示有关所按下按钮的编号的信息。现在,我们将观看视频,根据我们的程序,智能手机上的LED和伺服控制实际上是如何发生的。以相同的方式,可以控制连接到Arduino的足够数量的执行器。使用AppInventor时,不需要程序员做大量工作,而且Arduino编程非常简单明了。您可以轻松添加或删除不必要的程序块,并获得所需的功能。从该材料可以看到,Digital Laboratory工具包中的扩展板使您可以非常方便且直观地使用Arduino附加模块。应用程序。MIT AppInventor编程环境入门。正如我们已经写的,要在AppInventor项目中工作,您需要一个Google帐户。如果您在Android上拥有智能手机,那么您很可能已经拥有了这样的帐户。如果没有,您可以通过以下链接转到Google以获得它。接下来,转到AppInventor网站,然后单击“创建应用程序!”,位于网站主页右上角的链接,然后转到编程环境网站。作为说明,以下是一个简短视频的链接,演示了一个简单程序的创建,该程序可以在您单击智能手机的触摸屏上形成的按钮时显示文本。