Arduino

2010年6月29日 (火)

[Japanino] 光残像キット

組み立ててみた。

特に難しいこともなく説明通りにネジで止めていくだけ。30分とかからず完成。 Pov
裏蓋はなく、小さな板でコードを抑えているだけ。

Japanino特設サイトからサンプルスケッチをダウンロードして動かしてみた。 Povm
こちらもトラブルなくあっさり動いた。

大変だったのは撮影で、手持ちではもちろん無理なわけだがこの間買った三脚は背が低すぎて使いにくく、物置の奥から引っ張り出してきた中型三脚とセルフタイマーでなんとか撮った。ああ、欲しかったのはミニ三脚ではなくて小型三脚だったのか、と今更ながらに思い至ってただいま物色中。この辺りか。

続きを読む "[Japanino] 光残像キット" »

2010年6月23日 (水)

[Japanino] snprintfを使ってみた

Arduinoでもprintf系が使えるらしいので前回のスケッチの出力部分をsnprintfで書き直してみた。


前回のコード

void print_time()
{
  int hh, mm, ss;

  hh = count/3600;
  mm = (count%3600)/60;
  ss = count%60;

  Serial.print(hh/10);
  Serial.print(hh%10);
  Serial.print(":");
  Serial.print(mm/10);
  Serial.print(mm%10);
  Serial.print(":");
  Serial.print(ss/10);
  Serial.println(ss%10);
}

コンパイル後のスケッチのサイズ:2,744バイト(最大容量14,336バイト)


snprintfを使ったコード

#include <stdio.h>    // printf系を使うのに必要

void print_time()
{
  int hh, mm, ss;
  char buffer[9];

  hh = count/3600;
  mm = (count%3600)/60;
  ss = count%60;

  snprintf(buffer, sizeof(buffer), "%02d:%02d:%02d", hh, mm, ss);
  Serial.println(buffer);
}

コンパイル後のスケッチのサイズ:4,102バイト(最大容量14,336バイト)

snprintfを使った方はサイズがだいぶ大きいが、メモリーには余裕があるしこれでいいと思う。

続きを読む "[Japanino] snprintfを使ってみた" »

2010年6月19日 (土)

[Japanino] クロック精度

Jaoaninoのヒューズビットを書き換える前と後でどの程度違うのか、いいかげんなスケッチで比較してみた。

delay()で適当な間隔を開け、経過時間をシリアル通信で表示する。
マイコンの知識はほぼゼロなので、こんなやり方でいいのかどうか分からないが違いは出た。
ヒューズビット書き換え後のJapaninoでは一時間動かしてズレは無し。
ヒューズビット書き換え前の状態ではJapnanino側がちょうど60秒進んだ。嘘みたいな数字だが途中経過は多少ばらつきがあるようだから結果は正しいと思う。

計測にはTera Tarmのログ機能を使った。Windowsの時計まで疑ってもしょうがないので信頼しておく。
Tera Termのログ機能については以下を参照。
http://www.eleki-jack.com/FC/2009/04/32arduinoarduino1.html

いいかげんなスケッチはここ

2010年6月16日 (水)

[Japanino] 外部水晶発振子を使う

先月買った大人の科学マガジン Vol.27 テクノ工作セットは相変わらず付録にも手をつけず放ったらかしにしてあった。少しはいじってみようかとネットをうろついていたら「水晶が付いているのに、実際は使われていない」なんて話を見つけた。クロック精度がどうとかはともかく、せっかくついているものがただ基板に乗っているだけなんて勿体無い。

外部の水晶を使うにはヒューズビットというものを書き換えればいいらしい。正攻法ではAVRライタとかAVRプログラマを手に入れる必要があるが、代わりにArduinoを使う方法もある。幸いというか間抜けというかここに書いた通りArduinoが手元にあるので、こいつを使ってやってみる。「というもの」とか「らしい」とか無知丸出しだが、それでもやってしまう。

「半田付け無しでJapanino同士ヒューズビットを再設定する」を参考にほぼその通りやってみた。

Arduino playground - Programmer2からスケッチ(http://www.arduino.cc/playground/uploads/Code/programmer2.txt)をもらってくる。

1014行目と1016行目を書き換える。

1010  case atmega168:
1011    serialprintflash(PSTR("Writing mega48/88/168 fuses: "));
1012    CMD_Write_Fuse_Extended( 0xf8);
1013    delay(10);
1014    CMD_Write_Fuse_High( 0xdf);	// 0xdf を 0xdd に
1015    delay(10);
1016    CMD_Write_Fuse_Low( 0xef);	// 0xef を 0xc6 に
1017    delay(10);

ArduinoとJapaninoを結線する。

Arduino Japanino
  +5V --- +5V
  GND --- GND
  D10 --- Reset
  D11 --- D11
  D12 --- D12
  D13 --- D13

参考にしたページではヒューズビットの読み出しに別のツールを使っているが、上で取ってきたスケッチに読み出しのコマンドがあるのでここではそれを使っている。

ArduinoとJapaninoを説明通りにつなぎ、スケッチをArduinoにロードする。
Arduino IDEのシリアルモニタを19200baudに設定。
"*s"を送ってシグネチャを確かめる。
"SIGNATURES1e,94,06,ff,"が帰ってくる。通信成功。
"*u"を送ってFuseビットを読み出す。
Monitor

各値を16進表記で確認すると、参考にしたページと同じだ。

Lock Bits: 11111111 => FF
Fuse Low:  11010010 => D2
Fuse High: 11011110 => DE
Fuse Extn: 11111000 => F8

"*A"でFuseビットを書き換える。Aは必ず大文字で。小文字だとブートローダの書き換えになってしまう。不安ならスケッチで"*a"を無効にしておけばいい、というかそうした(488行目から4行をコメントアウト)。
書き換わっているかもう一度"*u"を送って確認。
Monitor2

Lock Bits: 11111111 => FF
Fuse Low:  11000110 => C6
Fuse High: 11011101 => DD
Fuse Extn: 11111000 => F8

うまく行ったらしい。
動作確認は気が向いたらいつか。

2010年5月26日 (水)

Japanino

興味はあってもなかなか手を出せないでいた電子工作だったが、フィジカルコンピューティングというのを発見、そこでArduinoを知った。これなら何とかなるかもしれないと思って入門書とそれに対応したキットを買ってはみたものの、ざっといじくりまわした後はこれといってやりたいことも思い浮かばず、部品集めも面倒で結局放り出してしまった。

あれから1年、こりずにまた手を出してみた。
今度はArduino互換機が付録の「大人の科学マガジン Vol.27 テクノ工作セット」
本誌はパラパラめくってみたけれど付録は手付かず…

Arduinoをはじめよう

  • Massimo Banzi
  • オライリージャパン
  • 2009/03/27
  • 単行本(ソフトカバー)

その他のカテゴリー