d.sunnyone.org
sunnyone.org

ページ

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

2013-09-21

Arduino + USB ホストシールド + BTドングルでBluetooth Lチカ

このあたりを参考にしたら、思ったよりも圧倒的に簡単にできたので、思わず記事にする。ArduinoとUSBホストシールドにBluetoothドングルを使うと、SPP (Serial Port Profile)を使って簡単にLEDチカチカできちゃう。

1. 機器を準備する

必要なものは、ArduinoとUSBホストシールド2.0とBluetoothドングル。今回は、以下を使った。
最後のBluetoothドングルはもう売ってないと思うけど、似たようなやつが千円くらいで買えると思う。だいたい使えそうな気がするけど、Linuxで使える報告があがってるやつとかが無難なのかな?

USBホストシールドは2.0なものを選ばないとたいへんらしい

2. つなぐ

USBホストシールドにBluetoothドングルを差して、Arduino Unoに重ねて、適当なデジタルピンにLEDと抵抗のセットをつなげばいい。ただし、デジタル8~13は使っているらしいので注意。今回は6番を使った。

3. Arduino IDEの所定のディレクトリにzipを展開する

https://github.com/felis/USB_Host_Shield_2.0 から、zipアーカイブをダウンロードして、/usr/share/arduino/libraries/USB_Host_Shield_20 に展開する。

4. SPPサンプルを開く

Arduino IDEのメニューからUSB_Host_Shield_20のBluetoothのSPPのサンプルを開く。

5. ちょちょいと書き換えて転送する

サンプルはSerialとSerialBTでお互いにechoする感じなので、適当にif文を書き換えてdigitalWrite(ピン, HIGH/LOW); でチカチカさせるようにする。

変更した部分はこんなかんじ(全体は最後に)。
if (SerialBT.available()) {
  char c = SerialBT.read();
  if (c == '1') {
    digitalWrite(6, HIGH);
  } else {
    digitalWrite(6, LOW);
  }
  Serial.write(c);
}

あとは転送する。

6. ペアリングして通信する


ターミナル的なソフトが使えれば、WindowsでもLinuxでもなんでもいいと思うけど、今回はAndroidとS2 Terminal for Bluetooth Free を使った。1とか0とか送ってチカチカすれば成功!

ソース全体でもこれだけ。eneloop スティックブースターで動くし、お手軽にライトな無線機器を作るのにいいと思う。



2012-08-19

ダ・ヴィンチ32UとフリスクケースとUbuntuと

ダ・ヴィンチ32U (Da Vinci 32U) という、ストロベリー・リナックスというところが出しているマイコンボードがある。このボード、「Arduino Leonardo」っぽく動く機械なのだが、1つ1260円という安価で購入できる。その上コンパクトなので、ちょっとしたUSBデバイスを作るのには最適な機械なのだ。
(念のために書いておくと、「Arduino」 とは、ハード的にはAtmel社のマイコン、AVRが乗ったマイコンボードである。しかし、このボードには、専用の簡単なIDE(ほぼエディタ)と、豊富なライブラリ集があり、USBの口から簡単にファームウェアを転送できるので、素でAVRを使うよりずっと簡単に機械を作れる。一つ一つを取ると決してすごくないのだが、全体を合わせたときのお手軽さは、 よくできている。)

で、このダ・ヴィンチ32Uがどのくらいコンパクトかというと、フリスクケースに収まるので、入れてみた。


この赤い基板がダ・ヴィンチ32U。つけたのは、赤外線LEDと抵抗、赤外線リモコン用センサーだけ。

閉じたときの絵:
 

食べるときみたいにちょっとだけ開けると、読み取りセンサーが使えるようになる。
見てわかる通り、フリスクケースに入れてもなお隙間ができるくらい小さいので、物は入れやすい。
フリスクケースは、比較的薄いので、ちょっと力を入れればカッターでも切れる。危ないから、ピンバイスで穴を開けてから広げたほうがいいとは思うけど。

問題は、本来はピンヘッダをつけて、何かに刺して固定する製品のようなので、固定がちょっと難しい。うまい方法が思いつかなかったので、ケースに千枚通しで穴を開けて、右端のGNDピンと、ISPピンに糸を通して、それぞれ縫ってしまった。玉止めなにそれうれしいのという感じになるので、おすすめしない。たぶん、ホットボンドなんかで止めるのがいいんじゃないかなと思う。

なお、ボードに書かれているピン名称は、Leonardoのものと異なるので、読み替えが必要。いくつかのサイトに載っているので、参考にできる。たとえばここ:http://dev.tetrastyle.net/2012/02/leonardo.html

Ubuntuで使うには

Ubuntu 12.04では、arduinoのIDEは1.0が入っている。そのため、Leonardは使えない。 boards.txtを書き換えれば使えるかなーと思ったんだけど、以下のようなエラーが出て書き込みができなかった。
Binary sketch size: 4450 bytes (of a 28672 byte maximum)
avrdude: stk500_recv(): programmer is not responding

なので、http://arduino.cc/en/Main/Software からLinux/32bit版を落としてきて、tar zxvfで/optに展開したら、Leonardを選択することで「Linuxでは」使えるようになった。
(Ubuntu本体に入っているarduino packageには依存関係があるので、apt-get install arduinoで1.0を普通にインストールしてからやったほうがいいと思う。)

ただし、この方法で書き込んでしまったダ・ヴィンチ32Uは、Leonardのbootloaderが書き込まれてしまうので、strawberry-linux公式の言うとおり、Windowsでは使えなくなってしまう(Leonardとして認識されるが、arduino.ccのドライバもstrawberry-linuxのドライバも受け付けない)。

そのため、Ubuntuであっても、最初からstrawberry-linuxのWindows版ドライバのReadmeに書いてある通り、boards.txtを上書きし、ダ・ヴィンチ32Uの定義で使うのがよい。
# cp da-vinci-32u/boards.txt /opt/arduino-1.0.1/hardware/arduino/boards.txt

うちのようにLeonardのbootloaderをうっかり上書きしてしまったらどうするか。Linuxではまだ書き込みができるので、ドライバに含まれている「da-vinci-32u-master.hex」を、上記のboards.txtに書いてある「davinci.hex」というファイル名で、しかるべき場所にコピーしてあげれば、書き込み(Upload)時に、ファームを更新してくれて、Windowsでも使えるようになる。
# cp da-vinci-32u/da-vinci-32u-master.hex /opt/arduino-1.0.1/hardware/arduino/bootloaders/caterina/davinci.hex
こうしてうっかり書いてしまったダ・ヴィンチ32Uを復活させる手段としてUbuntuを使うのもいいかもね。

Arduino Unoとの違い

気をつけなくてはいけないかもしれない点として、Arduino UnoとArduino Leonardが若干違うところがあるようだ。スイッチサイエンスのページにまとめられている:http://trac.switch-science.com/wiki/Guide/ArduinoLeonardo

そもそも簡単にUSBデバイスとして振舞えるようになったというのは大きく違うので、せっかくだからそのうち遊んでみたい。
http://trac.switch-science.com/wiki/tinker-with-Leonardo