まごころせいじつ堂

浜町庄金 研究開発  マイコンで遊んでばっかりで

2014年01月

Galileo シリアルポート用ケーブルの工作とRTC設定

 GalileoのLinux側にログインしてなんかしようとするにはスケッチ経由でやる方法もあるがシリアルケーブルがあると便利。が、Galileoは3.5mmのステレオプラグをシリアルポートとして使っているので手持ちのもので工作してみた。

 たまたま、Dsub9ピン→RJ45のコンソールケーブルとサンハヤトのRJ45変換基板CK-18があったのでこれとステレオプラグを使って組み立てた。コンソールケーブルはCiscoのネットワーク機器以外の一部のサーバ機でも使われているのでたまたま持ってた。

参考:
Ciscoコンソール用 DB9-RJ45変換コネクタの自作
RS-232(Wikipedia)
「Intel Galileo Development Board」を起動して動作確認
【CK-18】コネクタ変換基板・モジュラー88タイプ


※追記 秋月電子のUSB-シリアル変換ケーブルでも動作確認
USB-シリアル変換ケーブル グレー色 延長ケーブル付

 プラグ加工。ケーブルの赤が先端、緑が中央、黒が根元。
2014galiseri1

 これをCK-18基板の端子に接続。赤=3,緑=6,黒=4または5。
 RJ45端子における信号は
1 CTS (in)
2 DTR (out)
3 TxD (out)
4 GND
5 GND
6 RxD (in)
7 DSR (in)
8 RTS (out)
 となる。フロー制御をなしにするのでTxDとRxDだけの接続でよい。
ハードフロー制御をONにしてしまった場合は端末側が送受信できなくなるのを防ぐため、CTS/DSRをGNDに落とせばよい。または、CTS-DTRをショートなど。
2014galiseri2

 TeraTermによる画面表示。 通信速度は115200bps。起動時はGRUBのブートメニューが出る。10秒ほほど待つと起動し、login:プロンプトが出たらrootでログイン。
2014galiseri3


 さて、ついでにRTCのバッテリバックアップも作ったので動作確認する。CR2032の電池ボックスから2本線出してくっつけただけ。

2014galirtc

 時刻の設定は以下のようにする。

# date -s "2014-01-31 01:45:00"

 時刻設定が終わったら、RTCに転送しておく。

# hwclock --systohc

 電源をいったん切って、起動後にdateコマンドで確認。

参考:
システムの時計を設定する方法
 

 
エムサーブ コンソールケーブル(RJ45-DB9)エムサーブ コンソールケーブル(RJ45-DB9)

エムサーブ
売り上げランキング : 22506

Amazonで詳しく見る
by G-Tools

GalileoのファームウェアアップデートとLCD表示

 Arduino互換のIDEとシールドが使えるIntelのGalileoを使ってみた。

 まずはこちらを参考にファームウェアのアップデート。
Intel Galileoはじめの一歩 (人と技術のマッシュアップ)

ハマりどころは
・シリアルデバイス名でtty.*でなくcu.*を選択する
だが他にもあった。MacOSX(10.8)で専用のIDEを使ってアップデートする場合、ファイル名にスペースなどを含めてはいけない。ファイル名の長さも8文字まで。さらに、[アプリケーション]フォルダ以下に直接置かないといけない。私はArduinoのサブフォルダを作って複数の環境を置いていたのだが、ここでは動かなかった。

Problems updating firmware

 さて、Lチカも確認し手持ちのシールドが動くかどうかテスト。Galileoは5V/3.3Vのシールドが使える(ショートプラグで切り替え)。LCDキーパッドシールドを使った。スケッチは過去やったFizzBuzz。が、液晶の上の行に全部トーフが表示されたままで変わらない。調べたらlcd.init()を追加する必要があった。

Intel GalileoでHD44780キャラクタ液晶を使う方法(もへある)
Problems getting LCD to work with Galileo

LiquidCrystal lcd(8,9,4,5,6,7);

に対し、lcd.begin()の前に

lcd.init(1,8,255,9,4,5,6,7,0,0,0,0);

が必要。ピン8,9,4,5,6,7はそれぞれRS,ENABLE,D4,D5,D6,D7に対応。

ソース:https://gist.github.com/houmei/8505883

2014galileoLCD

 表示できることはできるのだが表示が遅い。感覚では300ボーの端末の画面表示よりも遅い。

 Galileoでは既存のライブラリはあまりあてにできないようだ。


 
No brand LCD キーパッド シールド Arduino 計測結果 表示No brand LCD キーパッド シールド Arduino 計測結果 表示

ノーブランド
売り上げランキング :

Amazonで詳しく見る
by G-Tools

超音波距離センサ HC-SR04を1ピンで使う

 超音波距離センサモジュール HC-SR04というのがある。なぜかAmazonで安かった。
HC-SR04 Demo For Arduino 
HC-SR04 User Guide[PDF] 

 TRIG端子にパルスを与えると距離に応じた時間の後ECHO端子に信号がでる。電源を除くと2端子必要。が、Groveの超音波距離センサモジュールのライブラリが使えないかと眺めていたら1端子しか使っていない。同じものに見えるのに?
GROVE - 超音波距離センサモジュール 

 TRIG端子とECHO端子をショートさせたらどうだろうかと考えたが発振してしまうように思える。調べてみたら抵抗で繋げてしまえばいいらしい。
Hack your HC-SR04 into one pin mode 
ForumMain PICAXE ForumActive PICAXE Forum HC-SR04 
これらによると 1.8KΩの抵抗で TRIGと ECHOを接続し、TRIG端子を使えば良いとのこと。手持ちの2.2KΩで試してみた。

2014grove1


2014grove2

これをGroveのケーブルで接続する。

2014grove3
 

 ライブラリは Grove用のものをそのまま使った。
Seeed-Studio / Grove_Ultrasonic_Ranger [Github]

注意:Githubからzipでまとめてダウンロードすると後ろに-masterが付くがArduino IDEのライブラリ名はハイフンを許さないので削除

 ライブラリインストール後、UltraSonicDisplayOnTermスケッチを使って確認。
ソース中、距離をインチで取得する部分とセンチメートルで取得する部分があるが、この間にディレイを適当に入れてやらないと後に書いたほうが0を返す。ひょっとしたらGroveのセンサと非互換の箇所かもしれない。

RangeInInches = ultrasonic.MeasureInInches();
        delay(100); ←これ
RangeInCentimeters = ultrasonic.MeasureInCentimeters();

ということで2ピン必要なところを1ピンにケチることができた。



HC-SR04 超音波距離センサーモジュール For ArduinoHC-SR04 超音波距離センサーモジュール For Arduino

サインスマート(SainSmart)
売り上げランキング : 4897

Amazonで詳しく見る
by G-Tools

 

Leonardo互換のSeeeduino LiteとGrove OLEDテスト


 Seeeduino Lite (スイッチサイエンス) 1995円。同社扱いのArduino Leonardo 2835円とくらべて安い。
黄色いコネクタと白いGrove用コネクタは自分でハンダ付けする。
特徴として、3.3V/5V切り替え、I2CとシリアルのGroveコネクタ、半ピンずらしたコネクタ取り付けのパターンあり。

 MacOSX 10.9.1 + Arduino IDE 1.0.5で動作確認。

 Seeeduino Lite Wiki
2014leo



 このままだとちょっとつまらないのでGroveを使ってみる。Groveは4ピンコネクタを使用するセンサ類を接続するSeeedStudio独自の規格。最初、右側のシリアル端子にシリアル用LCDを接続して試してみたが、Seeeduino Liteでは1,2番ピンに接続されている。これはATMega32U4のハードウェアシリアル端子なので、ライブラリに付属しているexamplesでは動かないようだ。
 そこで左側のI2C接続端子に128x64 OLEDを接続してみた。

GROVE System

Grove - OLED Display 0.96"

2014leo2 

 これは簡単、ライブラリをインストールしてArduino IDEを再起動、サンプルスケッチを呼び出してみただけ。
 

MacOSX10.9(Mavericks)とFTDIドライバについて→10.9.5アップデートで解決

※MacOSX10.9.5アップデートで解決した模様。

 FTDIドライバ対策を行っていなかったMacOSX10.8をMavericksにアップデートし、10.9.5アップデート後、FTDIチップを使用しているArduino(例:互換機のCrowduino)を接続しbrinkスケッチを転送。接続時はドライバは以下のようにFTDIドライバは1つだけ認識。書き込み可能。

$ kextstat | grep FTDI

  155    0 0xffffff7f82c33000 0x8000     0x8000     com.FTDI.driver.FTDIUSBSerialDriver (2.2.16) <138 36 5 4 3 1>

 もともとのAppleUSBFTDI.kextは削除していない。

$ cd /System/Library/Extensions/IOUSBFamily.kext/Contents/PlugIns/

$ ls -al

total 0

drwxr-xr-x  24 root  wheel  816  8 21 03:26 .

drwxr-xr-x   8 root  wheel  272  9 19 13:21 ..

drwxr-xr-x   3 root  wheel  102  6  4 13:22 AppleUSBCDC.kext

drwxr-xr-x   3 root  wheel  102  6  4 13:22 AppleUSBCDCACMControl.kext

drwxr-xr-x   3 root  wheel  102  6  4 13:22 AppleUSBCDCACMData.kext

drwxr-xr-x   3 root  wheel  102  6  4 13:23 AppleUSBCDCDMM.kext

drwxr-xr-x   3 root  wheel  102  6  4 13:23 AppleUSBCDCECMControl.kext

drwxr-xr-x   3 root  wheel  102  6  4 13:23 AppleUSBCDCECMData.kext

drwxr-xr-x   3 root  wheel  102  6  4 13:23 AppleUSBCDCEEM.kext

drwxr-xr-x   3 root  wheel  102  6  4 13:22 AppleUSBCDCWCM.kext

drwxr-xr-x   3 root  wheel  102  6  4 13:26 AppleUSBEHCI.kext

drwxr-xr-x   3 root  wheel  102  6  4 13:33 AppleUSBFTDI.kext

drwxr-xr-x   3 root  wheel  102  6  4 13:26 AppleUSBHub.kext

drwxr-xr-x   3 root  wheel  102  6  4 13:26 AppleUSBMergeNub.kext

drwxr-xr-x   3 root  wheel  102  6  4 13:26 AppleUSBOHCI.kext

drwxr-xr-x   3 root  wheel  102  6  4 13:26 AppleUSBOpticalMouse.kext

drwxr-xr-x   3 root  wheel  102  6  4 13:26 AppleUSBUHCI.kext

drwxr-xr-x   3 root  wheel  102  6  4 13:35 AppleUSBVideoSupport.kext

drwxr-xr-x   3 root  wheel  102  6  4 13:26 AppleUSBXHCI.kext

drwxr-xr-x   3 root  wheel  102  6  4 13:26 IOUSBCompositeDriver.kext

drwxr-xr-x   3 root  wheel  102  6  4 13:26 IOUSBHIDDriver.kext

drwxr-xr-x   3 root  wheel  102  6  4 13:26 IOUSBHIDDriverSafeBoot.kext

drwxr-xr-x   3 root  wheel  102  6  4 13:27 IOUSBLib.bundle

drwxr-xr-x   3 root  wheel  102  6  4 13:26 IOUSBUserClient.kext 



ーーー以下は以前の記事

 MacOSXを10.9にアップデートしたらFTDIチップを使っているArduinoが通信できなくなるという話を聞いて、10.9.1のアップデータが来るまで待っていたのだけど相変わらず直ってなかったので以下を適用した。
☆Arduino UNO R3、Arduino LeonardoなどFTDIチップを使わずにシリアル通信を実現しているものは問題なかった。

Arduino in OS X 10.9 Mavericks - Serial Port Issues

 AppleがMacOSX10.9からFTDIドライバをつけるようになったのだが、それに不具合があるらしい。修正方法は、標準のApple FTDIドライバを削除してFTDICHIPが配布しているドライバをインストールすること。
Virtual COM Port Drivers こちらからMacOSX用2.2.18をダウンロードする。ダウンロードして展開したFTDIUSBSerialDriver_v2_2_18.dmgを開くと2つのパッケージがあるが、FTDIUSBSerialDriver_10_4_10_5_10_6_10_7の方をインストールする。

ドライバの確認はkextstatコマンドで確認できる。デバイスを接続しないと現れない。

以下は2つのドライバが入ってしまっている例。

$ kextstat | grep FTDI

  127    0 0xffffff7f8259d000 0x7000     0x7000     com.apple.driver.AppleUSBFTDI (1.0.1b1) <114 37 5 4 3>

  128    0 0xffffff7f825a4000 0x8000     0x8000     com.FTDI.driver.FTDIUSBSerialDriver (2.2.18) <114 37 5 4 3 1>


先ほどのリンクにあった手順
cd /System/Library/Extensions/IOUSBFamily.kext/Contents/PlugIns 
    sudo mv AppleUSBFTDI.kext AppleUSBFTDI.disabled 
    sudo touch /System/Library/Extensions
で削除して再起動し、FTDIのドライバをインストールすると以下の様に確認できる。

$ kextstat | grep FTDI

  125    0 0xffffff7f81ca1000 0x8000     0x8000     com.FTDI.driver.FTDIUSBSerialDriver (2.2.18) <114 36 5 4 3 1>

 動作確認はCrowduinoで行った。これはArduino Duemilanove互換でFTDIのチップを使ってシリアル通信をしている。クロウディーノ(Arduino互換) (801-ECP-C328) 

ついでにこんなのも見つけた。FTDIドライバをON/OFFするらしいが試していない。Arduinoに限らず影響があったみたい。OS X Mavericks (10.9) - IMPORTANT


追記:
Mac OS X MavericksにおけるFTDIシリアルポートドライバの取扱い 
記事検索
プロフィール

hardyboy

カテゴリ別アーカイブ
月別アーカイブ
QRコード
QRコード
  • ライブドアブログ