hira のすべての投稿

クアッドコプター

以前、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など色々なジャンルの音を出してみましたが、現状でも十分な感じがしますが、これから、一応、測定を行い、それにより改修を行う必要はあります。
まぁ、測定を始める以前に音がまともでなかったら無駄ですからー

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

PCオーディオ(その1)

最近、自宅を離れ、渋谷に通って仕事をしていますがー、そこで支給されているPC、DELL製のそこそこ高速なヤツです。
※Corei7の2.8GHzとか

作業は共同作業なのですが、周りの雑音を聞きたく無い時は、イヤホンで音楽を聞きます、iPhoneから聞いても良いのですがー、気晴らしに観るYouTubeとかニコニコの動画はPCで観るので、差し直すのはメンドイしでPCで音楽も聞きたいのですがー、「音」が最悪ですー、DELLに限らず、メーカー製のPCでも、フロントパネルに出ているイヤホンジャック、かなり劣悪の品質と言わざるをえません、PCの電源ノイズがモロに乗っているし、長時間の視聴には耐え難いものがあります。

ならば、USBのオーディオインターフェースでヘッドホンアンプ付属の適当なやつをと思ったのですがー、安いやつは、チープな音しか出ないし、コンパクトで、高音質なやつは値段も高いと言う事で、色々考えているうちに、「自分で作ればいいんじゃね?」
と言う、いつものパターンに突入しましたww

丁度、秋月で、TI製のUSBオーディオインターフェース(PCM2704)を売りだしたので、1個買っていそいそと試作してみましたー

PCM2704は、ヘッドホンを鳴らす為のアンプも内蔵しており、このチップだけで、ヘッドホン出力が提供出来るものです、しかし、内蔵アンプは単一電源で動作する、簡易的な物で、音も期待するまでもなく、それなりの音しか出ませんし、出力も小さく、とても、自分が要求するようなレベルの物では無い事が直ぐに判りましたー
色々回路をいじっているうちに、誤配線をしてしまい、あっとゆーまに燃やして、お亡くなりになりましたー、半導体独特の燃えた匂いを嗅いだ時は、何ともいえない、気分です・・・・・・
※虚しいやら、ムカツクやら

PCM2704 試作
PCM2704 試作

※使える部品は再利用の為取り外している

最初は、1000円くらいで、そこそこ納得のいく音が出ればイイくらいに思ってましたがー、「自分のミスによる大きな損失」が次のやつを「ちゃんと」作るモチベーションに変わりましたー

そこで、ネットを探してみると、DAI(デジタルオーディオインターフェース)、D/Aコンバーターの製作例は多くて、みなさんハンパ無い投資をしている人もいますww
自分は、「まともな音」が聞ければ良いので、自分の考える範囲で、部品をセレクトして、発注してしまいました。

PCM2704(TEXAS INSTRUMENTS)
※USBからオーディオデータを取り出すのは、とりあえず、この石です、最大48KHz16ビットと最低限のものですがー、探しても、市販されているデバイスで、入手可能な物は、ほとんど無く、とりあえず、このデバイスで「良し」としました。
TENOR社にTE7022Lと言うデバイスがあり、96KHz/24Bits が可能なようですが、入手先を見つけられませんでした。
USBオーディオの標準デバイスとして、192KHz/24Bitsをサポートするのは、自分で組むしかなさそうです。(USB2.0をサポートした、デバイス
を備えた、マイクロプロセッサとFPGAが必要な感じです)

CS8416(CIRRUS LOGIC)
※PCM2704はアナログ出力の他に、S/PDIF信号も出力します、CS8416は、その信号をデコードして、D/Aコンバーターに必要なクロックと、データ信号を出力します、PLL回路や、オーバーサンプリングに必要なロジックも内蔵していて、最大192KHz、24ビットを扱え、外付け部品も少ない優れものです。
S/PDIF入力は、何系統かありますから、USB、光、COXIALなどを備えて切り替えが出来れば、D/Aコンバーター付きヘッドホンアンプとして使えます。

PCM1798(BURR-BROWN/TEXAS INSTRUMENTS)
※バーブラウン社は、デジタルオーディオ関係のデバイスの製造で有名な会社ですが、今はTIの傘下となっています。
このD/Aコンバーターは、192KHzのサンプリングで24ビット出力が可能な物です、ファミリーとして、さらに高性能なPCM1794と言う、最高ランクのD/Aがあり、マニアの間では、それを使うのが一般的のようですが、コストが倍以上しますし、PCM1794の性能を引き出すには、周辺回路にもかなりコストをかけないと、意味が無いので、今回は見送る事としました、データシートを読む限り、このデバイスでも、相当優れた性能を出せる事がわかります。

OPA2604(BURR-BROWN/TEXAS INSTRUMENTS)
このOP-AMPも、バーブラウン製です、高速、ローノイズ、低歪の高性能アンプです、スルーレートがなんと25V/usもあります。
秋月で300円ですが、それを調べる前にDigiKeyで370円で沢山買ってしまいました・・・(かなり痛いです・・)

TPA6120(TEXAS INSTRUMENTS)
ヘッドホンアンプは、まともな物を作ろうと思うと、意外と難しいです、色々と各社からICは出ていますが、どれもこれも、チープな物ばかりで、「本物」がありません、「ベスト」は、ディスクリートで組むべきでしょうが、スペースとコストを考えると、それも無理です、そんな時、見つけました、良さそうなのが・・
電流帰還型で超高速(1600V/us)、非常に大きなドライブ能力(低インピーダンス)、低ノイズ、オフセット電圧も小さく、+-両電源なので、カップリングコンデンサも必要ありません。
値段も600円程度と、まさに理想的。

これら部品と諸々で合計で5000円程度。

続く~

RX マイコンで ARM の牙城を切り崩せるか?

最近、秋月電子で最新のRXマイコンを取り扱うようになったー
※R5F56218BDFP(100pin)
※インターフェース5月号にも付録基板がついているが、数を作る事を考えた場合には、使えないので、デバイス単体で入手できるのはありがたい。
※Degi-Key でも扱いがあるようで、R5F56218BDFB(144pin)、1個1131円、25個だと951円と格安。

手始めに、非常に小規模なタイプR8C/11A,R8C/12A(AVRのATtiny2313クラス)、そして最近32ビットタイプである。
※R8C/11A,12A は、100円マイコンではあり、ATtiny2313より明らかに優れている部分も多い(A/Dコンバーターなど)ので、今後メインストリームで使いたいマイコンである。

自分は、6802からルネサスの前身である日立のマイコンを良く使ってきたー、6809、68000、H8、SH2、SH3など・・
※セガサターンでは、SH2が採用されていた事もあり、PSでは無くサターンに合わせてゲームも作った。
最後にまともなハードを作ったのは、80MHzのSH3基板を起こして組み込み機器に使ったのが最後であるけど、ルネサスに統合された後も、他メーカーのARMも色々使ったりして浮気はしたが、それでもやはり扱いやすさなどから好みのメーカーである。

しかし時代は替わる、もうほとんど全てがARM一色となり、全世界的にARMで統一されそうな気配なのである・・
マーケティングをサボり、消費者のニーズに答えてこなかったツケ、小回りの利く体制に出来なかった事が決めてとなり既にジリ貧感が否めない・・
※異論もあろうと思うが、自分にはそう見える。

RXマイコンは、比較的新しいアーキテクチャーである、三菱、日立、が関係を強調するルネサスにあって、各社のリソースを融合した結果生まれたこの新しいマイコンは、パフォーマンス、消費電力、コード効率など、特に組み込み系では非常に魅力的なものとなって登場してきた、価格も安く、性能も満足できる。
SHが好きな自分としては、多少複雑な気持ちなのだが、RXでは、非常に小さな規模から、かなり大きめな規模までを統一されたアーキテクトでカバーできる点が非常に正しいと感じる、リソースを集中できるし、サポートもやりやすい、いくらアーキテクトが優れていても、コストの関係でリソースを割けないと、疲弊してしまうだろう、その点、この「1本のラインで全てカバーできるかもしれない」と言う考え方は非常にシンプルで判り易く、使い手にとってもメリットが大きい。

以前の半導体では、(微細化が進んでいない時代)CISCよりシンプルな構造のRISCの方がメリットがあった、高速に動かす事が容易だったのだが、現在のように微細化が進み、複雑で大きな回路を作れるとRISC/CISCの違いはほとんどなく、CISCでも回路の工夫でいくらでも速度を出せるようになった、それゆえ、コード効率に優れるCISC系ならではのメリットを、小さなマイコンから大規模なマイコンまで反映できる、コンパイラもCISC系の方が効率を出しやすいと思う(まぁこの辺りは多少微妙ではあるけど・・)。

現状では、ARMが得意としている500MHz以上のメディアタブレット系のラインナップが無いが、そのうち出てくるだろう~、今から楽しみである。
※こちらは、デバイス単体よりIPコアが主流だろう・・

日本人だし、日本のメーカーに愛着もあるので、ルネサスさんには是非頑張って頂き、ARM の色を塗り替えるだけの力を魅せて欲しいと思う、アーキテクトが優れているのは疑いが無いのだから、自分も微力ながら応援したい~

------
とりあえず、最近秋月で販売が始まったRXマイコンを使ってみようと思い、SH7125で設計を進めていた部分をキャンセルして、RX6218に交換した、プログラムはSH用にかなり色々作ってきたのだが、ここは乗換どきと考え、リソースを捨てて開発し直す決意をした、また、仮に、少しくらいARMが安くても、現状のRXマイコンの戦略がぶれないのであれば、ARMに流れる必要もないだろう~

SH7125はデバイス単価900円、RX6218は1200円で300円高いが、能力の差があからさまに違う為、今後の事も考えて、切り替えた。
自分が感じた主な特徴は・・
・100MHz動作(165DMIPS)
・512KBバイトのFlashメモリー(100MHzノーウェイト、1000回書き換え)
・96キロバイトのRAM(100MHz動作)
・32ビット単精度浮動小数点演算
・高速割り込み
・当然ながらの豊富なインターフェース(インサーネット、USBなどなど)
・SDRAMインターフェース

こんだけあれば、当分、どんな仕様でも困らないだろうう~


↑この基板は、ブラシレスモーターの制御基板である。

開発環境はKPITからgccの環境を使える。
ルネサスの専用 C も、かなり良さそうなのだが、フリー版はコードサイズに制限があり、正規版を買うコストは払えないので、使えないのと一緒、初めから gcc で行う。
後、JTAGも欲しいとこだが、当面、コスト的に見合わないので、工夫して開発を進める事とする。
※開発したソフトウェアーなどは、オープンソースにする予定なので、興味ある人は利用してもらいたい。
※SH2AやSH7125、AVR関係で作ったリソースは公開済み。

後、痛い点として、まだ、低価格なデバイス付ボードが少ない点がある、デバイスが1200円なら、せめて3000円くらいのボードをリリースして欲しいと感じる、高専でロボットをやってる人もそのくらいの値段なら沢山使ってもらえると思う、ここで沢山使ってもらえれば、高専生が卒業して企業に移った時に威力を発揮できるしね。

電灯のLED化計画(その2)

先日は、LED の発熱に放熱器のキャパが足りないとこで、ペンディングだった、今日アルミなど買い足してきたので、いそいそと切ったり穴をあけたりして早速実験してみたー、今度は容量もかなり大きくなったので、温度上昇も抑えられ、問題無いようだ。
ただ、コストが、@+200円 くらいにはなる感じで、こんな事なら、最初から 250円 くらいで買える大きな放熱器を買えば良かった・・・(まぁ、250円で買える放熱器もそんなに大きいのは無いんだけど・・)

こういうのを「安物買いの銭失いと」と言う事もあるが、今回は50円の放熱器もちゃんと生かしているので、まぁいいか・・・


※2mm×40mmの板を180mm、10mmコノ字アングル90mm、4本

・2mm×40mm×2m → 1150円
・10mmコノ字アングル×2m → @420×2 840円
・工賃、ネジなど → プライスレス


※LED モジュールはネジと端子が当たって、ショートしそうなので、ジュラコンのスペーサーを間に入れておいた。

あと、9個同じもの作らなければ・・・
なんだか、すんごいめんどい・・・・・・・・・・・・・・・

電灯のLED化計画(その1)

以前から、電灯の LED 化をしようと思って、色々準備していたが、ある程度の明るさを実現する為には、かなりのコストがかかる・・、しかしようやくコストが下がり、実用的な値段で、電灯のフル LED 化が可能になりつつある。

現在入手できる白色 LED で、効率と光量が大きく、比較的コストが安い物は、「秋月電子」で売っている。
1Wクラスパワー LED(100ルーメン)
1個300円。
現在のとこ、1Wで100ルーメンが、目安のようだ・・

又、3個モジュールになっているLEDユニット(300ルーメン)
は、1個600円で、コストがさらに安い!

今回は、コストが一番安い3個モジュールになったタイプを10個使って、3000ルーメン(60W電球7個分)で製作する事にした。
※消費電力30W
※420ルーメンで60W電球並(東芝の LED 電球の説明)
※LED の光は拡散しない為、何かリフレクターを付ける必要があるので、光量が落ちる事を考慮して、大き目にしてある、又、LEDに流す電流を制御すればいくらでも、明るさを落とす事が出来るので調整は簡単だ!

パワー LED は明るいのだが、発熱も相当に大きい、最大光量(350mA)で点灯すると、かなり発熱するので放熱が必要なのだが、どのくらいの放熱器が必要か実験してみた。

↑やはり秋月で、丁度手頃な放熱器を安く売っていた(50円)ので、それに取り付け、温度を確認してみたが・・・
この体積では、30分くらいで、85度を超えてしまいそうなので、もっと表面積を大きくする必要があるようだ・・・

材料が無い為、今回はここまで・・・

-----

↑放熱器に穴を空け、3mmのタップを立てる~

9灯LEDライト

秋葉原の千石電商の関連ショップで、LED9灯のライトを安く売ってる(250円)、これは、単4、3本仕様で、コンパクトで、白色LEDライト9灯としては最安値なのではないだろうか?

実家で、ライトを探していたので、購入してみた。

どう考えても強引過ぎる、電池3本ダイレクト点灯は、LEDを痛めてしまい、3本が中途半端な本数で痛い!

以前にも改造したように、リニアテクノロジーLTC3490を使って、単4エネループ2本仕様に改造した。
2本仕様にして、ICによる定電流ドライブだと、安定した明るさを維持でき、エネループなので、充電して再利用もできるのは良いのだが、どうしても、電極を設ける必要がある。
今回は、「リン青銅」の板を買って、電極を作った、だいたいはOKだけど、完璧では無い・・・
たまに接触不良があり、振ったりすると点灯する・・・

ライトのケースはアルミ製で、アルマイト処理がされている為、電極の形状や、接触の仕方を研究する必要がありそうだ・・・

白色LED ランタン

ここ最近は、火力発電所の復活等で、計画停電実施が少なくなった為、使う場面が少なくなっているけど、今後は必要になる事もあろうって事で、自作してみた、白色 LED で痛いのは、光が拡散しない為、光量を上げると眩しくて、ユルイ光源を作りにくい点で、拡散する為のリフレクターも光量を最小限にして拡散するのは難しい・・

そこで、LED に流す電流を抑える代わりに、多くの LED を使ったランタン風 LED ライトを作ってみた。

LED には、以前に大量に買った5mm の砲弾型を36個使って、1個辺り10mA程度(全体で350mA)にしてみた、LED ドライバーには、リニアテクノロジーのLTC3490を使い、エネループ2本で駆動する。

一応、効果はイマイチだが、拡散リフレクターとして、ペットボトルを切って代用してみた。

まず、LED を等間隔に並べる為、5mm厚の低発泡塩ビ板(フォーレックス)に等間隔(10mm)で穴を空け、それに LED をセットして、端子を直接ハンダ付けした。

一つのセルに6個の LED を繋いでいる、それを6組作成。

次に3mm厚のフォーレックスを6角に切り、そこに「セル」を立て、支柱もフォーレックスで作成する。
※フォーレックスは以前にも紹介したが、それなりの強度があり軽く加工が簡単なので、最近は、何でもコレを使っている

ペットボトルから切り出した、拡散リフレクターをかぶせたとこ

光らせるとこんな感じ~

仕上げとして、ペットボトルを止める為のボスを作り、電池や制御回路が入るように底をかさ上げする。

まだ、電源SWなど付けていないが、最終形。

角を削って丸みを付けている、まだ、実験していないが、単三エネループ2本で最大輝度(350mA)で点灯した場合、連続で3時間は点灯する事が出来ると思う。

-----
一時期、電池が売り切れで、何処にも無くなったが、自分は「使い捨て」は「嫌い」なので、以前からエネループを沢山(沢山買うと安い)保持していた、エネループは自己放電も少なく、全体のコストは安く、容量も大きいので、かなりお勧めな充電池と言える、リモコンなどは消費電力が少なく、普通にアルカリ電池買った方が安いと言う人もいるが、ある程度沢山買うと、色々な物で共有でき、単価も下がるので、長い目で見ると、エネループに歩があると思う。
電灯などは、それなりに消費電力が大きいので、容量の大きい充電池にはピッタシのアプリケーションであると思う。

そのうち、太陽電池でエネループを充電するシステムでも作ってみたい。