前回リニアガイドへの換装を行ったが効果は感じられずつまらなかったので、今回はLCDディスプレイの換装に挑む。
3Dプリンターのキットを見ていると、2種類のLCDディスプレイを見かける。2004(20文字4行)タイプのテキスト表示ディスプレイと、12864(128×64ドット)のグラフィックタイプディスプレイだ。
今回購入した2台のデルタ型プリンターはいずれも2004タイプのテキスト表示ディスプレイ。SDカードから印刷する場合は使うだろうが、普段PCに接続してプリントし、プリント中はPC画面のRepetier-Host画面を眺めているので本体のLCD表示部を見る事はほとんど無い。中にはLCD不要なので外してしまっている人も居る様だ。(一応液晶横についているダイヤルで簡単な操作も出来るが今のところ筆者は使った事はない)
3Dプリンターで自分がデザインしたものを作る事も目的だが、3Dプリンター自体を作る事も目的の一部となってしまっている今、ディスプレイも格好良くバージョンアップしたい。現在プリンターを床に置いていて表示も見辛いので、見易く配置もしたいところ。
まぁ、同じ事をしたくて記事を見に来た人に結論を先に言うと
やめとき。
中華から12864タイプのディスプレイを購入。2004とコネクターは同じなので、メインボードはそのままでディスプレイを交換しソースを修正する事でグラフィカルタイプの表示に切り替わる。筈。なのだが。
まずはカバーを作る。Thingiverseで良さそうなカバーデータを拾ってきて印刷。
http://www.thingiverse.com/thing:626307
現在ヒートベッドが無いのでPLA素材でも大きい出力を行うと角の方が結構反ってしまう。内側の基板を入れるスペースには影響なかったが。
しかし、9cmデータを印刷すると8.95cmになる調整にしていた影響で、微妙に基板が収まらない。ぎりぎりの寸法でモデリングされていた様だ。
101%程度に拡大して印刷し直す手もあるが、こんなモデルでも印刷に3時間ほどかかっているので印刷し直すのも面倒だ。調整する際は、小さ目に出力されるより大き目に出力される様調整した方が良さそうである。
PLAは非常に硬く、出力後にヤスリやナイフで調整を行うのも難しい。幸い小型版ではあるがフライスマシンがあるので削って加工。
なんとか液晶基板がカバーに収まる様になった。
ファームウェアのソースはConfiguration.hの下記行を修正するだけ。
//#define REPRAP_DISCOUNT_SMART_CONTROLLER //こっちはコメントアウト #define REPRAP_DISCOUNT_FULL_GRAPHIC_SMART_CONTROLLER //こっちのコメントを外す
u8glibを使うので、ライブラリを追加しておく事。
ビルドし直し、書き込んだらディスプレイのケーブルを2004から12864に繋ぎかえる。
そして電源オン!
・・・が、液晶のバックライトが点滅すると共にブザーも鳴る(゚Д゚;)。慌てて電源を落とす。
ソースが間違っているか、ケーブルが違うか、メイン基板が12864のディスプレイに対応していないのだろうか。
情報を検索してみると、液晶へは2本の同じコネクタのケーブルで繋がっているのだが、ケーブルが1と2で逆になっていてケーブルを繋ぎ変えたら動作した、との情報が。(下記画像は2004の背面)
ケーブルを繋ぎ変えてみる。
煙が出ないか心配しつつ電源オン。
・・・今度は全く動かない。再度ケーブルを戻すとバックライトフラッシュとブザー音が鳴る。とりあえずショートや電源逆転して故障はしていない様だ。
何度かケーブルを変えてみたり2004付属ではなく12864付属のケーブルと交換してみたりするが、症状変わらず。バックライトフラッシュするか、無応答。
さらに情報を探っていると、こんな情報を発見。
「コネクタのタブ(出っ張り爪)を削って逆にしたら動いた」
・・・コネクタ自体を反転?いやいや、さすがにそれは無いでしょ。失敗したらショートする可能性高いし。
・・・フライスマシンで2本両方のコネクタの液晶側のタブを削ってみる。
そしてコネクタを2本共上下逆にして繋いでみる。
電源オン。
中華製品は冒険がいっぱいだな。
動く様になったのでディスプレイを何処に設置するか考えてみる。出来ればビームの支柱に、少し上を向けた状態で取り付けたい。が、Thingiverseで検索しても丁度良いパーツが見つからない。
よし、これくらいなら自分でモデルを作ってみよう。と、言う事でAutodeskの123D Designで初モデリングをしてみる。
BlenderがSTLファイルの入出力も出来て良いのだが、機能が多すぎる為使いこなすのは難しい。123D Designを触ってみた所、機能は限られているが簡単な造形をするには十分で、慣れるとなかなか使い易い。
STL出力してRepetier-Hostに読み込ませ、プリント。
サポート材を使わなかったので一部だれているが、デザインした通りの物が出てきた。感動である。せっかくなので初Thingiverseアップロードもしてみた。
http://www.thingiverse.com/thing:891005
アクリサンデーで液晶ユニットと接着し、ビームに取り付け。
なかなかいい感じに仕上がった。ノブはギター用ノブに付け替えている。
さて、
感じよさそうなのに何故最初に12864の液晶への換装は「やめとけ」と言ったか。
デルタ型3Dプリンターの製品は検索しても殆どが2004の様なテキストベースの液晶ディスプレイしか付いていない。これには理由があった。
先ほどの液晶用アームであるが、良く見ると下半分が凸凹になっている。
おかしいな、と思いキューブモデルを印刷しつつ動作を見ていると、動きがおかしい。頻繁にホットエンドの動きが止まるのだ。
調べてみると、デルタ型プリンターはアームの位置計算のために複雑な計算を多数行う為、これにグラフィカルな表示の処理まで加えると、Arduinoの様な非力なCPUでは処理が追い付かなくなってしまうらしい。
ガ―(゚Д゚;)―ン!!
せっかく換装したのに・・・。
プリントしている最中は表示内容を簡易化するとかで対処できないだろうか?そもそも2004タイプでもプリント中は表示を抑えた方がプリント結果良くなったりする事はないのだろうか?
ううむ。
プリント中は表示処理を止めてしまえばプリント精度が上がるかもしれない。
と、言うわけでレーザー加工機の時にGRBLコードの解析をやって面倒だったので今回はソースを見る事はやりたくはなかったが、Marlinソースを解析、どこで表示処理を行っているか確認し、プリント中は表示を止める為の仕組みを入れてみた。表示を完全に消すと寂しいので、プリント中と表示させる様にした。
で、やったのが以下の修正。
ultralcd.cppのlcd_update関数でディスプレイの描画をやっているので、ホットエンドがエクストルーダ動作最低温度(デフォルト175度)を超えた場合に作成中画面を表示、以降表示内容の更新は停止。温度が下がった時に再度描画を再開する様にした。inoperation変数の追加と、if degHotendのブロックが追加した分。
boolean inoperation = false; void lcd_update() { static unsigned long timeoutToStatus = 0; if (degHotend(0) > EXTRUDE_MINTEMP){ //nefa if (!inoperation){ //first time, draw screen u8g.firstPage(); do { u8g.drawBitmapP(0,0,START_BMPBYTEWIDTH,START_BMPHEIGHT,start_bmp); u8g.setFont(u8g_font_6x10_marlin); u8g.drawStr(62,41,"Creating..."); } while( u8g.nextPage() ); inoperation = true; } return; //disable while running }else{ inoperation = false; } #ifdef LCD_HAS_SLOW_BUTTONS slow_buttons = lcd_implementation_read_slow_buttons(); // buttons which take too long to read in interrupt context #endif lcd_buttons_update();
動作中の表示画面はスタート画面の画像と、Creating…の文字を表示する様にした。
さらに、画像もマミさんの画像に差し替えた。画像はBitmap converterのツールを使い64×64モノクロビットマップを配列に変換し、DOGMbitmaps.hに画像データ定義されているのでここのstart_bmpに変換した配列をコピペする。
これで、筆者のデルタ型プリンターは起動時とプリント時にマミさんが表示される様になった。
ちなみに、通常の表示内容自体を描画しているのはdogm_lcd_implementation.hのlcd_implementation_status_screen関数内なので、表示内容を変更したい場合ここをいじると良い。
これにより、プリント中にホットエンドが止まる事は無くなりスムーズに動くようになったが・・・
まだ縞模様が出ている。
結局、リニアガイドに換装した際にベルトのテンションがゆるかった様で、天板を上げてGT2ベルトのテンションを上げる事で綺麗にでる様になった。
最後に残っている大きな改造がヒートベッドの取り付けだが、こちらはまだ注文しているパーツが届いていないのでまた後日情報をお届けしたい。それまでに造形不良発生と対策についての紹介を。
こんにちは!こちらを参考にして自分も同じように造形中は情報を非表示にしてみたのですが、のちに「DELTA_SEGMENTS_PER_SECOND」を減らすことで情報を表示しつつホットエンドが止まらないようにできるとわかりました。よろしければ試してみてください。
情報ありがとうございます。今は安価なWindowsタブレットをプリンタ専用機として取り付けて使っており、表示はほぼタブレット側で確認しています(^-^; 昔のCD-R焼いている時の様に、世代遅れのPCで3Dプリンターを動かしていると他の作業の影響でプリントが止まってしまう事もあったので・・・。スクリーンセーバーに入った瞬間一瞬止まったりするのでスクリーンセーバーを切ったりとか20年前に戻った気分を味わってました。