スクラッチ&スクラップ

簡単なプログラミングや電子工作など。しょうもない工作の記録。

第二種電気工事士に挑戦します

f:id:macrochelys99:20210606034700j:plain
仕事で必要とか、将来そういう職を目指すというわけでもないのですが、以前から興味があったので挑戦することにしました。
コンセント、照明器具など住宅の電気設備の工事に必要な資格です。

探偵さんが盗聴器調査の仕事を受けた時、壁の中(コンセントの裏)に仕込まれた盗聴器を取り外す処置に必要なので電気工事士の資格を持っているという話も聞いたこともあります。

1.まずはどんな問題が出題されるのか過去問を見てみる

筆記試験対策 | 第二種電工試験の虎

「電気の基礎理論」は17問中15問正解、「複線図」はチンプンカンプン。その他は7割ぐらいでした。4択なので知らなくてもある程度絞り込めた感じ。

2.セミナーのサンプル動画を観る

第二種電気工事士 筆記・技能講習会|日本エネルギー管理センター

講座の一部をサンプルとして公開してくれてあったのですが、これだけでも参考になりました。

  • 複線図を描くために4色のフリクションボールペン(消せるボールペン)を用意すると良い。以前は試験に持ち込めなかったが解禁になった。

  • 天井裏の隠蔽配線は多いので描きやすい直線、露出配線は少ないので破線。(機械製図だと見えない所を破線で描くので疑問だった)

  • CD管は Combined Duct の略だが コンクリート・ダイレクトと覚える。PF管より安いが耐燃性が無いのでコンクリートに埋め込んで使う。

複線図も何とかなりそう

第二種電気工事士|複線図の書き方のコツ | 第二種電気工事士|技能試験対策|少人数制実技講習会実施の【ECQ】
チンプンカンプンだった複線図も、ここを読んだらすんなり理解できるようになりました。
セミナーを開いている会社のサイトだけあって解りやすい。サンプルの動画や解説だけつまみ食いしてる感じが、デパ地下の試食を回って昼食済ませてるみたいで申し訳ないです。

3.教材購入

テキスト

巻末の『丸暗記ノート』がとても良い。覚えなきゃならないところがうまくまとまっていて、自分でノートを作る必要がなさそう。
2021年版 ぜんぶ絵で見て覚える第2種電気工事士筆記試験すい~っと合格 | 藤瀧和弘 |本 | 通販 | Amazon

工具セット

手持ちで足りないのはスリーブ用の圧着ペンチだけなんだけど、セットで揃えたくなるよね...。
Amazon | ホーザン(HOZAN) 電気工事士技能試験工具セット 基本工具+P-958VVFストリッパー DK-28 特典ハンドブック付 | 工具セット・道具セット

練習用材料

Amazon | 準備万端シリーズ (2回練習分) 第二種電気工事士技能試験練習用材料「全13問分の器具・電線セット」 (2021年度版) | 準備万端シリーズ | オーディオテープ
合わせて 3万5千円。けっこう重いし場所をとります。
f:id:macrochelys99:20210606033728j:plain

筆記試験は10月

筆記試験まであと半年。筆記試験に合格したら技能試験が12月。
内容もわりと楽しいのでモチベは続くはず!
教材高かったし無駄にしたくないし

ステッピングモーターのしくみ

f:id:macrochelys99:20210216231417j:plain
ステッピングモーターがどのように動いているか訊かれたので、解説を試みます。

ステッピングモーターとは

軸の回転角度を制御できるモーターです。身近(?)な例ですと3Dプリンタに使われていますね。軸にスクリューシャフトやプーリーを接続して位置制御に使われる事が多いです。


ステッピングモーターでぬいぐるみ回して遊んでた時の記事
macrochelys99.hatenablog.jp


構造

中央に回転する永久磁石があり、その周りを2系統のコイル(電磁石)が囲んでいます。
図の赤線で示した端子①-③の系統と、青線で示した②-④の系統です。
f:id:macrochelys99:20210216221426p:plain


ここでは説明のため、コイルに時計回りの電流を流したらN極、反時計回りに電流を流したらS極になると仮定します。
f:id:macrochelys99:20210216222225p:plain


端子の①を HIGH、③を LOW にすると、コイルは1個おきにN極とS極に励磁されます。
f:id:macrochelys99:20210216222516p:plain


①を LOW、③を HIGH にすると、各コイルの極性は逆になります。
f:id:macrochelys99:20210216222759p:plain

もう1系統のコイルも、②ピンと④ピンの HIGH/LOW により同様に励磁できます。


中央の永久磁石とコイルの磁力により、反発や吸引により永久磁石にトルクが発生します。
f:id:macrochelys99:20210216223419p:plain


1相励磁(フルステップ)

コイルの半分は休止状態です。
f:id:macrochelys99:20210216223646g:plain


2相励磁(フルステップ)

全てのコイルに電流を流しています。消費電流は1相励磁の2倍になります。トルクも多少アップします。
f:id:macrochelys99:20210216224037g:plain


1-2相励磁(ハーフステップ)

1相励磁と2相励磁を交互に挟みます。1ステップあたりの回転角は半分になるので、ハーフステップとも呼ばれます。
f:id:macrochelys99:20210216224008g:plain


脱調

速く回しすぎたり負荷が大きすぎると、永久磁石が電磁石の切り替えに付いてこれなくなります。これを脱調といいます。
「ゴッ、、ゴッ、、ゴッ、、」という音と共にモーターの軸がプルプルしていたら脱調です。
うちの3Dプリンタもエクストルーダーが時々脱調します。設定を変えたりノズルのクリーニングをしてから造形やりなおしです。🥺

折り畳みテーブルのヒンジを固定するパーツ

f:id:macrochelys99:20200712033001j:plain

コンパクトな折り畳みテーブルなのですが

f:id:macrochelys99:20200712034208j:plain

ヒンジ部分を固定するロックピンなどが無いため、持ち上げて移動しようとすると指を挟みそうになる時があります。

小さいお子様なんかいる家庭でしたら心配になりますね。

f:id:macrochelys99:20200712034241j:plain

ちなみにテーブルはこのタイプの類似品と思われます。

テーブルの寸法を測ってモデリング

f:id:macrochelys99:20200712034612p:plain

収納中、中でカラカラ転がるのも気になるのでホルダーも作ります。

f:id:macrochelys99:20200712034935j:plain

ホルダーは両面テープでテーブルの裏側に貼り付けます。

f:id:macrochelys99:20200712035053j:plain

使用感もなかなか良好


折り畳みテーブルのヒンジを固定するパーツ

3Dデータは Thingiverse に置いたので、もし同じテーブル使っててお困りでしたら試してみてください。
www.thingiverse.com

フックのレバーがやけに大きすぎる気もしますが

f:id:macrochelys99:20200712040642p:plain

当初は上向きでホルダーに取り付けるように設計していました。なので、これぐらい大きいほうが外しやすいだろう、と。

f:id:macrochelys99:20200712040806p:plain

3Dプリンタで出力してから下向きにセットしたほうがスマートなことに気付いたのですが、作り直すのめんどくさ厚手の手袋してても使いやすいし....。

まとめ

折り畳みテーブルはヒンジにストッパーが付いているか確認してから購入しよう。

CombineZP で深度合成を試す

キーエンスのマイクロスコープを使わせてもらう機会がありました。カメラで撮影しながらモニターに映すタイプのデジタル顕微鏡です。

マクロ撮影や顕微鏡だとピントの合う範囲が薄くて全体像が見えなかったりする物も、このマイクロスコープだと全体にシャキっとピントが合うのです。

ライブ深度合成というモノらしいです。ピント位置を少しずつずらした写真を何枚も撮って、ピントの合っている部分だけを集めて1枚の写真にするのが深度合成。しかもあとから写真を合成するのではなく、ピントリングを回したその場で仕上げてくれます。オリンパスのカメラにも同じような機能がありましたね。

キーエンスのマイクロスコープは買うと数百万円~ですが、お手頃スコープと深度合成をやってくれるフリーウェアで試してみました。
f:id:macrochelys99:20200225012019j:plain

使ったもの

マイクロスコープ

サイトロン ナノキャプチャー
https://www.amazon.co.jp/dp/B014KNGO98/

アプリ

CombineZP 1.0
https://combinezp.software.informer.com/

手順

写真を撮る

今回はちょうど手元にあったネジを撮ってみます。

ピント位置をずらして何枚か撮影します。動かすのはピント位置だけで、撮影物の位置やカメラの位置を動かさないように注意します。

このとき、ファイル名がピント順になるよう撮るのがポイントです。行きすぎちゃったからピント位置を戻して追加撮影、とかやると合成でうまくいかなくなるみたい。

今回はネジの先端から背景のグリッドラインまで、8枚撮りました。
f:id:macrochelys99:20200225000457g:plain

アプリを起動してNEWボタンを押す

f:id:macrochelys99:20200224235818p:plain

撮った写真をまとめて開く

f:id:macrochelys99:20200224235915p:plain

プルダウンメニューから Do Stack を選んで GO ボタン

f:id:macrochelys99:20200225000634p:plain

うーん?

たしかに全体的にピントがきてるけど、線が2重になってるしシャープネスかけすぎて調整失敗したような写真になってる。
f:id:macrochelys99:20200225001431j:plain

All methods

Do Soft Stack でも全く変化なし。メニューの下のほうにある All Methods ていうのが何か強そうなので試してみます。
f:id:macrochelys99:20200225001401p:plain

合成完了までに多少時間がかかりましたが(数十秒ぐらい)、これなら実用できそうです。
合成後(全体がスッキリ) f:id:macrochelys99:20200225001637j:plain

ちなみに合成前(ネジ先端にピントを合わせるとグリッドがボケる) f:id:macrochelys99:20200225003537j:plain

これも合成前(グリッドにピント合わせるとネジがボケる) f:id:macrochelys99:20200225003625j:plain

まとめ

合成後の写真の外周は崩れが大きいです。1600x1200 のデータが合成語は 1727x1279 に大きくなっているので、増えた分はトリミングで除去したほうがよさそうです。

キーエンスの製品に興味をもち会員登録したり資料ダウンロードすると、数分後には営業の電話がかかってくるので気を付けてください。

複数のフォーマットにまとめてエクスポートする SolidWorksのマクロ

f:id:macrochelys99:20191121010644p:plain

SolidWorksモデリングした各部品を中間フォーマットに変換しようとするときは、 指定保存 から拡張子をプルダウンで選んで変換するフォーマットを選びます。しかし対応している形式がとても多いのでプルダウンメニューから探すのがわりと面倒くさいんです。

というわけでマクロを組みます

Excelのマクロでおなじみ、VBAです。UI も Excel のと同じですね。

f:id:macrochelys99:20191121001906p:plain

Excelのマクロは解説している書籍やサイトがたくさんありますが、SolidWorksのマクロを解説している資料は少ないので、まずは操作を記録させてどういうコードが生成されているか観察するところから始めました。

モデルをエクスポートする際、ファイル名を(日付を含めるとか)変更することがほとんどなので、マクロを実行するとファイル名を入力するテキストボックスを開きます。するとエクスポート用のフォルダを作ってそのなかに IGESSTEPSTL、そして パラソリッド に変換して保存するようにしました。

f:id:macrochelys99:20191121002501p:plain

Option Explicit

Dim swApp As Object

Dim Part As Object
Dim boolstatus As Boolean
Dim longstatus As Long, longwarnings As Long

Sub main()
    
    '変換したファイルを保存するフォルダを設定
    Const SAVEFOLDER = "_exported"
    
    Dim filename As String
    Dim message As String
    Dim format As String
    Dim warnmsg As String
    
    Set swApp = Application.SldWorks
    Set Part = swApp.ActiveDoc
    filename = ""
    warnmsg = ""
    
    '保存するファイル名を入力
    'While filename = ""
        filename = InputBox("ファイル名(" + SAVEFOLDER + " フォルダに出力)")
    'Wend
    If (filename = "") Then Exit Sub
    
    ChDir (swApp.GetCurrentWorkingDirectory())
    
    If Dir(SAVEFOLDER, vbDirectory) = SAVEFOLDER Then
        '何もしない
    Else
        MkDir (SAVEFOLDER)
    End If
    
    Part.SaveAs (SAVEFOLDER + "\" + filename + ".IGS")
    Part.SaveAs (SAVEFOLDER + "\" + filename + ".STEP")
    Part.SaveAs (SAVEFOLDER + "\" + filename + ".x_t")
    Part.SaveAs (SAVEFOLDER + "\" + filename + ".STL")

End Sub

ところが

IGES STEP パラソリッド は出力されるのですが、STL が出力されません。

Part.SaveAs (SAVEFOLDER + "\" + filename + ".STL")

のところを

Part.SaveAs ("C:\tmp\hoge.STL")

と直接パスとファイル名を指定すれば出力されました。しかしこれでは汎用性がなくて使えません。

結論

書き方や設定を変えてみたりいろいろ試してみたのですが、STL を最初にエクスポートすると全部出力されました。

    Part.SaveAs (SAVEFOLDER + "\" + filename + ".STL")
    Part.SaveAs (SAVEFOLDER + "\" + filename + ".IGS")
    Part.SaveAs (SAVEFOLDER + "\" + filename + ".STEP")
    Part.SaveAs (SAVEFOLDER + "\" + filename + ".x_t")

エクスポートする順番が影響するって何でしょうね。
Windows7 + SolidWorks2015 SP3 のマシンでも、Windows10 + SolidWorks2017 SP3 のマシンでも、どちらも再現したので個別の環境による問題ではなさそうです。

次の目標

アセンブリ内の部品を全部まとめてエクスポート、できたらちょっと楽になるかな?
ネジとか要らない部品まで変換されちゃいますね。

おまけ

STL のビューワは L-Phinus が軽くて使いやすいです。
https://l-phinus.jp/index.html

f:id:macrochelys99:20191121003438p:plain

人感センサーでUSB電源をスイッチする

洗面所の蛍光灯がすぐ切れます。電球ならLED電球に付け替えれば良いのですが、蛍光灯は管だけ交換みたいにお手軽にはいきませんね。

そんなわけで、USB電源のLED照明を追加で付けていました。

しかしケーブルの途中にスイッチが付いてブラブラしているので、ちょっと使いにくいです。センサーで自動点灯できるといいな。

センサーどれにしよう?

赤外線パッシブ

超音波

電波


使うならこのあたりが定番でしょうか。 超音波は比較的正確な距離を測れますが、動かすにはマイコンが必要だし距離精度は必要ないので除外します。

レーダー(電波)も評判は良さそうですが、今回は赤外線タイプを使います
ボリュームで感度や点灯時間が簡単に調整できるのが良さそうです。

回路図

f:id:macrochelys99:20191016003655p:plain:w400

赤外線センサーの出力で、チップの MOSFET をドライブするだけです。

基板図

f:id:macrochelys99:20191016004122p:plain:w400
のせる部品が少ないので、ほとんどベタGND。

f:id:macrochelys99:20191016004238p:plain
Micro USB は、パターンごともげやすいので、スルーホールタイプを使用します。端子のハンダ付けが難儀すると思われるのでSMDパッドも大きめに修正します。

基板実装

f:id:macrochelys99:20191016005058j:plain:w400

f:id:macrochelys99:20191016005214j:plain:w400
裏は部品なし。

f:id:macrochelys99:20191016005358j:plain:w400
センサー取り付け。スペーサーは M2 の 11mm です。

ケースのモデリング

f:id:macrochelys99:20191016030729p:plain:w400

f:id:macrochelys99:20191016005830j:plain:w400
ジャストフィット!

f:id:macrochelys99:20191016005908j:plain:w400
フックの強度確保のため、フタは立てて造形します。

完成

f:id:macrochelys99:20191016010046j:plain:w400
f:id:macrochelys99:20191016010057j:plain:w400

使用感

f:id:macrochelys99:20191016010140j:plain:w400
センサーの感度が高すぎて、洗面所の前の廊下を通るだけで点灯してしまいます。
感度ボリュームをめいっぱい下げてもダメなので、センサーのレンズ左半分にマスキングテープを貼りました。

「どうせ消費電力小さいし」と、今までこのLED照明を常時点灯で使っていたのですが、アダプター(USB充電器)がかなり熱くなり気になっていました。

センサー化によってアダプタが熱くならなくなったのが一番のメリットかな?

シリアルモニターを作る

f:id:macrochelys99:20190916014352p:plain

Arduinoなどのマイコンの動作状態をパソコンのモニタに表示させたい場合、大抵はシリアルモニタを使いますでしょうか。

作ったものを他人に使ってもらう場合、それだけのために Arduino IDE をインストールしてもらうのも勝手が悪いですよね。使い方の説明もしなきゃならないし。

一般的には TeraTerm かな?

f:id:macrochelys99:20190916014825p:plain

それはそれで、ポートの設定とか説明しなければなりません。

というわけで、シンプルなシリアルモニターを作ってみます。開発環境は Visual Studio Community 2017、言語は Excel のマクロでおなじみの VB にしました。

サンプルコードも豊富でわかりやすかったサイトがこちら。
VB.NETでシリアル通信を行う

送信機能は省略しました

f:id:macrochelys99:20190916015942p:plain
受信した文字列をテキストボックスに羅列するだけのアプリです。

接続済のポートと事前に設定したボーレートを表示して起動するので、接続ボタンを押すだけで使えます。

ハマったところ

切断ボタンで SerialPort1.Close() をすると、アプリが固まって反応しなくなりました。

検索すると、InvokeBegenInvoke にすると良いとか、 BufferSize を大きくすると良い、という記事や投稿がありました。しかし、試してみるも効果なし

受信した文字列をテキストボックスに追記するところで固まっているようだったのでテキストボックスのプロパティをいじりまわしたところ、ScrollBarsNone から Vertical にしたら正常に動くようになりました。

もうちょっと機能を入れてみる

ステッピングモーターの位置を方位磁石のように表示する機能を付けました。

モーターの動作は、Arduinoにプログラムされています。

Arduinoステッピングモーターを動かすごとにステップ位置をシリアルで送ってくるので、1周のステップ数から計算してモーターの角度を表示しています、


シリアルモニターを作る

位置を示す赤い矢印は、外形の座標を計算してプロットしています。学校で習った三角関数が試験以外で役に立ったレアケース。

グラフを描く部分

    Dim deg As Single = 0       'degree
    Dim pos As Integer = 0      'position
    Dim spr As Integer = 0      'steps per round
    Dim offset As Integer = 0   'offset for zero adjust

    Private Sub DrawCompass()
        Dim canvas As New Bitmap(PictureBoxCompass.Width, PictureBoxCompass.Height)
        Dim cw As Integer = canvas.Width - 1
        Dim ch As Integer = canvas.Height - 1

        Dim g As Graphics = Graphics.FromImage(canvas)

        '図の外形円を描く
        g.DrawEllipse(Pens.Black, 0, 0, cw, ch)

        '図の目盛りを描く
        For d As Integer = 0 To 360 Step 15
            Dim l1 As Integer = 40  'primary leader line length
            Dim l2 As Integer = 10  'secondary leader line length
            Dim dxa As Integer = (cw / 2 - 1) * Math.Sin(CSng(d) / 180.0 * Math.PI) + 0.5
            Dim dxb As Integer = If(d Mod 90 = 0, cw / 2 - l1, cw / 2 - l2) * Math.Sin(CSng(d) / 180.0 * Math.PI) + 0.5

            Dim dya As Integer = (ch / 2 - 1) * Math.Cos(CSng(d) / 180.0 * Math.PI) + 0.5
            Dim dyb As Integer = If(d Mod 90 = 0, cw / 2 - l1, cw / 2 - l2) * Math.Cos(CSng(d) / 180.0 * Math.PI) + 0.5

            Dim sl As Point() = {
                New Point(cw / 2 + dxa, ch / 2 + dya) _
                , New Point(cw / 2 + dxb, ch / 2 + dyb)
            }
            g.DrawPolygon(Pens.Black, sl)
        Next

        '中心点を書く
        g.FillEllipse(Brushes.Red, CSng(cw / 2 - 4 + 0.5), CSng(ch / 2 - 4 + 0.5), 8, 8)


        If spr <> 0 Then

            'マーカーを描く
            Dim aw As Integer = 5       'Arrow Width
            Dim al As Integer = 40      'Arrow Length
            Dim ao As Integer = 2       'Arrow Offset
            Dim an As Integer = -4      'Arrow Notch
            Dim dx1 As Integer = (cw / 2 - ao) * Math.Sin(deg / 180.0 * Math.PI) + 0.5
            Dim dx2 As Integer = (cw / 2 - al) * Math.Sin((deg + aw) / 180.0 * Math.PI) + 0.5
            Dim dx3 As Integer = (cw / 2 - al - an) * Math.Sin(deg / 180.0 * Math.PI) + 0.5
            Dim dx4 As Integer = (cw / 2 - al) * Math.Sin((deg - aw) / 180.0 * Math.PI) + 0.5
            Dim dxe As Integer = (cw / 2 - ao) * Math.Sin((deg + 180.0) / 180.0 * Math.PI) + 0.5

            Dim dy1 As Integer = -(ch / 2 - ao) * Math.Cos(deg / 180.0 * Math.PI) + 0.5
            Dim dy2 As Integer = -(ch / 2 - al) * Math.Cos((deg + aw) / 180.0 * Math.PI) + 0.5
            Dim dy3 As Integer = -(ch / 2 - al - an) * Math.Cos(deg / 180.0 * Math.PI) + 0.5
            Dim dy4 As Integer = -(ch / 2 - al) * Math.Cos((deg - aw) / 180.0 * Math.PI) + 0.5
            Dim dye As Integer = -(ch / 2 - ao) * Math.Cos((deg + 180.0) / 180.0 * Math.PI) + 0.5

            Dim ps As Point() = {
                New Point(cw / 2 + dx1, ch / 2 + dy1) _
                , New Point(cw / 2 + dx2, ch / 2 + dy2) _
                , New Point(cw / 2 + dx3, ch / 2 + dy3) _
                , New Point(cw / 2 + dx4, ch / 2 + dy4)
            }
            g.FillPolygon(Brushes.Red, ps)

            '矢の軸を描く
            Dim cl As Point() = {
                New Point(cw / 2 + dx1, ch / 2 + dy1) _
                , New Point(cw / 2 + dxe, ch / 2 + dye)
            }
            g.DrawPolygon(Pens.Red, cl)

        End If

        g.Dispose()
        PictureBoxCompass.Image = canvas

    End Sub

まとめ

f:id:macrochelys99:20190916032223j:plain
折れ線グラフを表示するシリアルプロッターが Arduino IDE にありますが、自分が使いやすいようカスタムした表示ができたら用途も広がるし楽しそうなので試してみました。

ボタン押したらシリアル送信してモーターを指定に位置に、とかできたら使い道ありそうです。