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

Eggbotの記事 prev >
>>このカテゴリーの記事一覧

「Coffee Break」 タマゴ地獄(暇なわけでは無い!)

季節的な疲れなのか?、スランプだが暇な訳では無い!

エッグアートは思いの外人気があり、描いても描いても貰い手が現れるので100個や200個描いた程度で到底足りる事はない。

とは言っても摂取量の制限は必要なので、食べ過ぎには注意。

下は、Freeで公開されているDisneyの塗り絵。
タマゴにプリントしてみた。 (中身は先に抜いてある)








我が家の2日分のたまご消費量。
タマゴの描画よりスタンドをプリントする時間の方が長い!



いつの間にか100以上のパターンデータに。
・・と言っても、使うのはお気に入りのパターンに集中してしまう。
添付ファイル 添付ファイル


フリーのレーザー彫刻ソフト「Benbox」でEggOBotを動かす

フリーのレーザー彫刻ソフト「Benbox」でEggBot用のGCODEが動作するか試してみた。

「Benbox」ダウンロードサイト

自作機に合わせてPinを設定した後、gcodeを取り込んで実行してみる。

設定画面1



CNC SHIELDに合わせた設定画面2
注意!:下の画像中、本来"右の赤枠"と書かなければならないところを誤って"左"と表記してしまったためここで訂正。



結果は精度を損なう事なく無事動作。
EggBotを実行できるソフトがまた一つ増えた。

添付したmp4動画は実際に稼働させた様子(等速)
今回の実行した「EggBot」用のGCODEも添付(編集無しでこのまま実行)
添付ファイル 添付ファイル


「Inkscape」Enduranceプラグイン: Photo→三角波変換

EggBot、AxiDraw、Laser用
Photo→ベクトルデータ変換テスト

波形を「正弦波」、「三角波」、「方形波」の3つの中から選択できる。
ラジオの波形・周波数と似た考えになるが、振幅変調、周波数変調、更に明暗をガンマ補正係数で調整して目的のラスタベクター画像を作成する。

InkscapeのExtensionから設定ダイアログ
画像出典:http://endurancelasers.com/



実際にやってみた例



設定比較



http://endurancelasers.com/



「EggOBot」 もう1台!

引き取り人(娘)が現れたため急遽もう1台製作。

本体の3Dプリントに13時間 + 製作丸一日。

実はこれを待つのが一番辛い!
10時間以上経ってケーブルがヒートベッドのアジャスターに引っかかり空打ちが発生!・・で緊急停止。
3Dプリンターでの失敗はモチベーションがガタ落ちとなる。



気を取り直して本体再プリント。 今度は無事に終了。
次の試練は「ステンレス定尺ボルトの」切断作業!



「Coffee Break」

娘が頂いてきたオレンジの中の一つ!
この丸さ、この艶!
変にモゾモゾするが"我慢!"



配線を残して「EggOBot」2号機完成!


健康なお年寄りならすでに夢の中?(無いか)
通電時の審判は明日待つ事にした。

・・とグズグズしてたら2時過ぎてた。

テストプリント(古いサンリオ・フリー素材)をMP4で添付。
かなりピンぼけだが、これまでのEggBotと同じなので未修正、倍速。
添付ファイル 添付ファイル


「EggBot」タマゴの中身抜き 後編(3分程度の実践)

タマゴの抜き出し実践編写真。

容器名が不明のカップ

(その後ペットボトル用のコップである事が判明)
出典:
https://macaro-ni.jp/41919



タマゴを乗せる


ホームセンターで購入した画鋲をゆっくりと刺す














取り出したタマゴは冷蔵庫に入れず、すぐに調理して食べる!



中身を抜いた殻の洗浄後は充分に水を切って乾燥させる。
経験上、乾燥には丸一日かかる。


「EggBot」タマゴの中身抜き 前篇(準備)

EggBotに描画したあとのタマゴの中身抜き。
友人からの質問も多いので、個人的な抜き出し方法を少し。

穴あけ用の押しピンと、穴を広げるために2mm程度のドリルを用意。
(穴の拡張時に綺麗な円形を保てる。)

少し大きめのペットボトルの蓋に5ミリ程度の穴を開け、水道用などのOパッキンをグルーガンなどで貼り付け、空気押し出し用と洗浄用の2つを用意しておく。(近くのホームセンターなどで手に入る)

揃えるツール


現在使用中のペットボトル


グルーガンで接着した水道用パッキン。
ある程度の気密が保てれば何でも良い。


中身の抜けた殻は息を吹きかけるだけで転がるほど軽い!




実際にタマゴの中身の抜き出す作業へとつづく・・


「EggOBot」 完成!

実に改良すべき点の多いマシンだったがやっと完成!

コンパクトで精度も申し分ない出来栄え。
今回より外部電源は電圧可変タイプ(30W)のAC/DCアダプターに変更。

完成写真横


使い慣れたCNC SHIELD


上面から


配線類は束にして結束


テストプリントは初回から狂い無し!


順調!



自信を持って完成したはずのマシンがスイッチオンでまさかのバイブレーターに!
過去に破壊したドライバーをそのまま在庫と混ぜてしまっていたのをすっかり忘れていた。

製作記録は後日(別館かな?)
添付ファイル 添付ファイル


「EggBot」 経過記録

オリジナルのままでは色々な問題が発生するため随所を改造。
あとでまとめるとして製作の途中経過写真のみ。
目標は高精度高速プリントが可能なマシン!(意気込みだけ)

背面。 ボート類以外のフレームはほぼ完成!


フロントの切り抜き。
Oリングによるタマゴのキャッチ具合も摩擦係数を大きくとれて良好。


改造ペンアームを上げた状態。 遊びなしでスムーズ。


EggBot上部
右側Egg受け軸アジャスターはスパンいっぱいに広げたダブルベアリング。


一日で完成させる予定が本体改造と調整に思いのほか手こずった!
性能的にプリントできるサイズに制限はあるものの、たまごSサイズから
Lサイズまでカバーできれば良い。

ボート編につづく・・


「EggBot」 パーツ拾い出し

フレーム本体に合わせて在庫パーツから使えそうなものを拾い集める。

どれが何処に必要なパーツなのか未確認。
なのでとりあえず全パーツをプリント。
FANが止まって見えるが、100%のフル回転!



主な電子パーツ。
在庫処分なので規格も揃っていない。(サイズのみ同規格)
NEMA17ステッピングモーターは、左側が0.4A右側1.7A
A4988ドライバの、それぞれの規格に応じた調整が必要になる。
ボードは、ARDUINO UNOCNC SHIELDを利用


NAMA17用の接続ケーブル。
Amazonで注文したが、ありがちな注文ミス!
平行配置(対)のケーブルが送られたきた。
片側端子が「赤、青、緑、黒」だともう片方の端子は「赤、黒、青、緑」にならないとSHIELDに接続したバイポーラ型ステッパーモーターは正確な振る舞いにならない。
PINを外して再配置するか、途中切断してハンダを付け直すか・・・。


おなじみ「SG90 Servo」と、CNC SHIELDのステッパー分解能「LOW」と「HI」を決定するショートPIN
SHIELDだけを注文してもPINが付属していなかったので別途注文した。


3Dプリンターを製作する際、6mmのトレイに混入していた5mmの定尺ボルトをそのまま誤って購入。
一本買いするときの落とし穴にまんまと落ちた。
指定のパーツは3mmだが、今回はこれを使用。


一体型のフレームはパーツ数と調整ヶ所が少なくて済むので常々製作したかったのだが、躊躇する原因になっていたのがこの部分。
タマゴの不均衡な楕円に図形を描くと出る"ゆがみ"の軽減には絶対必要なZ高調整機能。


つづく・・。


「Coffee Break」 パーツ在庫整理

これまで無駄に買い溜めた半導体パーツ。
UNO、SHIELD、ステッピングモーター、Servo・・etc

本家SPHEREBotにZ方向の調整ができる改良型フレーム一体型EggBotマシン。
余ったパーツの在庫整理にうってつけのチョイス?
(本当は一度は作ってみたかった)

ベアリングやステンレスネジなどのパーツを探さないといけないが時間はあるので "のんびり" やる。

メインフレームのプリントが終わった状態のアプリ。


夜8時頃からプリント開始。 ・・明け方5時頃。 まだ先が長い。


フレームプリント終了。
時間通りとは行かなかったが、午前中に完成。


対象マシン「Thingiverse」:リンク
https://www.thingiverse.com/thing:1683764

調整可能フレーム:リンク
https://www.thingiverse.com/thing:2120339


「EggBot」 結局・・

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



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


「GrblGru」EggBot Simulation



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


「EggBot」 再調整

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

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

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

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


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





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




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


「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
}
// -------------------------------------------------------




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


「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


prev >