第2種電気工事士 取得

少し前のことになるが、電気工事士の資格を取得した
仕事には関係ないがプライベートで電気工事をしたかったので取得した
メカトロ関連には直接関係ないが、少なからず関係はある
資格なんて意味ないんでしょ
強制的に勉強するので意味はあると思うよ。特に教えてもらう環境が無い場合には資格勉強は一つの方法論だよ

工具の用途や使い方について勉強できたのは収穫である
機構的には概念を重視している印象があるが、電気系ではロジカルを重視している印象がある
よって、説明の仕方からまとめ方まで真新しく感じた
業界が違うと見方が違うので勉強になりました
危機を乗り越える力 ホンダF1を世界一に導いた技術者のどん底からの挑戦 を読んで

開発者のあるべき姿
薦められた本を読んだので、その感想をまとめます
危機を乗り越えるには「変わり者が必要」
会社の危機を乗り越えるには「変わり者」が必要であると言っている ここでの変わり者とは自分のやりたいことや、信じる道をしっかりと持っていて そのやりたいことに向かって時間を惜しまずに努力できる人のことを言っている 努力といっても本人は努力と感じないくらい自然と没頭して向かっていける人でもある
なんで変わり者が必要なの?
優等生では、なかなかいいアイデアがでないと思っているのかな?
簡単にまねのできないことをやる
会社の危機を脱するには他社が簡単にまねできないことをやる必要がある
簡単にまねができるようなことでは、すぐにまねされて追い抜かれてしまう
そこにはずば抜けた集中力や容易に思いつかない発想力が必要になるということである
時にはずるさも必要
上司に言われたとおりにやっているだけでは突出したものができない
・ 言われたことはやって、そのあとに自分のやりたいことをやる
・ 言われたことのギリギリ範囲内でやりたいことを盛り込んでいく
結果オーライの精神も必要なのかも知れない 認めさせたら勝ちみたいな
そんな人が居たら困らないかな?
そうだね。協調性は必要だからね。逆風のときに力を発揮するけど、順風のときはおとなしくしないとね
会社が順風のときは協調性がある優等生が好まれる傾向がある
そのため順風のなかで変わり者があがいでも良いことはないと書いてあります

その他、気になったこと
・山籠もり合宿の効能
自分からアイデアを出してくれない人への対応として山籠もり合宿の話があった
自分のハードルを上げるのを嫌ってアイデアを出さない人はどこにでも居るものです
危機を共有して自分から踏み込んだアイデアを出すきっかけにしているようです
今の時代は難しいかな。それに代わる方法があるとうれしいんだけどね
・何をやめて、何をやるか
リーダーの責任として何をやらないかを決めることとある
やめる判断は難しいもの。それでもやめることを明確にしないと組織は停滞してしまう
著者の浅木さんは何がすごいの?
内容を確認して、これは行けそう、これはダメかも、などの感が働くことを書いてある
直感的なものだと書いてありなかなか難しいが、やはりそれが大事なのだろう
当然、勘だけではなくて普段からの勉強や調査、瞑想など様々な裏付けによってなされているのだろう
同じ技術者として浅木さんに近づきたいと思ったよ
マイコンとエクセルを連動させてワンランクアップ

マイコンでシリアル通信ができたけど、データが使いにくいよ
マイコンとエクセルを連動させると開発効率が大幅に上昇しますよ
教育向けマイコン「arduino」の登場でシリアル通信でマイコンとパソコンでデータのやり取りが簡単になりました
USBケーブルをつなげばシリアルポートとのデータがやり取りできるアプリが標準搭載されているのは感動的です
これによって温度のデータ、フォトセンサのデータ、赤外線のデータなどを収集できるし、 マイコンに指示をすることもできるようになります
このままでは少し使いにくいですよね 大量のデータを扱うようになったり、繰り返し様々な条件でデータを取得したりする場合には手間が掛かりすぎます
そこで、
エクセルからデータを扱えるようになる方法の提案です 「EasyComm」という素晴らしいソフトがあるのですが、現在はサポートが終了しています しかし、いまでも使えますので探してダウンロードしてください

最低限の機能ですが、下記を試してください
String inStr = ""; boolean sDone = false; unsigned int sData; void setup() { Serial.begin ( 115200 ); // シリアル通信速度設定 inStr.reserve ( 200 ); // reserve 200 bytes for the inStr: } void loop() { if ( sDone ) // print the string when a newline arrives: { sData = inStr.toInt(); // 文字列を数値へ inStr = ""; // clear the string: sDone = false; // 受信待ちフラグ Serial.println ( sData ); } } void serialEvent() { while ( Serial.available() ) // get the new byte: { char inChar = ( char ) Serial.read(); if ( inChar == '\n' ) // add it to the inStr: { sDone = true; } else { inStr += inChar; } } }
Sub serialTest01()
Dim get_data As String '文字列型(2byte変数)
Dim ComPort As Byte 'バイト型(1byte変数)
Dim startData
'通信ポートのオープン
ComPort = Range("COMセル").Value 'COMポート番号の取得
ec.COMn = ComPort 'COMポート番号の指定
ec.HandShaking = "N" 'ハンドシェークなし
ec.Delimiter = "CRLF" 'デリミタ(CR:復帰,LF:改行)
ec.Setting = "115200,n,8,1" '通信条件の設定
ec.AsciiLineTimeOut = 1500 'AsciiLineの読み出しアウト時間
'開始データ送信
startData = 555
ec.AsciiLine = startData 'データの送信
For i = 1 To 10
Cells(6, 2).Value = ec.AsciiLine 'データの受信
If Cells(6, 2).Value = startData Then Exit For
Next i
'通信ポートのクローズ
ec.COMnClose = ComPort
End Sub
これによって開始データを送信して、開始データと同じデータが返ってくれば終了するプログラムとなります
トラブルポイント
通信速度が合っていない
マイコン側とパソコン側で通信速度を合わせる必要があります
今回のプログラムでは"11520"に設定しています
COMポートが合っていない
パソコンのUSBポートの番号を合わせる必要があります
arduinoであればツールから確認できます
それ以外であれば「デバイスマネージャ」を使ってみてください
COMポートを使用中
COMポートは他のプログラムと共有できません arduinoにプログラムを書き込み中は使えないので、書き込みが終わるのを待ちましょう
また、VBAのプログラムに不具合があって通信ポートのクローズに行く前に止まってしまった場合は、通信ポートのクローズのコマンドを実行しましょう
シリアル通信はつまずくことも多いですが、味方にすれば強力です。ぜひともマスターしましょう
エクセル起動時に左上のセルを表示してミスを減らす

惰性で作業してたら入力場所を間違えちゃったよ。A1セルを選択して終わらしてくれって頼んだのに!!
エクセルは前回表示しいた場所から再開するので、ミスが出やすいですよね
エクセルを自分だけで使用しているときは問題にならなかったことも複数人で作業していると思わぬミスに繋がることがあります
エクセルを開くたびに表示位置が変わると作業性が悪いですよね
A1セルに戻して保存してくれとルール化しても守ってくれない人もいて困ってしまいます
間違いやすいデータを作成していたり、参考用のデータを記入していたりやりたい放題のデータは見づらいものです
運悪く自分の作業しようとしていた場所と見た目が似ていると間違って入力することもあります
そこで、
ここでは、自動的にA1セルを表示する方法を学びます おまけで表示倍率の設定方法を書きました

簡単な方法としてはA1セルを選択するプログラムを起動時に実行すればよいのです
「ThisWorkbook」にselectメソッドを記載するだけす
しかし、
この方法では問題になることがあります
それは、「ウインドウ枠の固定」を使用してる場合です
そのため下記の方法を推奨します
Private Sub Workbook_Open()
Application.Goto Range("A1"), Scroll:=True
End Sub
さらにおまけです
表示倍率も戻してしまいましょう
Private Sub Workbook_Open()
Application.Goto Range("A1"), Scroll:=True
ActiveWindow.Zoom = 100
End Sub
今回は100%にしましたが、お好みの倍率に設定してみてください
これで快適に作業できますね!
VBAで履歴を自動で保存していく

ファイルがメチャクチャだよ。前の状態に戻したいけど分からないよ
自動で履歴を残す設定にすると元に戻せるよ
エクセルで扱うデータが大きくなったとき、VBAで自動処理を行ったときなどを行っていくと過去のデータと見比べたくなることがあります
今回は保存時に履歴を自動で作成する方法を学びます
最後に残しておくファイル数の設定方法も学びます
ここでは「ThisWorkbook」に記載していきます

Private Sub Workbook_AfterSave(ByVal Success As Boolean)
Dim fileName
Dim filePath
' バックアップするフォルダを設定
filePath = ThisWorkbook.Path & "\oldFiles\"
' バックアップするフォルダが無い場合にはフォルダを作成する
If Dir(filePath, vbDirectory) = "" Then
MkDir filePath
End If
' バックアップファイル名を設定
fileName = ThisWorkbook.Name
dayTime = Format(Now(), "_yyyy-mmdd-hhmm-ss")
fileName = Replace(fileName, ".xlsm", dayTime & ".xlsm")
ThisWorkbook.SaveCopyAs filePath & fileName
End Sub
このプログラムではoldFilesというフォルダを用意して、そこに履歴のファイルを保存します
ファイル名には年月日に加えて時分秒を末尾に追加します
dayTime = Format(Now(), "_yyyy-mmdd-hhmm-ss") のところを修正すると秒は要らないとかが変更できます
しかし、
この方法では無限にファイルが増えてしまいます
そこで、決めたファイル数を超えた場合は古いファイルから順番に削除するプログラムを追加します 削除するのは同じファイル名の履歴のみです
単純に古いファイルを削除していくと別のファイル名の履歴がなくなってしまうことを予防します

Private Sub Workbook_AfterSave(ByVal Success As Boolean)
Dim fileName
Dim filePath
Dim fileCount
Dim dayTime
Dim findFile
Dim oldFile
Dim tmp
' バックアップするフォルダを設定
filePath = ThisWorkbook.Path & "\oldFiles\"
' バックアップするフォルダが無い場合にはフォルダを作成する
If Dir(filePath, vbDirectory) = "" Then
MkDir filePath
End If
' バックアップファイル名を設定
fileName = ThisWorkbook.Name
dayTime = Format(Now(), "_yyyy-mmdd-hhmm-ss")
fileName = Replace(fileName, ".xlsm", dayTime & ".xlsm")
ThisWorkbook.SaveCopyAs filePath & fileName
' バックアップファイルが規定数より多かったら古いファイルを削除する
fileCount = 0
findFile = Left(ThisWorkbook.Name, InStrRev(ThisWorkbook.Name, ".") - 1)
tmp = Dir(filePath & "\" & findFile & "*")
oldFile = tmp
Do While tmp <> ""
If FileDateTime(filePath & "\" & tmp) < FileDateTime(filePath & "\" & oldFile) Then
oldFile = tmp
End If
fileCount = fileCount + 1
tmp = Dir()
Loop
If fileCount > 5 Then
Kill filePath & "\" & oldFile
End If
End Sub
これで必要以上にファイルが増えなくなりました
「If fileCount > 5 Then」 のところを変更すると残しておきたいファイル数を変更できます
履歴を残すのは重要ですが負担も掛かります。少しでも快適にしていきましょう!
SOLIDWORKS api 図面の公差設定をワンクリックで

時間がないのに図面作成が終わらないよ
公差入力に手間取っているようですね
図面作成をできるだけ効率的に行う方法の提案です
寸法記入が早くなるツールとなります
図面作成時には時間が少ないことが多いと思います
特に公差設定はクリック数が多くてイライラすることも、
そこで、ボタンを押すだけで指定した公差が入力出来たら楽ですよね
Option Explicit
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swModelDocExt As SldWorks.ModelDocExtension
Dim SelMgr As Object
Dim Retval As Boolean
Dim swDisplayDimension As Object
Dim TolMax As Double
Dim TextPrefix As String
Dim PrimaryTol As Integer
Dim boolstatus As Boolean
Sub main()
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swModelDocExt = swModel.Extension
Set SelMgr = swModel.SelectionManager
Set swDisplayDimension = SelMgr.GetSelectedObject6(1, -1)
If swModel.GetType <> swDocDRAWING Then Exit Sub
TextPrefix = swDisplayDimension.GetText(swDimensionTextPrefix)
TolMax = 0.0002
' swTolSYMMETRIC : 普通許容差
' FIT : はめあい
boolstatus = swModelDocExt.EditDimensionProperties(swTolSYMMETRIC, TolMax, 0, "", "", True, 9, 2, True, 12, 12, TextPrefix, "", True, "", "", "", True, swThisConfiguration, "")
PrimaryTol = 1
Retval = swDisplayDimension.SetPrecision2(2, 2, PrimaryTol, 1) '数値桁、2単位数値桁、公差桁、2単位公差桁
'更新
swModel.GraphicsRedraw2
End Sub

±0.05を入力する場合には下記となります
Option Explicit
Dim swApp As SldWorks.SldWorks
Dim swModel As SldWorks.ModelDoc2
Dim swModelDocExt As SldWorks.ModelDocExtension
Dim SelMgr As Object
Dim Retval As Boolean
Dim swDisplayDimension As Object
Dim TolMax As Double
Dim TextPrefix As String
Dim PrimaryTol As Integer
Dim boolstatus As Boolean
Sub main()
Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swModelDocExt = swModel.Extension
Set SelMgr = swModel.SelectionManager
Set swDisplayDimension = SelMgr.GetSelectedObject6(1, -1)
If swModel.GetType <> swDocDRAWING Then Exit Sub
TextPrefix = swDisplayDimension.GetText(swDimensionTextPrefix)
TolMax = 0.00005
' swTolSYMMETRIC : 普通許容差
' FIT : はめあい
boolstatus = swModelDocExt.EditDimensionProperties(swTolSYMMETRIC, TolMax, 0, "", "", True, 9, 2, True, 12, 12, TextPrefix, "", True, "", "", "", True, swThisConfiguration, "")
PrimaryTol = 2
Retval = swDisplayDimension.SetPrecision2(2, 2, PrimaryTol, 1) '数値桁、2単位数値桁、公差桁、2単位公差桁
'更新
swModel.GraphicsRedraw2
End Sub
違いは「TolMax」と「PrimaryTol」です 欲しいボタンを追加すればドンドン便利になります
