たまりば

  パソコン・インターネット パソコン・インターネット  三鷹市 三鷹市

Arduinoはじめました。
2012年08月21日 01:31

はじめました。

PICは以前からなんやかんやといじっていたり、AVRもそういえばブログには書いてなかったけどLチカ程度はやってたりする。
そんな中、流行りのArduinoについに手を出してみたわけである。
なぜかというと安かったので。衝動買いである。千石の2階で見つけて衝動を受けて、とりあえず秋葉原を一回り(aitendoの方まで)した上で衝動が覚めなかったので衝動買いである。
これがそれ。Freeduinoという互換機のようである。
Freeduinoキット
キットなので組み立てる。
Freeduino完成
説明書は無いものの、基板のシルク印刷に頼るだけで詰まるところもほとんど無く無事に組み立てられた。やはりキットとして売っているものはこの辺が楽でいい。
とはいうものの多少のトラップはあったので、注意とか感想とか色々書いておく。
  • 抵抗が1個だけ違う
    入っている抵抗は6本の1kΩと1本だけ10kΩ。しかも悪いことに茶黒赤金と茶黒橙金でよく似ている。
    1kΩと200Ωの抵抗のカラーコードが紛らわしいからと220Ωに変更したRCDライタはよく考えられてたんだなあ。
  • 抵抗の番号が飛んでいる
    7本しかないのにR12とかある。謎。
  • 抵抗値が書いてない抵抗がある
    Rledとだけ。LED用の抵抗で抵抗値はLEDに合わせて適宜選んでねってことだと気づくのに大分かかった。
    もっともキットに入ってるのは1kΩだけなので迷いようはないのだが。
  • コンデンサも紛らわしい
    こっちはシルク側が。「100n」がいくつも並んでいる中1個だけ「10n」が混じっている。
    はめていって数が足りなくなって気づいた。
  • 穴間隔がいまいち
    抵抗の穴間隔は短い。0.3インチしかなくて、キットに入っているよくあるサイズ(大きい方)の抵抗は微妙にきつい。
    コンデンサの穴間隔は広い。電解もセラミックも大開脚しておさまりが悪い。
    あと電源のコネクタの穴が妙に大きくて(2~3mm)、どこにハンダ付けするか迷った。
    結局縁の方にちょこっとつける形になったがまあ安定しているようだし多分USBで事足りる。
  • 3端子レギュレータの足曲げが困難
    放熱板をねじ止めできるように基板に穴が開いているのだが、そこに合うように曲げようとすると足のかなり付け根のところから曲げる必要があるのだが、我が家のペンチは太くて無理だった。
    またそもそも綺麗に穴に合わせるのは難しそう。
  • 水晶発振子は最後に付けるべきではない
    熱とかに強そうな部品を最初に、弱そうな部品を最後にと付けていたら水晶発振子がほぼ最後になってしまったが、周りに背の高い部品がある中付けるのは至難の業だった。
  • 使わない穴が結構ある
    USBコネクタのそばの穴(miniじゃないBコネクタ用)とか、なんか丸に囲まれた穴(パターンカット用?)とか、水晶発振子の真ん中の穴(コンデンサ内蔵の3本足発振器用)とか。
    この基板がわりと汎用なのだと気づいたのはわりと後のこと。
  • ピンヘッダが曲がった
    穴にわりと遊びがあるのに気付かなかったのが敗因。
  • RXとTXのLEDの色を変えればよかった
    指示通りに作るのが癪だったので密やかな反抗として、キットには全て緑色のLEDが入っていたのをその辺にあった赤と橙のLEDに変えてみた。
    ただ、4つあるうちのRXとTXはセットだから色合わせとこうかなと思ったのは間違いだった。
    送受信で色を変えておけば送信中か受信中か分かったのに。
    両面スルーホール基板だから付けかえるの面倒そうだし
書き出してみると結構あるなあ…。
まあそんなこんなで完成したのでPCにつなげてみる。…何も起こらない。
冷静になって基板をよく見る。そういえばEXTUSBなる3ピンヘッダがある。外部電源とUSBパワーの切り替えだろう。USBっぽい方に付属のジャンパを挿して再度繋ぐ。
今度は無事電源が光った。ドライバインストールのウィンドウが出るがとりあえずキャンセル。なんだかLEDが1秒おきくらいにチカッチカッと点滅しているのでまあどうやら正常っぽい。

さてここからが大変だった。
まずPCに繋げていいのか(繋げちゃったけど)とか、ドライバが要るのかとか、そのインストール方法とか、その辺のことが全く分からない。
検索してもどうもそういうのは見つけづらくて、ちゃんと繋げられた後のことばかり書いてある。
結局参考にしたのはここ…からリンクを辿った本家ページ(英語)である。
日本語の資料くらい探せばあると思うんだけど見つけられなかった。先のページもインストール手順については「ドライバも必要なので、英語のガイドだけど頑張って読もう!!」の一言だけである。
でその手順というのが、WindowsXPの場合で言えば、
  • ArduinoをUSBポートに挿す
  • USBシリアル変換チップのドライバを要求されるので、~\arduino-x.x.x\drivers\FTDI USB Driversから探させる
  • シリアルポートのドライバを要求されるので、同じ場所から探させる
というもの。
たった3行で済むんだからみんな書いといてくれよ…。
環境によって多少変わるとは思うけど大まかな流れは分かるわけだし。

気を取り直してスケッチ(Arduinoのプログラムのことをスケッチと呼ぶ)を書きこもう。
まずこのボードはArduinoでいうと何なんだろう。Freeduino V1.22とか書いてあるのでこれでググる。いまいち確からしい情報が見つからないがどうもATmega168使用のDiecimilaっぽい。
それを設定して、blink(基板についてるLEDが点滅する)のスケッチを書き込む。動かない。というよりコンパイルエラーだ。
これは何かおかしい。実はArduinoのソフトは以前ATtiny2313に何か書こうとしたときにダウンロードしたものなのだが、その時色々いじっていてそれが悪さをしている可能性が高い。バージョンアップしているらしいし折角なので新しいのを入れてみる。
そして再度書き込み。動かない。ただし今度はコンパイルには成功している。書き込みも成功したと言い張っているのだが、
stk500_getsync( ): not in sync: resp=0x00
というエラーが出ている。調べるといろんな環境で出る原因不明のエラーだというので色々と対処法を試してみたのだがやはり動かない。
と、ここでふと別のボードの設定で書き込みを試してみる。
stk500_getsync( ): not in sync: resp=0x00
…同じエラー。…ということは…?
石をよく見てみれば
ATMEGA328P
うわ違うじゃん168じゃなくて328じゃん。
というわけでボード設定をATmega328使用のDuemilanoveというものに変えたら難なく成功。
どうもFreeduinoという名前で色々なArduinoの互換機が出ているようである。
さっき見つけたATmega168使用のDiecimila互換機もあり、これはATmega328使用のDuemilanove互換機だったようである。
そしてblinkに続いてfade(適切なピンに接続したLEDがPWMでじわっと明滅する)の書き込みにも成功。どうやら最初の峠を越えたようである。

これで俺もアルデュイナーだぜ!  
タグ :マイコン

  • このブログの仕様について
    2012年08月05日 03:07

    以前、このブログに行末にbrタグを付けない設定ができたと書いた。
    それでJavaScriptを書くのが楽になりそうだと喜んだのだが、現実はそう甘くはなかった。
    先の記事でJavaScriptを書くのに使おうとしたのだが、この設定は全く使い物にならないものであった。

    常識的に考えて、「brタグ無しの設定で投稿するとbrタグが付かず」、「brタグありの設定で投稿するとbrタグが付く」機能だと思っていた。
    違った。
    「brタグ無しの設定に切り替えると過去に投稿したすべての記事のbrタグが消え」、「brタグありの設定に切り替えると過去に投稿したすべての記事にbrタグが付く」機能だった。
    自分にはこの機能の使い道が分からない。  
    タグ :お知らせ

  • 抵抗の友
    2012年08月05日 02:09

    微妙な抵抗値を合成で作るときに役立つプログラムを作ってみました。
    手持ちの抵抗値をカンマ区切りで入れて「計算」を押すかEnterで、その抵抗で合成できる値が列挙されます。
    以前作った抵抗合成機もよろしく。



    細かい仕様とか注意
    • 入力はG,M,k,m,μ,n,pの接頭辞を受け付ける (例: 「10,100k,1M」)
      • kはK、μはuでも可
    • 区切り文字はカンマの他にスペースと"+"も受け付ける (例: 「10 100k+1M」)
      • "+"はテンキーで入力しやすいように
    • 出力の直列と並列を読みかえればコンデンサの合成にも使えると思う
      • m,μ,n,pはそのため
      • Gは念のため
    • プログラムが面倒なので3本までの合成に限っている
      • まあ実用上それ以上はあんまり必要ないかなとも思う
    • プログラムが面倒なのでエラー処理は無い
    • プログラムが面倒なので重複は排除していない
      • 例えば((A+B)+C)と((A+C)+B)とか
    • プログラムが面倒なのでソートはしていない
      • Excelか何かでソートするといいと思う
        • 出力がカンマ区切りなのはそのため