嘿!您似乎在 United States,您想使用我们的 English 网站吗?
Switch to English site
Skip to main content

使用带有英特尔Edison的Cylon.js

title

使用物理计算框架来读取光传感器并控制伺服电机

在本教程中,我们将介绍如何在英特尔Edison上使用带有GPIO引脚的Cylon JavaScript框架。假设您的Edison开发板上有最新的Yocto Linux影像(在写入时为1.6),您使用的是Arduino breakout板,并且您的网络上已配置Edison以登录SSH。

首先,我们需要安装MRAA库(就像我们在之前的博客文章中所做的那样)

$ echo “src mraa-upm http://iotdk.intel.com/repos/1.1/intelgalactic" > /etc/opkg/mraa-upm.conf

$ opkg update

$ opkg install libmraa0

一旦MRAA库被安装,我们就可以安装cylon-intel-iot它是英特尔Edison和Galileo平台的Cylon适配器

$ npm install cylon-intel-iot

现在来测试GPIO功能是否正常。我们将使板上的LED闪烁,这个测试与我们在之前的博客文章中所做的测试相同。但这一次我们将直接使用Cylon框架而不是MRAA库,所以代码有点不同:

  • 创建blinkTest.js文件

  • Cylon教程页面复制示例代码(在'Blinking the built-in LED'标题下),粘贴入blinkTest.js文件中

  • 保存文件

  • 在Edison上执行文件:

  • $ node blinkTest.js

  • 你应该能在控制台窗口中看到确认键且LED闪烁

  •  按ctrl-c停止

这展示了Cylon如何让我们去控制GPIO引脚,这类似于直接使用MRAA库,但增加了便携性。通过改变连接对象,我们可以在其他平台上使用其余代码,比如Arduino,BeagleBone,Raspberry Pi等等。

Cylon还有许多用于常见部件的设备对象,如模拟传感器,电动机和按钮;这意味着您可以使用支持的硬件快速启动并运行。

读取模拟传感器数据

title

接下来让我们来看一下将模拟传感器数据导入Cylon的过程。在这个例子中,我们将运用到光敏电阻(LDR)-尽管你可以选择使用电位计,模拟温度传感器或不同的模拟输入。

在Cylon网站上有很多有用的代码例子,这些例子可以帮助你入门。查看模拟传感器示例代码,可以看到它被写入在Arduino板上运行(检查连接对象)。 我们需要将其修改,为了与Edison一起运行:

  • 将代码复制到一个新文件(例如LDRTest.js)中并将该行:

  • arduino: { adaptor: 'firmata', port: '/dev/ttyACM0' }

  • 替换成:

  • edison: {adaptor: 'intel-iot' }

  • 保存文件

现在我们需要如上图所示的那样,将LDR连接到Edison Arduino板。 请注意,此LDR需要10k电阻才能正常工作

执行文件:

$ node LDRTest.js

title

如果代码和接线正确,您将看到模拟数据值显示在控制台上,如上图所示

控制伺服电机

一旦我们有了进入Cylon的数据,就会想要做一些事情。我们可以使用Arduino breakout板的输出功能,控制板上的LED,或者尝试控制其他的东西,比如伺服机。

与构建任何系统一样,谨慎的做法是,在把所有的东西放在一起之前,分别测试每个组件。所以我们在把伺服机连接到LDR数据之前,先测试伺服控制机。

与模拟传感器一样,示例代码详细说明了如何控制伺服电机。代码也是为Arduino电路板编写的,因此必须做一些小的改动才能在Edison上正常运行:

  •  将'How To Use'示例中的代码复制到文件中,例如servoTest.js

  • 更改以下行

  • arduino: { adaptor: 'firmata', port: '/dev/ttyACM0' }

  • 至:

  • edison: {adaptor: 'intel-iot' }

  •   保存文件

现在我们需要将伺服加到原来的电路上。我们将使用面包板来使其更容易连接在一起。

title

 

一旦线已连接,我们就可以运行伺服机示例代码:

$ node servoTest.js


如果一切正常,伺服机将通过三个不同的位置循环运行。

请注意,我们正在使用的这个伺服机,并仅由电路板的5V电源来供电。由于几乎没有伺服负载,并从两个USB连接器供电,这没有给我们带来任何的麻烦。在某些情况下,您可能需要使用专用电源。

组合

现在我们已经测试了项目的组成部分,我们可以把所有东西放在一起。在这个例子中,我们想要根据光传感器读数来控制伺服位置。

我们的程序将:

 

  •   添加LDR

  • 添加伺服机

  • 定义LDR输入值范围+变量

  •  定义伺服位置值范围+变量

  • 读取LDR值

  • 将LDR值转换为有效的伺服位置值

  • 设置伺服位置

  • 等待

  • 重复


以下是我们示例项目的代码。创建一个JavaScript文件(例如LDRServoControl.js)并将代码粘贴至其中。保存该文件并使用上述硬件连线,将其在Edison上运行。

var Cylon = require('cylon');
Cylon.robot({
connections: {
edison: { adaptor: 'intel-iot'}
},
//declare and configure the LDR and servo - pins and ranges
devices: {
sensor: { driver: 'analogSensor', pin: 0, lowerLimit: 100, upperLimit: 1000 },
servo: { driver: 'servo', pin: 3 }
},
work: function(my) {
var analogValue = 0; //variable for LDR input
var servoValue = 0; //variable for servo position
my.servo.angle(servoValue); //servo position
every((1).second(), function() { //determine how often to run
analogValue = my.sensor.analogRead(); //read LDR value
console.log('Analog value => ', analogValue); //write LDR value to terminal
servoValue = ((-analogValue + 1023) * (180/1023)); //map LDR values 0-1023 to servo-friendly 0$
servoValue = Math.round(servoValue); //round servo value to nearest integer
console.log('Servo Value ===> ', servoValue); //write servo value to terminal
my.servo.angle(servoValue); //move servo to new position
});
}
}).start();

为了完成我们的项目,我们用激光切割一个简单的表盘,其上安装了伺服机和指示箭头。 激光切割机设计文件可在这里获得。

maker, hacker, doer
DesignSpark Electrical Logolinkedin