ラベル Arduino の投稿を表示しています。 すべての投稿を表示
ラベル Arduino の投稿を表示しています。 すべての投稿を表示

2013年12月1日日曜日

UDOOのArduino DueでLED点灯

i.MX6とArduino Dueが一体になったUDOOが家にやってきたわけですが、2つのパートがどのように連携できるか探るために、まずはAuruino DueでLチカから試してみたいと思います。一応、初めて使うことになるので、必要なツールのインストールとかも含めてメモっておきます。

UDOO上のArduino IDEを使ってみる

まずは点灯するLEDを接続しておきます。適当なLEDを持ってきて、アノード(長い方のリード)をGPIO13ピンに、カソード(短い方のリード)を隣のGNDに接続します。公式サイトのチュートリアルだと電流制限抵抗なしで繋いでますが、私は心配なので一応470Ωをはさんでおきました。

公式で配布しているLinaro Ubuntu 12.04 LTSのSDカードイメージを使っている場合、プリインストールされたArdiono IDEが利用可能です。起動するとデスクトップにアイコンがあるので、ダブルクリックして起動します。
gnome-screenshotをインストールするとスクリーンキャプチャできます
で、LED点灯のための下記コードを記述します。
VerifyしてUpload。とりあえずLEDの点灯を確認できるわけですが。

何でしょう、Arduino IDEでのコンパイル、めっちゃ重い!たったこれだけのコードなのに、1分くらいはかかってるように感じます。PCと比べると、組み込み向けのCortex-A9での使用感はこんなもんでしょうか。。さすがにこれだと作業性が悪いので、PCのArduino IDEから扱えるようにしたいと思います。

Arduino IDE 1.5 インストール & パッチ当て

まず、Arduino IDEは1.5以降のバージョンである必要があるそうです。ここから1.5.5 BETAをダウンロードします。インストーラを使うか、ZIP版を任意のフォルダに展開するかしてインストールしたら、次にパッチ当てをします。UDOOのArduino Dueパートを担うAtmel Sam3Xを書き換えるためにはERASE信号とRESET信号が必要なのですが、通常のArduinoボードと違ってUDOOにはこれが実装されていないらしく、Arduino IDEにパッチを当てることでこれに対応するそうです。環境に合わせて、ここにおいてあるパッチをダウンロードしてきて展開し、中身をArduino IDEのインストールディレクトリの所定の場所に上書きコピーします。Windowsであれば、<arduino-1.5.5のインストール場所>\hardware\tools\の下にbossac.exeを上書きコピー、同梱のcygwin1.dllも一緒にコピーします。

シリアルドライバのインストール

それから、UDOOのUSBコネクタ(CN6)にシリアル接続するためのPC側のドライバをインストールしておきます。ここからOSに合わせたZipファイルをダウンロードし、展開してインストーラを実行します。その上でPCとUDOOのCN6をマイクロUSBケーブルで接続すると、ドライバが自動インストールされ、COMポートとして認識されます。


コード記述、実行

PCにインストールしたArduino IDE 1.5.5で、コードを記述しVerify、Uploadします。このとき、USB接続したUARTのラインがi.MX6ではなくSAM3Xにつながるよう、J18のジャンパは外しておく必要があります。これでPCからもArduino Dueに書き込みできるはずですが、電源を切っても先ほどのプログラムがフラッシュに残っていて、再起動時にそのまま実行されるので、同じコードだと変化がわからないかも知れません。その場合はdigitalWrite()する値をLOWに変えるとか、コードを少し変えてみるといいです。私は、LED点滅するよう下記のコードで試しました。



参考情報

Getting started with Arduino-IDE on UDOO - udoo.org
Get the Arduino-IDE ready to program UDOO - udoo.org
UDOO programming the embedded Arduino microcontroller - elinux.org

2012年11月25日日曜日

測距モジュール (GP2Y0A21YK) + Arduino


測距モジュール、あるいは距離センサと呼ばれるデバイス(GP2Y0A21YK)をArduinoで使う実験です。10cmから80cmの範囲の距離を赤外線を使って非接触で測定できます。秋月で1個400円。このほかにも測定距離の範囲が違うデバイスが違う型番で何種類かあるので、用途に応じて使い分けることができます。

回路図は下記。
GP2Y0A21YKはVccが5V、出力Voが0~3Vくらいなので、きわめて単純にArduinoと接続できます。


コードは次のとおり。
これを実行すると、下図のようにコンソール出力に距離を反映したバー(長いほど近い)を表示します。



実際には出力電圧と距離の関係は線形ではないので、ある程度正確に距離を求めたかったら、Arduinoのアナログイン値(10bit)と距離を、テーブルや内挿を用いるとかして距離に換算する方法を用意する必要があります。測距しないにしても、MIDI入力とかに用いようと思ったら、電圧と距離の非線形性は頭に入れておくといいかもしれません。

2012年11月20日火曜日

CNZ1023 (フォトインタラプタ) + Arduino

 

フォトインタラプタ、あるいはフォトセンサなどと呼ばれるセンシングデバイスをArduinoで使う実験です。このデバイスは、LEDとフォトトランジスタを一体化したパッケージになっており、物体が近傍を通過することでLEDの光がフォトトランジスタで受光されたり、あるいは遮られたりする、その状態変化を電気信号として出力します。

LEDとフォトトランジスタが向かい合わせになっていて、その間を通過する物体を検知するタイプを「通過型」、LEDとフォトトランジスタが同じ面を向いていて、物体が反射するLEDの光を検知するタイプ「反射型」といいます。今回使ったのは「通過型」のCNZ1023、秋月で10個入り300円50個入り800円で手に入るお安いパーツです。

接続は下図のとおり。outはArduinoのDigial 2pinに接続しています。

 

まずは普通にポーリングで信号を取るコード。センサの間隙に紙とかキャッシュカードを入れると、シリアルに出てくる値が変わります。実用的にはDigital inを使うことが多いと思いますが、単純なセンサの実験としては、Analog inで値をとってみるのも面白いです。


次に割り込みを使うコード。
  • 物体が入る → 光が遮られる → フォトトランジスタがOFF → 出力がfallする
  • 物体が出る → 光が届く → フォトトランジスタがON → 出力がriseする
この二つを取っています。