yukuro’s blog

ぽえむ日記

3Dプリント造形物のための熱圧入の検証

はじめに

  • 先日、初めてインサートナットを熱圧入した

  • インサートナットを使うにあたって、以下のようなことがわからなかったので検証した
    • 熱圧入の方法
    • 下穴の径
    • 熱圧入時の温度

モデルの作成

  • 基本的には以下のサイトを参考にして、モデルの作成、インサートナットの熱圧入をした

hackaday.com

  • 下穴の深さはインサートナットの全長の1.5倍、淵は面取りした
  • Cura 4.4.1のShell > Wall line counts を4に設定した

熱圧入の方法

  1. インサートナットを垂直に載せる

    1. 穴の淵を面取りしておくと載りやすい(写真撮り忘れた)
  2. はんだごてで挿入する

    1. はんだごてはFX-601, こて先は1.6Dを使用した
      f:id:kuroblo039:20200206020827j:plain
      なるべく垂直にするべき
  3. インサートナットの全長の95%ぐらいが造形物の中に埋まったら、反転させて押し付ける

    f:id:kuroblo039:20200206021501j:plain
    金属に押し付けるといい感じになる

  4. 完成

    f:id:kuroblo039:20200206021639j:plain
    割とうまくいった図

検証

1. 下穴径の検証

所感

穴の径 所感
Φ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℃となる

所感

f:id:kuroblo039:20200206024024j:plain
左上から時計回りに+10, 50, 100, 150℃

こて先温度 所感
+10℃(240℃) インサートナットと造形物の間に隙間が割と大きな空く
+50℃(280℃) ナットと造形物の間に隙間がやや空く
+100℃(330℃) ナットと造形物との間にほぼ隙間が空かず、強度も良さそう
+150℃(380℃) ナットと造形物との間に隙間が空かないが、造形物表面に余分な樹脂があふれ出る

余談

  • 上記のHackadayのサイトには金属の熱収縮でナットが取れなくなるとのことで専用のこて先を使用していたが、今のところは取れなくなることはなかった
  • PLA Carbonだけでなく、普通のPLAでも下穴をD1、こて先温度 + 100℃(290℃)にしたところ、よさげな感じになった
    f:id:kuroblo039:20200206030416j:plain
    いい感じ

まとめ

  • 下穴の径は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

用意したもの

  • 3DTouch

    • AntclabsやCreality3Dから発売されている純正のBL-Touchでも良かったのだが、高価(約4000円ほど)だったのでクローン品にした
    • 送料込みで1282円だった
  • Hero me

    • シンプルなファンダクトも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の指定値も変更した

結果

余談

@BEDLEVELVISUALIZER
BED_MESH_OUTPUT

Ender3にKlipperをインストールする

  • 自宅の3DプリンターにKlipperをインストールした
  • 基本的にはInstallationに従うだけだが、いくつかハマったポイントがあったので書き残しておく

Klipperとは

インストール環境

インストール

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のSDに直接焼く
    • ローカルに落としたklipper.binfirmware.binにリネームしてmicroSDにコピーするだけ
    • 上手く行けばSKR v1.3の電源を入れた後、もう一度microSDの中身を覗くとFIRMWARE.BINに名前が変わって、他の設定ファイルも生成されている
  • 注意事項:

    • SKR v1.3の中心ぐらいにある赤いジャンパピンを+5VUSBに繋いで書き込みを行うこと
    • 自分の環境では当初はINTと+5Vに繋いでいて、上手くフラッシュされず、サポートにまで連絡してしまった(アホすぎ...)

4.Octoprintを設定する

  1. 設定(レンチのアイコン) > Serial connection > General > Serial Port/tmp/printerを追記しSave
  2. (もう一度設定を開き)上記のSerial Port/tmp/printerを選択
  3. 設定(レンチのアイコン) > Serial connection > BehaviorCancel any ongoing prints but stay ...を選択しSave
  4. Connection(メイン画面の左上)のSerial Port/tmp/printerを選択し、Connect
  5. Terminalタブ(メイン画面)でstatusと打ってsendする

5. printer.cfgの設定

  1. github上にあるskr v1.3用cfgファイルをダウンロードしてprinter.cfgとして保存する
  2. [mcu]のセクションでserial:以降をls /dev/serial/by-id/*して出てきたものにする(klipperがうまくflashされていればusb-a...klipper...port0のようにklipperの文字が入っている気がする)
  3. 完成したprinter.cfgをラズパイ上の/home/[ユーザー名]/へコピー(WinSCPとかで)
  4. Octoprint上のterminalでrestartコマンドを打つ
  5. Klipper state : Readyが出てきたらインストール完了

printer.cfgの書き方

  • xxxx_pin:
  • PID制御のパラメータ(pid:)はで設定するのでいじる必要はない

6. Octoklipperの導入(任意)

  1. 設定(レンチのアイコン) > Plugin manager > Get more...Octoklipperを検索&インストール
  2. Octoprintの右端にKlipperタブが現れてGet statusボタンとかが押せるようになる

まとめ

  • Klipperのインストールが完了した
  • 次はKlipperの(個人的)目玉機能であるPressure Advanceなどを設定していきたい

アマチュア無線局免許状が届いた

免許状が届いた

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ヶ月ぐらい

まとめ

  • 無線局免許状が届いたので5.6GHzVTX頑張る
    • 頑張ると言っても映像の伝送だけだと送信機/受信機を買うだけなわけだが...
  • コールサインを得たので他の周波数帯(144MHz帯とか)もとりたいなぁ...

キーボードブリッジを自作した

事の始まり

ノートPCで使いたい

  • メインがノートPCなので、尊師スタイルのように*1して使いたい
  • 尊師スタイルをするためのキーボードブリッジはPFUダイレクトで販売されている
    • 当然ながら、これはHHKB向けの製品
    • Keychron K2はHHKBより一回り大きいので合わなそう

自作する

  • ちょうど大学にレーザープリンターが置いてあったので自作することにした

    1. アクリル板の調達

      • 材料のアクリル板は大学を通じてMISUMI-VONAに発注した。
      • 失敗することを見越して大きめのサイズで発注したが、代金は1840円ほど。
    2. 加工

    3. 加工後

      • 出力が強すぎて、保護カバー(?)の紙が焦げ付いてアクリルとくっついてしまった

完成

感想

  • PFUダイレクトのキーボードブリッジよりも半額以下で自作できた
  • トラックパッドの部分を避けて作れるなど、自作ならではの部分があったので満足

余談

*1:厳密には尊師スタイルはノートPCの上にHHKBを置いて使うことらしい

FDM方式3Dプリンターで作った造形物の積層痕消しの検証

積層痕消したい

方法

  • テストピース(PLA)の積層痕が目立つ部分にアクリサンデーとポリパテを塗り、24時間後の変化を観察する

アクリサンデー

  • まず、アクリサンデーを用いる方式

所感

  • 結構多めに塗るとPLAがドロドロとしてきて溶けていることが確認できた。
    • が、ドロドロしている分、平面にすることが難しい
  • 乾燥後は特に臭いはせず、触るとすべすべ

ポリパテ

  • 次にポリエステルパテを用いる方式(ポリパテはタミヤのポリパテを用いた)

所感

  • 適度に粘性があって塗るというより、盛るといったことが可能
  • 盛った箇所にきちんと色がつくので、サフを吹かなくても大体修正できる
  • 乾燥後は紙粘土に似た独特な臭いがして、(表面処理云々によるんだろうが)触ると粉っぽく感じる

まとめ

  • 個人的にはアクリサンデーよりもポリパテのほうが扱いやすく感じた
    • ポリパテのほうが盛れるので量の調整が効きやすい
    • アクリサンデーだと曲面に塗るときに流れて行ってしまう
  • 積層痕を消す能力に関しては両者とも同等ぐらい
    • だが、アクリサンデーだと透明なので消えたor消えないがわかりにくいかも

Slackは見ないけどLineは見る人向けSlack App(Event API使用)を作った

概要

  • 「Slackは見ないけど、Lineは見る」という謎の論理を持った人のためにSlackでメッセージを飛ばしたらLineで通知が入るようにした
  • サクッと作れると思ったら、Outgoing Webhookはlegacyとか言われたのでEvent APIを使って作った

前置き

手順

  1. GAS(Google App Script)の設定

  2. Slack Appを作る

    1. Slack API: Applications | Slack からCreate New Appして設定する
      • App Nameには適当な名前を、Development Slack WorkspaceにはSlackで通知させたいワークスペースを選ぶ
    2. Install Appする
      f:id:kuroblo039:20190426185715p:plain
      • 許可云々が出てくるので自分の主義に見合ったら許可
    3. Event Subscriptionsでいろいろ設定
      f:id:kuroblo039:20190426185934p:plain
      • Request URLには控えておいたGASのURLを入力
      • 入力してVerifiedになったら、Subscribe to Workspace Eventsでmessage.channelsを選択する
  3. 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に関しては後述

  1. Line Notifyを設定する
    1. Line Notify にLineのアカウントでログインしてマイページに進む
    2. Tokenを取得する
      f:id:kuroblo039:20190426193752p:plain
    3. 出てきたTokenを先ほどのGASのプロパティに設定する

動かしてみる

  • Slack上の任意のチャンネルで「@line」をつけてメッセージを送ると、Line Notifyから何かしらのメッセージが来ているはずです
    f:id:kuroblo039:20190426200027p:plain

トラブルシューティング(動かないときは)

  • Google Drive上に置いてあるスプレッドシートでログを確認し、Slackからjsonが送られているか、jsonをparseできているか等を確認する
  • GAS上で上記の function send(message) のみを動かしてLine Notifyから通知が来るか確認する
    • 通知が来ると [ トークン名 ] undefined の形で表示される

思ったこと

  • 以外に簡単にできる(Line Notifyが使えない頃は通知のためだけにチャットボットを作っていたので)
  • これでSlackを見ないという可能性は排除できたので、それでも見ないなら、その団体に興味がないということかもしれない