3Dプリンタ 環境構築

3Dプリンタ の紹介

2019年冬に 3Dプリンタを入手しました Ender-3 Pro です
3Dプリンタも安くなったもので 3万円前後で買えるようになりました。
Ender-3 Pro 概要

Ender-3 Pro
Ender-3 Pro
Ender-3 Pro
Ender-3 Pro
Ender-3 Pro
Ender-3 Pro
Ender-3 Pro
Ender-3 Pro
Ender-3 Pro
Ender-3 Pro

サーバ側の環境構築

ここでは Raspberry Pi 3 model B+ を 3Dプリンタサーバとすべく環境構築します
大きくは 次の 3段階です

  1. USBカメラのセットアップ
  2. Octoprintの導入
  3. スライサの導入

USBカメラは 3Dプリント中の状況を遠隔から監視するためのものです

特に 遠隔監視なんか必要ないのでは? と思っていたら
3Dプリントは結構時間がかかるようで 遠隔監視のニーズはあるようです
Octoprintにもカメラ連動の機能があります

まず Raspberry Pi にカメラを挿して 次のコマンドに反応するか確認します

$ lsusb
Bus 001 Device 005: ID 1a86:7523 QinHeng Electronics HL-340 USB-Serial adapter
Bus 001 Device 003: ID 046d:0825 Logitech, Inc. Webcam C270
Bus 001 Device 002: ID 0bda:5411 Realtek Semiconductor Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
$
 

Webcam C270 というのがカメラです
大半の USBカメラは認識され /dev/video0 などのデバイスが作られます

次に Webでアクセスできる 動画ストリーミングサービスを入れます
mjpg-streamer がよく使われている Webストリーミングのツールです
手作業でビルドする必要があります

# apt-get install libjpeg9-dev cmake
# git clone "https://github.com/jacksonliam/mjpg-streamer.git" mjpg-streamer
# cd mjpg-streamer/mjpg-streamer-experimental ; make
# cd .. ; su ; cp -r mjpg-streamer-experimental/ /opt/mjpg-streamer
 

これで /opt/mjpg-streamer/ にインストール完了します
次のコマンドで 動画配信を開始できるはずです

$ LD_LIBRARY_PATH=/opt/mjpg-streamer/ /opt/mjpg-streamer/mjpg_streamer -i "input_uvc.so -f 10 -r 640x480 -d /dev/video0" -o "output_http.so -p 8010 -w /opt/mjpg-streamer/www"
MJPG Streamer Version: git rev: 501f6362c5afddcfb41055f97ae484252c85c912
 i: Using V4L2 device.: /dev/video0
 i: Desired Resolution: 640 x 480
 i: Frames Per Second.: 10
 i: Format............: JPEG
 i: TV-Norm...........: DEFAULT
UVCIOC_CTRL_ADD - Error at Pan (relative): Inappropriate ioctl for device (25)
UVCIOC_CTRL_ADD - Error at Tilt (relative): Inappropriate ioctl for device (25)
UVCIOC_CTRL_ADD - Error at Pan Reset: Inappropriate ioctl for device (25)
UVCIOC_CTRL_ADD - Error at Tilt Reset: Inappropriate ioctl for device (25)
UVCIOC_CTRL_ADD - Error at Pan/tilt Reset: Inappropriate ioctl for device (25)
UVCIOC_CTRL_ADD - Error at Focus (absolute): Inappropriate ioctl for device (25)
UVCIOC_CTRL_MAP - Error at Pan (relative): Inappropriate ioctl for device (25)
UVCIOC_CTRL_MAP - Error at Tilt (relative): Inappropriate ioctl for device (25)
UVCIOC_CTRL_MAP - Error at Pan Reset: Inappropriate ioctl for device (25)
UVCIOC_CTRL_MAP - Error at Tilt Reset: Inappropriate ioctl for device (25)
UVCIOC_CTRL_MAP - Error at Pan/tilt Reset: Inappropriate ioctl for device (25)
UVCIOC_CTRL_MAP - Error at Focus (absolute): Inappropriate ioctl for device (25)
UVCIOC_CTRL_MAP - Error at LED1 Mode: Inappropriate ioctl for device (25)
UVCIOC_CTRL_MAP - Error at LED1 Frequency: Inappropriate ioctl for device (25)
UVCIOC_CTRL_MAP - Error at Disable video processing: Inappropriate ioctl for device (25)
UVCIOC_CTRL_MAP - Error at Raw bits per pixel: Inappropriate ioctl for device (25)
 o: www-folder-path......: /opt/mjpg-streamer/www/
 o: HTTP TCP port........: 8010
 o: HTTP Listen Address..: (null)
 o: username:password....: disabled
 o: commands.............: enabled
$
 

これで フォアグラウンドでWebサービスが起動します
http://ラズパイのIP:8010/ へアクセスしてカメラのライブ配信が確認できます


OctPrint とは Raspberry Pi でも動作実績のある 3Dプリントサービスです

3D CADツールからのモデルデータを受けて 3Dプリントできる形に変換して
3Dプリンタに転送します 3Dプリンタの操作や管理も可能です

Pythonベースとなっているようで 導入自体はすごく楽です
初回インストールは piユーザの例では 次のコマンドで

$ cd ~/opt
$ git clone "https://github.com/foosel/OctoPrint.git"
Cloning into 'OctoPrint'...
remote: Enumerating objects: 28, done.
remote: Counting objects: 100% (28/28), done.
remote: Compressing objects: 100% (24/24), done.
remote: Total 63768 (delta 3), reused 13 (delta 0), pack-reused 63740
Receiving objects: 100% (63768/63768), 38.94 MiB | 1.64 MiB/s, done.
Resolving deltas: 100% (41372/41372), done.
$ cd OctPrint
$ virtualenv venv
created virtual environment CPython3.7.3.final.0-32 in 12925ms
  creator CPython3Posix(dest=/home/pi/opt/OctoPrint/venv, clear=False, global=False)
  seeder FromAppData(download=True, pip=latest, setuptools=latest, wheel=latest, via=copy, app_data_dir=/home/pi/.local/share/virtualenv/seed-app-data/v1.0.1)
  activators BashActivator,CShellActivator,FishActivator,PowerShellActivator,PythonActivator,XonshActivator
$ ./venv/bin/python setup.py install
…
Installing easy_install script to /home/pi/opt/OctoPrint/venv/bin
Installing easy_install-3.8 script to /home/pi/opt/OctoPrint/venv/bin

Using /home/pi/opt/OctoPrint/venv/lib/python3.7/site-packages
Finished processing dependencies for OctoPrint==1.4.0
$
 

systemd 用のサービススクリプトです これを systemd のフォルダに入れておけば
sudo systemctl start oct などのコマンドで起動できるようになります

[Unit]
    Description=OctoPrint service

[Service]
    User=pi
    ExecStart=/home/pi/opt/OctoPrint/venv/bin/octoprint

[Install]
    WantedBy=multi-user.target
 

なお起動には時間がかかります 特に初回は 10分くらい

起動したら 5000番の Webサービスが立ち上がるので
ブラウザから http://ラズパイのIP:5000/ へアクセスすることができます
OctoPrint初回起動
後から設定変更できますが とりあえず Ender-3 Proを登録しておきます
OctoPrint初回プリンタプロファイル登録
Print be & build volume の設定から print volume の設定を行います
プリンタの仕様にとりあえず合わせました
OctoPrint初回プリント最大サイズ設定
カメラの設定です 先ほど試した mjpg-streamerの URLを指定します
OctoPrint初回カメラの設定
設定が完了すると OctoPrintの再起動が求められます
USBケーブルをつなぎ Serialポートに /dev/ttyUSB0 があれば選択します
Connectボタンを押せば 通信接続が行われます
うまくつながれば 3Dプリンタの状態を見たり プリンタヘッドの駆動を試せます
OctoPrint動作状況

 
 
 
 
 

クライアント側のセットアップ

クライアント側は Win10 ですが必要なのは CAD と スライサ です
FreeCAD Cura アイコン
CADは フリーソフトでは STL形式を出力可能な FreeCAD があります
FreeCAD スタート画面

スライサとは STLなどの3Dモデルを 3Dプリンタが出力可能なフォーマットに
変換するソフトです これもフリーで提供されている Cura があります

STLを Gcodeという 3Dプリンタに適したフォーマットに変換してくれます
Gcodeは フィラメントを下から1層ずつ積み上げる 3Dプリンタに従った流れです
また 印刷物をプレートへ定着させたり 印刷中に倒れたり しないようにするための
サポート ブリム ラフト などの余分印刷も指示できます
Cura スタート画面
Curaは 代表的な 3Dプリンタをサポートしており モデルを指定することができます
Cura プリンタモデル CR-10
ここでは CR-10 を選択していますが Ender-3 Pro の製品自体が CR-10 という
RepRapによるオープン設計に従って製造されているためです

プリンタの設定をカスタマイズします メニューの Mange Printers から
Cura メニュー プリンタ設定
設定できるのは プリンタの基本設定 OctoPrintとの接続 があります
3Dプリンタのファームウェア書き込み機能は OctoPrintからできるので割愛します
Cura プリンタ設定
Machine Settings では Ender-3向けの印刷可能サイズを直しておきます
マシンスペックでは X:220, Y:220, Z:250 ですが ヒートベッドに専用シートを
敷いたためシートのサイズ X:200, Y:180 としています
Cura プリンタ基本設定
OctoPrintとの連携設定では Add で追加して OctoPrintサーバを指定します
また OctoPrintから発行できる API連携キー を登録する必要があります
OctoPrintの設定から API メニューを選べば入手できます
Cura OctoPrint連携設定
APIキーがあっていれば OctoPrintへ連携できるはずです
早速 Curaからプリント指示を試してみましょう
FreeCAD Cura OctPrint連携印刷状況
印刷の状況は OctoPrintの管理画面から確認できます
Webカメラからのライブビューを見ることもできます
これで FreeCAD Cura OctoPrint の連携による 3Dプリンタの印刷環境が整いました
FreeCAD Cura OctPrint連携大きめのプリント
ドローン用の筐体モデルを出力させようとしましたが 失敗しました
参考に印刷状況の写真を載せてます

サイズが大きいため斜めにしたうえで縦にする必要があったのですが
養生テープで固定しても印刷がずれてしまう有様です



PICマイコン

PICマイコン

PICマイコンに関するネタを書いていきます
関連記事: デジタル関連写真
関連記事: Raspberry Pi関連
関連記事: IoT関連
関連記事: FPGA関連

PicKit3

PicKit3 という PICライタ兼デバッガ です
PicKit3 概要
これ 1台でおよその PICに書き込め またデバッグもできます
小型の PICではこれとは別に デバッグヘッダ という基板を接続する必要があります

GALAXY NOTE 10+

さらに完成度を高めた Galaxy Note 10+

Galaxy Note 8 から Galaxy Note 10+ に買い替えました
Galaxy Note 8は auの アップグレードプログラムに加入していたため
Galaxy Note 10+に移行する際は、約半額の 5万円程度の残債を免除してもらえる形です
Galaxy Note 10+ 梱包
auからの 配送もだいぶ早くなったのではないかと思います。
オンラインショップで注文して 2日で届きました。
Galaxy Note 10+ 外観
梱包物です 実はサンプルの画面保護シートとプラスチックケースが付属しています
また auが付けてくれていると思われる マニュアル 初期セットアップ手順 のガイドが要領を得ていて読みやすくなっています
Galaxy Note 10+ 梱包物
添付している USBケーブルを使って 旧 Galaxy Note 8 からデータ移行をかけています
Smart Switchと呼ばれるツールが 旧→新 Galaxyのデータ移行をサポートします
iPhoneほど洗練されてませんが 手軽に新機種へ移行できる工夫がされています
Galaxy Note 10+ Smart Switch1
初回起動時の画面イメージです
Galaxy Note 10+ 初回起動
au の Netflixバンドルプランにも加入したので 契約確認画面の記念キャプチャです
スマートフォン以外のブラウザなどからも動画が視聴できるので便利です
Galaxy Note 10+ NetFlix契約画面
専用のケースも買いました
薄めのカバーといった感じで 落としたときの耐久性など若干不安はあります
Galaxy Note 10+ ケース閉
ケースを閉じると自動的に画面が通知表示のみになります
逆にケースを開くと自動的に消灯状態から復帰してくれるので便利です
Galaxy Note 10+ ケース開

Auraboxで遊ぶ

Auraboxの改造

まだ具体的な機能追加などできてませんが Aurabox の改造をしてみたレポートです

Auraboxパッケージ
Aurabox本体外観
Auraboxとは 主要機能としては Bluetoothスピーカですが
ところがもう一歩進んでいて「攻めた」機能を持っています

スマートフォンと連動しプログラマブルな表示ができる LEDディスプレイ
マイク や 温度センサ や バッテリなど独自の作り込みが行われています
Aurabox梱包内容
パッケージの中身です 黒で統一されています
化粧箱もがっちりとした強度で 実はこちらも気に入っています

中にマイコンが入っていて IoTデバイスとしての使い方もできるのでは? と思い立ち
中身の調査をすることにしました
Auraboxのカバーを外したところ
まず本体を覆っているゴムのような材質のカバーを慎重に取り外し
Auraboxの内部に迫る
プラスチックケースをこじ開けます スイッチ類のところからが比較的開けやすいです
左下の丸いものは実は マイクで間違ってドライバを突っ込んで壊してしまいました
Auraboxを開けたところ
何とか開きました 基盤 大きなスピーカ バッテリが見えます
Auraboxが 2つに割れたところ
バッテリ や スピーカ に接続しているケーブルを外しました
ここから部品構成を確認していこうと思います
Auraboxインターフェース部分
Auraboxのインターフェース部分です
操作用のスイッチと 左下に(壊してしまいましたが)スピーカ そして
スイッチの上に見える突起は温度センサでしょう
Auraboxディスプレイ背面基盤
ディスプレイの丁度背面にあたる部分の基盤です ICが4つくらい見えます
中央のは STM8 と刻印されています LEDディスプレイ制御用の 8bitマイコンですね
残りの 3つは型番を調べたところ LEDコントローラです
Auraboxメイン基盤
Auraboxのメイン基盤です
特に左側の青い基盤はマイコンとなっていて 3つの大きな ICが載ってます
写真中央右の大きめのICは オーディオアンプです
写真右のチップは 電源制御関連と思われます
ICの刻印をネットで調べながら 次の構成が見えてきました

Auraboxの 代表的なIC構成
AK1050 安凱微電子(ANYKA)製 ARM926EJ-Sプロセッサ
ARMv5TE(32bitARM+16bitThumb) 192KRAM
STM8S003K3 STM8 8bitCPU
25Q16CS1G 2MB Flashメモリ
MBI501* LEDコントローラ 2つ
MBI502* LEDコントローラ
HT6818 3.3W Ultra Low-EMI Anti-Clipping ステレオD級オーディオアンプ
MT5036 6.6A 800kHz 96%変換効率 バッテリコントローラ
REALTEK8761AT Bluetooth2.1~4.0LE UART制御コントローラ

ほとんど中国製の部品で作られています
Aurabox取り付け部品
今回写真の部品を取り付けました
壊してしまったマイクとシリアル用のコネクタです
シリアル用のコネクタは Auraboxのフラッシュメモリを直接外から読み書きできるよう
外出しするためのものです フラッシュメモリを書き換えられれば自由に制御できるかなと…
Auraboxの フラッシュメモリに配線
フラッシュメモリに線をはんだ付けして外だしします 写真の右の方です
Aurabox改造完了
こうしてどうにか マイクを交換し シリアルコネクタを取り付けました
Aurabox動作チェック
一応元の機能のまま Auraboxは動作しています
フラッシュメモリのデータ吸い出しなどは まだできていません (2017-12)

GitHubには こんなプロジェクト も見つけられます
時間を見つけて試してみたいですね

Android開発

Android Studio

ここでは Android Studio を簡単に紹介します
Android デベロッパーのページで開発情報提供やツール配布が行われています
ここから Android Studioをダウンロード インストールします
Windowsで検証しました Windows用にエミュレータも提供されていて Windows上で開発・検証が可能です
Android Studio トップ画面
Android Studioでサンプルアプリを開発してみます メニューから New Projectを開きます
Android Studio New Project
開発ターゲットの Androidバージョンを選択します
Android Studio ターゲットプラットフォーム選択
Activity ということで Androidアプリのテンプレートがいくつか選べます
ここでは 簡単なアプリということで Empty Activity を選択しました
Android Studio 開発Activityの選択
IDE(統合開発環境)のメニュー項目です
Runを選ぶと Windows上でアプリケーションがビルドされ Androidエミュレータ上で動作確認できます
Android Studio メニュー項目
Android Studiの 画面レイアウトです
左から リソース(関連ファイルなど)ブラウザ ソースコードエディッタ エミュレータ と配置されています
Android Studio 画面レイアウト1
Hello World! を表示させるアプリケーションをビルドして実行してみました
Android Studio ビルド実行テスト
アプリのウィジェット配置など レイアウト関連の機能も充実しています
Android Studio ウィジェットレイアウト
ボタンを配置してみましょう 配置したい GUIコンポーネントを指定して 画面上の位置を選択するだけ
Android Studio ボタン配置
コンポーネントのプロパティから ボタンのラベル名称や外観をカスタマイズします
Android Studio GUIプロパティ
Go To Declaration を選択すれば GUIがクリックされたときのイベント処理の定義にジャンプします
Android Studio イベントハンドラ定義
OnClickイベントを受信した際のアクションを記述します テキストラベルに pushed! を表示します
Android Studio イベント記述
アプリの実行状況です ボタンが押されると pushed! と表示されます
Android Studio アプリ実行画面