hira のすべての投稿

16×16ドット・マトリックスLED

以前に、秋葉原の「鈴商」で赤色 LED の16×16のドットマトリックスが安く売られていた。
※確か400円くらいだったと思う、今でもまだ在庫があれば売られていると思う、緑もあったと思う。
LT-5013T

この手の物はジャンクに近いものだが、一応新品で、簡単なピンアサインをメモした紙が付いている。
16×16くらいの物だと、普通に買うとかなり高価で、このくらいの解像度があれば、かなり面白い表現も出来る。
丁度、キッチンタイマーを作ってみたくて、1個買っておいたーーー
それから数ヶ月、ようやく時間が取れたので、ドライブしてみた。

最初の問題は、このモジュールから出ているピンの間隔だ、「2mmピッチ」うーーん、ユニバーサル基板には不満な間隔・・
他の8×8とかは2.54mmピッチなのに、しかも32本を格納出来ない事も無いのにーー(それが安い理由かもしれないww)
まぁ、このモジュールの設計者(タコ)は、自作する立場を考える必要も無いので、適当に選んだ結果なのだろうけど・・・
しかた無いので、まずピッチ変換基板を作って、作業性を良くする事から始めた。

DotMatrixBottom

かなり強引だけど、とりあえずインチピッチのコネクタで接続出来るようにした。

次にドライバーの仕様を考えた、16×16のダイナミックスキャンだけど、全てのLEDを点灯した場合、1個に2mAでも512mAも必要。
ダイナミック点灯なので duty は1/16となる、たまたま秋月で、8ビットのシフトレジスターとラッチが合体したIC「NJU3711D」を売っていたので2個購入。
残念なのは、このICは5V動作で、電流も最大25mA、3.3Vで駆動出来ない、でもまぁいいか・・・
※買った後で見つけたのだけど、TIにまさにLEDドライブの為のICがあったTLC5940これを知っていたら、これにしたのに・・・

さて、気を取り直して、仕様の続き、25mAだと、1/16で、1.5625mA、少し暗いかなぁーと思って、テストしてみたが、そんなに暗く無い事が判り、全体で25×16=400mAの消費となった、これならUSBの電源でも駆動できる。(ソフトを作る時を考えるとUSBの電源でまかなえるのは正しい!)

キッチンタイマーにしたいので、なるべく小さく作りたい。
デコーダーに74HC138を2個使い、4to16のデコーダーとした、マイコンは、おなじみのAVRとした、在庫が沢山あったATmega88にする。(168や328に交換できるので便利)
74HC138で25mAを吸わすのは厳しいと思い、PチャネルデュアルMOSFETFDS4935Aをドライブしている。

DotMatrixTop

基板の裏はこんな感じ

DotMatrixBottom2

かなり苦しいけど、とりあえず1品物なので、まぁいいかーーーって感じ。

とりあえず、0.5秒間隔ランダムで表示してみた。

これから本格的にソフト開発なのだが、スイッチ類と音をどうするかを考えないといけない・・・

-----
文字の表示を行ってみた、リソースは以前に作った液晶用の6×12ピクセルのフォントなど。
文字のスクロール

RX マイコン

今更感が強いが、秋月のRXマイコンボードを動かしてみた。

AKI-RX62
AKI-RX62

コストや開発環境、性能、その他色々な点を考えると、ARM マイコンを使う方が「筋」なのかもしれない・・
しかし、個人的な理由で、RX マイコン「推し」なのである。
・国産だから。(昔から日立のマイコンを多く使ってきている)
・ルネサスには頑張って欲しい。(逆風の中、色々頑張っている様子が伺える)
※プロダクトは悪く無い、折角伸びしろがあるのに、単純なコストの勝負で無くなってしまうのは残念・・
・比較的安く入手できるようになった。
※以前は、個人には売ってくれなかったが、最近は、1個でも購入可能となっている。
・周辺のペリフェラルが扱いやすい。
・ドキュメントが日本語である。(別に英語でもいいけどww)

など、「推し」の理由はいろいろとあるけど・・

「日本人だろ!、RX使えRX!」みたいなww

・開発環境の整備
まずは開発環境、ルネサスには統合環境もあるし、フリーで使えるものもある、しかし、しかしである・・・
自分はどうも IDE と呼ばれるところの統合環境があまり好きでは無い、gcc と make emacs があればそれで良いと思ってる。
エクリプスとかは最悪だと思う。
確かに、Visual Studio は、本当に良く出来ているし、デバッグ環境は素晴らしい~、しかし、常にあそこまでの環境は必要無いと思う。
※まぁ、考え方は人それぞれであるし、強制は出来ないけど~

趣味程度の遊びで、C コンパイラに10万とかありえないので、開発環境にコストはかけられない、そこで、当然のように gcc !
て言うか gcc が好き!
※Windows のプログラム開発でも gcc をメインに使っている~
組み込みのプログラムであっても C++ を多用するつもりなので、boost とかも部分的に動かすつもり、なので g++ も動作可能な事。
※将来的には C++11 も使いたい!

1)cygwin の整備
gcc を使う場合には、この環境が一番扱いやすい
※ make、makedepend を入れておく事

2)RX 用 gcc の準備
自分でソースコードから作ろうかと思ったが、コンパイル済みのバイナリーを入手出来るので、とりあえず、それを落とすのが良いと思う。
rx-elf-gcc

※展開は以下のように行う
$ cd /usr
$ tar xjvf tkdn-20110720-gcc.tar.bz2
.bashrc にパスを通しておく
> PATH=$PATH:/usr/tkdn-20110720/rx-elf/bin

3)RX マイコン用フラッシュプログラムツールのインストール
現在、フラッシュのプログラムツールは2種類あるようだ、「FDT(Flash Development Toolkit)」と、「Renesas Flash Programmer」
で、後者の方が、フラッシュの書き込みだけなら簡単で判りやすい。
※ツールのダウンロードにはアカウントが必要(無償評価版をダウンロード)
※ FDT でも書き込めます。

4)サンプルプログラムの入手
動作確認を行う為のサンプルプログラムを用意しました。
LED テストの簡単なサンプル

5)コンパイルと実行
$ make
でコンパイルされ、フラッシュ書き込み用モトローラー形式のファイルが出来ます。
AKI-RX62 に確認用 LED(赤) をCN1、25番(P30) に接続します。
※抵抗は 680 程度
「Renesas Flash Programmer」を起動します。
AKI-RX62 は、DIP スイッチの 1(BOOT)、2(リトルエンディアン)を ON 、3、4を OFF とします。
USB ケーブルを PC と接続し、電源を入れます。
※最初に接続した時は、ドライバーのインストールなど多少時間がかかります
※ アプリケーションの設定では、USB Direct で接続し、12.0MHz、x8、x4 とします。
mot ファイルを選択して、「スタート」すれば、書き込みが開始されます。
電源を OFF にして、DIP スイッチの1(boot)を OFF にしてから電源を入れると、LED が点滅すると思います。

次回は、もっと実用的なプログラムを紹介します。

LEDシーリングライト

最近ツイッターに、製作記をつぶやくので、長文でのブログはあまり書かなくなってきている・・

それでは宜しく無いので、先日作ったLEDシーリングライトの製作記などを~

-----

動機としては、パワーLEDが安くなった事で、高輝度な照明を作るハードルが下がった事が要因に思う。
それと、インバーター式蛍光灯は、意外と寿命が短く、直ぐに交換の時期が来る。
イニシャルコストは高くても、長持ちして、電気を食わないのはありがたい、コストは直ぐに回収できる。

最近、それなりの値段で購入出来る電球型LEDランプを沢山使って、シーリングライトを作る事も考えた
けど、あのLED電球は罠だと判ったww
光量をギリギリまで出す為と、なるべく買い替えサイクルを短くする為、LEDの仕様ギリギリで使っている、
発熱も多く、光量が落ち始める時期が早く、制御回路もわざとショボく作っていると思う。
※自分の予想では、LEDの光量が落ちる前、保証期間が切れる辺りで、壊れると思う、2000円やそこら
の品が10年とか使えたら、電気メーカーは困ると思う。

LEDシーリングライトは、まともなやつを買うと5万とかするので、自分で作るのが一番となるww

いわゆる1WパワーLEDは、350mAの電流を流すことができ、大体100ルーメンの光量が得られる。
効率で考えると、砲弾型や、チップ型のLEDを沢山並べて1Wの電力で発光できる「光量」の方が大きい。
※たとえば、秋月で50個1700円で売られている角型のLED(OSW443Z4E1)の場合だと、
30mAで30ルーメンの光量が得られる(但し、内部は3個直列なので)1Wの電力で得られる光量は、
116ルーメンとなる、発熱も少ないので、放熱は必要無い。

パワーLEDの、もう一つの問題として、「熱」がある、1WのパワーLEDは放熱無しでは、使えない、
それも、かなりおおきな熱を出すので、それなりに大きな放熱器が必要なので、意外と使い勝手は悪いと思う。

とはいえ、とりあえず作って、使ってみない事には、判らない事も多い。

6畳の部屋では、どのくらいの明かりが必要なのだろうか?
売られているLEDシーリングライトの光量からすると4000ルーメン以上は必要そうである・・
とりあえず、秋月で、24V30WのSW電源が安く売られていたので、それを使って3000ルーメンを目標
に作ってみた。

秋月で、パワーLEDが3個アルミの基板に接続済みのモジュールが600円で売っていた、とりあえずコレを
10個買って来たー(6000円)、定電流モジュールは、以前にストロベリー・リナックスで買ったパワーLED
用モジュール、1個のモジュールで、LEDモジュール2個を直列(9個)に駆動するので、5個のモジュールを使う
(525円×5個)

まず最初に、どのくらいの放熱が必要なのか調べてみたー、そして、一番コストの安い方法を考えた。
ホームセンターで、3mm厚のアルミバーを買って、10分割し、表面積を稼ぐ為、穴を開けてみた。
そしてLEDモジュールに取り付けて、実験してみたー・・・

うーーん、十分じゃないかな・・、もっと小さくても良いかもしれない・・
※実際には、50円で買った、TO-220用の放熱器を足しているけど・・

さて、このLEDモジュールでリグを組む、アルミアングルが安くて丈夫で軽い。

で、こんな感じで出来た~

初めは、暗いかもと思ったが、十分な明るさがある、それと、電源を入れて直ぐに明るいので気持ちいが良い~
※パワーLEDは明るさが集中している為、直接観ると目が焼ける感じで危ない、もっと緩い光じゃないと、寝室には辛い。
それと、調光も必要だなー

2号機は、4500ルーメンくらいで作るかな~

クアッドコプター4

前回の記事から、随分経ちますが、4回めをポストします。
ゲーム関係の仕事で時間が取れず、休みの日は、何もヤル気が起きず、映画観たりして、ゴロゴロする日が続いてました・・(涙)

SH7125 で制御基板、ソフトを作っていましたが、ジャイロの I2C 読み込みが上手く出来ずに悩んでいました。

でも、とりあえず、空に浮かべたくて、完成した制御ボードを購入してみました、でも自作制御ボードは引き続き進めます。
制御ボードは色々調べると、「Hobbyking KK2.0 Flight Controller」 が安くて、高性能な感じで、購入しました。

このボードの特徴としてー
・クワッドコプターだけではなく、色々なタイプのマルチローターや通常のヘリなどを電子制御で安定させる事が出来るようです。
・液晶表示付きで、セットアップが簡単です。
・ISP ポートもあり、ファームの書き換えで、バージョンアップに対応出来ます。(Atmega324)
・低価格($29.99)、国内では、Daytona7 で扱っていました。(4200円)
※ただ、今観たら、リストに無かったですね・・、Hobbyking から直で買っても、送料と時間が少々かかるだけなのですが・・・
・ジャイロは3軸「InvenSense Inc.」、加速度センサーも3軸「Anologue Devices Inc.」
・ファームは非常に良くできているようです、ソースコードも公開されています(アセンブラ)

これだけの機能と性能で、この値段は凄いですー

設定ですがー、簡単なマニュアル(PDF)がありますーが、良くわからない部分も多く、先人のブログなどが役にたちます。
※自分も色々参考にさせてもらいました、ありがとう御座います~

初号機

でーーー、とりあえず、試行錯誤を行い、空に浮かべるまでできましたが、直ぐに墜落させてしまい、プロペラが折れたり、色々修理してます・・(涙)
垂直に上げて、また下ろすだけのつもりでしたがー、ドリフトして補正したら逆に動いて、パニックになり、無理な操作を行い、ガシャーンです(涙)
とりあえず、ラジコンなんで、操縦を習得する必要がありますね・・・

クアッドコプター3

骨組みが出来たら、現実味が増した感じですけどー、まだまだ先は長いですねー
まず、基板に、ジャイロ。加速度センサーを中心に配置しました、残りのスペースにCPUなどを載せます。
今回は手持ちの関係で、SH7125を使う事にしましたー、現在では、100MHzのRXマイコンが手頃な価格で入手できるので、わざわざ、過去のCPUを使う理由も無いと思いますがー、タンスの肥やしにするのもアレなので、あえてこれを使います、機能的には十分なものと思います。
SH7125とRXマイコンの比較(参考)
・価格
SH7125F(R5F71253) ---> 900円(秋月の価格)
RXマイコン(R5F56218BDFP) ---> 950円(秋月の価格)
・内蔵メモリー
SH7125F ---> フラッシュ128キロバイト、RAM8キロバイト
RXマイコン ---> フラッシュ512キロバイト、RAM96キロバイト
・速度など
SH7125F ---> 50MHz、5V動作、各種タイマー、A/Dなど
RXマイコン ---> 100MHz、単精度浮動小数点演算器、2.7V~3.6V動作、A/D、USBインターフェース、リアルタムクロックなど

どうです、比べるまでも無い感じですね・・
※基板作る時にはRXでやってみようとおもいますねー

まあでも、SH7125のりソースは少しだけあるので、未知のCPUで、荒波に飛び込むより、無難ではあります、でもやっぱりメモリー(RAM)が少ないのは痛いです・・
プログラム変更の度にフラッシュに書き込むのは面倒だし効率が悪いので、簡単なモニターを用意して、実験段階ではRAMで開発をするのが一般的な方法です、自分も、Sフォーマットをロードしたり、メモリーのダンプを行うモニターを作成しましたが、RAMが狭く、色々考えながら進めないと駄目な感じです。

昨日も、インプットキャプチャー機能を試していると、1チャンネルだけなら動作するのに、複数のチャネルを同時に動かすとハングアップしたり、妙な動作をしていましたがー、よくよく調べてみると、スタックの領域と、ワークエリアが接近し過ぎていて、ワークエリアを壊していたようです・・・
※これ気がつくまでに凄く時間がかかりました・・・・・

・プロペラの話・・・
クアッドコプターでは、2組の正転、逆転の組みを作り、回転による反力を相殺します、最初、「あぁ、逆に回すんだから、プロペラを逆に組めばいいんだよねー」と簡単に考えてましたがー、実際に逆転にしたら、風向も逆になるだけで意味ありません、よーーく考えると、「ピッチが逆じゃないと駄目なんでは・・」と思いましたー、ネットを調べると、CW/CCWペアとかでプロペラ売ってました、「あーーあ、なるほどねー」って感じで、急遽、シンガポールで売っていた8インチ、ピッチ4.5のプロペラを購入しましたー(汗)

このクラスだと、飛ぶ事は出来るでしょうが、やはり推力は出ない感じなので、実験機が上手くいったら、RXマイコンで作り直します、その時は10インチのプロペラでやってみたいですねー

続く~

クアッドコプター2

センサーを入手したところで、送信機、受信機をどうするか・・

以前は、2.4GHzの無線モジュールを使って自作しようと思いましたがー、「早く飛ばしてみたい!」とゆー事で、既存の物を買う事としましたー、例によって色々探すと、アメリカで売っている(中国製)やつが安くて高性能な感じですー、しかし、今ひとつ食指が沸かない感じです・・、そんな時、いつもお世話になっている Daytona7 でプロポを観たら、JR(日本遠隔無線)製のプロポセットがそれなりの価格で売られていたので、それを購入してみましたー
高いですがー、安物買いの何とかとゆーのもありますし、丁度良い落とし所と思います。

送信機は7チャネル、受信機は6チャネル?、基本、4チャネルあれば、ヘリコプターの機動には十分そうですがー、何か別のものを制御する事もできるしで、7チャンネルくらい必要だろうと思った次第ですー、又、この機種はテレメトリー機能があり、機体の情報をプロポに返す事が出来ます。
標準では、受信機の電圧しか返せませんが、オプションのセンサーを繋げば、色々な情報を返す事が出来るようです。

-----

さて、肝心の機体ですがー、実験機という事もあり、お手軽に作る事を考えていましたー、そこで、ホームセンターで入手できるアルミの中空材に注目しました、10mm角で、1mmアルミの押し出し材でしょうか?、アルマイト処理もしてあり、軽いです、機体は軽ければ軽いほど良いのですが、ある程度の強度も必要です、このアルミなら強度は十分で、穴を開けて軽量化も可能と思い、これで基本の骨格を制作します、中心をフライスで削り、十字に合わせます。

そして、端にモーターをマウントします。


↑モーター試運転の様子。

プロポのスロットルを中間より少し上目くらいにすると、ほんのり浮き上がります~、モーター4個なら、十分な推力が得られると思えます。

-----
じつは、フライス盤の加工範囲の関係で、最初は30cmくらいで造りました、しかし、モーターを載せてみると、プロペラが当たる事が判明・・・、34cmで作り直しました・・・ルート2倍の計算がちゃんと出来てなかった。

クアッドコプター

以前、Youtube で観てから、自分で作ってみようと考えて、色々部品を集め始めたのが1年以上前になりますー、最近ようやく、必要な部品が揃い初めて、土日に少しづつ制作しています。

最近ではフライバイワイヤーの専用コントローラーも売っているようで気軽に誰でも作れるようですが、やはり、自分で作る事の意味は大きいです。

-----

まず、最初に考える事は、全体でどのくらいの規模にするかという事、基準に考えたのはモーターでした、色々なサイトを巡り、ラジコン飛行機用のブラシレスモーターで手頃な大きさ、値段を見極めながら選んだのがこれです。

Daytona7 ラジコン専門店
※自分は、↑ここでモーター、プロペラ、アンプ、電池、充電器など揃えました~

とりあえず、このモーターで色々実験してみて、推力が足りないとか、全体のバランスとかは後で考える事にしましたー

ブラシレスモーター: EMAX CF2805
モーターアンプ: TURNIGY P10A
バッテリー: ZIPPY 2200mA (20C)

これら動力系部品を揃えたとこで、加速度センサー、ジャイロセンサー購入で、中々進まず、仕事も忙しくなり、かなりの時間スルーしていましたが・・

今年の初め、センサーを購入してから、また少しづつ進み始めました~
InvenSense 社のジャイロ、加速度センサーMPU-6150です。
※値段は1000円くらいなんですが、送料が高いので、10個購入してしまいました・・(欲しい人がいたら実費でお分けします)
QFN パッケージで、半田付けが難しいと思ったのですがー、Youtubeの半田付け動画を参考に、コテライザーに、ホットブローのコテ先を付けて、万能基板に付けてみましたー、まだ火を入れていないので、正しく動作するかは不明です・・

続く・・・

最後の「もて耐」終了

先日の日曜は、茂木で、最後となる「もて耐」のマスターズクラスに出ていましたー

今年は、ForceV4オーナーズクラブからRC45で参加させてもらいました。
自分もRC45を所有していますから、とても好きなバイクですが、発売されてから既に17年、部品もほとんど無く、750ですが、最近の600スーパースポーツよりパワーも少なく、戦闘力では劣るものの、乗っていて楽しいバイクです、そして最高のV4サウンド。

RC45と言ってもピンキリですが、貴重なものなので、このレーサーを作るとなると、コスト的にはリッターマシンより高くなります、今回のマシンは、「梅」と言われる、エンジンノーマルな仕様です、それでも、ガレージウルフマンの伊藤さんが貴重な部品を合わせて作ったマシンは、バランスが良く、扱いやすくて、走っていると、気持ちよく、疲れないし、楽しくて攻めたくなりますww
そして、純粋培養のレーサーでもあります。
エンジンはノーマルでも、ラムエアー付きで、HRCのインジェクション用コンピューターとレース用点火系で14000回転まで回ります。
12000を超えてからの伸びが気持ちよく、綺麗にトルクフルに回るとこがインラインフォーと違うV4なんだと感じられます。

レース前に30分のスポーツ走行を2回乗りましたが、要所を押さえても16秒くらいしか出ないので、乗り方を根本的に変えないと駄目だなと思いました、リッターバイクだと、コーナー侵入でそれなりに入り、向きを変え、マシンを立てて、アクセルを開けると、10秒は簡単に出るのですがー、RC45のレーサーには同じやり方は通用しません・・、やはりコーナーリングスピードで稼がないと・・・
※以前に乗ったRC30レーサーでは、同じような乗り方で14秒くらいが出ていたので、絶対的なパワーではRC30の方が上な感じですが、他のライダーの印象では、「パワーがある」と言っていたので、自分の感覚が間違っていたのかもしれません・・・(歳はとりたく無いもんだな・・・)
それと高価で貴重なマシンを転倒で壊す事も出来ないと思い、かなりマージンをとったのですが、コーナーリングスピードを稼がないとタイムなんて出る訳無いので、この辺りは「ヘタレ」と言われても、転ばない方を選びましたー(この辺りは「おとな」ですww)

今年は震災の影響でコース改修など、スケジュールが大幅に変更になり、11月20日と言う、寒い時期の開催でしたー
なので、暑さ対策は必要無く、逆に寒すぎるのではと思っていましたが、雨で冷たかった以外は、そこまで寒くもなく、それなりに良いコンディションでしたー

参加台数が42台と、グリッド割れしていたので、予選は無く、スタート位置は「クジ」で決まりますー、しかし、なんと、「どんべから二番目」の最後尾スタートと言う、「美味しい」とこからのスタートですwww、耐久レースでは、スタート位置とゴールの順位にはあまり相関が無く、トラブルが無いチームが良い順位をゲット出来るし、スタート時は、何かと混乱に巻き込まれやすいので、後ろに誰もいないのはむしろありがたい事だったのかもしれません。
※後は前を抜くだけだしねーwww

そして、スタート。
第一ライダーはヒロさんですー、自分は、足が痛くて走れないのでルマン式は無理と思って、やってもらいましたー
何事も無く無事に走りぬき、多分30位くらいで自分と交代。

昨日からの雨は止んでいたものの、路面はWETで、二番目、第一スティントを乗りました、路面は半乾き状態ですがー、まだ濡れている場所が沢山あるので、そのままレインで出ました、二週目の裏ストレートから90度への侵入で、ブレーキのかけ方をミスって、止まれなくなり、グラベルに少し出てしまいましたが、何とかグラベルを転ばずに走り、コースに復帰、非常に危ない状況でした(汗)
それでビビリが入り、中々タイムを上げられずにいたら、今度は雨が降ってきましたー、さらに、メットのシールドが曇り、前が見えませんー、シールドを少し開けたり、色々しながら走っていると、当然タイムもボロボロで、空気口が閉まっている事に気がつくまで数週を無駄にしましたー、やっと曇りが取れて冷たい雨の中、タイムを削っていくと、何だか、エンジンのフケが悪くなりました(水温が低かったのかもしれません)、もしやガスが無いの?とヒヤヒヤしていたので、少し早いけど、大事をとって、次のライダーに交代する事にしました、この時多分25位くらい。

Session 4 started at 09:53:05

1 0:02:37 2:37.603
2 0:05:25 2:47.628
3 0:07:58 2:33.039
4 0:10:30 2:32.208
5 0:13:08 2:37.991
6 0:15:42 2:34.319
7 0:18:15 2:32.991
8 0:20:50 2:34.304
9 0:23:29 2:39.659
10 0:26:12 2:42.626
11 0:28:47 2:35.037
12 0:31:17 2:29.870
13 0:33:46 2:29.511 Best time
14 0:36:19 2:32.802
15 0:38:54 2:34.432
16 0:41:25 2:31.769
17 0:44:01 2:35.669

第三ライダーはマシンオーナーの fukurou さん、これもまた無事に走りきり、第四ライダーのおむすびさんにチェンジ、自分が予定より短く切り上げてしまったので、少し長く走ってもらいましたー、そして再び、ヒロさん、この時、既に雨は止み、レコードラインが乾き始めましたーが、まだドライで走るのは無理と考え、そのままレインで走ってもらいました。

二回目のスティントでは、雨も止み、レコードラインはほぼ乾いていたので、ドライタイヤに付け替えて、出ましたー、この時16位くらい、ピット作業を担当した人が非常に良い仕事をしてくれて、タイヤ交換を無事済ませ、自分はリアサスのコンプを元に戻して(レインを入れた時にコンプを抜いていた)出ていきましたー、レコードラインを外さなければ、路面はほぼドライな感じで、気持ち良くラップでき、RC45楽しい~って感じでした、ほどなくして前に「R1」がいたのですが、コーナーで近づいても、ストレートで逃げられてしまうを5周くらい繰り返していましたー、無理にインを刺す事も出来たけど、路面は全部がドライでは無かったので用心しながら、V字でインを差して抜きましたー、抜いて数周クリアラップが取れてそこそこ気持ちよく全開で走り、ベストが出ました(公式には2分14秒075)、その後バックマーカーに捕まり、少し集中が落ちて、ダラケましたが、かなり楽しく周回を重ねて、今回は50分ピッタリ走りました、この時15位くらい、リッターバイクだとヘロヘロになりますが、リッターバイクよりパワーの無い45だと、加速Gが少ないのでほとんど疲れません~ww

Session 8 started at 14:08:50

1 0:02:22 2:22.935
2 0:04:43 2:20.715
3 0:07:01 2:17.668
4 0:09:19 2:17.823
5 0:11:38 2:19.085
6 0:13:58 2:20.012
7 0:16:15 2:17.571
8 0:18:33 2:17.799
9 0:20:52 2:18.562
10 0:23:08 2:16.355
11 0:25:23 2:14.730
12 0:27:37 2:13.760 Best time
13 0:29:50 2:13.985
14 0:32:07 2:16.241
15 0:34:25 2:18.037
16 0:36:41 2:16.216
17 0:38:57 2:15.570
18 0:41:14 2:17.363
19 0:43:30 2:16.309
20 0:45:47 2:16.403
21 0:48:03 2:16.540
22 0:50:24 2:20.714

そして、最後のライダーに交代して、自分の任務は終わりです~
そして最後のライダー fukurou さんも走りぬき、チェッカー!
最終的には17位完走となりました!!

「RC45」って乗ってて楽しいバイクだなーとつくづく思いましたーやっぱV4ですねー

そして、今回、ピット作業や、監督、サインボード、食事、その他もろもろ、雨の中、最善を尽くしてくれたクラブメンバーや、色々雑用などをやってくれたヘルパーさんたちに感謝を捧げたいと思います。
「本当にありがとうございました~」

2011 もてぎマスターズ 7時間耐久ロードレース (リザルト)

-----
チーム名 :FORCEV4オーナーズクラブ
参戦マシン:'94年 HONDA RVF/RC45
ゼッケン:11番32番ピット

()内は所有V4マシン
チーム監督     PRYCE16(NC30)

第1ライダー    fukurou (RC30・RC45)
第2ライダー    hira (RC45)
第3ライダー    お下劣ヒロ (NC35)
第4ライダー    おむすび (NC30・RC30)

メカニック
しりうす(NC30)
bootang(RC30)
やま(RC46)
FIRE(NC30)
TOSHI(NC30)

ヘルパー
ATUSHI(NC30)
他クラブ内外から数名

Cygwin の OpenGL 開発環境構築

Cygwin で OpenGL の開発環境を構築する場合、unix 系と Windows 系、複数のやり方があるようなのだけど、情報が少ないように感じた、それで、自分で判った事をここにメモ程度に書いておこうと思う。

まず、Cygwin では、コンパイラが複数ある、通常のソースコードと、Windows の API(WIN32-API) をコンパイルできるもの(Mingwin 系)
そして、gcc3 系と、現在最新の gcc4 系

gcc3 系では、「-m」のオプションスイッチで、Windows 環境をコンパイルする事ができるが、gcc4 系では、この機能は無くなり、クロスコンパイラで、対応をするようになった。

基本的な事だが、windows 系の開発では、unix 系で普通に使えるライブラリーの多くは利用できない、windows で利用可能なようにポートされたライブラリーを別途入れる必要があり、ヘッダーのインクルードなども適切に記述する必要がある。
※たとえば、Windows で POSIX のスレッド(pthread)を使いたいなら、POSIX Threads for Win32 をインストールする必要がある。(cygwin では、gcc の windows 系クロスコンパイラに含まれている)

OpenGL のプログラム開発では、unix 系、Windows 系、どちらでも、開発を行う事が出来るけど、unix 系では、コンソールアプリケーション以外では、X-Window のアプリとして動作させなければならず、X サーバーを通して動作させる事になる。
Windows 系では、ネイティブなバイナリーを作成でき、実行コードを配布する場合も便利なので、自分は、Windows 系の開発環境でおこなっている。
※Linux や OS-X などでも少しの改修でリコンパイルでき、動作するように、している。
基本的には glut を使うので、動かすだけなら簡単と思う。

cygwin で利用できるコンパイラ
・gcc3 gcc version 3.xx コンパイラ、これだけインストールすると、単に gcc
・gcc4 gcc version 4.xx コンパイラ、gcc version 3.xx と両方インストールすると、gcc3 と gcc4
・i686-w64-mingw32 windows のソースコードをコンパイルできるクロスコンパイラ32/64 ビット
※32ビット、64ビットのバイナリー作成では、関連ライブラリーをスイッチするようだ。

メディアプレイヤーをコンパイルする場合に必要なライブラリー郡
(1)cygwin のインストーラーでインストール出来るもの
libz 圧縮、解凍ライブラリー(自分でソースコードをコンパイルして組み込む場合は不要)
pthread-win32 POSIX のスレッドライブラリー(PTHREAD-WIN32)
glut OpenGL glut ライブラリー

(2)自分でライブラリーの構築などを行うもの(基本的に全て、オープンソース)
boost         boost ライブラリー(最新のバージョンを利用したい為、別途アーカイブを展開している。)
AL OpenAL ライブラリー
DX DirectX を gcc で使う為のヘッダー、ライブラリー(DirectSound、DirectInput を利用)
freetype2 TrueType を描画(レンダリング)する為のライブラリー
libjpeg_x86 JPEG をデコード・エンコードする為のライブラリー(x86バイナリー専用の高速版)
libpng PNG をデコード・円コードする為のライブラリー
mupdf PDF をレンダリングする為のライブラリー
openjpeg JPEG2000 ライブラリー
jbig2         JBIG2 ライブラリー
id3tag        MP3-TAG ライブラリー
↑これらは、cygwin gcc でコンパイルして、ライブラリーを構築したので、別途アーカイブしてある。

今回は、OpenGL プログラムを走らせるだけなので、↑のライブラリー構築などは割愛する。

(1) 基本的なインストール
・まず、cygwin をインストールしなければならない、インストール方法は、非常に沢山他のサイトなどで詳しく説明されているので割愛する。
・重要なのは「必要なコンポーネント」と思う。(下のリストは、足りない物があったり、余分な物があるかもしれない)
・「Devel-gcc-mingw」関係を全部インストール
・「Devel-gcc4」関係をとりあえず全部インストール(※gcc4-core と gcc4-g++ があればOK)
・「Devel-gccmakedep」をインストール(Makefile で従属規則を自動生成するのに使う)
・「Devel-mingw64-i686」関係を全てインストール
・「Devel-make」(GNU Version)をインストール

(2)インストールを確認
・今回は、コンパイラとして「i686-w64-mingw32-gcc」を使うので、コンソールから、

i686-w64-mingw32-gcc --version

以下のようなメッセージが出れば、とりあえずコンパイラのインストールは成功。

i686-w64-mingw32-gcc (GCC) 4.5.3
Copyright (C) 2010 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

(3)gcc3 系 mingw の OpenGL 関係をコピー(この手順が適正か判らないが・・・)
・i686-w64-mingw32 環境にも OpenGL 関係のヘッダーやライブラリーはあるのだが、イマイチ使いにくいので、gcc3 系の OpenGL ライブラリーを手動でコピーして使う、ライブラリーは互換性があるようなので、4系でも使えるようだが、gdb などでデバッグするような場合は問題が起こるかもしれない。
・元のファイルをリネームして一応保存しておき、mingw 関係のヘッダーなどをコピー
cd /usr/i686-w64-mingw32/sys-root/mingw/include/GL
mv gl.h gl_h
mv glu.h glu_h
cp /usr/include/w32api/GL/*.h .
cd /usr/i686-w64-mingw32/sys-root/mingw/lib
mv libopengl32.a libopengl32_a
mv libglu32.a libglu32_a
cp /usr/lib/w32api/libopengl32.a .
cp /usr/lib/w32api/libglu32.a .
cp /usr/lib/w32api/libglut32.a .

(4)OpenGL が動作するか確認
・まず、ソースコード「main.cpp」を入力

#include <cstdio>
#include <GL/glut.h>

static GLint faces[6][4] = {  /* Vertex indices for the 6 faces of a cube. */
{0, 1, 2, 3}, {3, 2, 6, 7}, {7, 6, 5, 4},
{4, 5, 1, 0}, {5, 6, 2, 1}, {7, 4, 0, 3} };
static GLfloat v[8][3];  /* Will be filled in with X,Y,Z vertexes. */

static GLfloat g_angleX =  60.0f;
static GLfloat g_angleZ = -20.0f;

static void reshape_task(int width, int height)
{
}

static void idle_task()
{
glutPostRedisplay();
}

static void display_task()
{
int w = ::glutGet(GLUT_WINDOW_WIDTH);
int h = ::glutGet(GLUT_WINDOW_HEIGHT);
glViewport(0, 0, w, h);

glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

// Setup the view of the cube.
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(40.0,    // field of view in degree
1.0,        // aspect ratio
1.0,        // Z near
10.0);    // Z far
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0.0, 0.0, 5.0,    // eye is at (0,0,5)
0.0, 0.0, 0.0,    // center is at (0,0,0)
0.0, 1.0, 0.);    // up is in positive Y direction

// Adjust cube position to be asthetic angle.
glTranslatef(0.0, 0.0, -1.0);
glRotatef(g_angleX, 1.0, 0.0, 0.0);
glRotatef(g_angleZ, 0.0, 0.0, 1.0);

g_angleX += 1.0f;
g_angleZ += 0.5f;

for(int i = 0; i < 6; ++i) {
struct rgb {
GLfloat r, g, b;
};
static const rgb col[6] = {
{ 1.0f, 1.0f, 1.0f },
{ 0.2f, 1.0f, 1.0f },
{ 1.0f, 0.2f, 1.0f },
{ 1.0f, 1.0f, 0.2f },
{ 0.2f, 0.2f, 1.0f },
{ 1.0f, 0.2f, 0.2f }
};
glColor3f(col[i].r, col[i].g, col[i].b);
glBegin(GL_QUADS);
glVertex3fv(&v[faces[i][0]][0]);
glVertex3fv(&v[faces[i][1]][0]);
glVertex3fv(&v[faces[i][2]][0]);
glVertex3fv(&v[faces[i][3]][0]);
glEnd();
}

glutSwapBuffers();
}

void init()
{
// Setup cube vertex data.
v[0][0] = v[1][0] = v[2][0] = v[3][0] = -1;
v[4][0] = v[5][0] = v[6][0] = v[7][0] =  1;
v[0][1] = v[1][1] = v[4][1] = v[5][1] = -1;
v[2][1] = v[3][1] = v[6][1] = v[7][1] =  1;
v[0][2] = v[3][2] = v[4][2] = v[7][2] =  1;
v[1][2] = v[2][2] = v[5][2] = v[6][2] = -1;

// Use depth buffering for hidden surface elimination.
glEnable(GL_DEPTH_TEST);
}

int main(int argc, char** argv);

int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);
glutInitWindowSize(512, 512);
glutCreateWindow("test cube");
glutDisplayFunc(display_task);
glutReshapeFunc(reshape_task);
glutIdleFunc(idle_task);

init();

glutMainLoop();
return 0;
}

・続いて「Makefile」を入力
#-----------------------------------------------#
# GNU-Makefile for "gcc" #
#-----------------------------------------------#
TARGET = OpenGL_Test
PSOURCES = main.cpp
CSOURCES =

OPTLIBS = opengl32 glu32 glut32

INC_SYS =
# /usr/i686-w64-mingw32/sys-root/mingw/include
# /usr/boost_1_43_0
INC_LIB =

PINC_APP =
CINC_APP =
LIBDIR =

INC_S = $(addprefix -I, $(INC_SYS))
INC_L = $(addprefix -I, $(INC_LIB))
INC_P = $(addprefix -I, $(CINC_APP))
INC_C = $(addprefix -I, $(PINC_APP))
CINCS = $(INC_S) $(INC_L) $(INC_C)
PINCS = $(INC_S) $(INC_L) $(INC_P)
LIBS = $(addprefix -L, $(LIBDIR))
LIBN = $(addprefix -l, $(STDLIBS))
LIBN += $(addprefix -l, $(OPTLIBS))

#
# Compiler, Linker Options, Resource_compiler
#
CP = i686-w64-mingw32-g++
CC = i686-w64-mingw32-gcc
LK = i686-w64-mingw32-g++
RC =

POPT = -O3
COPT = -O3
LOPT =

COF = -o
LOF = -o

PFLAGS = -DWIN32
CFLAGS = -DWIN32
LFLAGS =

# -Wuninitialized -Wunused -Werror -Wshadow
CWARN = -Wimplicit -Wreturn-type -Wswitch -Wformat

OBJECTS = $(PSOURCES:.cpp=.o) $(CSOURCES:.c=.o)

.SUFFIXES :
.SUFFIXES : .res .hpp .h .c .cpp .o

$(TARGET).exe: $(OBJECTS) Makefile
$(LK) $(LOF)$(TARGET).exe $(LFLAGS) $(LIBS) $(OBJECTS) $(LIBN)

.c.o:
$(CC) $(COPT) $(CFLAGS) $(CINCS) $(CWARN) -c $< $(COF)$@

.cpp.o:
$(CP) $(POPT) $(PFLAGS) $(PINCS) $(CWARN) -c $< $(COF)$@

.rc.c:
$(RC) $< $@

all:
make clean
make depend
make $(TARGET)

install:
cp ./$(TARGET).exe /usr/local/bin/.

run:
./$(TARGET).exe

clean:
rm -f $(OBJECTS)
rm -f $(TARGET)

dllname:
objdump -p $(TARGET).exe | grep "DLL Name"

tarball:
chmod -x *.[hc]pp Makefile
rm -f $(TARGET)_$(shell date +%Y%m%d%H)_src.tgz
tar cfvz $(TARGET)_$(shell date +%Y%m%d%H)_src.tgz \
*.[hc]pp Makefile
chmod 444 $(TARGET)_$(shell date +%Y%m%d%H)_src.tgz

zip:
$(LK) $(LOF)$(TARGET).exe $(LFLAGS) $(LIBS) -mwindows $(OBJECTS) $(LIBN)
rm -f $(TARGET)_$(shell date +%Y%m%d%H).zip
zip $(TARGET)_$(shell date +%Y%m%d%H).zip *.exe *.dll

depend:
makedepend -Y -- $(CFLAGS) $(INC_P) -- $(CSOURCES) $(PSOURCES)
# DO NOT DELETE

(5) コンパイルと実行
・まずコンパイル
make
・実行
make run
・画面に、512×512のWindowが作られ、四角い箱が回転すれば成功!

PCオーディオ(その2)

さて、部品が揃ったので早速組み立てです。

今度は、以前の失敗で懲りて、全部ソケットを使います、「直」に載せると、余分な工程が無くて、作業が速いのですが、前回のように壊すと、どうする事もできずに、作り直しですww
ソケットを使った事で、ソケットと変換基板下のスペースを有効活用できます。

とりあえず、丁度良い大きさのユニバーサル基板があったので、それにPCM2704を標準的な回路で組んで、PCに接続して、認識する事を確認しました。
※オーディオを再生させて、信号が正常な事をオシロスコープで確認しました。

次に、CS8416関係ですが、SSOPでも幅が狭くて、秋月の変換基板ではパッドの部分が不足していたのでダイセン電子の変換基板を使います、ただ、この基板の横幅は、600ミルでは無く、通常の28PINソケットが使えません。
一般的なソケットでは無く、ヘッダーピンにしたので、基板下のスペースをさらに有効に使えます、PLLのフィルターは、このスペースに配置しました。

・オーディオマニアが陥る霊感商法
USB に繋いだオーディオ機器は音が悪いとされます、それを改善する為、1本数万円の高価なケーブル(霊感商法と何ら変わらないと思います)まで売っています、確かに、電源ラインには、PCで発生したスイッチングノイズが乗っており、これらが音質に与える影響はあるかと思いますし、USB一口では、500mAの電流しか取れませんから、別に電源を取りたいと考えるのでしょうが、設計してみると、ヘッドホンアンプと、USBデバイス、D/Aなど諸々で、500mAあれば十分ですし、可聴範囲のノイズは聞こえない程度に取り除けば良い事です。
USB の信号は差動のデジタル信号で通信を行なっており、ケーブルの品質がある程度あれば、値段の差による音の違いは無いと思われます、ブラインドテストをすれば、ハッキリすると思いますが、数万円のケーブルと、ダイソーで買える100円のケーブルに何の違いもありません、デジタルデータは、価格の大小に関係無く、完璧に転送できますし、USBオーディオの仕様や仕組み、その他必要な知識も無い人が、ジッタの影響とか、欠損するデジタルデータとか、論理的裏付けの無い技術論は滑稽で仕方ありませんww
数万円のケーブルは抵抗が低くて、100円で売っているケーブルより優れていますが、何十メートルも伸ばす訳ではありませんし、デジタルデータは差動信号による半二重のパケット通信です、デジタルデータは欠損無く通信できますし、エラーコレクションもありますからデジタルデータの欠損は通常ありません、もしあるようなら、USBのクライアントとして認識できなくなります。
影響を与えるのは電源ラインだけですが、それも、500mA程度ですから、ある程度のゲージを使った銅線であれば問題無いレベルです。

しかしながら、それでも、人知の及ばない何かが作用して、月の満ち欠けだとか、微弱な電磁波とか、何か影響’を与えるかもしれませんが、「ダブルブラインドテスト」でもやって、それで80%以上の確からしさでも常にマークしない限り、そんな戯言を信用する訳にはいきません。

USB_AUDIO

・OP-AMPの電源は、+-12VのDC/DCを使っています。
・ヘッドホンアンプには、+-5VのDC/DCを使っています。
・DACには、低損失の5Vレギュレーター
※USBの電源は、通常5.2V程度ありますので、三端子レギュレーターで5V、及びロジック用などに3.3Vを生成しています、高周波のノイズを落とす為にフェライトビーズを入れています。
・とりあえずの実験用なので、とりあえず、ボリューム用二連の10Kを使っていますが、最終的にはデジタルボリュームに変えたいと思います。

さて、ネットにある色々な回路を観ると、多くの方が、非常に大きなコンデンサー(オーディオ用)を電源に入れていますが、果たしてそんな大きな容量が必要でしょうか?
※低ESRのコンデンサーは効果があると思います。

例えば、よく使う三端子レギュレーターは、入力側に0.1uF、出力側に10uF程度入れれば、十分なレギュレーションが得られるように設計されています、もちろん流れる電流のダイナミックレンジにより発生するリップルは変化しますが・・・
また、OP-AMPは電源の変動を出力に出さない為の工夫が色々施されていますから、多少のリップルが乗った場合でも、それが出力に現れる事は少ないのですから、大きなコンデンサを入れる意味はあまり無いと思います。

視聴しながら、テストする場合でも、大きな容量を入れた場合と、標準的な容量(データシート推奨の容量)を入れた場合で、ブラインドテストを行い、85%位以上の人が検知出来ないのなら、標準の容量で十分なハズです。
自分でテストするのでは、客観性に欠けますし、精神状態が変われば、結果も変わりかねません。
明らかに違う場合は別ですが、それは、何か根本的に間違っているとしか思えません。

測定器を使って、「大きな容量のコンデンサを入れるとリップルが少なくなる」と言う人もいますが、多分検知できる程のレベルでは無いと思います。

よって、コンデンサーの容量は、適切な値にする事が最も適切で、最大の効果を得る早道だと考えます。

今回の試作では、電解コンデンサーは低ESR品の100uFが二個で、残りは0.1uF~47uFの積層セラミックコンデンサーです。
ボーカロイドからクラシック、ロック、J-POPなど色々なジャンルの音を出してみましたが、現状でも十分な感じがしますが、これから、一応、測定を行い、それにより改修を行う必要はあります。
まぁ、測定を始める以前に音がまともでなかったら無駄ですからー

回路図に起こすのはこれからですーー