食べて、座って接続してください

今日、Intel Edisonは一連のセンサーとアクチュエーターを使用して次のことを行います:「Grasshopper sat in the grass」という曲を再生し、水が順調に流れているか、火がついているか、水を汲み出し、空気中にアルコール蒸気があるか、ほこりっぽい部屋があるか、トレースするか、やかんが沸騰する方法、座標を決定する、磁石を見つける。 そして何か他のもの。







以下のセンサーとアクチュエータ、およびそれらをIntel Edisonで使用する方法について説明します。



センサーの例はビデオで見ることができます:







センサーとIntel Edisonを使用したことがない場合は、 前の記事をご覧ください。

始める前に、ちょっとした発言。 例の起動中に、UPM機能の操作時にエラーが発生した場合、たとえば、次のメッセージが表示されます。

Cannot find module 'jsupm_rotaryencoder'
      
      





そのため、UPMを含むインストール済みパッケージを更新する必要があります。 これは次のコマンドで非常に簡単に実行できます。

 opkg upgrade
      
      





ボード自体のファームウェアを更新することをお勧めします。



ホールセンサー







グローブホールセンサー 。 SKU:SEN14034P



アプリケーション:磁場の存在の判定。 速度の決定。

たとえば、ホイールの回転数を決定するには、ホイールに磁石を固定し、回転中に磁石が通過する場所の隣にセンサーを配置します。 その後、彼らのアプローチ時に信号があります。



ホールセンサーは、任意のデジタル入力D2-D8に接続されます。 0-磁場が存在する場合、1-磁場がない場合。 センサーボードにはLEDがあり、磁場が現れると点灯します。



Intel Edisonボードの内蔵LEDが磁場がないときに点灯するプログラムの例。 そして、可能であれば、それはオフになります。

センサーはD2に接続されています。



プログラムは、内蔵LED(D13)に、ホールセンサーから読み取った値を送信します。 MRAAライブラリを使用します。



ソースコードmain.js
 var mraa = require('mraa'); var hallSensor = new mraa.Gpio(2); hallSensor.dir(mraa.DIR_IN); var myOnboardLed = new mraa.Gpio(13); myOnboardLed.dir(mraa.DIR_OUT); periodicActivity(); function periodicActivity() { var value = hallSensor.read(); myOnboardLed.write(value); setTimeout(periodicActivity,20); }
      
      





スピーカー







グローブスピーカー 。 SKU:COM05051P



デジタル出力に接続します。 この出力に送られる信号はスピーカーに設定されます。 したがって、特定の周波数で信号をすばやく変更すると、サウンドを再生できます。 音量はチューニング抵抗で変更できます。



UPMライブラリにはスピーカー機能があります。



単一のノートを演奏する例。

 var groveSpeaker = require('jsupm_grovespeaker'); var mySpeaker = new groveSpeaker.GroveSpeaker(2); //   D2 mySpeaker.playSound('a', true, "med");// 
      
      





機能:

 playSound('a', false, "med");
      
      





最初のパラメーターであるノートは、「a」、「b」、「c」、「d」、「e」、「f」、または「g」(a、si、do、re、mi、fa、salt)です。

2番目のパラメーターは、このノートにシャープを使用するかどうかです。

3番目のパラメーターであるオクターブは、「低」、「中」、「高」のいずれかです。

デュレーションは設定できませんが、各音は約0.1秒間鳴ります。



スピーカーは任意のデジタル出力に接続できるため、サウンドはプログラムで再生されるようです。 このため、音は特に明確ではなく、喘鳴します。



したがって、ハードウェアで信号を生成できるため、PWMを使用してサウンドを操作すると便利です。 (PWMの操作については、 前の記事をご覧ください )。



スピーカーはPWMをサポートしているため、D3に接続されています。 (ボードでPWMをサポートするコンタクトは、チルダ「〜」で示されます。これらはD3、D5、D6です)。



たとえば、これは1秒でAノートを再生する方法です。



ソースコードmain.js
 var mraa = require("mraa"); var pwm3 = new mraa.Pwm(3); freq = 440; //   var period = 1000000 / freq; pwm3.period_us(period); pwm3.pulsewidth_us(period/2); pwm3.enable(true); setTimeout( function(){pwm3.enable(false);}, 1000);
      
      





それでは、ハードコアに移り、「草の中に座っているバッタ」というメロディーを手動でプログラムしてみましょう。



ソースコードmain.js
 var mraa = require("mraa"); var pwm3 = new mraa.Pwm(3); //       // , -, , -, , , -, , -, , -,  var freq = [261.63, 277.18, 293.66, 311.13, 329.63, 349.23, 369.99, 392.00, 415.30, 440.00, 466.16, 493.88 ]; //     // .  N,V // N-  (-1-),  1/V var notes = [ 9,4, 4,4, 9,4, 4,4, 9,4, 8,4, 8,2, 8,4, 4,4, 8,4, 4,4, 8,4, 9,4, 9,2, 9,4, 4,4, 9,4, 4,4, 9,4, 8,4, 8,2, 8,4, 4,4, 8,4, 4,4, 8,4, 9, 1.33]; var currNote = 0; var baseValue = 1000;//      nextNote(); function nextNote() { pwm3.enable(false); if( currNote >= notes.length / 2 ) { return; } var note = notes[currNote*2]; var value = notes[currNote*2+1]; //  : // 0.25 -   // 0.5 -   // 1 -   // 2 -   // 4 -   // 8 -   // 16 -   var octaveScale = 2;//    ,   console.log('note='+note+' value='+value); if( note >= 0 ) { var frequency = freq[ note ] * octaveScale; var period = 1000000 / frequency; console.log('frequency='+frequency+ ' Hz'); pwm3.period_us(period); pwm3.pulsewidth_us(period/2); pwm3.enable(true); } currNote++; setTimeout( nextNote, baseValue/value); }
      
      





水流センサー







G1 / 4 "水流センサー 。SKU:TEM01071B



センサーを使用すると、センサーを通過する水の量を判別できます。 範囲は0.3〜6リットル/分です。 矢印は、蓋の上の水の動きの方向を示しています。

センサーの内部にはホールセンサーがあり、インナーインペラーの回転によってトリガーされます。 その動作の頻度は、流れる水の量に比例します。 センサー出力で信号0と1が変化するので、センサー出力で信号の値を監視し、0から1への変化を考慮します。

1秒あたりのパルス数、つまり周波数を計算します。 周波数をストリームに変換する式は次のとおりです。

L = Q / 73

ここで、Qはパルス周波数(Hz)です。

L-流量(l /分)



センサーの接続には小さな問題があります。 標準のコネクタはありません。 3ピンがインストールされていますが、4つが必要です。 しかし、3本のワイヤがオスとオスの場合は、単純に解決されます。 コネクタにぴったり収まります。



センサーをD2に接続します。

プログラムは次のように機能します。 2つのタイマーを作成しましょう。 最初のものはミリ秒ごとに1回起動し、センサーの状態を確認します。 0からの値が1になった場合、パルスカウンターを増やします。

2番目のタイマーは1秒に1回起動します。 カウントされたパルスの値を読み取ります。

蓄積に1秒かかるため、最小流量値は1/73 = 0.013 l /分になります。

パルスが頻繁に届くと、それらに気付かないため、中断のないアルゴリズムはあまり正確に機能しないことに注意してください。 私のテストでは、毎秒約230パルスが正常に機能し、これは毎分約3リットルです。 速度を上げると、計算値は減少し始めます。 値はLCD画面に表示されます。 水センサーに持って行くために、私は店で4 mmのホースを買いました。



ソースコードmain.js
 var mraa = require('mraa'); var jsUpmI2cLcd = require ('jsupm_i2clcd'); var lcd = new jsUpmI2cLcd.Jhd1313m1(0, 0x3E, 0x62); lcd.setColor(10,10,10); var waterFlowSensor = new mraa.Gpio(2); waterFlowSensor.dir(mraa.DIR_IN); var prev = waterFlowSensor.read(); var count = 0; setInterval( checkSensor, 1 ); setInterval( countProc, 1000 ); function checkSensor() { var curr = waterFlowSensor.read(); //    1 if( prev === 0 && curr === 1 ) { count++; } prev = curr; } function countProc() { var litres = count / 73; var currCount = count; count = 0; console.log('count='+currCount+ ' water=' + litres + ' Litres/hour, water=' + (litres/60) + 'L/min'); lcd.setCursor(0,0); lcd.write("Count=" + currCount + ' '); lcd.setCursor(1,0); lcd.write("Flow=" + parseFloat(litres).toFixed(2)+ ' L/min '); }
      
      





火災センサー







グローブ-炎センサー 。 SKU:SEN05082P



センサーは、火の存在に反応するか、760nm〜1100nmの波長の放射に反応します。 チューニング抵抗を使用して感度を調整することができます。 私のテストでは、センサーは隣の緑色のLEDに反応しませんでした。 ビームの中心がセンサーに向けられた場合にのみ、白色LED懐中電灯に反応しました。 ガスライターがオンになると、センサーは約50センチの距離でトリガーされました。 ほぼ同じ距離で、彼は火のついたマッチから発射した。 センサーはリモートコントロールによってトリガーされます。 ほとんどの場合、家電製品と同じフォトダイオードが使用されます。 日光に反応します。 ただし、感度は調整可能であるため、誤検知が発生しないように調整できます。

指示には、応答距離が0〜1 mであると記載されています。



センサーがD2に接続され、その値がボード上の内蔵LEDに表示される例。



ソースコードmain.js
 var mraa = require('mraa'); var flameSensor = new mraa.Gpio(2); flameSensor.dir(mraa.DIR_IN); var myOnboardLed = new mraa.Gpio(13); myOnboardLed.dir(mraa.DIR_OUT); periodicActivity(); function periodicActivity() { var value = flameSensor.read(); myOnboardLed.write(1-value); setTimeout(periodicActivity,20); }
      
      





非接触IR温度センサー







グローブ-赤外線温度センサー 。 SKU:SEN01041P



非接触赤外線温度センサー。 作動距離は9 cmですので、水を溶かして沸騰させて調整し、実験的に距離を選択することをお勧めします。

UPMを使用する必要があります。 センサーは2つの温度を出します。 1つの環境、もう1つの測定対象。 内部では、TP-538Uセンサーが使用されます。



サンプルプログラム。 センサーをA0に接続します(ピンA0およびA1が使用されます)。 データはコンソールとLCD画面に表示されます。



ソースコードmain.js
 var OTP538U_AREF = 5.0;//   var tempIRSensor_lib = require('jsupm_otp538u'); // - var jsUpmI2cLcd = require ('jsupm_i2clcd'); var lcd = new jsUpmI2cLcd.Jhd1313m1(0, 0x3E, 0x62); //   A0 (  A0  A1) // A0 -   // A1 -   var tempIRSensor_obj = new tempIRSensor_lib.OTP538U(0, 1, OTP538U_AREF); function checkTemp() { var tempAmb = tempIRSensor_obj.ambientTemperature(); var tempObj = tempIRSensor_obj.objectTemperature(); var tempAmbStr = parseFloat(tempAmb).toFixed(2); var tempObjStr = parseFloat(tempObj).toFixed(2); var outputStr = "Ambient temp: " + tempAmbStr + " C, " +"Object temp: " + tempObjStr + " C"; lcd.setCursor(0,0); lcd.write('amb='+tempAmbStr+' '); lcd.setCursor(1,0); lcd.write('obj='+tempObjStr+' '); console.log(outputStr); } setInterval(checkTemp, 1000);
      
      





UVセンサー







Grove-UVセンサー 。 SKU:SEN00700P



センサーはアナログ入力に接続されています。 値を単に読み取るか、UPMを使用して電圧に変換できます。 この場合、ライブラリ自体が一連の測定を実行して値を平均化します。 このため、センサーからのデータの受信が遅くなる可能性があります。



ソースコードmain.js
 var UVSensor = require('jsupm_guvas12d'); //   A0 var myUVSensor = new UVSensor.GUVAS12D(0); var g_GUVAS12D_AREF = 5.0;//  var g_SAMPLES_PER_QUERY = 1024; setInterval(function() { var val = myUVSensor.value(g_GUVAS12D_AREF, g_SAMPLES_PER_QUERY); var valStr = parseFloat(val).toFixed(6); var outputStr = "AREF: " + g_GUVAS12D_AREF + ", Voltage value (higher means more UV): " + valStr; console.log(outputStr); }, 1000);
      
      





拡散した日光が十分にあるが、窓が閉じている部屋では、値は0.283203です。 太陽からの直接光線で窓に持っていくと、二重の二重ガラス窓の後ろにある場合、値は0.473633に上がります。 ウィンドウを開くと、最大4.980469が得られます。



プログレスバー







Grove-LEDバー 。 SKU:LED05031P



進行状況バーは10個のLEDで構成されています。 黄色と赤の2つの極端なものを除き、それらはすべて緑です。 作業には、UPMライブラリを使用する方が適切です。 これにより、初期値と点灯する必要のあるインジケータの数が存在する側を指定できます。 両方のコンダクター(データおよびクロックパルス)が制御に使用されます。 D2に接続すると、ピン2とピン3になります。



次の例では、インジケーターの値は順次増加し、そのたびに方向が変わります。



ソースコードmain.js
 var LEDBar = require("jsupm_my9221"); var myLEDBar = new LEDBar.MY9221(2, 3);//  D2 (pin-D2,pin-D3) var directionBool = true; setInterval(function() { show_LED(1, directionBool); }, 1500 ); function show_LED(level, direction) { if (level <= 10) { myLEDBar.setBarLevel(level, directionBool); setTimeout(show_LED, 50, ++level, directionBool); } else { directionBool = !directionBool; } }
      
      





360度回転センサー。 エンコーダー







Grove-エンコーダ 。 SKU:COM01112P



エンコーダー、回転センサー。 任意の方向に1回転できます。

作業には、UPMライブラリを使用することをお勧めします。 回すと値が増加し、反対方向に回すと減少します。 値はゼロ未満になる場合があります。 2つの制御信号が使用されます。



ソースコードmain.js
 var rotaryEncoder = require("jsupm_rotaryencoder"); //   D2 ( D2, D3) var myRotaryEncoder = new rotaryEncoder.RotaryEncoder(2, 3); getValue(); function getValue() { var v = myRotaryEncoder.position(); console.log("Position: " + v); setTimeout(getValue,100); }
      
      





光センサーI2C







Grove-デジタル光センサー 。 SKU:SEN10171P



光センサー。 I2Cバスに接続します。 Luxに価値を与えます。 ドキュメントによると、値の範囲は0〜40000です。



テストでは、明るい部屋では値が約500であることが判明しました。太陽の下では、ブラインドのある窓から20000〜40000に達します。 直射日光に当てると、ロールオーバーし、値が4000に低下します。これを念頭に置いておく必要があります。



ソースコードmain.js
 var digitalLightSensor = require('jsupm_tsl2561'); //  TSL2561 on I2C var myDigitalLightSensor = new digitalLightSensor.TSL2561(); setInterval(function() { console.log("Light value is " + myDigitalLightSensor.getLux() + ' Lux'); }, 1000);
      
      





ガスセンサーMQ5







グローブ-ガスセンサー(MQ5) 。 SKU:SEN90502P



ガスセンサー。 液体溶媒、天然ガスに反応します。 感度はポテンショメーターで調整できます。



アナログ値を提供します。 そのまま使用できますが、UPMライブラリを使用できます。 ライブラリは一連の測定を実行して平均値を計算しますが、このため、関数呼び出しはプログラムを一時停止します。



センサーの特徴は、動作中に大幅に熱くなることです。 これは、ほとんどのこのような検出器の機能です。 作業を開始する前に、センサーをウォームアップする必要があります。 説明書では、予熱時間は24時間であると書かれていますが、これはなんとなく奇妙です。



次の例では、センサーをA0に接続し、UPMを使用します。



ソースコードmain.js
 var upmMQ5 = require("jsupm_gas"); //   A0 var myMQ5 = new upmMQ5.MQ5(0); var threshContext = new upmMQ5.thresholdContext; threshContext.averageReading = 0; threshContext.runningAverage = 0; threshContext.averagedOver = 2; while(1) { var buffer = new upmMQ5.uint16Array(128); var len = myMQ5.getSampledWindow(2, 128, buffer); if (len) { var thresh = myMQ5.findThreshold(threshContext, 30, buffer, len); myMQ5.printGraph(threshContext, 5); } }
      
      





ダストセンサー







グローブ-ダストセンサー 。 SKU:SEN12291P



ダストセンサー。 空気のほこりに応じてパルスを出力します。 サイズが1ミクロン以上のダスト粒子に反応します。 UPMライブラリを使用することをお勧めします。



特徴は、getData関数が30秒以内にデータを受信することです。



これが彼の仕事の例です。 これは正常な状態です。



 Low pulse occupancy: 1829533 Ratio: 6.0984462 Concentration: 3279.9744018259016
      
      





そして、センサーの隣で埃っぽい布でそれを振った。



 Low pulse occupancy: 5541164 Ratio: 18.470549560000002 Concentration: 15240.471566321306
      
      





ソースコードmain.js
 var dustSensor = require('jsupm_ppd42ns'); //   D2 var myDustSensor = new dustSensor.PPD42NS(2); var data; var notice = "This program will give readings "; notice += "every 30 seconds until you stop it" console.log(notice); while(1) { data = myDustSensor.getData(); console.log("Low pulse occupancy: " + data.lowPulseOccupancy); console.log("Ratio: " + data.ratio); console.log("Concentration: " + data.concentration); }
      
      





空気質センサー







Grove-大気質センサー 。 SKU:SEN01111P



空気質センサー。 囲まれたスペース用に設計されています。 一酸化炭素、水素、アルコール、アセトン、溶媒、ホルムアルデヒド、その他の有毒ガスに反応します。

私はライターからのアルコールとガスで彼の作品をチェックしました。 彼はそれらを定義しました。

アナログ入力に接続します。 例では、A0に。 値を読むだけです。



ソースコードmain.js
 var mraa = require('mraa'); var gas = new mraa.Aio(0); getGas(); function getGas() { var g = gas.read(); console.log(gas='+g); setTimeout(getGas,500); }
      
      





アルコールセンサー







Grove-アルコールセンサー 。 SKU:SEN21723P



アルコールセンサー。 アナログピンに値を与えます。 ただし、センサー自体をウォームアップするにはデジタルピンも必要です。 センサーに通常のシールドを使用する場合、ピンA0およびA1はコネクターA0にあります。 そして、ピンA1は実際にはデジタルピンD15です。

作業を開始する前に、センサーを2分間温めることをお勧めします。



ソースコードmain.js
 //   MQ303A var mq303a = require('jsupm_mq303a'); //  mq303a // A0 –  // A1,   D15   var myAlcoholObj = new mq303a.MQ303A(0, 15); console.log("Enabling heater and waiting 2 minutes for warmup."); //     30  statusMessage(1); statusMessage(2); statusMessage(3); function statusMessage(amt) { setTimeout(function() { console.log((amt * 30) + " seconds have passed"); }, 30000 * amt); } //     2  setTimeout(runAlcoholSensor, 120000); function runAlcoholSensor() { var notice = "This sensor may need to warm " + "until the value drops below about 450." console.log(notice); setInterval(function() { var val = myAlcoholObj.value(); var msg = "Alcohol detected "; msg += "(higher means stronger alcohol): "; console.log(msg + val); }, 1000); }
      
      





GPSモジュール







グローブ-GPS 。 SKU:SEN10752P



GPSからデータを受信するためのモジュール。 このモジュールは、シリアルポートでデータを提供します。 したがって、シリアルポートとして機能するコネクタに接続します。 これは、UARTというラベルの付いたコネクタです。



データは、NMEA 0183形式のテキスト形式で送信されます。フィールドの説明は、 ここにあります



モジュールからの出力例を次に示します。



 $GPGGA,183227.000,5619.7971,N,04400.5751,E,2,4,3.28,36.7,M,9.4,M,0000,0000*59 $GPGSA,A,3,16,27,19,22,,,,,,,,,3.43,3.28,0.99*05 $GPGSV,3,1,12,18,73,111,,27,61,264,22,22,56,212,26,21,41,107,*70 $GPGSV,3,2,12,19,38,302,22,15,30,054,,16,16,234,25,20,12,062,*78 $GPGSV,3,3,12,13,11,026,,14,06,169,,30,03,340,,04,03,281,*7A $GPRMC,183227.000,A,5619.7971,N,04400.5751,E,0.00,87.99,230615,,,D*53
      
      





$ GPRMCの最後の行は興味深いものです。

183227-18:32:27 UTC

5619.7971、N-緯度

04400.5751、E-経度



このデータは、たとえばyandexマップで使用でき、検索バーに次の形式で表示されます。

 N56 19.7971 E44 00.5751
      
      





衛星が検出されない場合、出力は次のようになります。

 $GPGGA,235958.800,,,,,0,0,,,M,,M,,*40 $GPGSA,A,1,,,,,,,,,,,,,,,*1E $GPGSV,1,1,00*79 $GPRMC,235958.800,V,,,,,0.00,0.00,050180,,,N*49
      
      





このプログラムはシリアルポートライブラリを使用して動作するため、package.jsonファイルの依存関係で指定する必要があります。



ソースコードpackage.json
 { "name": "OnboardLEDBlink", "description": "", "version": "0.0.0", "main": "main.js", "engines": { "node": ">=0.10.0" }, "dependencies": { "serialport" : "1.7.4" } }
      
      





次の例では、GPSモジュールから受信したデータをコンソールに単に印刷します。



ソースコードmain.js
 var mraa = require('mraa'); //require mraa var uartdev = new mraa.Uart(0); var com = require('serialport'); //    UART var portName = uartdev.getDevicePath();// '/dev/ttyMFD1'; var serialPort = new com.SerialPort(portName, { baudrate: 9600, dataBits: 8, parity: 'none', stopBits: 1, flowControl: false }); serialPort.on('open',function(){ console.log('Port open'); serialPort.write('\n'); }); serialPort.on('data', function(data){ console.log(data.toString()); console.log('---'); }); serialPort.on('close', function() { console.log('close'); }); serialPort.on('close', function(error) { console.log('error='+error); });
      
      





次の例は、受信したデータを解析して地理座標を抽出し、LCD画面に表示するため、より複雑です。



ソースコードmain.js
 var jsUpmI2cLcd = require ('jsupm_i2clcd'); var lcd = new jsUpmI2cLcd.Jhd1313m1(0, 0x3E, 0x62); lcd.setColor(0,0,0); var mraa = require('mraa'); //require mraa var uartdev = new mraa.Uart(0); var com = require('serialport'); var portName = uartdev.getDevicePath();// '/dev/ttyMFD1'; var serialPort = new com.SerialPort(portName, { baudrate: 9600, // default for serial communication dataBits: 8, parity: 'none', stopBits: 1, flowControl: false, parser: com.parsers.readline('\r\n') }); serialPort.on('open',function() { console.log('Port open'); serialPort.write('\n'); }); serialPort.on('data', function(data) { console.log(data.toString()); console.log('---'); var str = data.toString(); var vals = str.split(','); if( vals[0] === '$GPRMC' ) { var tm = vals[1].split('.')[0]; var lat = parseFloat(parseFloat(vals[3])).toFixed(1); var latS = vals[4]; var lon = parseFloat(parseFloat(vals[5])).toFixed(1); var lonS = vals[6]; //var time= Math.floor(tm); var time = [tm.substring(0,2), tm.substring(2,4), tm.substring(4,6)].join(':'); var str1 = 'time='+time; var str21 = latS+lat.substr(0,2) +' ' + lat.substr(2); var str22 = lonS+lon.substr(0,2) +' ' + lon.substr(2); var str2 = str21 + ' ' + str22; lcd.setCursor(0,0); lcd.write(str1); lcd.setCursor(1,0); lcd.write(str2); console.log('time=' + time + ' lat=' + lat + latS + ' lon=' + lon + lonS); console.log(str1); console.log(str2); } }); serialPort.on('close', function() { console.log('close'); }); serialPort.on('close', function(error) { console.log('error='+error); });
      
      





モータードライバー







Grove-I2Cモータードライバー 。 SKU:ROB72212P



モータードライバーを使用すると、2つの従来のモーターまたは1つの4線式2相ステッピングモーターを接続できます。 管理はI2Cバス経由です。 電流は、チャネルごとに最大2Aです。 このような大電流では、マイクロ回路が加熱する可能性があります。 ボードには、モーターを停止できるボタンがあります。

バス上のデバイスのI2Cアドレスを設定するスイッチがボード上にあります。 デフォルトでは、1111、つまり15に設定されています。

ボードには電源コネクタがあります。 モーターは別の電源から電力を供給されます。 したがって、5 V以外の電圧用のモーターにすることができます。この例では、Intel Edisonボード自体から電圧を印加しますが、簡単です。







UPMライブラリを使用する場合、エンジンのパラメーターはすぐにカップルによって設定されます。

まず、各エンジンの方向を設定する必要があります。



 my_MotorDriver_obj1.setMotorDirections( groveMotorDriver_lib.GroveMD.DIR_CCW, groveMotorDriver_lib.GroveMD.DIR_CW);
      
      





このコマンドの後、最初のモーターは反時計回りに、2番目のモーターは時計回りに回転します。



次に、回転速度を0〜255に設定できます。 値が255の場合、モーターに全電圧が印加されます。



 my_MotorDriver_obj1.setMotorSpeeds(255, 127);
      
      





最初のエンジンはフルスピードで回転し、2番目のエンジンは半分で回転します。



次の例では、2番目のモーターを半電圧で反時計回りにオンにします。



ソースコードmain.js
 var groveMotorDriver_lib = require('jsupm_grovemd'); var i2c_addr1 = 15; var my_MotorDriver_obj1 = new groveMotorDriver_lib.GroveMD( groveMotorDriver_lib.GROVEMD_I2C_BUS, i2c_addr1 ); my_MotorDriver_obj1.setMotorDirections( groveMotorDriver_lib.GroveMD.DIR_CCW, groveMotorDriver_lib.GroveMD.DIR_CCW); my_MotorDriver_obj1.setMotorSpeeds(0, 127);
      
      





エンジン







プラネットギアードモーターF280 。 SKU:316070006



ギアボックスが統合されたエンジン。 3-24 . 80-800 /. 5, . 255, 120 /.



, , .



(), . - , .

D4. - I2C. I2C.



main.js
 var groveMotorDriver_lib = require('jsupm_grovemd'); var rotaryEncoder = require("jsupm_rotaryencoder"); var myRotaryEncoder = new rotaryEncoder.RotaryEncoder(4, 5); var jsUpmI2cLcd = require ('jsupm_i2clcd'); var lcd = new jsUpmI2cLcd.Jhd1313m1(0, 0x3E, 0x62); lcd.setColor(0,0,0); var i2c_addr1 = 15; var my_MotorDriver_obj1 = new groveMotorDriver_lib.GroveMD( groveMotorDriver_lib.GROVEMD_I2C_BUS, i2c_addr1 ); my_MotorDriver_obj1.setMotorDirections( groveMotorDriver_lib.GroveMD.DIR_CCW, groveMotorDriver_lib.GroveMD.DIR_CCW); my_MotorDriver_obj1.setMotorSpeeds(0, 0); checkButton(); function checkButton() { var v = myRotaryEncoder.position(); var speed = v*10; if( speed < -255 ) { speed = -255; } if( speed > 255) { speed = 255; } var dir; if( speed > 0) { dir = groveMotorDriver_lib.GroveMD.DIR_CCW; } else { speed = -speed; dir = groveMotorDriver_lib.GroveMD.DIR_CW; } my_MotorDriver_obj1.setMotorDirections( 0, dir); my_MotorDriver_obj1.setMotorSpeeds(0, speed); lcd.setCursor(0,0); lcd.write('v='+v+' '); lcd.setCursor(1,0); lcd.write('speed='+speed+' '); setTimeout(checkButton,100); }
      
      











6V mini water pump . SKU: 114990073



. , .

4 .

, , .

6 , 5 .

, . . . , . , .



. -. , .



main.js
 var groveMotorDriver_lib = require('jsupm_grovemd'); var rotaryEncoder = require("jsupm_rotaryencoder"); var myRotaryEncoder = new rotaryEncoder.RotaryEncoder(4, 5); var jsUpmI2cLcd = require ('jsupm_i2clcd'); var lcd = new jsUpmI2cLcd.Jhd1313m1(0, 0x3E, 0x62); lcd.setColor(0,0,0); var i2c_addr1 = 15; var my_MotorDriver_obj1 = new groveMotorDriver_lib.GroveMD( groveMotorDriver_lib.GROVEMD_I2C_BUS, i2c_addr1 ); my_MotorDriver_obj1.setMotorDirections( groveMotorDriver_lib.GroveMD.DIR_CCW, groveMotorDriver_lib.GroveMD.DIR_CCW); checkButton(); // 255 - 2    //my_MotorDriver_obj1.setMotorSpeeds(0, 127); //set the speeds of the motors on board 1 function checkButton() { var v = 10 * myRotaryEncoder.position(); if( v < 0 ) { v = 0; } if( v > 255) { v = 255; } my_MotorDriver_obj1.setMotorSpeeds(0, v); lcd.setCursor(0,0); lcd.write('Speed='+v+' '); setTimeout(checkButton,100); }
      
      







, , . !



All Articles