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

Arduinoをはじめようキットの構成

Arduinoの勉強のとっかかりとして、

Arduinoをはじめようキット
http://www.amazon.co.jp/%E3%82%B9%E3%82%A4%E3%83%83%E3%83%81%E3%82%B5%E3%82%A4%E3%82%A8%E3%83%B3%E3%82%B9-Arduino%E3%82%92%E3%81%AF%E3%81%98%E3%82%81%E3%82%88%E3%81%86%E3%82%AD%E3%83%83%E3%83%88/dp/B0025Y6C5G

を購入しました。
このキットには以下のパーツが付属していました。

・Arduino Uno R3(マイコンボード) 1個
・堅いジャンパワイヤ 1セット
・柔らかいジャンパワイヤ10本セット 1セット
・1kΩ抵抗(茶黒赤金) 3本
・330Ω抵抗(橙橙茶金) 1本
・10kΩ抵抗(茶黒橙金) 2本
・270Ω抵抗(赤紫茶金) 1本

・ブレッドボード 1個
・USBケーブル 1本
・LED 3個(3種類)
・タクトスイッチ 1個
・CdSセル1個
・MOS-FET 1個
・ダイオード 1本

・ガイドシート 1枚


抵抗のカラーの見方は以下のサイトが参考になりました。
http://bbradio.sakura.ne.jp/code1/code1.html

電池ホルダーを買った

Arduinoに入力する電池ホルダーを購入した。

以下のプログラムをアップロード。

void setup(){
  Serial.begin(9600);  //ボーレート(1secに行う変復調の回数)を9600に設定
}
void loop(){
  float vt = (float)analogRead(A0)/1023 * 5.0;
  Serial.println(vt);
  delay(1000);  // Wait for 1 second
}

電池一つなら、以下の通り。

入力結果が1.57V安定する。
下の電池ホルダーは、直列に3個の電池をつなぐことができるもの。



回路を組んでみた。

 1.57×3= 4.71(V)の値に近い4.73Vが出力される。
電子ホルダーのような電子工作の部品は100円以下で手に入るので、積極的にパーツ屋さんに足を運んで、パーツを揃えると良いと思った。

Arduinoでアナログ入力ー乾電池を例に取ってー

乾電池の電圧を測定することは、アナログ入力を学ぶのに最適。

//電圧測定のスケッチ
void setup(){
  Serial.begin(9600);  //ボーレート(1secに行う変復調の回数)を9600に設定
}
void loop(){
  float vt = (float)analogRead(A0)/1023 * 5.0;
  Serial.println(vt);
  delay(1000);  // Wait for 1 second
}


 analogReadによる戻り値は、0から1023まで。電圧が最高で5V(1023)、最小で0V(0)である。そこで、戻り値を1023で割ったものに、5を掛けることで、実際の電圧を測定することができる。

下の写真のように乾電池(単4、1.5V)のプラス側をArduinoのA0に、乾電池のマイナス側をArduinoのGNDに接続した。




シリアルモニターの出力結果は以下の通り。ノイズが入ってしまうが、うまく測定できると1.57Vと測定される。
【参考文献】
高本孝頼『みんなのArduino入門』リックテレコム 2014 pp86 - 88.

Arduinoでシリアル通信

Mac(開発機)とArduinoの間は、USBケーブルで接続されている。USBケーブルは電源の供給だけではなく、シリアル通信という通信手段を用いた情報のやりとりが可能である。

以下のプログラムはシリアル通信を行い、LEDのON/OFFをコントロールするものである。



#define LED_PIN 13

void setup(){
  pinMode(LED_PIN, OUTPUT);
  Serial.begin(9600);
}

void loop(){
  int inputchar;
  inputchar = Serial.read();  //シリアル通信で読み込む

  if(inputchar != -1){  //読み込んだ値が-1でなければ以下を実行
    switch(inputchar){
      case 'o':      //oを読み紺んだ場合
      Serial.print("LED ON");
      Serial.println("");    //改行
      digitalWrite(LED_PIN, HIGH);
      break;
      case 'p':      //pを読み込んだ場合
      Serial.print("LED OFF");    //改行
      digitalWrite(LED_PIN, LOW);
      break;
    }
  }
}

ビルド&アップロードをしたら、Tools > Serial Monitor をクリック。窓にoやpを入力すると、それに応じてLEDの点灯をコントロールすることができる。



IDEを用いないで、InoとpicocomによりSerial通信をターミナル上で行う。

#作業ディレクトリ作成
$ mkdir Serial_ino
$ cd Serial_ino

#プロジェクトの生成
$ ino init

#デフォルトでsrc/に生成されるプロトタイプのスケッチを消去
$ rm src/sketch.ino

#新たにスケッチを作成
$ vim src/Serial.ino

#ビルド
$ ino build

#アップロード
$ ino upload

#Serial Monitorとしてpicocomというアプリケーションを使用する。Macportsからインストール。
$ sudo port selfupdate
$ sudo port install picocom

#シリアル通信を実行
$ ino serial


'o'や'p'を入力すると、リアルタイムに通信が行われ、LEDの点滅に反映されるのが楽しい。

【参考文献】
高橋隆雄『たのしい電子工作 Arduinoで電子工作をはじめよう』秀和システム 2013
Massimo Banzi (著), 船田 巧 (翻訳)『Arduinoをはじめよう 第2版』2012



Ino コマンドラインからArduinoのスケッチをビルドとアップロードするツール―その2


今回は、Inoを用いてスケッチをビルドし、アップロードを行ってみたいと思う。
まず、IDEで同様のことを行うときに、どのようなファイルが生成するのかを見てみたいと思う。

まず、以下のようにプログラムを書いて、ファイルを適当なディレクトリに保存
#このとき生成したファイルを調べる
$ ls /Users/kappa/Documents/1403/Blinking_LED/
Blinking_LED.ino

arduinoのスケッチは.inoという拡張子のファイルがその実体のようである。

ならば、vimで編集した.inoのファイルをinoを用いてビルドすることが可能なはず。
まずは、適当にディレクトリを作って、その中にvimでスクラッチを作成。


それではビルドを行う。まずはボード指定。どのようなボードが登録されているか確認。デフォルトがUnoになっているので、特にいじらなくてよさそう。
$ ino list-models

万が一Uno以外のものであれば、-mのオプションをつけて、ボードの種類を指定すればよい。
例: ino build -m nano  

それでは実際にビルドを行う。

おっと、プロジェクトがないと言っている。インターネットで調べたところ、プロジェクトというもの(実体はディレクトリの集合)を作成しなくてはならないようだ。

それでは気をとりなおして、カレントディレクトリを空にした後に、ino initを入力。

ここで、先ほどBlinking_LED.inoを作成。
プロジェクトのルートディレクトリにおいて、以下のコマンドを実行。
$ ino build

かなり長いログがでたということは、それだけ様々な処理をやってくれている証拠。頼もしい。
ビルドして、生成したファイルは.build以下に存在する。
$ ls -al

最終的なビルドによる成果物は、ビルドのログの一番最後に出てくるfirmware.hexであろう。
このファイルは、Blinking_LED_Ino/.build/uno以下に存在する。


最後に、arduinoにアップロードを試みる。
$ ino upload

無事、基板上のLEDが点滅した。


IDEと違い、慣れ親しんだコマンド上で様々な作業ができる点はとても良い。IDEを使っていて、遮蔽された感じがいやだったが、このツールも結局はsrcディレクトリにスケッチをおいて、ドキュメントルートでino init, ino build, ino uploadとコマンドを三回うつだけだ。その意味ではIDEとやっていることに大差はないが、生成してくるファイルをlinuxコマンドで逐一確認できる点は学習効果が高いように感じる。

参考文献にはシリアル通信についても記述があるので、参考にしていずれやってみたいと思う。

【参考文献】
Massimo Banzi (著), 船田 巧 (翻訳)『Arduinoをはじめよう 第2版』2012

Ino コマンドラインからArduinoのスケッチをビルドとアップロードするツール―その1

Arduinoのスケッチがコンパイルされてアップロードされる過程は、IDEにより遮蔽されている。しかし、興味がわいてしまう。また、提供されているIDEが若干使いにくい(ex. UNIXのショートカットキーが使用不可)ので、コマンドラインから、スケッチのコンパイルと転送をしたいとお考えの方も多いようだ。

Arduinoのスケッチのコンパイル過程は以下のサイトが詳しい。
http://isisredirect2hard.blogspot.jp/2012/03/arduino-sketch.html
これらを詳細に理解して、makefileを使ってmakeをすれば、望みのバイナリファイルを作成することは可能であろう。
アップロードに関してはこちら(http://wwwowwowww.cocolog-nifty.com/record/arduino-duemilanove-328.html)にある方法を用いれば、コマンドラインから可能であろう。

原理を理解でき、そして慣れ親しんだコマンドラインからの操作ですべてがすまされるこの方法は魅力的であろう。しかし、若干の煩雑さを伴う。コマンドラインだけですべてを処理したいという欲求をかなえるだけなら、Ino(http://inotool.org/)と呼ばれる便利なツールがあるようだ。

Inoはmakefileを自動的に作ってくれるので、ユーザーの手間が省ける(Ino is based on make to perform builds. However Makefiles are generated automatically and you’ll never see them if you don’t want to.)。また、アップロードもコマンドラインで可能である。

Inoは現在、LinuxとMacにのみ対応しているようである(Limitation)。

それではInoのインストールの方法を紹介する。

OS X 10.9ではデフォルトでpythonとeasy_installが入っているので、インストールは簡単である。

#Inoをインストール
$ sudo easy_install ino

#Inoの実行ファイルへのパスを確認
$ which ino
/usr/local/bin/ino

#Inoの実体を確認(pythonスクリプトである)
$ less /usr/local/bin/ino

#ヘルプを開く
$ ino -h


PCボードとマイコンボード

最近、日経Linuxなどのコンピュータ雑誌を見ているとお目にかかる機会が増えたRaspberry PiやArduinoだが、これらの分類はどのように行われているのだろうか。

格安ボードには大きく「PCボード」と「マイコンボード」の二つに分けられる。

#PCボード
Linuxが動く程度に大きな容量のメモリと能力のあるCPを積んだボード。普段使用するPCと同じく、OSが稼働するため、スタンドアロンで様々な処理が可能である。OSが介在するため、きめ細かいI/Oの制御にはマイコンボードに比べて劣る。
・Raspberry Pi http://www.raspberrypi.org
・BeagleBone Black http://beagleboard.org
・Cubieboard http://cubieboard.org
・Wandboard http://www.wandboard.org

#マイコンボード
メモリやCPU(マイクロコンピュータ)が非力(省エネ)、OSが動作せず、アプリケーションが直接ハードウェアを操作する。きめ細かいI/Oの制御が可能。
・Arduino http://arduino.cc
・mbed https://mbed.org

PCボードにしてもマイコンボードにしてもここに挙げた以外にも種類がある上、それぞれ特徴があるので、しっかりと吟味した上で購入したい。
【参考文献】
『格安pcボードで始める電子工作超入門』日経BP社 2014

Arduinoのことはじめ

MacbookにArduino IDEをインストールし、動作テストを行う。

#1.Arduino IDEのインストール
Arduino公式ホームページのダウンロードページ(http://arduino.cc/en/Main/Software#toc2)からArduino 1.0.5をダウンロードし、インストールした。

#2.シリアルポートの設定
Tools > Serial Portで/dev/cu.usbmodemで始まる項目を選択。

#3.Arduinoの内臓のLEDを点滅させるためのプログラムを作成(テストプログラム)
まずは、Arduinoを接続して以下のプログラムを作成

void setup()
{
  pinMode(13, OUTPUT);
}

void loop()
{
  digitalWrite(13, HIGH);
  delay(500);
  digitalWrite(13, LOW);
  delay(500);
}

作成が終了したら、IDEの左上にあるチェックマーク(Verify)をクリック。うまく行けば、"Binary sketch size: 1,076 bytes (of a 32,256 byte maximum)"と表示される。これで、チェックは終了。アップロードは→のボタンをクリックでOK。アップロードの時に、コンパイルが実行され、生成した実行ファイルがArduino本体にUploadされる。すると、LEDの点滅が開始される。


このプログラムについて簡単に説明。Arduinoの基盤にあらかじめ貼付けられているLEDに対応するPINの番号は13。void setup()内で13ピンをOUTPUTモードにしておいて、後は無限ループで点灯、待つ、消灯、待つを繰り返す。これにより、肉眼的にはLEDが点滅して見える。



ちなみに以下のように、点滅の部分をコメントアウトすると、当然だが13ピンのLEDは点灯したままとなる。

void setup(){pinMode(13, OUTPUT);}
void loop(){
digitalWrite(13, HIGH);
/*delay(500);
digitalWrite(13, LOW);
delay(500);*/
}

【参考文献】
高橋隆雄『たのしい電子工作 Arduinoで電子工作をはじめよう』秀和システム 2013
Massimo Banzi (著), 船田 巧 (翻訳)『Arduinoをはじめよう 第2版』2012


Arduinoとは何か

Arduinoとはいったいどのようなものであろうか。Arduinoの定義として、Arduinoボード全体に関わるものと、マイコンボードそのものの二つが混在しているように思う。ここでそれらを紹介する。

システムとしての定義
・フィジカルコンピューティングのためのオープンソースプラットフォーム(※1)
・AVRマイコン、入出力ポートを備えた基板、C++風のArduino言語とそれの統合開発環境から構成されるシステム(※2)
・Arduino is an open-source electronics prototyping platform based on flexible, easy-to-use hardware and software. It's intended for artists, designers, hobbyists and anyone interested in creating interactive objects or environments.(※3)

ハードウェアとしての定義
・AtmelのAVRマイコンを利用した開発キットのひとつ(※4)

Arduinoを動作させるには、Atmel社のAVRマイコンチップがあるだけでは不十分で、それが適切に基盤に設置され、周辺のI/Oも付属され、さらには開発環境としてのIDEが提供されなくてはならない。そして、これらのすべてがオープンソースとして提供されている。そういうわけで、システムとしてArduinoを定義した方が、自然に感じる。それにArduino公式ホームページ(※3)でもそのように言っているので、Arduinoボードに関わるすべての環境をArduinoと言っても良さそうである。



【参考文献】
1.Massimo Banzi (著), 船田 巧 (翻訳)『Arduinoをはじめよう 第2版』2012
2.Arduino - Wikipedia (http://ja.wikipedia.org/wiki/Arduino)
3.Arduino公式ホームページ(http://www.arduino.cc/
4.高橋隆雄『たのしい電子工作 Arduinoで電子工作をはじめよう』秀和システム 2013

Arduino用プログラムのビルド及び、Arduinoへの転送のプロセスについて

Arduinoの開発言語であるArduino言語はArduino本体にフラッシュされる前に、C言語に変換された後コンパイルされ機械語に変換される。これら一連の流れは、Arduinoの提供するIDEに遮蔽されていて、普段はこちらの目には見えない。Visual StudioやEclipseでC言語の勉強をするのと一緒で何かいまいち理解した気になれない。そこで、Arduino IDE を使わずにビルド、アップロードに成功した実例と説明をネットで検索し、いくつか興味深いものを見つけた。今回私はこれらを具体的に検証していないが、いずれ自分の手で行ってみたいと考えている。
Arduino公式サイトにはビルドプロセスが書いてあるので、そちらも掲載しておく。

ArduinoとOS

Arduinoを使用する場合、OSを使わず、一つのプロジェクトごとに一つのプログラムをフラッシュして実行することが多い。


では、Arduino上でOSの稼働は不可能なのであろうか。答えは可能である。
OSがArduino上で稼働するイメージを以下に示す。

Arduino上で稼働するOSの具体例を列挙する。
・duinos
https://code.google.com/p/duinos/
・Pyxis
http://www.skewworks.com/pyxis/
・MacArduinoOS
http://www.liquidware.com/apps/show/69
・TaOS
http://www.liquidware.com/apps/show/54


なお、メモリ容量が大変小さいため、Linuxを動作させることは困難のようである。以下のサイトでこのことが議論されている。
Linux on Arduino?


インターフェイスを用いて、ハードウェアを使う事

Raspberry PiやArduinoをいじっているうちに、OSの本質が少し見えてきたように感じた。それを書き綴りたい。



まずはじめに、人間が道具を使う事の構造について考えてみた。そもそも、ハードウェアなどの「道具」を使うとは、以下のように集約されるのではないだろうか。ユーザが行いたい意図があり、それをユーザーが直接ハードウェアに働きかけることで、意図が達成される。
コンピュータのシステムというのは、このユーザーとハードウェアという二者の関係の間に、「インターフェイス」と呼ばれる仕組みを組み込むことであると言ってもよさそうだ。

インターフェイスは、何も一つの実体を指す物ではない。コンピュータのシステムでは様々なプログラムが階層的な構造を取り、ハードウェアとの間の橋渡しを行うことが普通である。


さて、この考えを元にOS(Operation System)とはどのようなものであるかを考えていく。まずは、OSが無いシステムを考える。このようなシステムではアプリケーションがユーザとハードウェアの間に入って直接ハードウェアを制御することとなる。下には、OSなしで動作するシステムの実例として、Arduinoを挙げた。

一方、OSが存在する場合は、OSがアプリケーションとハードウェアとの間に位置する。そして、OSがハードウェアの直接的な制御を担うこととなる。アプリケーションは、OSとの連絡を通して間接的にソフトウェアを制御する。言わば、OSがアプリケーションとハードウェアに対して、インターフェイスを提供していると言うができる。

OSの存在するシステムの例として、GNU/Linuxシステムを考える。GNUとは、ここまで議論してきたアプリケーションに相当するものと言っても大きな間違いは無いだろう。Linuxと呼ばれるプログラムは、狭義の意味でのOSと言われる。それはここまでの議論の通り、ハードウェアを直接制御するアプリケーションであるからである。一方、GNUが提供しているソフトウェアは、アプリケーション自身であったり、アプリケーションがカーネルと情報のやり取りを行う際に利用するAPI(Application programming interface)であったりする。ユーザーが触れているのは、アプリケーションであって、カーネルではないので、Linuxカーネル単独ではユーザーの意思を実現することができない。GNUの提供するプログラムが必要なのである。(下の例ではGNU/Linuxが働くハードウェアの実例として、Raspberry Piを挙げた)


GNUとLinuxカーネルの双方にリスペクトを払うという意図で、一般に「Linux」と呼ばれるシステムを、「GNU/Linux」と呼ぶ人も多い。

以上が、私がRaspberry PiやArduinoをいじっているうちに、OSの本質が少し見えてきたように感じたことのまとめである。人間と道具(ハードウェア)という二者の関係に始まって、ソフトウェアがインターフェイスを提供したり、ハードウェアとのやりとりを一手に引き受けるOSのあるシステムまで見てきた。
今後は、OSがあることの利点についてより具体的に考えていきたいと考えている。