3Dプリント造形物のための熱圧入の検証
はじめに
- 先日、初めてインサートナットを熱圧入した
初めての熱圧入 pic.twitter.com/ceUPD8qteQ
— ユクロ (@kurokuro_dev) 2020年2月1日
- インサートナットを使うにあたって、以下のようなことがわからなかったので検証した
- 熱圧入の方法
- 下穴の径
- 熱圧入時の温度
モデルの作成
- 基本的には以下のサイトを参考にして、モデルの作成、インサートナットの熱圧入をした
- 下穴の深さはインサートナットの全長の1.5倍、淵は面取りした
- Cura 4.4.1のShell > Wall line counts を4に設定した
熱圧入の方法
インサートナットを垂直に載せる
- 穴の淵を面取りしておくと載りやすい(写真撮り忘れた)
はんだごてで挿入する
- はんだごてはFX-601, こて先は1.6Dを使用した
インサートナットの全長の95%ぐらいが造形物の中に埋まったら、反転させて押し付ける
完成
検証
1. 下穴径の検証
- 使用したインサートナット: ビットインサート スタンダード SB
- ナットのメーカーのサイトに相手材参考寸法があったので、それを参考にしてテストピースを作った
所感
穴の径 | 所感 |
---|---|
Φ4.5 | ちょうどよい はんだごてを抜いた後の糸引きがない |
Φ4.0 | 多めの糸引きが発生(ねじ山のところに引っかかって使用不可になるレベル) |
Φ4.38 | 糸引きはΦ4.0に比べ少ないが、使用不可になるレベルではない |
Φ4.25 | 糸引きはΦ4.38に比べ少ないが、注意しないとネジ山に引っかかりそう |
- サイトの相手材参考寸法に合った通り、D1(ギザギザがない部分の直径)ぐらいに合わせると良さそう(+0.05 mmはPLA の熱収縮やら膨張やらで相殺されそう)
2. 熱圧入時の温度の検証
- プリント時の温度 + 10, 50, 100, 150℃にはんだごての温度を設定して熱圧入した
- 印刷に使用したPLA Carbonは230℃で印刷したので、実際には240, 280, 330, 380℃となる
所感
こて先温度 | 所感 |
---|---|
+10℃(240℃) | インサートナットと造形物の間に隙間が割と大きな空く |
+50℃(280℃) | ナットと造形物の間に隙間がやや空く |
+100℃(330℃) | ナットと造形物との間にほぼ隙間が空かず、強度も良さそう |
+150℃(380℃) | ナットと造形物との間に隙間が空かないが、造形物表面に余分な樹脂があふれ出る |
余談
- 上記のHackadayのサイトには金属の熱収縮でナットが取れなくなるとのことで専用のこて先を使用していたが、今のところは取れなくなることはなかった
- PLA Carbonだけでなく、普通のPLAでも下穴をD1、こて先温度 + 100℃(290℃)にしたところ、よさげな感じになった
まとめ
- 下穴の径はD1, 深さはナットの全長の1.5倍が一番よさそう
- こて先温度をプリント時温度 + 100℃にして熱圧入すると強度的にもよさそう
- 「よさそう」といった主観的基準でしかわかってないので、客観的、定量的に強度の評価とかしたい
KlipperでAuto bed levelingする
はじめに
- この記事はTeaching Techのビデオに基本的に従っており、ビデオで説明されているところは省略
- しかしながら、ビデオとの相違点(Klipper最新版での変更点とか)も多々あるので、それを中心に記述している
Using a 32 bit Raspberry Pi to boost your 3D printer mainboard - Klipper Ender 3 guide
用意したもの
-
- AntclabsやCreality3Dから発売されている純正のBL-Touchでも良かったのだが、高価(約4000円ほど)だったのでクローン品にした
- 送料込みで1282円だった
-
- シンプルなファンダクトもThingiverseに上がっていたが、エアフローとかが考えられていそうなHero meにした
- Hero meの別バージョン(?)のHero me Gen 3もあるが、シンプルな方を選んだ
詰んだ点
- 基本的には上記のビデオ通りにいったが、以下のようなエラーが表示された
NoOptionError: No option 'min_point' in section: 'bed_mesh' No option 'min_point' in section: 'bed_mesh'
何か最新版で変わったのかなと思いChange logを見に行くと
20200109: The bed_mesh module now references the probe's location in for the mesh configuration. For rectangular beds, min_point and max_point have been renamed to mesh_min and mesh_max respectively. Note that these changes are also incompatible with previously saved mesh profiles. (抜粋)
というようなことが書いてあったのでKlipperをアップデートすることで解決した
また、上記の変更でmesh_min(旧min_point)
で指定する点がノズルの位置→プローブの位置に変更になったらしいのでmesh_min
の指定値も変更した
- 3DTouchのピンが下がる前にプリントヘッドのZ位置が下がってベッドと衝突する
- Can't get BLTouch probe working · Issue #955 · KevinOConnor/klipper · GitHub
- BL-Touchのクローン品は測定までの遅延を大きくするとよいみたいなことが書いてあったので
printer.cfg
>[bltouch]
>pin_move_time
を1.0に変更した
結果
ABLできた! pic.twitter.com/wHM3mIzK28
— ユクロ (@kurokuro_dev) 2020年1月17日
余談
- KlipperをBed Visualizerに対応させる
- Support for klipper firmware · Issue #92 · jneilliii/OctoPrint-BedLevelVisualizer · GitHub
- この記述どおりに
General
>GCODE Commands
に以下を記述した
@BEDLEVELVISUALIZER BED_MESH_OUTPUT
Ender3にKlipperをインストールする
- 自宅の3DプリンターにKlipperをインストールした
- 基本的にはInstallationに従うだけだが、いくつかハマったポイントがあったので書き残しておく
Klipperとは
- https://github.com/KevinOConnor/klipper
- Featureによると高速/正確なプリントができるらしい
- Youtubeに250m/sで印刷している動画を見つけたので高速化したくなった
インストール環境
- Raspberry Pi 3B+
- Octoprint 1.3.12
- SKR v1.3
インストール
1. git clone
する
git clone https://github.com/KevinOConnor/klipper sh ./klipper/scripts/install-octopi.sh
2. ビルドする
cd ~/klipper make menuconfig
- 出てきた設定画面で以下のように設定する
Micro-controller Architecture (LPC1768x(Smoothieboard))
- 他は何もいじらなくてok
- ビルドする
make
~/klipper/out/klipper.bin
が生成されるのでWinSCPとかを使ってローカルに落としておく
3. SKR v1.3に書き込む
公式のInstallationには
make flash
をしてラズパイからマザーボードに直接書き込むやり方が紹介されていたが、上手く行かなかった注意事項:
- SKR v1.3の中心ぐらいにある赤いジャンパピンを+5VとUSBに繋いで書き込みを行うこと
- 自分の環境では当初はINTと+5Vに繋いでいて、上手くフラッシュされず、サポートにまで連絡してしまった(アホすぎ...)
4.Octoprintを設定する
設定(レンチのアイコン)
>Serial connection
>General
>Serial Port
に/tmp/printer
を追記しSave
- (もう一度設定を開き)上記の
Serial Port
で/tmp/printer
を選択 設定(レンチのアイコン)
>Serial connection
>Behavior
でCancel any ongoing prints but stay ...
を選択しSave
Connection
(メイン画面の左上)のSerial Port
で/tmp/printer
を選択し、Connect
Terminal
タブ(メイン画面)でstatus
と打ってsend
する
5. printer.cfgの設定
- github上にあるskr v1.3用cfgファイルをダウンロードして
printer.cfg
として保存する [mcu]
のセクションでserial:
以降をls /dev/serial/by-id/*
して出てきたものにする(klipperがうまくflashされていればusb-a...klipper...port0
のようにklipperの文字が入っている気がする)- 完成した
printer.cfg
をラズパイ上の/home/[ユーザー名]/
へコピー(WinSCPとかで) - Octoprint上のterminalで
restart
コマンドを打つ Klipper state : Ready
が出てきたらインストール完了
printer.cfg
の書き方
xxxx_pin:
- ピンの指定
- github上のピン配置図に記載のピン番号(x.xxとか)に準拠しているもよう
- PID制御のパラメータ(
pid:
)は後で設定するのでいじる必要はない
6. Octoklipperの導入(任意)
設定(レンチのアイコン)
>Plugin manager
>Get more...
でOctoklipper
を検索&インストール- Octoprintの右端にKlipperタブが現れて
Get status
ボタンとかが押せるようになる
まとめ
- Klipperのインストールが完了した
- 次はKlipperの(個人的)目玉機能であるPressure Advanceなどを設定していきたい
アマチュア無線局免許状が届いた
免許状が届いた
11月9日、無線局免許状が届いた。
届いた! pic.twitter.com/c6ffA1cj65
— ユクロ (@kurokuro_dev) 2019年11月9日
初めての開局申請だったので、免許状に書いてあるコールサインを見たときは心が躍った
目的
- 今回取得した無線局免許状は5.6GHz帯のものであり取得した目的は以下の通り
- FPV用の5.6GHzVTXを使ってリアルタイムで映像を伝送する
- (ただ単純に自分の無線局(とコールサイン)が欲しかった...)
取得までの流れ
- 8月17日 3アマに受かる
- 8月18日 総務省 電波利用 電子申請・届出システム LiteにユーザーID申請する
- 8月23日 ユーザーIDが郵送されてくる
- 9月1日 VTX(Tramp-HV)を注文(HobbyNetで注文したため、系統図がついてきた)
- 9月23日 ついてきた系統図をもとにJARDに保証申請する
- 9月27日 JARDから保証完了の連絡が届く
- 9月29日 保証書と共に電子申請・届出システム Liteに開局申請する
- 10月18日 電子申請・届出システム Liteから電子納付手続きの連絡が届く
- 10月25日 電子納付手続きをする
- 11月9日 無線局免許状が届く
- 11月11日 審査が終了したとのメールが届く
所感
- 実質、かかった期間は1ヶ月半ほど
- 途中、支払いが面倒になったり、申請の入力作業が面倒になったりして、ダラダラしていた
- JARDの保証は早いと聞いていたけれど、まさか4日で完了するとは思っていなかった
- TSSも一瞬検討したが「電話しないと申請が進まない」みたいなレビューがあったのでやめておいた
- 一番長かったのは総務省 電子申請・届出システム Liteでの申請期間で1ヶ月ぐらい
まとめ
キーボードブリッジを自作した
事の始まり
- KickstarterでプレッジしていたKeychron K2が届いた
My new gear ... #keychronk2 pic.twitter.com/HFb4vuAb0y
— ユクロ (@kurokuro_dev) 2019年8月31日
ノートPCで使いたい
- メインがノートPCなので、尊師スタイルのように*1して使いたい
- 尊師スタイルをするためのキーボードブリッジはPFUダイレクトで販売されている
- 当然ながら、これはHHKB向けの製品
- Keychron K2はHHKBより一回り大きいので合わなそう
自作する
ちょうど大学にレーザープリンターが置いてあったので自作することにした
アクリル板の調達
- 材料のアクリル板は大学を通じてMISUMI-VONAに発注した。
- 失敗することを見越して大きめのサイズで発注したが、代金は1840円ほど。
加工
初レーザーカッター pic.twitter.com/XTgrrlaluR
— ユクロ (@kurokuro_dev) 2019年10月11日加工後
- 出力が強すぎて、保護カバー(?)の紙が焦げ付いてアクリルとくっついてしまった
出力が強すぎて焦げ付いてしまった pic.twitter.com/YaHrCODVDy
— ユクロ (@kurokuro_dev) 2019年10月11日
完成
完成#keychronk2#キーボードブリッジ pic.twitter.com/lJlSvS9WUU
— ユクロ (@kurokuro_dev) 2019年10月11日
感想
余談
FDM方式3Dプリンターで作った造形物の積層痕消しの検証
積層痕消したい
- 積層痕は組み込む部品を作る際にはあまり気にならないけれど、フィギュアなどを作る際には目立つので消したい
3Dプリンター 積層痕 消す
などと検索すると以下のサイトが見つかった- 実際にやってみないとどうにも...的なところがあったので、実際にやってみた
方法
- テストピース(PLA)の積層痕が目立つ部分にアクリサンデーとポリパテを塗り、24時間後の変化を観察する
アクリサンデー
- まず、アクリサンデーを用いる方式
所感
- 結構多めに塗るとPLAがドロドロとしてきて溶けていることが確認できた。
- が、ドロドロしている分、平面にすることが難しい
- 乾燥後は特に臭いはせず、触るとすべすべ
ポリパテ
所感
- 適度に粘性があって塗るというより、盛るといったことが可能
- 盛った箇所にきちんと色がつくので、サフを吹かなくても大体修正できる
- 乾燥後は紙粘土に似た独特な臭いがして、(表面処理云々によるんだろうが)触ると粉っぽく感じる
まとめ
- 個人的にはアクリサンデーよりもポリパテのほうが扱いやすく感じた
- ポリパテのほうが盛れるので量の調整が効きやすい
- アクリサンデーだと曲面に塗るときに流れて行ってしまう
- 積層痕を消す能力に関しては両者とも同等ぐらい
- だが、アクリサンデーだと透明なので消えたor消えないがわかりにくいかも
Slackは見ないけどLineは見る人向けSlack App(Event API使用)を作った
概要
- 「Slackは見ないけど、Lineは見る」という謎の論理を持った人のためにSlackでメッセージを飛ばしたらLineで通知が入るようにした
- サクッと作れると思ったら、Outgoing Webhookはlegacyとか言われたのでEvent APIを使って作った
前置き
- 大まかな流れは以下のサイトを参考にさせていただきました。
- しかしながら、いざ作ろうとOutgoing Webhooksのページに行ったら次のような但し書きが...
- 「Outgoing Webhooksは廃止されるかもしれないので、Slack App作ってやってね!(意訳)」
- というわけで、Outgoing Webhooksは使わずにEvent APIを使ってやってみた
手順
GAS(Google App Script)の設定
- 今回はSlackからGASにメッセージの内容を飛ばして、GASからLineに通知させる
- Outgoing WebhooksではSlack側でtrigger phaseを設定していたが、Event APIにはそんな機能は無いそうなので、GAS側でメッセージの内容によってLineに送る/送らないを決めさせる
- 自分のGoogle DriveにGoogle App Scriptを作成、同時にデバッグ用のスプレッドシートも作成しておく
- Slack Event API認証用のコードを書く
- コードは次のサイトを参考にさせていただきました。
- ウェブアプリケーションとして公開する
- 後で使うので現在のウェブアプリケーションのURLを控えておく
- ハマりポイント:プロジェクトバージョンを必ずNewにする
Slack Appを作る
- Slack API: Applications | Slack からCreate New Appして設定する
- App Nameには適当な名前を、Development Slack WorkspaceにはSlackで通知させたいワークスペースを選ぶ
- Install Appする
- 許可云々が出てくるので自分の主義に見合ったら許可
- Event Subscriptionsでいろいろ設定
- Request URLには控えておいたGASのURLを入力
- 入力してVerifiedになったら、Subscribe to Workspace Eventsでmessage.channelsを選択する
- Slack API: Applications | Slack からCreate New Appして設定する
GASのコードを書き換える
- 先ほどのAPIの認証が終わったら以下のコードに書き換える
function doPost(e) { var params = JSON.parse(e.postData.getDataAsString()); logging(params); var api_app_id = PropertiesService.getScriptProperties().getProperty('API_APP_ID'); var received_app_id = params.api_app_id; //APPIDが一致しているか if(received_app_id != api_app_id) {return;} //各種情報 var postype = params.event.type; var postext = params.event.text; logging(postext.slice(0,5)); if(postype == 'message' && postext.slice(0,5) == '@line'){ var msg = "LINEにも通知したい投稿がSlack上に投稿されました。\n各自「必ず」確認してください。\n内容 : "+ postext; send(msg); } } function send(message) { //lineのほうのトークン var token = PropertiesService.getScriptProperties().getProperty('LINE_ACCESS_TOKEN'); var op = { "method" : "post", "payload": "message=" + message, "headers":{"Authorization" : "Bearer " + token} }; UrlFetchApp.fetch("https://notify-api.line.me/api/notify",op); } //GAS当てにrequestが飛ぶと、スプレッドシートに飛んできたjsonが保存される function logging(str) { var id = PropertiesService.getScriptProperties().getProperty('SPREADSHEET_ID'), sheet = SpreadsheetApp.openById(id).getActiveSheet(), ts = new Date().toLocaleString('japanese', {timeZone: 'Asia/Osaka'}); sheet.appendRow([ts, str]); }
* SPREADSHEET_IDは作成したスプレッドシートのURLの後にくっついてるもの(https://docs.google.com/spreadsheets/d/XXXXX のXXXXX)
* API_APP_IDはSlack API設定ページのBasic Informationにある
* LINE_ACCESS_TOKENに関しては後述
- Line Notifyを設定する
- Line Notify にLineのアカウントでログインしてマイページに進む
- Tokenを取得する
- 出てきたTokenを先ほどのGASのプロパティに設定する
動かしてみる
- Slack上の任意のチャンネルで「@line」をつけてメッセージを送ると、Line Notifyから何かしらのメッセージが来ているはずです
トラブルシューティング(動かないときは)
- Google Drive上に置いてあるスプレッドシートでログを確認し、Slackからjsonが送られているか、jsonをparseできているか等を確認する
- GAS上で上記の
function send(message)
のみを動かしてLine Notifyから通知が来るか確認する- 通知が来ると
[ トークン名 ] undefined
の形で表示される
- 通知が来ると
思ったこと
- 以外に簡単にできる(Line Notifyが使えない頃は通知のためだけにチャットボットを作っていたので)
- これでSlackを見ないという可能性は排除できたので、それでも見ないなら、その団体に興味がないということかもしれない