Visual Studio と C++は、教育分野の癌

先生からの依頼で大学生が作る制御プログラムの参考となるサンプルプログラムを作っています。

通信回線を経由してロボットを動かすプログラムで、開発環境が大嫌いなVisual StudioとCPPなのです。
多くの大学では、Windows上で動くプログラムならVisual Studio & C++が基本という信仰がまだまだ残っているようで、ロボット制御でも、学生はVisual Studio+CPPで、プログラミング学習をしています。

Visual Studioを使う話など、他からの依頼なら頭からお断りする話なのですが、お世話になっている先生で学生もその環境しかわからないということなので学生とやりとりをしながら短いサンプルプログラムを作っています。

Visual Studio と C++は、教育分野の癌

その過程で痛感したのはVisualStudioとC++のせいで学生の学ぶ機会が、いかに浪費されているかということです。

Visual Studioプロジェクトの複雑さが癌

Visual Studioで新規プロジェクトを作ろうとすると、多くのプロジェクト形式が表示されます。
言語をC++だけに絞ってもコンソール、GUI、NETなど、初心者はどれを選んだらよいものか戸惑います。
 選択した新規プロジェクトでゼロからプログラムを書いていくなら問題は発生しませんが、プログラミングに不慣れな学生の場合、どこかで見つけてきたサンプルプログラムを切り貼りしようとすると、たちまち意味不明なエラーが発生して途方に暮れることになります。

テキストのコード変換の複雑さが癌

ロボット制御ではLANやシリアル回線を使ったPCとロボットとの通信に関する理解が不可欠な要素です。
制御プログラムを学び始めた学生は、PCプログラムの変数と通信ラインを流れるデータを区別して考え、データの変換をどのようにプログラムするか良いかを考えるところから始める必要があります。
 昔、通信回線が低速だった頃は数値を送るときに高速化のために、バイナリデータをそのまま流そうとして様々なプロトコルが考え出されました。
通信回線が高速になった今では、殆どの場合数値を1文字1バイトのASCII文字列(=char配列)にして送るようになっています。
数値を文字列で表現するのは解りやすくて良いのですが、入門編ではprintfではなくこれがC++の格好いい書き方ですよとばかりに、ストリームを使ったサンプルばかりが紹介されるようになりました。

#include <iostream>
using namespace std;

int main()
{
  cout << "Hello iostream" << endl;
  return 0;
}

ストリームで使われる文字列は多言語対応のためchar配列と互換性がないのでコンソール出力したデータを通信回線に送ろうとするとエラーが発生して、初心者を悩ませることになります。

解決のためには、C++の標準文字列strをchar配列に変換すれば良いのですが、C++のクラスが言語の構造を意味もなく隠蔽しているせいで、よほど頭が回る学生でない限り挫折してしまうことになります。

Visual Studio と C++は既に死につつある無駄に複雑な言語パラダイムで学生の足を縛るだけ

ほんの10年前までは、「Visual Studio と C++ でGUIプログラムを書けるのが真のプログラマだ」と勘違いの主張をする人が結構いました。

私や会社の仲間は、Microsoftに無駄な忠誠を誓うつもりがないので Visual Studio & C++ より一桁効率よくGUIアプリケーションの開発が出来るDelphiやC++ Builderを使いましたが、それらの開発環境も既に歴史の波に飲み込まれつつあり、マルチプラットホームを対象としたオープンソースの開発環境が主流になりつつあります。

プログラム資産として大切なのは、言語構造ではなく高度な処理を簡単に使えるようにしてくれるライブラリです。
今では名前しか聞くことがなくなったFORTRANで書いた膨大なプログラムも他の言語に変換あるいは他言語でラッピングしたライブラリとして今も活躍しています。
C++は比較的新しい言語なのでさらに多くの有用なC++で記述されたプログラムがライブラリとして活躍していますが、C++は初心者が学んでためになる言語ではなくなりつつあります。

そのようなC++と、無駄に複雑なVisual Studioを学生に学ばせて、ただでさえ優秀なプログラマが不足している日本で、活躍するかもしれない若い芽を枯れさせてしまうのは,実にもったいないことだと思うのです。

 

Seeed studioの基板実装サービスを使ってみた(続)

Fusionの基板作成お試しサービス

Seeed studio の基板作成サービスFusionでFree Assembly for 5PCBsという実装お試しサービスをやっています。

$4.9で基板作成+部品実装までやってくれて、部品を実装した基板を送ってくれるというものです。
利用できるのは一度だけ、基板サイズ100×100㎜以内の2層基板で、部品が20種類以下という条件で、Seeedの在庫部品だけを使えば実働3~4日で出来上がるという謳い文句です。
部品代は別途必要ですがチップ抵抗やコンデンサ等はDigikey価格よりかなりお安くなっています。

実装済み基板5枚限定のサービスですが、基板の種類が1種類で100x100㎜以内に収まるようにすれば面付可能で、部品点数の制限は無いみたいなので、小さい基盤なら20枚、50枚の基板を特価で作ってみることも可能だと思います。

基板実装サービスを試してみた、その後

最初に実装してもらったこのSTM32H753VIT6を搭載したボードは、5枚の内1枚に半田不良があり、半田ゴテをあてて使えるようになりました。

国内で部品実装を依頼するのに較べれば信頼性は劣りますが、設計データだけで実装済みの基板が安く入手できるので、その後何度か利用しました。

簡単な基板は40枚で不良無し

USBシリアルICとコネクタ、少量のチップ部品が載った組み込み用USB-serial基板の場合は40枚(面付4×10枚)作ってエラーはありませんでした。
小さいチップ部品のはんだ付けは良くできているのでピン数の多いフラットパッケージの場合に問題が起きやすいようです。

OPL部品だけを使うと1~2週間で完成基板が届く

OPL部品というのは、Seeedが保有する在庫部品でShenZhen OPL( 22380 )Seeed OPL( 641 )と結構な数があり、簡単な基板をこの部品だけで作ると実働1週間程度で基板から実装までやってくれます。
上の基板の場合は注文から10日で届きました。

最初に実装したSTM32H753基板の修正版

最初に5枚作った基板をテスト段階で2枚壊してしまったのと、もともと基板の必要枚数を過少に見積もっていたので回路を修正した基板を10枚実装してもらいました。

この基板はOPL外部品を使っていますが、注文から3週間あまりで届きました。
Seeedの込み具合で納期にはかなりばらつきがあるようです。

10枚の内3枚に半田不良あり

予想はしていましたが、届いた基板をテストすると10枚のうち3枚が半田不良で正常に動作しない状態でした。
前回と同じく、CPUのピンにフラックスを塗って半田ごてをあてただけですべて復活しました。

顕微鏡の接眼レンズにiphonのカメラをあてて写真を撮ったのであまり鮮明ではありませんが、肉眼で見るとピン端の影ではなく明らかなクラックが確認できました。

中華メーカーに実装を依頼することの是非

短所
1. 国内メーカーに比べて信頼性が劣る

 数少ない経験ですが「どんな基板でもトラブル無し」を期待することはできません。ただ、Seeedの格安サービス以外なら信頼性は良くなる可能性はあります。

 私の印象では、思ったよりは悪くなかったというところです。
少なくとも回路評価用の試作基板としては十分使えました。

2.トラブルがあった時の意思疎通が難しい

まず言葉の問題がありますし、向こうの人は日本メーカーのように最初から低姿勢で話を聞いてくれるわけではありません。
問題を具体的に証明してきちんと話をすれば対応してくれる可能性がありますが、それなりの労力が必要となります。

長所
1.ハード設計が出来れば個人でも完成基板を入手出来る

これが一番大きなメリットではないかと思います。
KiCADを使えば個人でも回路設計から基板設計まで出来て、Seeedの格安基板サービスを使えば数千円で基板を入手できる時代になり、マイクロマウスや自作ロボットを作れる人は結構利用していると思うのですが、今度は実装メーカーとの接点がなくてもクレジットカードさえあれば完成基板が作れるようになったわけです。

個人経営の会社でハード設計をしている人にとっては朗報だと思います。
誤解を招く表現なので言い換えておきます。
試作段階のテスト用に使えば正式な基板を作るまでのコスト削減が出来ますし、顧客に実際に動作する見本を提供できるということです。
信頼性に問題があるということをはっきりと説明して、必要に応じて実装の依頼先を変更しさえすれば開発コストの低減と信頼性の確立を両立できます。

工業高校などで使われる教育用基板では生徒にはんだ付けの実習をさせる都合上フラットパッケージ部品の使用を避けることがありますが、このような実装サービスを利用すれば先生が設計した回路を直接基板化できますし、もともと信頼性は問題にならない分野なので特に有用です。

2.大量生産も可能

私の会社は工場の設備や特殊な検査機器を開発しているので、つきあいのある実装屋さんは小ロット専門で、数千枚以上の完成基板を作るのは不得意です。
Seeedのオンライン見積もりなら1万枚以上の基板を作るときの原価を確認するのも簡単です。

最近、Arduino用ならAlexpressやAmazonで数百円の基板が販売されていて、どのようにしたらあんなに安い基板が作れるのだろうと不思議でしたが、例えばUSB―Serial基板を1万枚作る場合の見積もりを取ってみると3万ドルあまりの見積額になります。

1枚あたり300円台ですから1000円前後で売れれば採算は取れる計算になります。
投入した資金を回収できるかどうかは博打のようなものですが、中国の会社のビジネスモデルを少し理解できたような気がしました。

ただし、これも不良品が一定の確率で混ざっていることが暗黙の了解になっている、格安基板を対象としたビジネスであることが前提です。

 

Seeed studioの基板実装サービスを使ってみた

Fusionの基板作成お試しサービス

Seeed studio の基板作成サービスFusionでFree Assembly for 5PCBsという実装お試しサービスをやっています。

$4.9で基板作成+部品実装までやってくれて、部品を実装した基板を送ってくれるというものです。
利用できるのは一度だけ、基板サイズ100×100㎜以内の2層基板で、部品が20種類以下という条件で、Seeedの在庫部品だけを使えば実働3~4日で出来上がるという謳い文句です。
部品代は別途必要ですがチップ抵抗やコンデンサ等はDigikey価格よりかなりお安くなっています。

実装済み基板5枚限定のサービスですが、基板の種類が1種類で100x100㎜以内に収まるようにすれば面付可能で、部品点数の制限は無いみたいなので、小さい基盤なら20枚、50枚の基板を特価で作ってみることも可能だと思います。

基板作成お試しサービスを使ってみた

最初はおっかなびっくりだった中国基板メーカーでの基板作成にはすっかり慣れましたが、部品実装まで依頼するのは品質、依頼方法を含めて抵抗があったものの、新し物好きの私としてはこの機会を逃す訳にはいかないので、ちょっとした基板を頼んでみました。

作ったのは4層基板で部品点数も56種類でしたが、その時(2019/6)の時点では部品点数の制限がなくアセンブリイニシャルはサービスで5枚/4万円程度の価格でした。一昔前なら4層基板のイニシャルだけで5万円は軽く超えていたのですから基板の価格破壊はすさまじい勢いです。

国内の基板メーカーには苦しい状況ですが、開発の仕事をメインにしているものにとってはありがたい限りです。

注文したのが6/14で届いたのが8/2ですから1.5か月かかりました。

 

基板実装の品質について

プリント基板そのものは、Seeedの格安基板サービスでも国内メーカーの基板と変わりません。これは基板の材質が標準化されていることと、中国の基板メーカーはPCのマザーボードのような高密度基板を作る設備を導入していて、基板の品質に及ぼす人為的な要素が少ないためだと思われます。

しかし、基板の実装品質においてはまだオペレータの質が影響する部分が大きいので中国メーカーへの依頼は不安がありました。

5枚のうち1枚が半田不良で動かず

届いた基板に電源を入れて、テストしたところ5枚のうち一枚がstm32H753VIT(QFP100ピン 0.5mmピッチ)の半田不良で動作しませんでした。
ただし、QFP100の足にフラックスを塗って半田ごてを軽くあてて補修しただけで復活しました。

以前QFP240のFPGAが載った基板を国内メーカーで実装してはんだ付け不良による不具合が多発して苦労したことがあるので、ピン数が多いFPGAの半田付けは条件的に難しいのだろうと思いますが、国内メーカーの実装で200ピン未満のQFPで半田不良によるトラブルは経験したことがありませんから、やはり国内メーカーとの品質差は大きいと感じました。

ただし、この基板は初めて使う大容量のスイッチング電源ICとSTM32Hシリーズのテスト的な意味があり、回路設計上のミスを発見して修正する段階で2枚壊してしまいましたから実装の半田不良は特に問題ではありませんでした。

もしかしたら部品の付け間違いもあるかもしれないと思っていましたが、そのようなことはなく、良い方向に期待を裏切られた面もあります。