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

今日、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); } 


, , . !

Source: https://habr.com/ru/post/J261123/


All Articles