65.9K
CodeProject 正在变化。 阅读更多。
Home

DIY:使用 MediaTek LinkIt™ ONE 构建烘干机周期结束通知器

starIconstarIconstarIconstarIconstarIcon

5.00/5 (4投票s)

2015年8月28日

CPOL

11分钟阅读

viewsIcon

17737

本文将介绍如何开发一个简单的设备,当烘干机循环结束时,该设备会向所有者发送短信通知。

DIY:使用 MediaTek LinkIt™ ONE 构建烘干机周期结束通知器

许多人依赖公共洗衣设施。通常不是每个人都会一直守着他们的衣物直到洗涤完成。这会导致烘干机里的衣物出现褶皱,并且很可能让等待空闲机器的顾客感到非常沮丧。本文将介绍如何开发一个简单的设备,当烘干机循环结束时,该设备会向所有者发送短信通知。

LinkIt ONE 主板

联发科 LinkIt ONE 是一款令人印象深刻的 Arduino 兼容微控制器板。它通过熟悉的 Arduino IDE 进行编程,并且与市场上各种 Arduino 扩展板兼容。这款主板的独特之处在于其开箱即用的丰富连接选项。LinkIt ONE 预配置了板载 GSM、GPRS、蓝牙(2.1 和 4.0)、GNSS(GPS/GLONASS/北斗)和 Wi-Fi 功能。除了这些内置连接选项之外,该板还拥有板载音频支持,并配有 microSD 插槽以满足额外的存储需求。

项目需求

本文假设您已购买 LinkIt ONE 并已相应地设置了开发环境以进行编程。如果您尚未完成,请访问联发科实验室网站上的 LinkIt ONE 开发平台快速入门指南

在本文中,我们将利用主板的短信功能。我们将创建一个通知设备,当洗衣周期结束时会向您发送短信。为此,我们需要一些硬件。以下是本项目中使用的物品清单:

让我们开始我们的项目吧!我们的设备有两个非常重要的功能:短信发送和运动传感。让我们深入探讨。

实现短信功能

LinkIt ONE 的一个优点是,您无需购买额外的硬件即可实现 GSM 功能。硬件设置非常简单,只需连接天线并插入 SIM 卡,无需面包板!

打开 Arduino IDE 并将新文件保存为 DryerNotifier.ino。我们需要导入一个库来实现短信功能。在文件顶部,输入以下 include 语句

#include <LGSM.h>

现在我们需要实现代码来初始化我们的 GSM 模块以进行短信发送。在 Arduino 草图的 setup 函数中,添加以下代码

  Serial.begin(9600);      
  while(!LSMS.ready()) {    
    delay(1000);        
  }
  Serial.println("SIM Initialized");

接下来,我们将创建一个函数来处理短信功能。将此代码附加到源文件的底部

void sendTextMessage(char const* number,
                      char const* message) {
      LSMS.beginSMS(number);
      LSMS.print(message);
      if(LSMS.endSMS()) {
         Serial.println("SMS is sent");
      }
     else {
        Serial.println("SMS is not sent");
     }
}

如上面代码片段所示,发送 SMS 消息有三个步骤。第一个是通过调用 `LSMS.beginSMS` 并传入您要发送短信的号码来启动 SMS 过程。下一步是使用 `LSMS.print` 来阐述您的消息,最后通过调用 `LSMS.endSMS` 来结束 SMS 过程,如果发送 SMS 失败,此方法将返回 0。

现在我们准备好在 LinkIt ONE 上测试短信功能了。让我们添加几个变量(在文件顶部 #include 语句下方)。将 <YOUR CELL NUMBER HERE> 替换为您将接收短信的个人手机号码。

char const* _number = "<YOUR CELL NUMBER
HERE>"; //8885551234 format
char const* _message = "Your dryer has completed it's cycle";

暂时,让我们在 `sendTextMessage` 函数中添加一个调用来测试。将以下代码附加到 setup 函数的最后一行

    sendTextMessage(_number, _message);

我们还可以在 loop 函数中添加以下代码行,暂时添加一条心跳消息

  Serial.println("Heartbeat");
  delay(5000);

现在我们可以在 LinkIt ONE 上测试短信功能了。您需要知道的第一件事是主板在您的电脑上使用了哪些 COM 端口。LinkIt ONE 使用一个端口进行程序上传,另一个端口用于显示串行消息。要在 Windows 中确定端口,请打开设备管理器,展开“端口 (COM & LPT)”项,然后查看哪个端口分配给哪个功能。记下 MTK USB Debug Port COM 号码作为您上传草图的端口,以及另一个标记为 MTK USB Modem Port 的端口,这是您将通过终端程序连接以查看串行消息的端口。

在 Arduino IDE 中,确保选择了正确的端口(工具 -> 端口),并且 LinkIt ONE 被选为主板(工具 -> 主板)。连接 USB 数据线并上传您的草图!您很快就会收到来自 LinkIt ONE 的第一条消息!

注意:我运行了两次程序,所以我收到了两条短信。

您还可以打开像 CoolTerm 这样的终端程序,并监控您的串行消息(通过工具栏上的“选项”按钮选择端口)。

既然我们已经成功发送了短信,还剩最后一个功能要实现:运动传感!在此之前,请务必注释掉或移除 setup 方法中对 `sendTextMessage` 的调用。

实现运动感应

为了使用我们的传感器,我们必须首先将其制成面包板友好型。剪下几段电线,并将其焊接到振动传感器的两端。在我的示例中,我使用了黑色和红色电线,分别表示地线和电源,但重要的是要知道开关的方向(您为振动传感器上的每个引脚选择哪条腿)并不重要。重要的是,当您使用传感器时,您选择一条腿作为地线,一条腿作为电源。我还给暴露的电线添加了热缩管。

继续将振动传感器插入数字引脚 13,并将地线插入其旁边的地线引脚。

接下来,让我们在文件顶部添加一个常量,用于保存我们振动传感器的引脚位置。在定义短信变量的下方直接添加以下声明

int const _vibrationPin = 13;

现在我们来添加一个函数,它将对传感器进行数字读取,以确定我们的设备当前是否正在移动。将以下代码附加到代码文件的末尾

bool isVibrating(int pin) {
  return !(bool)digitalRead(pin);
}

在此示例中,我的传感器在静止时返回高信号。当它被摇动时,它返回低信号——这就是为什么布尔值在返回时被取反的原因。为了测试这段代码,将以下测试代码添加到循环函数中

  if(isVibrating(_vibrationPin)){
    Serial.println("Vibrating");
  }else{
    Serial.println("NOT Vibrating");
  }
  
  delay(500);

这段代码每半秒会检查一次振动传感器是否被摇动。将代码上传到您的 LinkIt ONE 并通过摇动主板进行测试(是的,拿起它并摇晃它!)。

让我们假设当振动传感器在 5 秒内未检测到振动时,烘干机循环已经完成。为了实现这一逻辑,我们再引入几个变量。在您的振动引脚变量声明下方直接添加以下声明

bool _shutOff = false;
int _counter = 0;
int _threshold = 20;

关机变量将在循环中进行检查。当此变量设置为 true 时,表示主板不应再检查振动,因为警报已发出。计数器是一个变量,用于跟踪自上次记录振动以来已通过的读取次数。一旦读取次数达到阈值,警报就会响起。现在让我们通过将循环代码替换为以下内容来实现此逻辑:

  if(!_shutOff) {
    if(isVibrating(_vibrationPin)){
      Serial.println("Vibrating");
      _counter = 0; //reset counter Vibration detected
    }else{
       _counter++;
      Serial.println("NOT Vibrating");
      if(_counter == _threshold) {
        _shutOff = true;
        sendTextMessage(_number, _message);
      }
    }
  }  
  delay(250);

我们还在开始读取之前加入一个 30 秒的延迟。这将允许我们打开它,将其放入烘干机并启动烘干机。将此延迟作为 setup 函数中的最后一行代码。

delay(30000);

以下是我们的最终代码的完整清单

#include <LGSM.h>  

char const* _number = "1231231234";
char const* _message = "Your dryer has completed it's cycle";
int const _vibrationPin = 13;
bool _shutOff = false;
int _counter = 0;
int _threshold = 20;

void setup() 
{   
  Serial.begin(9600); 
  pinMode(_vibrationPin, INPUT);
  
  while(!LSMS.ready()) {    
    delay(1000);        
  }
  Serial.println("SIM Initialized");  
  delay(30000);
}

void loop() {   
  if(!_shutOff) {
    if(isVibrating(_vibrationPin)){
      Serial.println("Vibrating");
      _counter = 0; //reset counter Vibration detected
    }else{
       _counter++;
      Serial.println("NOT Vibrating");
      if(_counter == _threshold) {
        _shutOff = true;
       sendTextMessage(_number, _message);
      }
    }
  }  
  delay(250);
} 

void sendTextMessage(char const* number,
                      char const* message) {
  LSMS.beginSMS(number);
  LSMS.print(message);
  if(LSMS.endSMS()) {
    Serial.println("SMS is sent");
  }
  else {
    Serial.println("SMS is not sent");
  }
}

bool isVibrating(int pin) {
  return !(bool)digitalRead(pin);
}

继续将最终代码上传到主板并进行测试!请记住,读取将在三十秒后才开始。

概念验证

现在是时候让我们的设备投入工作了!是时候给电池充电了。将电源切换到 USB,插入电池 JST 连接器,然后将 LinkIt ONE USB 线插回电脑(您会收到短信!)。在电池充电时,我们将开始组装我们的袋子。

对于我的材料,我选择了一种熨衣板罩材料以及一种用于制作烤箱手套等物品的绝缘材料。首先,我用液体缝合胶将我的材料粘合在一起,确保将胶水涂在熨衣板面料的背面,并将绝缘面料的光亮面朝向胶水(您可能需要剥开绝缘面料的层以确定哪一面是光亮面)。

胶水干了之后,我将布料对折,正面相对。我用锯齿形针迹缝合了小袋,在顶部留了一个足够大的开口,以便我可以放入 LinkIt ONE。

通过开口将袋子翻过来,使烫衣板面料朝外。然后我在这个开口处添加了魔术贴,这样我就可以把袋子封上。

至于 LinkIt ONE,我把它放在防静电袋里。我在袋子的底部剪了一个小孔,以便天线和振动传感器穿过。然后我把多余的袋子折叠起来,用电工胶带粘好,尽可能地压缩了它的宽度。

电池充满电后,我将主板上的电源开关从 USB 供电切换到电池供电,然后插入电池。接着,我通过将袋子顶部折叠起来并用电工胶带封住,密封了顶部。在我做这些的时候,我确实收到了应用程序发来的短信,但我忽略了它。

接下来是烘干机!我将烘干机设置为定时烘干。最低选择是 20 分钟,但我缩短了时间,这样您就不必观看 20 分钟的流逝。我通过袋子按下了 LinkIt ONE 上的复位按钮(它很容易找到,因为它就在主板侧面绿色 LED 旁边)。当它开始复位时,您会看到一个红色 LED 灯亮起。然后我将设备放入耐热袋中,合上袋子,将其扔进烘干机并启动了烘干循环。这是结果的视频:

概念验证中吸取的经验教训

LinkIt ONE 是一个开发板,而且很大——像这样的生产设备应该更小,此外,当放入实际的烘干机负载(带衣服)时,天线被撞击得足够厉害,以至于它从板上断开。我不建议将您的 LinkIt ONE 板放入烘干机。

蜂窝天线无法穿透防静电袋和耐热罩。需要一种方法将蜂窝天线安装在生产设备的外部(这就是为什么在视频中它会从袋子里伸出来)。

结论

这是一个非常有趣的项目,总有一天可以变成一个方便的设备。我发现 LinkIt ONE 是一个非常容易使用的板。它内置了许多功能,所以不必阅读数据表来弄清楚额外的扩展板是如何工作的,这节省了大量时间!我从一个 Arduino 草图开始,几分钟内就实现了短信功能——而 GSM 是我以前从未尝试过的东西。

另一个重要的事实是,联发科实验室提供了像联发科云沙盒联发科实验室合作伙伴连接计划这样的资源,可以帮助您设计您的生产设备并将其付诸实现。像免费的联发科云沙盒(一个免费的基于云的物联网平台,允许您存储、显示和远程访问您的物联网原型设备数据)和联发科实验室合作伙伴连接计划这样的服务,可以帮助开发人员与合适的供应链合作伙伴进行匹配,将他们的可穿戴或物联网创意变为商业现实。这使得 LinkIt ONE 成为一个优秀的板子,可以在您的原型设计中发挥作用,因为您将获得从初始开发到生产设备的全程支持。

© . All rights reserved.