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

2009年11月23日月曜日

MTM04 珈琲あります。飲みにきてね。

みなさまご無沙汰しております。
hwhack では春に引き続き、今回もMake Tokyo Meetingに参加...の予定だったのですが、2名いる著者が両方とも出張とバッティングしたため、今回は代理の方に参加をお願いしています。

今回の出し物は都内の某研究所で毎日稼働している Twitter対応型コーヒーメーカー「青山みすず」です。このコーヒーメーカーは珈琲を沸かした量とついだ回数を計測することで、あとどれくらい珈琲が残っているかを計れるようになってます。仕掛けなどの秘密は大岡山の会場で。入れ立て珈琲大サービスでお待ちしています!

PS. 特派員からの報告によれば、MTMではTwitter対応コーヒーメーカー三つ巴の戦いが繰り広げられている模様です。

2009年6月22日月曜日

自作arduinoのための breadboard hack

lilypadのブートローダをつかえば、ブレッドボードでarduinoを組み立てるのは非常に簡単である。これをさらにonechip arduinoにしてしまうとブレッドボード上のパーツも非常に少なくなるので、小さなブレッドボード上にもかなりの回路をのせることが可能になるだろう。

しかしここで問題になるのは、ブレッドボード上においた AVRのチップのピンと、Arduinoのピンの対応がすぐにわからなくなることだ。何度もやって覚えてしまえればいいのだろうが、間違っていてはあまり意味もないことからこんなhackをやってみた。
ブレッドボードの裏にネットでみつけた ATmega と Arduinoのピン配列の対応表をそのまま貼付けておくだけである。対応図はいろんなところにあるので探してほしいが、たとえばこういうのである。

Make: blog本体ではこんなのが出ていた。この場合チップ単体で使うのならいいのだが、1chip arduinoをつくって部品をチップ上に盛ってしまった場合には下の文字が読めない。

これは undocumented 情報としてMake Tokyo Meeting 03 で初お披露目したのだが、なかなかウケたのでエントリーにもしておくことにする。



2009年5月9日土曜日

ブレッドボード/arduino用のお手軽ケーブル加工



yuoがまたUSBデバイスの解析という大ネタを連載しているので、その合間にcueのほうは電子工作関連のコネタをひとつ。

パーツをブレッドボードやarduinoに刺すときに、しっかりとした足がついているLEDなどはよいが、センサーなどのようにケーブルを介して接続する必要がある場合には、そのケーブルをどうやってブレッドボードに刺すかを考える必要がある。

よくやる手としてはケーブルをピンヘッダにハンダ付けをするというのだが、これでは量産が効かないし、出来上がりが不揃いになってしまう。四角いピンのピンヘッダはブレッドボードへの刺さりがキツいし、丸ピンのヘッダはピンが細すぎてブレッドボードにはいいが、arduinoなどのピンソケットにはすこし緩い。

そこでちょうどいい太さで先端がピンに
なった圧着端子を探していた。なかなかちょうどよいものがなかったのだが、yuoとアキバを探し歩いた結果、VGAコネクタなどに使うシュリンクDSUB用のピンがちょうどいいのじゃないかという結論に達したので紹介しておく。
千石通商で売られているシュリンクDSUB用のコンタクトピンは5本単位で売られている。CUEは田舎に住んでいて交通費を考えると必要数だけ毎回買うの
も無駄なので100本パックを買っている。このとき 「シュリンク(細い方)」DSUBの「オス」を入手する必要がある。写真とおなじものを手にいれれば間違いないだろう。
千石通商の1Fにほかの端子とともにおいてあるはずだ。残念ながら通販ではシュリンクではないDSUB用のピンしか扱っていないようだ。ちなみにRS232Cなどに使う普通のDSUB用のピンは太すぎてブレッドボードに刺さらない。

これを1本づつ切り取ってケーブルに圧着するだけである。小信号用の圧着端子と同じで、エンジニア社の精密圧着ペンチで加工すればよい。ケーブルはAWG26より細いものがよいだろう。

そして圧着部の保護と絶縁のために熱収縮チューブでくるんで完成である。上手に圧着できれば、サンハヤトの高級なほうの柔らかいジャンパーケーブルのような出来映えになるはずだ。

arduinoとブレッドボードがカジュアル電子工作の主戦場になってきた今日この頃、このピンの価値は計り知れないと思う。ちなみに、arduino(FIO)に刺すとこんなかんじになる。

このピンの問題は、ちょうどいい100milピッチのハウジングがないところではあるが、1本単位でバラバラでもよい用途では非常に便利にかつ美しくケーブルを作ることが出来るのでおすすめである。

2009年3月13日金曜日

arduino-13 と atmega88


秋月電子ではatmega88というチップを格安で売っている。このAtmega88は 168のメモリ容量が半分になったもので、海外ではあまり値段もかわらないことから arduinoの中でこれを使っているものはないようだ。しかし、日本ではチップが安いことから、これを使うためのハックがいくつかなされてきていたが、arduino-13が2月にリリースされたのでもう一度ハックをしなおす必要がある。そこでarduino-12 行ったのと同様の変更をしようとおもったら、案外簡単に対応できるように内部がかわっていたのでそれについて書いておこう。

まず、最初に私の手元で使っているライターはSTK500なのでそちらを使えるようにするところからはじめてみた。programmers.txt に以下の3行を追加すると、stk500を利用できるようになる。

##############################################################
stk500.name=STK500
stk500.communication=serial
stk500.protocol=stk500v2
##############################################################

そして、atmega88対応の本番は以下のとおりである。まず、ブートローダを用意する。これは自分で作ると大変なので kosakaさんが公開しているものを利用した。

このブートローダをarduinoのフォルダの中の hardware/bootloaders のフォルダの中に、 lilypad88 というフォルダをつくり LilyPadBOOT_88.hex という名前で保存する。
これでブートローダの準備はできあがった。

次に実際のコンパイルのパラメータになる boards.txt の変更が必要だ。lilypad をベースにAtmega 88対応したものなので、lilypad88 という名前で登録することとした。boards.txt への追加部分は以下のとおりになる。

arduino-12 までは cores の中のコードにあった ifdef を書き直す必要があったが、coresのコードが大幅に書き換えられたようで、現状では以下の部分だけで問題なくバイナリを作ることが出来るようだ。あまり話題になっていないが、coresを書き換えずにこれだけの手間で新しいチップがサポートできるようになっているのは、 arduino-13のもっとも変わった部分かもしれない。

##############################################################
lilypad88.name=LilyPad Arduino w/ ATmega88
lilypad88.upload.protocol=stk500
lilypad88.upload.maximum_size=7168
lilypad88.upload.speed=19200

lilypad88.bootloader.low_fuses=0xe2
lilypad88.bootloader.high_fuses=0xdd
lilypad88.bootloader.extended_fuses=0x00
lilypad88.bootloader.path=lilypad88
lilypad88.bootloader.file=LilyPadBOOT_88.hex
lilypad88.bootloader.unlock_bits=0x3F
lilypad88.bootloader.lock_bits=0x0F

lilypad88.build.mcu=atmega88
lilypad88.build.f_cpu=8000000L
lilypad88.build.core=arduino
##############################################################

これで、arduino-13  でも問題なく Atmega88が使えるようになったはずだ。
ちなみに最近の秋月電子でのAtmega88は Atmega88P というピコパワー対応のものにかわっている。こちらでの動作が同様に行えるかはまだ未確認なので、また報告しようとおもう。


2009年2月19日木曜日

ブレッドボードでArduino

「AVRのATMEGA168があればArduino互換ボードが作れる」ということだけを教えてもらって始めたところ、いくつかはまったのでメモ。

  • AVRISP MKIIでは外部電源が無いと書けない
  • 買ってきたばかりのATMEGA168は外部クロックで動くモードになっているので、クロックを供給してあげないと書けない
  • AVRにはヒューズというものがあって、クロックなどの動作モードはそこに書く。ヒューズのビットマップはチップごとに違うので仕様書を参照
とりあえずfirmware(bootloader)を書くまでに超えないといけなかったのはこのくらい。前のエントリーのarduino用シリアルアダプタ(2) を作っただけでは「ブレッドボードでArduino」には到達できなかった。とりあえずクロックを供給するために、その辺にあったセラロック(20MHz)をつなげてみた。DIPのATmega168のクロック周りのピン配置はGND-XTAL1-XTAL2の順番だが、セラロック(負荷容量内蔵)のピン配置はOSC0-GND-OSC1になっていてブレッドボードに挿すには都合が悪い。写真のようにGNDとOSC0のピンをひねって順番を入れ替えたものを作っておいた。これも今後たくさん使うようなものでは無いけれど、一個くらい持っていても損はしないだろう。

で、次にはまったのがこのいい加減に選んだ20MHzという速度だった。
  • Arduinoのブートローダーはクロック周波数によって違う
普通のArduinoは16MHzで動作するらしい。16MHz以外のクロックをつかって標準的なブートローダーを書き込んでもシリアル通信のタイミングが合わなくて通信できない。解決方法は2つで、
  • 供給しているクロックに対応したブートローダーを作成して書き込む
  • 内部クロック(8MHz)で動作する用にヒューズを書き換えて、8MHz用のブートローダー(lilypad 8MHz用)などを書き込む
のどちらかをやらないといけない。

とくにArduinoのknow-howが無い状態で始めてしまったので「こんなところではまるなよ」と言われそうだけど、しょうがない。おかげで最初にLEDの点滅プログラムを動かせた時には、すでにブートローダーのソースを読み終わっているというArduinoの思想とはちょっと離れたスタートになってしまった。

arduino 用シリアルアダプタ(2)

単に機会が無くていままでAVRを使うことは無かったのだが、共同執筆者のCUEと秋葉原で会ったときに「AVRつかったことないんだ」と言われてしまったので、その場の勢いでATMEGA168とATTINY85を購入してしまった。さて、帰ろうかとおもったときにふと違和感を感じた。「あれ?これってどうやってプログラムを書き込むんだ?」。今までAVRをさわったことのない私に何らかの開発環境があるわけがない。結局、さらにATMELのAVRISP MKIIを秋月で4000円で購入するはめになった。

というわけで、何となくAVRと戯れることになったで、最近の週末プロジェクトについて書いてみようと思う。

Arduino用シリアルアダプタ

右も左もわからなかったのだが、AVRといえばArduinoがはやっているらしいし、CUEもさわっているみたいだったのでその辺から攻めてみた。せっかくATMEGA168を買ってしまった手前Arduinoを更に買うのももったいなかったので、ブレッドボードで実験してみることにする。CUEがやっていたシリアルアダプタが便利そうだったので、こちらでも作ってみた。

たくさんつくるものでもないし、必要そうな機能は全部実装した。
  • USB-AVR間のシリアル通信
  • DTRを用いたオートリセット
  • 手動リセットスイッチ
  • シリアル通信のTX/RXのステータスLED
  • AVRISP MK2をAVRにつなげるためのICSPの6ピンコネクタ
AVRISP MKIIはターゲットとなるAVRに電源が供給されていないと書き込めないので、USB給電で全部書き込むためにはICSPコネクタが手元にあった方が、ブレッドボード上のAVRを扱うときに都合がよい。

これで、こんな感じにブレッドボード上にArduino互換の環境をすぐに準備できるようになった。AVRISP MKIIをつなげないといけないのはブートローダを書き込む最初の一回だけで、Arduinoを使うのならそれ以降に接続する必要はない。

まあ、Arduino以外でブレッド ボードにのったAVRを使うこともあるだろうから、つけて良かったと感じている。


とりあえず基板のレイアウトを書いておいた紙を記録用に載せておく。接続図とかは自明だからいらないよね。






(補足:2009/02/19 19:54)
自分でも忘れそうだから、配線図を書き下した。参考までに載せておく。RX/TXのLEDは割愛。




2009年1月29日木曜日

arduino 用シリアルアダプタ


arduinoの場合には作品制作にPCは必須ではない、というよりPCからコントロールする作品ならば、プログラムが一種類ですむgainerのほうがより簡単に扱えるし、PGAや静電容量センサーが使えて便利なことがおおい。arduinoの本領はgainerでは動作しないようなデバイスを動かす場合や、マイコン単体で動作する作品をつくる場合だろう。

そのため、gainerの時と違ってUSBシリアルをすべてのボードに同梱する必要はなく、プログラムの書き込みやデバッグ時のためだけに使えるようにすればよい。
そこで、USBシリアルアダプタを作品のブレッドボードに差し込みやすい形で作ることにした。まず最初に試作してみたのが、L型ヘッダをつかい、縦に基板を差し込む方法である。Decemiela についているリセット端子と同様の回路(抵抗とコンデンサ)をつけることで、自動リセットにも対応している。
上からみた配線図はこのよ
うになる。電源ラインの取り回しにモジュールの6ピンのところを通してあるが、ここはソケットのピンを抜いておいて、通電しないようにしてある。もちろん、ジャンパとして表面をまわしてもよいだろう。0.1uFのコンデンサと10KΩの抵抗で通信用のラインを横切っているので、裏面にはジャンパが飛ばないようになっている。

この方法ならブ
レッドボードに部品が少々のっていても大丈夫であるとおもったが思ったよりもL型コネクタに厚みがありほとんど部品がない状態でなければ刺せない。
よってこのままでは使えないので、ケーブルをつかってのばすことを考えた。よくやる手ではケーブルの先にピンヘッダをハンダ付けするのだが、今日はイマイチうまくいかなかったので新しい方法を試してみた。





もともと千石電商で売られているヘッダピンとブレッドボードを結ぶジャンパケーブルを分解する。これはエクステン
ションのようになっていて、1ピンのソケットと、1ピンのピンヘッダがそれぞれ圧着されている、簡単にいえばジャンパワイヤーの延長コード状のものだ。(図)ピンヘッダがついた部品をブレッドボードにさすのに利用するワイヤーだが、これを使ってシリアルのヘッダを延長することにした。

もちろん、そのまま5本のケーブルをさすのでもかまわないのだが、ここは専用ケーブルとするためにも、ヘッダを分解し、1x8列の枠を使って再構成することとした。一度ささっている圧着ヘッダを抜くためには、細いマイナスドライバを用いるのがいい。ソケットのプラスチックのひっかかりがある部分をすこしこじって、ひっぱればケーブルを抜くことが出来る。両側のケーブルを抜くと、このように金具だけになったケーブルが出来上がる。これを5本用意して8列ソケットの両側から、3本、2本とさす。延長なのでクロスする部分がないようにフラットに両側のソケットを実装すれば完成である。

これを使うことで1列の隙間があればブレッドボード上のarduinoに書き込みを行うことが出来る。
もちろん、延長ケーブルの配線でクロスさせるなら、もっと簡単にラインを引っ張りだせた、というのは言うまでもないが、直接させることを目標にしたというのが今回の工作の主眼なのでそこは問わないことにしよう。


なんにせよ、これで格安arduino環境が整い、ブレッドボード上に低コストで作品を作ることが出来るようになったわけだ。





2009年1月28日水曜日

ブレッドボードで arduino/88

one chip Arduino clone というのを Make blogなどで発見した。制作記事を読むとATMega88 をつかって 内部発振で動くらしい。ということで、何度か試したもののあまり巧くいってないarduino clone作りであるがこれはさっそく真似せねば!と思い、ブレッドボード上に実装してみた。これは速報のonechip arduinoの前に行った実験だが、報告の前後が逆になっている。
 
最近のArduinoは通常 Atmega168 を 16MHzで駆動しているが、one chip arduino は日本の誇る秋月電子で格安に販売されている Atmega 88 を使い、内部発振で駆動しているため発振子も必要なくなっている。このチップに最低限の回路としてステータス表示用のLEDと動作きりかえのためのリセットスイッチを実装したのがone chip arduino だ。実装部品は思ったよりも少なく、gainerと違い、シリアルポートもオプションなのでたしかにワンチップの上に載せられるくらいの部品しか存在しない。

これをベースにワンチップ化の前に、さらにシンプルになるように配慮しながらブレッドボードに組み立ててみることとした。

そのまえに、まずAVRをarduinoとして動作させるのに必要なブートローダをAtmega88に書き込んだ。
仕事でAVRを使っているグループがいるのもあり、手元にたまたま STK500が転がっていたので、kosakaさんのページ
を参考に STK500をarduinoに登録した。
さすが純正品ということで当たり前だが、なんのトラブルもなく書き込みを行えた。ブートローダは各チップに一度だけ書けばいいので、チップを買ってきたらまとめて作っておくのがよいだろう。


秋月電子で一番安いブレッドボードの上でこれを組み立てることとして、
配線を行った。この ブレッドボードでの最大の問題は、電源ラインが左右に分離しているところであり、このため通常はやらないパーツの上をとびこえる配線が1カ所だけ入っている。


なお、もう1つ大きいブレッドボードの場合には、電源ラインが2本づつ入っているので、左右をちゃんとつなぎ込めば、無様な真似をしなくても作ることが出来る。余白に回路を作ることを考えると、実はこちらのほうがよいのかもしれない。

実際に利用するスケッチを書き込むためには、USBシリアルの変換アダプタが必要だ。秋月のUSBシリアル変換モジュールにコンデンサと抵抗でリセット回路を組み合わせた書き込み用ボードを作成した。L字型のコネクタを使うことで、直接ブレッドボードにさせるのを狙ったが、微妙にスペースが足りずに干渉しやすいことが判ったので、延長ケーブルでつないでいる。
こちらに関してはのちほど別の記事でお伝えしようとおもう。

arduinoも思ったよりも簡単に作ることが出来たので、これでパソコンとの連携が必要ない作品を作る場合はarduinoを使ってもいいかもしれないと思えてきた。パソコンを使う場合で、機能が収まる場合には、arduinoよりもgainerのほうが開発コストが低いと思われるので、gainerの意味がなくなったという訳ではない。とくにgainerの派生物としてAVRと組み合わせた ginger/peper は秀逸で、USBをソフトウェア実装してあるため、USB接続をする先まで考えても、コストが安いことと、実装面積が小さくていいことの2つから便利に使えそうである。


実は先にAtmega168 をつかった Diecimila互換機もブレッドボード上に実装してみた。こちらはマルツで買ったAtmega168と秋月で買った16MHz のセラロック(セラミック発振子)を配線してあるだけでほかは大きな違いはない。高速処理が必要ならばこちらもやってみるといいだろう。ただし、本気で高速処理を考えるならば、普通にAVRGCCをつかってC言語でプログラムをかいたほうがいいのは言うまでももない。

2009年1月26日月曜日

速報 one chip arduinoを作ってみた

ちょっと時間ができたので one chip arduinoを真似してチップ上に無理矢理実装というのをやってみた。

コンデンサの数を減らし、書き込みはヘッダピンがなくてもブレッドボードでやればいいじゃないかということで、極力パーツを省略することで、さらにパーツの少ないすっきりとしたものが出来上がった。この先は表面実装用のパーツとシール基板を使えば、もっとすっきりしたものが出来上がるだろう。

ビフォーアフターは以下のとおり。














書き込みはこのように、USBシリアルアダプタを使ってブレッドボード上で行うこととした。このシリアルアダプタの話はまた今度しようとおもう。シリアルアダプタの中にリセット用の回路を組んであるので、リセットスイッチを押さなくても書き込みは可能である。