2012/08/17

新しい置時計


先日,中古ゲームを探しにハードオフ行ったんですよ。ハードオフ。
それでせっかくなので,店の中をぐるぐる見て周ってたら・・・なんとニキシー管を使った置時計を発見!ジャンクじゃなくて中古。いやそれより,ハードオフで売ってることにびっくりです。

商品の説明には,「日立のニキシー管を使った時計です」とだけ・・・。ショーケースに入っていたので,店員さんにお願いしてよく見せてもらうことに。電源を入れてもらうと,オレンジ色の光で数字が点灯。おお,実物を初めて見た!

ここまでテンション上がりっぱなし。これは欲しい!いやでもちょっと高いしなあ・・・と最後の理性と戦っていると,店員さんから援護射撃が。

店員:「国産のニキシー管はめずらしいですよ」
私:「(よく知らないけどそんな気もする!)そうですよね。これください」

というわけで,念願の卓上置時計を手に入れたぞ!
正面。数字6桁とドットが2つ。横幅は約160mm。
背面。ニキシー管の背面に日立のロゴと「CD81 JAPAN」の文字が。
側面。ロゴも何も印字されていません。
点灯!数字の表示が少しちらつきます。コンセントのノイズが乗ってるのかも?
ちょっと暗いところで...
点灯している様子


どこのメーカのものか気になって調べてみたのですが,結局わからず。本体に何も印字がなく,作りもちょっと粗い(アルミの加工後のバリが残っていたりする)ので,誰かがキットを組み立ててケースに入れたものなのかもしれません。ほこりの侵入が心配なので,良いケースを探さないと・・・

それでは。

2012/07/28

電源装置の製作-その2(完成)

電源装置製作の続き。今回で完成です。

今回は,電源の回路を作って,前回作ったケースに入れます。
ベースの回路は秋月電子通商の大容量出力可変安定化電源キットで,ケースに入れるためにコンデンサを横に寝かしたり,出力電圧のレンジを変えやすいようにDIPスイッチを追加したりしました。コンデンサの配線は,できれば伸ばさないほうがよいですが,出力電流は1 A以下と小さいので問題ないと判断しました。
電源の回路
 回路をケースに取り付けた様子↓。コンデンサの位置が悪くてヒートシンクに近くなってしまいましたが,発熱も少ないはずので(多分)大丈夫でしょう^^;。
回路をケースに搭載
 フロントパネルのスイッチや端子,計器と配線します。
フロントパネルの部品との配線
 100円ショップで買った両面テープ付きの滑り止めを小さく切って,ゴム足代わりにしました。
滑り止めの取付
完成です!
工作機械を一度も使わなかった割には,きれいに仕上がったと思います。
手間暇かけた甲斐がありました:)
フロントビュー
リアビュー 
12~16 VのセンタープラスのACアダプタを繋げば,ツマミで出力電圧を可変できます。
動作確認のため,模型用のモータを回してみました。電流もきちんと計ることができました。
モータを回してみた
ちなみに,右側の出力端子にはACアダプタの電圧が直接出力されるようにしたのですが,電圧と電流をメーターに表示できません^^;
メーターの表示先をスイッチで切り替えるようにしようかと思いましたが,それはまた,他の機会にということで・・・。

それでは。

2012/07/23

電源装置の製作-その1

電源装置は,電子工作をする上で必須の道具です。せっかくなので,自分の用途にあったものを手作りすることにしました。しばらく工作から離れていたので,そのリハビリも兼ねて一石二鳥です。
My電源装置の仕様は次のようにしました。

  • 出力電圧:3~12 V可変
  • 出力電流:約1 A
  • 小型(←狭い机の上で作業するので,なるべく小さく)
  • 安価(←重要!精度はそこそこで良い)
  • 電圧と電流とを計測可

また,机の上で使うことが多いので,フロントパネルを斜めにして,視認性の向上を狙うことにしました。
小容量の電源で良いので,回路構成は,スイッチングアダプタ+可変3端子レギュレータにしました。
とりあえず,それっぽい部品を買ってみます。ほどんどは秋月電子通商で,端子台とロッカースイッチは大須で購入。
回路の部品
部品がそろったら,採寸して,部品のレイアウトを考えます。
部品のレイアウトとケース検討
ケースはMDF板で作ることにしました。カッターやピンバイスでも加工がしやすく,安価なことが魅力です。クリップボードに使われている3 mm厚のMDF板を使います。ついでに塗料と足の代わりになるものを買っておきます。
100円ショップで買ったMDF板その他
ケースの部品図を1:1で印刷します。
1:1で印刷した部品図
印刷した紙をMDF板にノリで貼り付けます。スティックノリを薄く塗っておくと,後できれいにはがせます。
部品図をMDF板に貼る
線に沿って加工します。カッターとピンバイスしか持ってないので,切断だけで3時間くらいかかりました・・・。改善案を考えねば。
加工!
加工した部品をホットボンド(グルーガン?)で仮止めして様子を見ます。ぴったり合わないところは,ヤスリやカッターで切って調整します。
ここで気づいたのですが,スイッチングレギュレータのプラグを挿す穴を忘れてました・・・。修正した後,部品を瞬間接着剤で完全に固定します。
切った部品をホットボンドで仮止め
フロントパネル固定のための,樹脂スペーサを四隅に固定,ヤスリで全体を仕上げます。
瞬間接着剤で固定した後,ヤスリで仕上げ
塗装をして、
塗装
仮組した様子。
箱完成
フロントパネルの部品だけつけてみました。ぴったり収まって,割と満足です:)。
フロントパネルの部品だけつけた様子
フロントパネルを本体に固定する工夫は,下の写真のようにしました。メンテナンスが必要なときに,すぐにフロントパネルを外せます。
プラのスペーサを使って,フロントパネルをねじで取り外し可能な構造に
今回はここまで。次は中身の回路を作ります。
(小型ロボットもやらないと^^;)
それでは。

2012/07/20

ロボット掃除機を使ってみる

ちょっと前に,後輩から掃除ロボットを貰いました。今まで放置してたのですが,ためしに動かしてみることに。
ツカモトエイム販売の自走式掃除機 ロボットクリーナーミニAIM-ROBO2
なにゆえこのデザインを選んだのか・・・他はなかったのでしょうか(プレゼントは嬉しいけど)。ロボットクリーナーミニ。残念ながらルンバではないです。
そういえば,去年くらいからルンバのCMが放送されるようになって,驚いたというか,ちょっと嬉しかったのを覚えています。Wikipediaさんによると,ルンバの販売は2002年(10年前!)で,その後の改良を経て,現在は3世代目のようです。色々な改良があって,CMをやるまでになったんでしょうね。

話が逸れましたが,頂きもののロボットクリーナーさんは破格のお値段ですので,性能もまあ相応です。電池はニッケル水素。搭載しているセンサは,フロントバンパのタッチセンサ1つ,落下防止の赤外線センサ3つのみ。家具や壁に割と豪快にアタックしていきます。


うまくカメラに入ってくれません・・・(照れ屋さんですね^^;)。電源を入れた直後は,ひたすら直進し,バンパに物が当たると旋回します。しばらく放置すると,らせん運動をはじめ,またしばらくすると直進動作にもどります。
動きは多少頼りないですが,吸引力は割とあって,ホコリやらなんやらを集めてくれました。時間のあるときにハックして,タイマー機能とかを付ければ,割と実用的になるかもしれません。

それでは。

2012/06/12

大学ロボコン観戦・その他

観戦ハガキが当たったので,NHK大学ロボコンを観に行ってきました。
当日は天気もよく,絶好のロボコン日和(?)でした。
今年のテーマは「平安大吉(ペンオンダイガ)」
といっても,番組放送前なので,会場の写真や試合結果などは紹介できないのです・・・残念。
一応,NHK公式Twitterでは,東京大学が優勝したことだけが公開されています。

追記:NHK公式ページで試合結果を見ることができます。

今年は全体的にロボットの完成度が高く,見どころの多い大会だったと思います。
オムニホイールを使った自動ロボットなんかも出たりして,技術の高さを感じました。

大会の様子は,7月1日17時より,NHK総合テレビで放送されます。是非ご覧ください。

なんか番宣だけになってしまいましたが・・・
それでは。

2012/05/20

HEWでprintfを使えるようにする・続(scanfを使ってみる)

「HEWでprintfを使えるようにする」で,せっかくgetcharを作ったのに,scanfが使えるか試していませんでした^^;下表のようなプログラムで試してみると,問題なく動作してくれました:)
void main(void)
{
    int a;
    double b;


    printf("input int data->",0);
    scanf("%d",&a);
    printf("%d\r\n",a);
    printf("input float data->",0);
    scanf("%lf",&b);
    printf("%lf\r\n",b);
}

下図は,プログラム実行後に「123」「3.1415926」と入力した結果です。
整数はそのまま表示され,小数は最後の桁が四捨五入されました。これは,printfのデフォルトの設定によるものです。桁数を指定したい場合は,通常のprintfと同様の記述が使えます(%6.4lf など)。
scanfの実行結果
今日はこれだけです。ちょっと手抜き感がありますが^^;

それでは。

2012/05/19

小型オシロスコープ(DSO Quad)購入

少し前に発売され,話題になった(らしい)小型オシロスコープ,DSO Quadを購入しました。
ついにオシロも個人持ち!テンション上がります。
届いたDSO Quadの外箱
アナログ2ch,デジタル2ch,波形生成機能付きで19,900円!
帯域幅が狭かったり,入力インピーダンスが小さかったりと,値段相応の品質ですが,ホビーで使うには十分だと思います。
セット内容
セット内容は,本体,リチウム電池,アナログ用プローブ2本,デジタル用プローブ2本,簡単なマニュアル(英語)です。(電池の充電およびPCとの通信にはUSBケーブルが必要ですが,セットには含まれていません^^;)リチウム電池はなぜか自分で取り付ける仕様です。
電池のケーブルがほんの少し短く,仕方なく逆向きで取り付けました。
リチウム電池を取り付け
この後,ファームウェアのアップデート,プローブの補正,GNDのキャリブレーションを行い,ひとまず使える状態になりました。
このオシロの面白いところは,回路図やプログラムが公開されている点です。純正ファームウェア以外にも,有志の方々が作成したファームウェアが存在しており,FFT機能などを追加できるようです。基本の機能に飽きてきたら,試してみようと思います。

それでは。

2012/05/13

HEWでprintfを使えるようにする

今回は,printfの実装を行いました。
プログラムでprintfといえば,画面に文字や変数の値を表示することが多いですが,マイコンの場合はシリアル通信でPCなどにデータを送るようにします。ターミナルソフトでこのデータを見れば,デバッグに使えるわけです。
(SHには,便利なエミュレータやデバッガがあるらしい?のですが,私は未だにprintfデバッグです^^;)

これまでは自作のprintfを使っていたのですが,今回はHEWのstdio.hで最初から定義されているprintfを使うことにしました。Renesas純正ですから,きっとSH向けに最適化されているだろうと期待してみたり。
プログラム中...
RenesasのFAQユーザーズマニュアルC/C++コンパイラ,アセンブラ,最適化リンケージエディタ ユーザーズマニュアル,p.168あたり)を読みながら格闘すること早半日・・・なんとか実装できました。以下に手順を示します。

なお,HEWとコンパイラパッケージのバージョンは,
  • C/C++ compiler package for SuperH RISC engine family V.9.02 Release 00 (Evaluation Version)
  • High-performance Embedded Workshop Upgrade 4.09.00
ターゲットマイコンはSH7125です。

1.新規ワークスペース作成

まず,HEWの「ファイル」-「新規ワークスペース」から新しいワークスペースを作成します。生成ファイルの設定画面で,「I/Oライブラリ使用」にチェックを入れてください。これによって,標準入出力に必要な関数のほとんどをHEWが用意してくれます。また,「ハードウェアセットアップ関数生成」で「C/C++ source file」を指定すると,パワーオンリセット後のI/Oの初期化関数(HardwareSetup関数)の雛形を生成してくれます。
「I/Oライブラリ使用」にチェック,「ハードウェアセットアップ関数生成」は「C/C++ source file」を指定

2.シリアル通信のための関数作成

ワークスペースができたら,プロジェクトから「lowsrc.src」を削除します。このファイルには,デバッガ用の低水準入出力関数「charget」と「charput」が記述されています。従って,この「charget」と「charput」をシリアル通信の関数に置き換えれば,シリアルポートに対してprintfが使えるようになります。今回作成した関数を下表に示します。割り込みは使わない,最も単純なものです。シリアル通信の初期化関数(sio_init)も作成します。

void sio_init(void){
    STB.CR3.BIT._SCI1=0; // SCIスタンバイ解除
    SCI1.SCSCR.BYTE=0x00; // 送受信割り込み禁止、送受信禁止
    PFC.PACRL1.BYTE.H=0x10; // PA3をRXD1に設定
    PFC.PACRL2.BYTE.L=0x01; // PA4をTXD1に設定
    SCI1.SCSMR.BYTE=0x00; // 通信フォーマット、クロックソースを選択
    SCI1.SCBRR=19; // ビットレート BRR=(25000000[Hz]/(32*38400[bps])) - 1 => 19
    SCI1.SCSCR.BIT.TE=1;   // トランスミットイネーブル:送信動作を許可
    SCI1.SCSCR.BIT.RE=1;   // レシーブイネーブル:受信動作を許可
}

void charput(char c){
    while (SCI1.SCSSR.BIT.TDRE==0);
    SCI1.SCSSR.BIT.TDRE=0;
    SCI1.SCTDR=c;
}

char charget(void){
    char c;
    while ((SCI1.SCSSR.BYTE & 0x40)==0);
    c=SCI1.SCRDR;
    SCI1.SCSSR.BYTE=SCI1.SCSSR.BYTE & 0xBF;
    return(c);
}

追記(2012/10/26):↑のcharget()はエラー処理を省略しており,受信エラー発生時に無限ループになってしまいます。常にデータが送られてくるような用途では,エラー処理を追加することをオススメします。修正版のchargetはこちら

3.シリアル通信初期化関数の呼び出し設定

パワーオンリセット後に,シリアル通信の初期化関数が呼ばれるように設定します。「ハードウェアセットアップ関数生成」を指示しておくと,「hwsetup.c」というファイルが生成され,その中に「HardwareSetup」関数があります。この関数が,パワーオンリセット後に自動的に呼ばれますので,この中でシリアル通信の初期化関数を呼び出すよう変更します。

追記(2012/8/30):sio_init()は,printfを使う前ならば,どこで呼び出してもよいです。HardwareSetup以外でも,mainでもOKです。(HardwareSetupはmainより前に実行されるため,ここに初期化処理をまとめておくと便利です

void HardwareSetup(void)
{
    sio_init();
}

4.完成!

以上で設定は完了です。これで,思う存分にprintfできます。例えば,下表のようにすると・・・

void main(void)
{
    int a=1;
    double b=1;

    a+=1;
    b=3.141592;

    printf("abcdefghijklmnopqrstuvwxyz\r\n",0);
    printf("%d\r\n",a);
    printf("%lf\r\n",b);
}

こんな感じ↓で出力されます。
使ってみて気付いたのですが,このprintfは必ず第二引数まで指定しなければならないようです。
文字列のみをprintfする場合,上の表のように,第二引数に適当な値を指定してください。(第二引数を指定しないと何も出力されません)
TeraTermで確認した結果
手順さえ分かってしまえば,割と簡単にprintfを使えるようになります。ぜひ試してみてください。

余談ですが,現在のプログラムサイズは21.6 kByteでした。SH7125のROMは128 kByteなので,既に20%弱を使ってしまっています。
もう少し削りたいところですね。

それでは-~)ノ~~

2012/05/02

大学ロボコンの観覧応募

今年もNHK大学ロボコンが近づいてきましたね。
NHKのHPで,観覧募集の告知が出ています。


今年も申し込んでみましたが,どうか当たりますように八(^□^*)

そういえば,高専ロボコンのルールも発表されましたね。
今年のテーマは「ベスト・ペット」です。


今年はなんと,コントローラなしで競技が行われるようです!
自動ロボットのみの大会になるってことでしょうか・・・胸熱ですね!
去年みたいに,大会の様子をストリーム配信してくれることを願ってます。

大学ロボコンのHPもリニューアルしてくれればいいのに・・・
リニューアルされたみたいです^^;


それでは-~)ノ~~

2012/04/22

レベル変換IC内蔵シリアル通信ケーブル

ロボットの製作が進んでいないので,ちょっと小ネタ。
昔に作った,シリアル通信ケーブルを紹介します。

マイコンとPCとでRS232C通信をする場合,ADM3202等のレベル変換ICが必要です。
基板を作るたびにレベル変換ICを載せなくてもいいように,レベル変換ICを内蔵した通信ケーブルを作りました。

見た目はこんな↓感じ。
PC側はD-Sub9ピンのメスコネクタが,マイコン側はピンソケット(Tx,Rx,Vcc,GND)が付いています。
レベル変換IC内蔵シリアル通信ケーブル
コネクタ部分の中には,ADM3202と,動作に必要なコンデンサが入ってます。
ICの足を短く切って,コンデンサと配線とを直接ハンダ付けしました。だいぶ無理やりです^^;
コネクタの中身
次こそは,頑張ってプログラミングしたいと思います。。。