Pc-Trace

<< 2024年11月 >>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30






Pc-Trace
PC-Trace

2019年3月の記事 prev >
>>2019年3月の記事一覧

「GrblGru」 日本語化ファイル作成・備忘録

「GrblGru」の日本語化。

以下、自己責任に於いて!
※暴走など、もしものときは添付したファイルを削除するだけ。

ここに添付したzipファイルを解凍し、アプリをインストールしたフォルダに投げ入れる。(3ファイル)

インストール・パス例:
C:\Program Files (x86)\toe\GrblGru
など。

平行して
C:\ProgramData\GrblGru
などとしたパスにデータフォルダが作成されるので、同じ3つのファイルを投げ入れておく。

日本語化はこれで終わり。

添付した「Language_jp.txt」は「Unicode」タイプで編集可能だが、翻訳してはいけないワードが存在するので予めコピーを作成するなど、細心の注意が必要。

専門的に解説する事ができないので「Wiki」などを参照する事をおすすめ。

起動後に「エキストラ」メニューの「Language」の項目を選択。


日本語化ファイルを入れたあとは「Japanese」の項目が追加されるのでチェックを入れて日本語化する。



英語表示の場合



日本語化されると「Google翻訳」とは言え理解しやすい。


2Dデータ作成作業画面


その他のパラメータダイアログ


マシンの設定


その他、操作に関するコントローラなどはヘルプなどを利用し、時間をかけて理解する必要がある。

オリジナルシステム
https://www.grblgru.com/
添付ファイル 添付ファイル


「EggBot」 結局・・

結局、高機能なアプリを諦めきれず日本語化完了。
これだと使える。



実際にボードを繋ぐと動作する。
添付動画はデータの作成に慣れるまでのシミュレーション!
添付ファイル 添付ファイル


「Coffee Break」 すべてクリアで作業終了!

EggBotからCNCマシン全般をカバー。
範囲が広く、自作のマシンまでカスタマイズ出来る高機能アプリ。
英語音痴でも使えるようにと、せっせと取り組んだ日本語バーションだったが、完成とともに「Shift」+「Delete」の悪夢!
となりにあった翻訳対象の英語原本が残ってしまった。
3日間の作業がリセットされたと同時にモチベーション崩壊ですべて終了となった。

作業途中のオープニング画面


翻訳半ばのテスト画面



動画は作業途中のテスト動画
添付ファイル 添付ファイル


「GrblGru」EggBot Simulation



FreeSoft・Downloadページ
https://www.grblgru.com/


「Blender」メモ

Unityの「NavMesh」に似た機能? 既出かもしれないがとりあえずメモ。



「Inkscape」 DXFプラグインについて

Inkscapeの「ファイル」メニューから、「開く」または「インポート」で読み込めるDFXファイルは「AutoCAD R13」以上。


できれば日本語を文字化け無しで読み込みたいが何故か文字エンコーディングが「Latin 1」でしかうまく読めない。
そこは割り切る他ないので素直に。


ヘルプメッセージ


A4サイズ自動スケーリングで読んだ場合。 文字化けは容赦!


DXF(日本語)インポートプラグインは、0.92.4の最新版でテスト
Inkscapeをインストールしたプラグインフォルダに解凍して投げ込む。
例:
C:\Program Files\Inkscape\share\extensions
(自己責任で)

「開く」場合は新規の画面に、
「インポート」した場合は現在開いている画面に読み込まれる。

CADソフトでも無いのに図面を読める事のメリットとは?
個人的な見解として「Inkscape」はDTP色の濃いソフトに思えてしまうが、高度な編集機能を備えたCNCデータの作成ソフトでもあるため、正確な図面を読めることにより正確な加工(または描画)が可能になる工作には欠かせない必須ソフト。
EggBot、CNCルーター、Laser加工、プロッター、3Dプリンター・・他、これ一本でカバーできる。
添付ファイル 添付ファイル


「EggBot」 再調整

EggBot再燃を否定したばかりだったが、反省!
円筒形にシームレスな幾何学図形を描いた場合、ステッパーの計算だけでは納得いかない繋がりになるのをそのまま見過ごしてきた。
計算通りにステッパーを回転させても重複する最後の線が僅かに太くなる問題!

重複して描画すれば当たり前の結果かもしれないが、動画で見る限りオリジナルメーカーのものは滑らかで重複線が太くなっていない。

0.005度のステッパーのズレを調整してこの問題は解決した。
論より証拠で動画をUP。

動画は最後のつなぎの部分。


ペン先が多少擦れて太くはなったが、日本製の三菱PIN 0.1ミリ
動画は等速録画のものをUP。





ペン先をタマゴの表面に軟着陸させるのが一苦労。




添付ファイル 添付ファイル


「SketchUp」 Cuviloftの備忘録

ふと「Cuviloft」で思い出した事があったのでやってみた。
当時にSketchUpとこの機能があればセルラホーンの設計も楽だった!

以下はエッジがどう処理されたか?についての個人的な備忘録。

添付ファイル 添付ファイル


「Coffee Break」 EggBot:Servoに関する備忘録

極細ペン用に
Arduino・Servo遅延時間(PWM)の調整中

ペン上昇を早く
ペン下降は遅く

前にこのペンを利用して(0.2ミリの細)タマゴの殻を割った経験あり!
様子見なのでペン固定(少しグラグラ!)と芯出しはやってないがうまくいってる。

中程度の迷路だが、フィードレートの調整次第では0.1ミリの極細ペンで巨大迷路までいけそうだ。

ペン先の太さからこの密度が限界。 
添付したzipファイル(SVG)は実際にプリントに使った迷路。

おそらくだが、今夜の料理で無慈悲に割られる予感。

ソース備忘
config.h 内の定義

#define SERVO_PIN_1 11
#define SERVO_DELAY 75 // (ms) delay between position changes



// Optional output
#define ALT_PIN 2



SoftwareServo.h

#ifndef SoftwareServo_h
#define SoftwareServo_h

#include "Arduino.h"
#include

class SoftwareServo
{
private:
uint8_t pin;
uint8_t angle; // in degrees
uint16_t pulse0; // pulse width in TCNT0 counts
uint8_t min16; // minimum pulse, 16uS units (default is 34)
uint8_t max16; // maximum pulse, 16uS units, 0-4ms range (default is 150)
class SoftwareServo *next;
static SoftwareServo* first;

public:
SoftwareServo();
uint8_t attach(int); // attach to a pin, sets pinMode, returns 0 on failure, won't
// position the servo until a subsequent write() happens
void detach();
void write(int); // specify the angle in degrees, 0 to 180
uint8_t read();
uint8_t attached();
void setMinimumPulse(uint16_t); // pulse length for 0 degrees in microseconds, 540uS default
void setMaximumPulse(uint16_t); // pulse length for 180 degrees in microseconds, 2400uS default
static void refresh(); // must be called at least every 50ms or so to keep servo alive
// you can call more often, it won't happen more than once every 20ms
};

#endif

SoftwareServo.cpp
#include "SoftwareServo.h"

SoftwareServo *SoftwareServo::first;

#define NO_ANGLE (0xff)

SoftwareServo::SoftwareServo() : pin(0), angle(NO_ANGLE), pulse0(0), min16(34), max16(150), next(0)
{}

void SoftwareServo::setMinimumPulse(uint16_t t)
{
min16 = t/16;
}

void SoftwareServo::setMaximumPulse(uint16_t t)
{
max16 = t/16;
}

uint8_t SoftwareServo::attach(int pinArg)
{
pin = pinArg;
angle = NO_ANGLE;
pulse0 = 0;
next = first;
first = this;
digitalWrite(pin, 0);
pinMode(pin, OUTPUT);
return 1;
}

void SoftwareServo::detach()
{
for (SoftwareServo **p=&first; *p!=0; p=&((*p)->next) ) {
if (*p == this) {
*p = this->next;
this->next = 0;
return;
}
}
}

void SoftwareServo::write(int angleArg)
{
if (angleArg < 0) angleArg = 0;
if (angleArg > 180) angleArg = 180;
angle = angleArg;
// bleh, have to use longs to prevent overflow, could be tricky if always a 16MHz clock, but not true
// That 64L on the end is the TCNT0 prescaler, it will need to change if the clock's prescaler changes,
// but then there will likely be an overflow problem, so it will have to be handled by a human.
pulse0 = (min16*16L*clockCyclesPerMicrosecond() + (max16-min16)*(16L*clockCyclesPerMicrosecond())*angle/180L)/64L;
}

uint8_t SoftwareServo::read()
{
return angle;
}

uint8_t SoftwareServo::attached()
{
for (SoftwareServo *p=first; p!=0; p=p->next ) {
if (p == this) return 1;
}
return 0;
}

void SoftwareServo::refresh()
{
uint8_t count = 0, i = 0;
uint16_t base = 0;
SoftwareServo *p;
static unsigned long lastRefresh = 0;
unsigned long m = millis();

// if we haven't wrapped millis, and 20ms have not passed, then don't do anything
if (m >= lastRefresh && m < lastRefresh + 20) return;
lastRefresh = m;

for (p=first; p!=0; p=p->next ) if (p->pulse0) count++;
if (count == 0) return;

// gather all the SoftwareServos in an array
SoftwareServo *s[count];
for (p=first; p !=0; p=p->next ) if (p->pulse0) s[i++] = p;

// bubblesort the SoftwareServos by pulse time, ascending order
for(;;) {
uint8_t moved = 0;
for (i = 1; i < count; i++) {
if (s[i]->pulse0 < s[i-1]->pulse0) {
SoftwareServo *t = s[i];
s[i] = s[i-1];
s[i-1] = t;
moved = 1;
}
}
if (!moved) break;
}

// turn on all the pins
// Note the timing error here... when you have many SoftwareServos going, the
// ones at the front will get a pulse that is a few microseconds too long.
// Figure about 4uS/SoftwareServo after them. This could be compensated, but I feel
// it is within the margin of error of software SoftwareServos that could catch
// an extra interrupt handler at any time.
for (i=0; ipin, 1);

uint8_t start = TCNT0;

uint8_t now = start;
uint8_t last = now;

// Now wait for each pin's time in turn..
for (i=0; i uint16_t go = start + s[i]->pulse0;

// loop until we reach or pass 'go' time
for (;;) {
now = TCNT0;
if (now < last) base += 256;
last = now;
if (base+now > go) {
digitalWrite(s[i]->pin, 0);
break;
}
}
}
}

// ----------Servo遅延調整-------------

void moveServo(double value)
{
const int incrementDelay = SERVO_DELAY;
const int currentAngle = servo.read();

servoEnabled = true;
if (value < 0.) value = 0.;
if (value > 180.) value = 180.;

if (value > currentAngle) //
{
for (int angle=currentAngle; angle {
servo.write(angle);
delay (incrementDelay * 0.6);
SoftwareServo::refresh();
}
}
else if (value < currentAngle) //
if (value < currentAngle) //
{
for (int angle=currentAngle; angle>value; angle--) // 角度デクリメント
{
servo.write(angle);
delay (incrementDelay * 0.5);
SoftwareServo::refresh();
}
}
{
servo.write((int)value);
}
// nothing to be done if value == currentAngle
}
// -------------------------------------------------------




添付ファイル 添付ファイル


「EggBot」のスクリュー・プラグインから

「EggBot」に付属するプラグインの中に、幾何学模様の作成用として使えるものがある。(3/10にSVGとして既出。 スクリュー機能)
なのでInkscape0.92以降用に再編集、日本語化したものを添付する事にした。

ねじりの応用については個人的に勝手にやってみたものだが説明は面倒なので備忘録用の動画を作成して添付。(ただし編集無しのグダグダ!)
動作確認は「Inkscape0.92.4」のみ。

単に2D図形を周期的にねじるだけのプラグインだがアイデア次第。
ただし円や楕円での効果はゼロに近い(当たり前)
ステップ比に負の数値を使う事ができるが、図形は外側に広がる。


zipファイルを解凍したら中にある10個のライブラリを拡張フォルダに直接投げ込むだけで、「Inkscape」の再起動後に使えるようになる。

Inkscapeの拡張プラグインのパスは通常の場合、

C:\Program Files\Inkscape\share\extensions
 ↑
コピペしてエクスプローラーのアドレス欄に!

結果についての責任は一切負えないので自己責任で。
(動作しない場合は入れたファイルを削除するだけ)
添付ファイル 添付ファイル


「Coffee Break」 EggBotを GRBLでやった場合の備忘録

前出の動画のように「EggBot」をGRBLで動かすとどんな感じになるのか? 検証してみたくなった。
動画にUPされているEggBotのソース内容が解らないので、描画するタマゴ面のサイズやステッパーの設定を「Inkscape」内の「Laserプラグイン」に適合するよう、grblソースを変更。

※EggBotのファームに利用する Servo + モーター制御 は定番とも言える「grbl-servo-master」(GitHubで)
ハードウェアは弄るのが面倒なので現在の構成を(PIN配置も同じ)そのままで使う事にした。

下の画像が実際に稼働させたときの「設定」に関する備忘録。
EggBotそのものは「Inkscape Ver0.91」でないとうまく機能してくれないので日本語化するついでに最新版の0.92.4用に変更。

暫定的だが、ステッパー1回転が「Inkscape」の描画枠横サイズで100ミリになるよう設定。(これはあとで後悔する事に。パス化したときの矢印が邪魔になるので200ミリにすべき)
今回はEggBot用GCODEの出力(左側のダイアログ)を使わずLaser_pluginで出力。


grblのEggBotに合わせた各ステッパーの設定値(暫定的)


結果が同じ挙動になるのは予測できていたが、やはりその通り。
GRBLはコントローラーの種類が多く機能も充実しており今後はGRBLで統一した方が覚える事も少なくてすむ。

参考サイト:
https://github.com/grbl/grbl/wiki/Connecting-Grbl


「Coffee Break」

再燃した訳では無いが、これ(Pronter Face)と違うアプリで同じ事を考えていた。



これまで使ってきたコントローラー(Spherebot_UI)などはGRBL系に比べて問題が多すぎる。
GitHubから「Spherebot_UI」の改正版が提供されていたがWin764bitではうまく動作してくれなかった。


どこが違うのかよくわからない製品

同じ製品に見えるがどこが違うんだろう?
ポチる前によく調べる必要がある。
「EggBot」は国を問わずよく質問を受けるアイテム。

Mustwell eggbot painting robot egg drawing machine for drawing on egg and ball Color egg robot
 価格: ¥ 60,483




WillBest eggbot painting robot egg drawing machine for drawing on egg and ball Color egg robot
 価格: ¥ 17,349


「ugsplatform」

長年「XP」を使ってきた関係で制御ボードなどを一定の制限下で稼働させなければならず見送ってきたsoft。

https://winder.github.io/ugs_website/

「Language」の切り替えはあるものの翻訳されるワードが一部だけという、中途半端な日本語化になってしまっている。
(限定的な操作しかしないので間に合うと言えば間に合う)

これまでGRBLのコントローラとして「UniversalGcodeSender」をメインに使ってきたが、「ugsplatform」はより細かな設定ができ多機能に思える。




画面レイアウトを自分好みに設定し、二時間ほど弄ってみた。 これまでのように接続するハードウェアを変えるたびにアプリを使い分けなくてもこれ一本でいける!



次は自作の「AxiDraw」と3Dプリンターに取り付けたレーザーで試してみたい。
3Dプリンターのレーザー出力調整はこれまで通りFAN端子を使ったPWM信号で出力を制御する予定。
本来、PWM制御が必要になるのはラスター信号だけだが、この前ベクトル信号との混在照射に成功しているのでロスタイムを少なく抑えられる。
添付ファイル 添付ファイル


「Inkscape」 Ver0.92.4 インストール

バージョンアップするたびにメニューFONTが戻る問題
もう馴れた。




prev >