2

Node.js で制御しようとしている intel galileo がありますが、いくつかの問題に遭遇しています。私が使用しているライブラリには、ピンのバイナリ値および/またはアナログ値を変更するための例がありますが、サーボモーターの制御に固有のものはありません。私が現在持っているコードは次のとおりです。

var B = 3975;
var mraa = require("mraa");
var servo = new mraa.Aio(1);//connects to the servo

問題は、サーボの制御方法がわからないことと、MRAA のドキュメントがほとんど存在しないことです。ここで誰かが以前に似たようなことをしたことがあり、助けることができますか?

ありがとう。

4

3 に答える 3

0

mraa on の PWM の例 (Edison ですが、Galileo でも動作しますが、期間は 62500 にする必要があります)

mraa = require('mraa');
servo = new m.Pwm(3);//Pin 3
servo.enable(true);
servo.period_us(19000000) //PWM Period https://www.arduino.cc/en/Tutorial/SecretsOfArduinoPWM
servo.write(1);
sleep(1000);
servo.write(0);
sleep(1000);
servo.write(0.5);
于 2015-10-25T02:24:23.783 に答える
0

サーボを制御するには、パルス幅変調信号をサーボに送信します。これは、周期的な、つまり繰り返される信号です。各周期、つまり信号のポイントとその繰り返しの間の時間は、オンとオフの 2 つの部分で構成されます。オンは高電圧 (たとえばバイアス電圧に等しい) で、オフは低電圧 (たとえば 0 ボルトに等しい) です。周期には周期時間という時間があり、その逆数は周波数です。オン時間とオフ時間の比率はデューティ サイクルと呼ばれ、デューティ サイクルの範囲は 0.0 ~ 1.0 です。サーボモーターは、デューティサイクルに対応する角度に達するまで回転して停止します。

ここに何かがある前に、mraa node.js ドキュメントへのリンクがあります: https://iotdk.intel.com/docs/master/mraa/node/

また、メモ: mraa は低レベルのフレームワークであるため、初めてサーボを使用する場合は、mraa の使用を遅らせて、CylonJS を最初に使用することをお勧めします。これは、Intel Edison で CylonJS を使用してサーボを制御するためのチュートリアルです。これは Intel Galileo にかなり似ています: http://slideplayer.com/slide/7959041/ これは、Intel Edison キットで以前に実行した非常に良い例です。

とはいえ、このチュートリアルを終了し、mraa node.js でサーボを試してみたい場合は、Ctrl-C を押してプログラムを終了するまでサーボを回転させるチュートリアルを次に示します。デューティ サイクルは 0 から開始し、1 までインクリメントしてから 0 までデクリメントし、再びループします。このコードは、 https://navinbhaskar.wordpress.com/2016/02/21/cc-on-intel-edisongalileo-part3-pwm/にある C コードの翻訳であり、私は翻訳をテストしていません。

/*translation of C++ code at
 https://navinbhaskar.wordpress.com/2016/02/21/cc-on-intel-edisongalileo-part3-pwm/
mraa node.js documentation at:
https://iotdk.intel.com/docs/master/mraa/node/
*/
"use strict";


const mraa = require("mraa");
const spawnSync = require('child_process').spawnSync;

const  PWM_PIN  =   5 ;       /**< The pin where the LED is connected */

var keepRunning= false;

///** Signal handler used to stop this application cleanly */
/* 
     * Associate ctrl+c with our handler that clears the 'keepRunning'
     * flag that allows us to stop the PWM when exiting 
     */
process.on('SIGINT', () => {
    keepRunning = false;
});

//Step 1: Initialize the mraa system

var result =mraa.init();
if(result == mraa.Result.SUCCESS)
    console.log("mraa initialization succeded.");
else
    console.log("mraa initializtion failed.")

/* Step2: Initialize D5 for PWM operation */
var pwm_interface = mraa.PWM;

var owner =true;
var chipid= 1;
pwm_interface.Pwm(PWM_PIN,owner,chipid);
 /*
     * Control the period with "mraa_pwm_period_us"
     *
     *       +----------------+                +----------------+                |
     *       |                |                |                |                |
     *       |                |                |                |                |
     *       |                |                |                |                |
     *       |                |                |                |                |
     *       |                |                |                |                |
     *       |                |                |                |                |
     *       |                |                |                |                |
     *       |                |                |                |                |
     *       +                +----------------+                +----------------+
     *       ^                                 ^
     *       |                                 |
     *       |<---------- Period ------------->|
     *       |               ^                 |
     *       |               |                 |
     *                       | 
     *      pwm_interface.period_us( 5000);
     */

   /* Step3: Set the period on the PWM pin */
   const PWM_Period_in_microseconds=5000;
    pwm_interface.period_us( PWM_Period_in_microseconds);      // Set the period as 5000 us or 5ms

    /* Step4: Enable the PWM pulse on the pin */
    var pwm_enabling_result= pwm_interface.enable(true);

    var delta = 0.05;   /* Variation on the duty cycle */
    var duty = 0.0;       /* 0% duty cycle */
    keepRunning = true;
    const sleep_duration_in_Microsecond=50000;

 while (keepRunning){
        if (duty >= 1)
        {
            duty = 1;          // Intensity of LED at highest 
            delta = -0.05;     // Need to decrease the duty cycle
        }
        else if (duty <= 0)
        {
            duty = 0;          // Intensity of LED at the lowest
            delta = +0.05;     // Need to increase the duty cycle 
        }
       /*
        *  Control the duty cycle with "write"
        *    +------+                            +------+                            
        *    |      |                            |      |                           
        *    |      |                            |      |                           
        *    |      |                            |      |                           
        *    |      |                            |      |                           
        *    |      |                            |      |                           
        *    |      |                            |      |                           
        *    |      |                            |      |                           
        *    |      |                            |      |                           
        *    +      +----------------------------+      +---------------------------+
        *    ^      ^
        *    |      |
        *    |<---->|
        *        ^
        *        |-----------------
        *                          |
        *  pwm_interface.write( 0.2);
        * 
        */

     /* Step5: Use the function 'mraa_pwm_write' to set the duty cycle */
    pwm_interface.write( duty);
    /* Wait for some time */
    var sleep = spawnSync('usleep', [sleep_duration_in_Microsecond]);

    duty = duty + delta;
}

    /* Step6: Stop the PWM when not required */
    pwm_interface.enable(false);
于 2017-06-12T06:55:51.613 に答える