投稿

Koshianのレッスンゴレライ8(RCサーボモーター)

イメージ
KoshianにRCサーボモーターを接続します。 接続するサーボモーターは TowerPro社 のマイクロサーボSG92R($2.6)です。秋月電子では500円で購入できました。ググってもデータシートは見つかりませんでしたが、 SG90 と同じく重量は9g、外形は若干小型化していますが、出力トルクアップ、ギアがカーボンファイバーになって強度アップした後継モデルの様ですので、同じパルス出力で良さそうです。 KoshianのGPIOは PWM出力に対応 (PIO0-2)していますので、サーボモータにパルス幅、周期を合わせる事で容易にコントロール可能です。 Koshianの電源はアルカリ電池2直、サーボモータの電源にはアルカリ電池3直を繋いで、GNDを直結しておきます。 PIO1出力をサーボ信号入力(オレンジ色のケーブル)に接続します。信号振幅が約3Vでは低すぎるかも?と思われましたが正常に動作しました。 テストコード パルス周期20msec パルス幅500〜2400usecをKoshianのPWM仕様である最小の20usec刻みでスライダーでコントロールしています。 PIO1出力波形

ARM用クロスコンパイラのビルド(Windows8.1+Cygwin+GCC5.2)

イメージ
以前の記事 から2年余り経過したのでゼロベースで最新環境にしてみた。 ◆ Cygwin のインストール setup.exeをダウンロードしてきて実行。 Default状態から以下のパッケージを追加でInstallします。 今回は②〜③についてもCygwinのインストールパッケージを使用。 ①Devel ②任意精度計算ライブラリ(GMP) ③浮動小数点演算ライブラリ(MPFR) ④複素数演算ライブラリ(MPC) Cygwinのインストールが完了。バージョン確認結果。 ◆クロスコンパイラ関連ソースを入手 /usr/local/srcフォルダにソースをダウンロード&展開します。 因みに、今回のツリーは以下の様にしていますがお好みです。 /usr/local/gnu                      ...gccインストール先               /src/gcc***             ...ソース                     /binutils***                     /newlib***                     /build/gcc        ...ビルド用フォルダ                              /binutils                              /newlib ① GCCコンパイラ $wget http://ftpmirror.gnu.org/gcc/gcc-5.2.0/gcc-5.2.0.tar.bz2 $tar jxvf gcc-5.2.0.tar.bz2 ② binutils(アセンブラやリンカーなど) $wget http://ftpmirror.gnu.org/binutils/binutils-2.25.tar.bz2 $tar jxvf binutils-2.25.tar.bz2 ③ Newlib(組み込み向け標準ライブラリ) $wget ftp://sources.redhat.com/pub/newlib/ne

Koshianのレッスンゴレライ7(キャラクタグラフィックス)

イメージ
キャラクタグラフィックスモジュールの接続テストです。 SunlikeDisplay社の SO1602AWGB-UC-WB です。有機ELなのでLCDよりも見やすく低消費電流です。 テストコード

Koshianのレッスンゴレライ5(大気圧センサー)

イメージ
前回 に続いて、I2Cに手持ちの大気圧センサーを繋いでみました。 秋月電子で購入したモジュールです。Freescale社のMPL115A2と、パワーインジケータ用LEDとパスコンが載っています。 秋月電子の提供資料だと不明点が多いので、 データーシート を読みましょう。 単4アルカリ乾電池2ケ直列の約2.7Vで動作させています。 I2Cバス上に繋ぐデバイスが増えてきたので、 温度センサーモジュール 上のプルアップ抵抗10KΩでは信号波形劣化が不安なので、半田ジャンパーをカットして、SCLとSDAを4.7KΩのプルアップに変更しました。 テストコード JSLintがビット演算を許してくれないので(無視すれば良いのだが)、ビットシフトの代わりに掛け算、割り算で実装しています。 javascriptの数値演算はIEEE754の浮動小数点で行われるそうなので、デバイスが意図する計算値とは誤差が発生しますので、測定精度を期待する場合にはオススメできませんのでご注意を。 また、気圧計算に使用するCoefficient値 a0、b1、b2、c12はデバイス個々の固有値として格納されており変化しませんので、一度読み出して事前計算して定数としてプログラムに組み込んでしまうのも有りですね。 Tips 純粋にjavascriptのみのコーディングであればBracketのデバッグ機能やPCブラウザの開発モードを利用したデバッグができますが、konashiによるBlueTooth通信が含まれると実行できないので、(javascript初心者なもので)嵌りだすと何が何だか判らなくなって困っていたところ、konashi.jsアプリ画面にオーバレイしてデバッグログを表示してくれる log functions がありました。 デバッグログ画面が小さいので、iPhoneの横幅一杯に表示し、表示位置を下詰めにするカスタマイズ版を参考まで。赤文字部分が変更部分です。 //debuglog表示カスタマイズ function showMyDebugLog() {     "use strict";      var debugConsole = document.createElement

Koshianのレッスンゴレライ4(温度センサー)

イメージ
今夜はi2c通信のレッスンです。 以前RaspberryPiに繋いだ温度センサー ADT7410 を使用します。 秋月電子で購入したモジュールです。 ADT7410とプルアップ抵抗が載っているだけです。 Koshianのi2cに接続する時は、J1とJ2を半田でショートし、SCLとSDAのプルアップ抵抗を有効にしておきます。 テストコード k.i2cMode(k.KONASHI_I2C_ENABLE_400K);  iPhoneとKonashiの通信が確立したら、まずはi2c通信を有効にします。注)通信レートは100Kbpsと400Kbpsのいずれかを、接続するデバイスに合わせて選択します。 timer_hdl = setInterval(function () {      k.i2cStartCondition();      k.i2cWrite(1, 0x00, adr_adt7410);   //アドレス指定      k.i2cRestartCondition();      k.i2cReadRequest(2, adr_adt7410);   //測定値読み出し要求      $("#message").html(count);      count = count + 1;  }, 1000);  setIntervalにて1秒周期で、ADT7410から2バイトの測定値読み出しを要求しています。注)スレーブアドレスは接続するデバイスに合わせます。 k.completeReadI2c(function () {     "use strict";     k.i2cStopCondition();     k.i2cRead(2, function (data) {         var readdata = 0, temp = 0;               readdata = (data[0] * 256) + data[1];         $("#readdata").html("ADT7410 read " + readdata);         temp = re

Koshianのレッスンゴレライ3(ADC入力)

イメージ
今夜はADC入力を試してみました。 KoshianにはADC入力が3チャンネルあります。 基準電圧は1300mVで、0V〜1300mVのアナログ入力値が得られるようです。 テストコード iPhoneとKoshianが接続できたら、500msec周期でAIO0、1、2のADC値取得要求を発行します。     timer_hdl = setInterval(function () {         k.analogReference(function (data) {             $("#reference").html("Reference voltage " + data + "mV");         });         k.analogReadRequest(k.AIO0);         k.analogReadRequest(k.AIO1);         k.analogReadRequest(k.AIO2);         $("#message").html(count);         count = count + 1;     }, 500); iPhoneにADC値が通知されると、ADCチャンネル毎にイベントが発生しますので、iPhoneの画面に取得した値を表示しています。 k.updateAnalogValueAio0(function (data) {     "use strict";     $("#adinput0").html("ADC0 input voltage " + data + "mV"); }); 次回は、I2C通信で温度センサーを繋いでみます。

Koshianのレッスンゴレライ2(PWM出力)

イメージ
Konashi.jsを利用してGPIO端子のPWM出力でLEDの輝度を可変してみました。     k.pwmMode(k.PIO1, k.KONASHI_PWM_ENABLE);     k.pwmPeriod(k.PIO1, 1000);     k.pwmDuty(k.PIO1, 20); とする事で、周期1000usec、パルス幅20usec のPWM出力となります。 テストコード jsdo.it使用上の注意 jqueryを使用してテストコードを書いていたところ、異常な挙動に悩まされました。 調査の結果、HTMLにbodyタグを記述すると異常な挙動を起こします。 jsdo.it上でjavascriptとHTMLの記述欄が別になっていますが、ブラウザから見た時のソースを確認したところ、以下の様になります。 <!DOCTYPE html> <html> <head> <meta charset="UTF-8" /><title>レッスンゴレライ2 - js do it</title> <meta name="Description" content="jsdo.it - share JavaScript, HTML5 and CSS - " /> <meta name="Keywords" content="JavaScript,HTML5,CSS" /> <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1, maximum-scale=1"> <style type="text/css"></style></head> <body> jsdo.it HTML欄への記述 <script type="text/javascript&quo