モノ創りで国造りを

ハード/ソフト問わず知見をまとめてます

技術士試験 2019 を受けてきた!

ついにやってきた技術士試験

いやー、もーね、ほんとね、4月に願書出して、数ヶ月間
全く持って勉強しなかったわけですよ。
でも流石にノー勉はまずいと思って、試験前日に一夜漬けで勉強したわけですよ。
いろんな技術を深掘りして、ノートにあれこれまとめて。
でもね。

いざ蓋を開けてみたら、勉強する必要ほぼなかったなと。
例えば、1問目は人口減少に関する将来の課題と技術的な対策方法について小論文を書くわけですが
これ技術知らなくても書けるだろと。
新聞読んでるような人は誰でも書けるんじゃないかと。

で、2問目が技術に関するものだったわけだが、
4つのテーマから一つ選べばいいんだけど、
自分の知ってる技術領域が一個でもあればなんとかなるわけで。
幸い何個か知ってる技術領域の問題があったら難なくクリアしたわけです。

3問目はこれまたテーマの選択なんですが、今度は2つしかテーマがないわけです。 選択するテーマは、可視光通信RFIDについてでした。
でもその分野について十分に知識がないと書けないかというと、そういう問題でもなく、
仕事の進め方とか、判断方法とか、実務に関する内容を記述させる問題で、
実際私はRFIDのプロでもなんでもないんですが、
わずかに読みかじった程度の知識で文章を書きまくりました。
ざっくりでも知識がある分野の問題ならなんとかなる感じでした。

最後も2つのテーマから選択する方式でしたが、
これまたざっくりとした設問で、特定の領域を深く把握していなくても書けるような問題でした。
テーマはユニバーサルデザインとスマート農業。
これも新聞読んでりゃ書けるだろと。

ただ、これだけ生意気を言ってますが
多分受かってないと思います。
というのは、小論文を書くことに慣れておらず、
時間配分も謝ったので、後半になるに連れて文章が雑。
あと字がめちゃくちゃ汚い・・・

受かってもない私が言うのもおこがましいですが、
技術士の勉強をされる方は、技術の勉強よりも、
小論文の書き方を勉強した方が良いです。
あと新聞を読みましょう。

BLEモジュールRN4870/71の使い方まとめ

BLE通信モジュール RN4870/71

RN4870/71はMicrochip社製のBLEモジュール。
f:id:yuji2yuji:20190712105309p:plainf:id:yuji2yuji:20190712105327p:plain
技適取得済のモジュールなので、機器に埋め込んで使用できる。
RN4870/71はGPIO、ADC、I2C、UART、SPIが使用可能。
加えてスクリプトモードでスタンドアローンに動作できる。
スクリプトモードは、事前に動作させたい内容をBLEモジュールに記録することで、
例えば電源ON後や通信接続後などに実行したい操作を自動で行わせられる。
この機能を使用することで、簡単な操作であれば、Hostコントローラーが不要になる。 ブロック図は以下。
f:id:yuji2yuji:20190712105441p:plain

モジュールによって使用可能な機能とピン数が異なる。以下の通り。

機能 RN4870 RN4871
GPIO 4 2
ADC 5 2
I2C 1 1
UART 1 1
SPI 1 0

*GPIO、ADC、I2Cのピンは兼用。

RN4870は多機能だがサイズが大きい。RN4871はサイズは小さいが機能が少ない。
目的に応じて選びましょう。

RN4870 RN4871
サイズmm 12 x 22 9 x 11.5

とにかく簡単に使う

Bluetoothは生活になじみ深いので、使い方も把握しているつもりだったが、
いざモジュールを使うとなると、
GAP、GATT、Advertisement、UUIDなどなど
前提知識が色々必要でちんぷんかんぷん。

各用語は他人様の記事で勉強するとして、
ここではデフォルト状態の2つのRN4871モジュールを通信させるための
必要最小限の手順を書く。

実現したいこと:
CentralモジュールをPCで操作して、PeripheralモジュールのAD値を取得する。
* 通信モジュールはCentralとPeripheralに分類される。
* いわゆるMasterとSlave、HostとClientの関係。

手順の概要

必要な手順は以下の通り。

  1. PeripheralのMACアドレスを把握する
  2. Peripheralが自分の存在を周囲に発信する(Advertisement)
  3. Centralが特定のMACアドレスを持つPeripheralをスキャンする
  4. 接続後、Centralをリモートコマンドモードに変更
  5. PeripheralのAD値を取得する

PeripheralのMACアドレスを把握する

  • PeripheralとPCをUART接続する。
  • コマンドモードへ移行するため $$$と入力する。
  • ECHOをONにするため+と入力する(やらなくてもよい)。
  • 詳細情報を取得するため、Dと入力する。
  • BTA=xxxxxxxxと表示されるので、このxxxxxxxxをメモする。

Peripheralが自分の存在を周囲に発信する(Advertisement)

  • 電源を接続すると自動で実行される。
  • Interval時間や送信強度などを変更することで電力を抑制できるが、
  • ここでは割愛。

Centralが特定のMACアドレスを持つPeripheralをスキャンする

  • CentralとPCをUART接続する。
  • $$$と入力しコマンドモードに移行する。
  • +でECHOをON。
  • C,0,xxxxxxxxと、先ほどメモしたMACアドレスを入力し特定のモジュールをスキャンする。
  • 接続されたら再び$$$でコマンドモードにする。
  • Bと入力し接続をSecureにする。

接続後、Centralをリモートコマンドモードに変更

  • SS,C0を入力し、UART Transparentモードに移行する。
  • !,1と入力し、リモートコマンドモードへ移行。これでCentralへのコマンドが全てPeripheralへ送信されるようになる。

PeripheralのAD値を取得する

  • @,4でPeripheralモジュールの消費電流のADC値を取得する。
  • @,5でPeripheralモジュールの温度センサのADC値を取得する。

UpBoardの各IFの使用方法

UARTの使い方

UpBoardのピンアサインは以下の通り。
f:id:yuji2yuji:20190625131019p:plain
コネクタのPin8がUARTの送信、Pin10がUartの受信に使用するピンです。

UARTの受信

UpBoardでUARTを受信できるか確認するため、ArduinoからUARTを送信しUpBoardで受信してみます。
ボーレート以下で設定します。

$ stty -F /dev/ttyS1 115200

*ピンマップにはttyS4と記載されていますが、それはUbuntuなどの場合
*ubilinuxだとttyS1が正しいようです
UARTで受信したデータは以下に保存されます。

$ /dev/ttyS1

データをリアルタイムで確認するならcatコマンドを使用します。

$ cat /dev/ttyS1

Arduinoのプログラムは以下です。

void setup() {
  Serial.begin(115200);
}

void loop() {
  Serial.print("Hello world\n");
}

UARTの送信

次はUpBoardからArduinoにUART送信してみます。

$ echo "Hello world" > /dev/ttyS1

と打てば、Arduinoのシリアルモニターに文字が出力されます。
Arduinoのプログラムは以下。

void setup() {
  Serial.begin(115200);
}

void loop() {
  char inputchar;
  inputchar = Serial.read();
  if(inputchar != -1 ){
    Serial.print(inputchar);
    delay(200);
}

UpBoardとArduinoを接続し、上述のcatコマンドを実行することで、
ターミナル上にHello Worldが出続けます。

I2Cの使い方

UpBoardでI2Cが使えるようにするため、以下のコマンドを実行しましょう。

$ sudo apt install i2c-tools

UpBoardのI2Cは、i2c-0とi2c-5の2つあります。
i2c-5に接続されるデバイスのアドレスを検出するには、以下のコマンドを実行します。
sudoでないとコマンドが見つからないので注意。

$ sudo i2cdetect -r -y 5

I2Cデバイスに以下のデータを送りたい場合、
 送信するデータ:0xFF, 0xF0
 レジスタのオフセット: 0x40
 アドレス:0x60
実行するコマンドは次の通り。

$ sudo i2cset -y 5 0x60 0x40 0xFF 0xF0 i
  • Arduinoと接続して動作確認を試みましたが、まだうまくいってません・・・

UpBoard使い方まとめ

在庫管理がうっとおしい

モノを色々作っていると、部品の在庫管理が面倒になってきました。
在庫管理は一つ間違うと最終製品の納期遅延につながるし、さらに経理とも絡むので厄介です。
今までは頻繁に個数をチェックしてましたが、部品数が多くなるにつれて時間かかりすぎる。
部品の在庫管理を自動化したい!というモチベーションで、システムを構築することにしました。

在庫管理システムの概要

在庫管理したいモノを大きく分類すると以下のようになります。

重さ\増減 多い(10個以上) 少ない(10個未満)
重い(1g/個以上) A: ネジ、ナット B: Assy品、モジュール品、大きい電子部品
軽い(1g/個未満) C: 汎用の電子部品 D: 用途が限定される電子部品

在庫を自動で管理するために、 Aは重さで個数を管理したいと考えました。
質量計から箱の質量を差し引き、予め入力された1個当たりの質量から自動で個数が算出されるようにします。

その他は、箱に取り付けたスイッチ付きのデバイスで管理したいと考えました。
箱から部品を取り出したら、個数をデクリメントし、箱に部品を入れたら個数をインクリメントします。

データをGoogleスプレッドシートに表示することで、在庫数の確認や発注手配のアラートが出せたりします。
f:id:yuji2yuji:20190625112340p:plain

Rasberry Piより高機能なUpBoard

基板は自作すると一個あたり1,000~1,500円くらいです。
各基板に電源ケーブルを接続するのはイケてないので、電池駆動式にします。
省電力化が重要になります。

各基板のデータを収集しスプレッドシートに抽出する母艦はRaspiで開発するつもりでしたが、
余っていたUpBoardを使う事にしました。

UpBoardは使った事がないので、セットアップ含めて使い方を以下にまとめていきます。

UpBoardのセットアップ

まずはISOを書き込む必要がありますが、とりあえずubilinuxを使用します。
ubilinuxは組み込みLinux用のディストリビューションです。
これを使っておけば、UpBoardのGPIOが簡単に使用可能です。
注)そこそこなメモリがあるので、Ubuntuも使えますが、
GPIOを簡単に使うためには別途カーネルを差し換える必要があるので面倒

1: emutexのHPからubilinuxをダウンロード
2: Rufusをダウンロード
3: RufusでUSBにイメージを書き込む
設定は以下の通り。
f:id:yuji2yuji:20190625113748p:plain

4: USBと優先のキーボードとHDMIをUpBoardに接続する
5: UpBoardに電源を接続する
6: UpBoardが起動するので、ubilinux installer UEFI CD (interactive)を選択する(上から二番目) 7: インストール完了したら、電源抜いて再起動する
8:パスワードを聞かれるので"ubilinux"と入力し起動する。

これで使用できるようになりました。

とりあえずLチカ

GPIOを使えるように以下をターミナルに打ち込みます。

$ sudo apt update  
$ sudo apt upgrade
$ sudo apt install python-rpi.gpio

スクリプトscript.pyを実行する場合は以下のコマンドを打ちます。

$ sudo python script.py

UpBoardのピンアサインはラズパイと互換性があります。
ラズパイのピンアサインは以下の通りです。
f:id:yuji2yuji:20190625131019p:plain
1ピンの位置は基板上の▽マークで記載されています。

GPIOでLチカするために、以下のスクリプトを記載します。
こちらを参考にしました。

import RPi.GPIO as GPIO
import time

LED1=14
LED2=15
GPIO.setmode(GPIO.BCM)
GPIO.setup(LED1, GPIO.OUT)
GPIO.setup(LED2, GPIO.OUT)

flag = 1
while True:
    GPIO.output(LED1, flag)
    GPIO.output(LED2, flag ^ 1)
    flag = flag ^ 1
    time.sleep(1)

14ピンをLED1という名前に割り当てます。
15ピンをLED2という名前に割り当てます。
GPIO.setmode(GPIO.BCM)で役割ピン番号モードに設定します(上図のLinux GPIOの番号を使用する)。
* 基板のピン番号に設定したい場合はGPIO.setmode(GPIO.BOARD)とします。
GPIO.setup(LED1, GPIO.OUT)でLED1をGPIOの出力として使用する設定にします。
GPIO.setup(LED2, GPIO.OUT)でLED2をGPIOの出力として使用する設定にします。

while True:で以下を繰り返すようにします。
1: GPIO.output(LED1, flag)でLED1の出力をflag(1で出力H、0で出力L)にします。
2: GPIO.output(LED2, flag ^ 1)でLED2の出力をflagの反転にします。つまりLED1の逆になります。
3: flag = flag ^1 でflagを反転させます。
4: time.sleep(1)で1秒間待ちます。

これで「LED1が点灯/LED2が消灯」=> 「LED2が点灯/LED1が消灯」を
1秒ごとに繰り返すようになります。

UpBoardとGPIOの使い方まで理解できました。
次はUARTとI2Cを使ってみようと思います。

技術士二次試験(電気電子)での気になるワードまとめ

要把握なワード

製品・経済系

EV車
人工衛星
火星探査機
ロケット
ドローン
ロボット
水中ロボット
農業ロボット
パワーアシストロボット
オプトエレクトロニクス
データセンターとハードウェア
タッチパネル
3Dプリンタ
エレクトロニクスとスポーツ
IoT
VR
AR

開発系:

安全設計(フェールセーフ、フォールトアボイダンス、フォールトトレランス)
FMEA

回路系:

ブラシレスDCモーター
センサレスモーター制御
モータードライバ
PLL
マイクアレイ
USB Type-C
HDMI
ボード線図
FRA
AMとFM
制御理論
ミリ波レーダー
5G
無線充電

素子・部品系:

ダイオード
MOSFET
SiC
FPGA
ASIC
マイコン
ADコンバーター
DCDC電源
LDO
CMRR
PSRR
入力換算ノイズ
ノイズフィギュア
半導体プロセス 7nm
GPU
コモンモードノイズ
TVS
バリスタ
ESD
有機LED
オペアンプ

センサ系:

臭気センサ
サーモセンサ
MEMSセンサ
触覚センサ
圧力センサ

計測器系:

オシロスコープ
電子負荷
スペクトラムアナライザ
安定化電源
電流クランプメーター
マルチメーター(アナログ/デジタル)

AI・ロボ系:

AI
RPA
画像認識
音声認識
SLAM(自律移動)
LiDAR
自動運転
ADAS

政策系:

RoHS
水素燃料
太陽電池
リチウムイオン電池
鉛畜電池
全固体電池
メガソーラー
FIT(固定買取制度)
水車(らせん水車)
バイオマス発電
AEC-Q100/AEC-Q101
風力発電(洋上風力) マイクログリッド

令和元年の技術士試験をうけるぞー!

!?・・・次試験内容が・・・・・・、変わった・・・?

特に理由もなく技術士になりたいと思ってかれこれ数年。
3年前に技術士一次試験を受けて、見事合格し、その翌年には二次試験を受ける気満々だったのに
子供生まれたり転職したりで仕事もプライベートも忙しすぎて、申し込みすらできず。
その翌年(昨年)も仕事がブラックで、身動きとれず。

でも勉強はちょこちょこっとしてたんですよね。
通勤時間に、電車の中で、択一式の問題解いて。

で、家庭も仕事もそこそこ落ち着いて、今年は受けるぞーと思ったんですが ・・・

技術士二次試験筆記試験内容
技術士二次試験筆記試験内容

んー?んんー!?択一式がない? これ総監の試験内容かと思ったけど、"総監を除く"なので、通常の技術部門の試験内容で間違いないよな・・・

・・・試験の内容が・・・・・・、・・・変わった・・・?
試験内容が変わった

ここ鉛筆で文章なんて書いてないのに、計5時間30分も文章を書き続けるのですか。
途中で書きたい内容が変わったら、全部消しゴムで消すんですか。 そんなことしたら用紙が真っ黒になってしまうのでは。
力加減を誤ったら、用紙が破れてしまうのでは。
消しゴムにシャーシンを埋め込むいたずらをされたら、消せば消すほど用紙が汚れてしまうのでは。
右手の小指側も真っ黒になるのでは。
終わるころには、腕がパンパンになるのでは。

変更一回目で過去問あるのかとか、採点基準はとか色々と不安はありますが、がんばります!!

日々学んだことを忘れないようにブログに書いてこ。

大手からベンチャーへ転職してから2ヶ月経っての感想

この記事は転職しようかと悶々とされてる方のために
少しでも参考になればと思い書きます。

転職時のブログは↓
yuji2yuji.hatenablog.com

大手企業から転職して二ヶ月経ちました。

簡単に自己紹介ですが
・理系の大学院卒
・ハードウェアエンジニア
・年齢は30代前半
・妻子持ち(子供は0歳と1歳の二人)
・マイホーム購入したばかり(ローン3000万)
・貯金1000万
・転職理由は、自分の仕事が世界の進歩に貢献してない気がするから

前職の会社の状況は
東証一部上場の誰もが知ってる大手企業
・人間関係は良好
・労働時間は、残業月平均40時間(電通事件によって、さらに改善中)
・通勤時間はドアツードアで1時間弱
・給料は750万弱

転職後の会社は
・社員数30人未満のベンチャー
・人間関係は良好
・労働時間は残業月平均50時間(裁量権が強く、人による)
・通勤時間はドアツードアで1時間40分
・給料は600万

転職について現在の心境は、「転職してよかったー!!」です。
前職のつまらない仕事をなぜ何年間もやってたのか不思議。
前職のの閉塞感を思い出すと反吐が出ます。
前職のみんなに転職を勧めたい位です。
これは転職サイトのステマではありません。本当に本心からの言葉です。
転職最高。エブリバディ、レッツ転職。

自分自身、特に変わったなと思ったのは、他人に嫉妬しなくなったこと。
例えば有名人の収入や株で儲けたとかそういった話を聞くと
昔は楽して稼ぎやがって、とか、どうせすぐ大損するさってかしろといった
嫉妬心が強かったのですが
最近では他人のそういった羨ましい事に対して特に何とも思わなくなりました。
自分の意志に従って決断し行動するというだけで、ここまで心境が変化するのかと驚いています。
今までは自分の人生はどこかで人が操作していて
運が良かったり悪かったりするといった考えが頭の片隅にあったのかもしれません。
自分の意志に従う。転職によってようやく自分の人生が始まったような気さえしてます。

ちょっとポエム入りましたが、自分の転職が成功と思えるのは
転職先の社員がみんな非常に優秀だからというのが大きいです。
正直なところ、転職前は大手で何年も働いたしベンチャーなんて余裕だろと
舐めてかかってましたが、いやはや日本のトップ集団は本当にすごい。
*東大・京大・東工大の博士が多数在籍。
好奇心旺盛で吸収力は高く思慮が深い。
自分が働いてる間、彼らも当然働いていたわけで
ポテンシャルを考慮すると自分が負けているのは当たり前と自分自身をフォローしてます。
自分は大手だったが故に仕事内容は狭く深くに加えて雑用多数だったので
ベンチャー特有の幅広い仕事をこなしてきた彼らは、複数分野の知識があり驚くとともに
今まで自分は何してたんだと、くだらない仕事させやがってと無為に過ごした時間を後悔してます。
そしてみんな、優秀が故に性格が良く人間性が高い。美人は性格も良いのと同じです。

最後にもう一度。
転職最高。エブリバディ、レッツ転職。

以上が総括。以下は蛇足。

転職前に一番不安だったのは通勤。
早起きすることで座席を確保し読書、勉強、たまに睡眠と有効利用してます。
給料は下がりましたが、生活する上で何ら問題なし。貯金も出来てます。
ちょっと不安だった嫁の機嫌ですが、今まで以上にフォローしてくれてます。
前職は安い社食があったので、転職によってご飯代が少し高くつくようになりましたが
社食はレパートリーが少なく美味しくもなかったので、今の方が満足。

転職最高。エブリバディ、レッツ転職。