とりあえず作ってみた cnc
とりあえず作ってみた【CNC・電子工作・他】
※過去ネタ倉庫です。
【目次】
・XYプロッタを作ってみた
・シリアル通信ソフトを作る
・球体プロッタを作ってみた
・CNC塗装機(模型用)を作ってみた
・デジタイジング用のプローブを作ってみた
XYプロッタを作ってみた
まずは、ベニヤ板・スライドレール・L型アングルでベースを作る
安物のスライドレールは、動きが悪いものもあるので注意
駆動部は、0.5モジュールギア & M10寸切ボルトで、ラック&ピニオン
トルクをあげるために、ピニオンギアの歯数は少なくする
今回は、3mm軸のステッピングモーターを使用
ARDUINOにGrblを書き込み、ステッピングモータードライバに接続
CNCソフトはbcncを使用してみた
最近のPCにはパラレルポートが無いので、気軽にCNCで遊びたい時はこの方法が良いかも
自作XYプロッタ1型が完成
とりあえず、動かしてみた
自作XYプロッタ2型
・z軸追加
・寸切りボルト延長
・ギア比変更
自作XYプロッタ3型
Z軸をラック&ピニオン構造に改良
リニアガイドを使用し、ペンに負荷が掛からない構造にした(自重式?)
押さえつける構造でなく、紙にペンが載っている感じで凹凸にも追従する
自作XYプロッタでミクさんを描いてみる
まずはMMDで画像を作成(TOONシェーダー系の方が線画にしやすいかも)
画像編集でエッジを強調し、2値化にする(BMPで保存)
InkscapeでBMPトレースし、パス生成(DXFで保存)
DXF形式だとこんな感じ・・(残念ながら1ストロークの線画にはならない)
あとは、bcncにdxfファイルを読みこましプロッタに出力
出力中
XYプロッタってなかなか面白いかも・・
シリアル通信ソフトを作る
電子工作における入力はハード的にスイッチを使用するのもありだが、シリアル通信アプリを用いてソフト的に入力するのもありだと思う
なので、今回はVisual Studio(c#)を使って簡単なシリアル通信ソフトを作ってみた
※ハード側の動作確認は、シリアル通信(UART)が出来るものならなんでもOK
今回はArduinoを使用
c#のコンポーネントにserialPortってのがあるのでこれを使う
あとcomboBoxとbuttonも使う
レイアウトはこんな感じ・・
ポートとボーレートは選択出来るようにする
ボタン1で0x1を送信
ボタン2で0x0を送信
で、コーディング・・
public partial class Form1 : Form
{
public byte[] SendData = new byte[10];
public Form1()
{
InitializeComponent();
}
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
// comポート選択
string s = comboBox1.Text;
if (s != "")
{
serialPort1.PortName = s;
serialPort1.BaudRate = Convert.ToInt32(comboBox2.Text);
// comポートを開く
serialPort1.Open();
serialPort1.DiscardInBuffer();
}
}
private void Form1_Load(object sender, EventArgs e)
{
// 全comポート名を取得
string[] ports = System.IO.Ports.SerialPort.GetPortNames();
for (int i = 0; i <= ports.Length - 1; i++)
{
comboBox1.Items.Add(ports[i]);
}
// ポート固定設定
serialPort1.Parity = System.IO.Ports.Parity.None;
serialPort1.DataBits = 8;
serialPort1.StopBits = System.IO.Ports.StopBits.One;
// 使用出来るボーレートを設定
comboBox2.Items.Add("9600");
comboBox2.Items.Add("115200");
}
private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
{
// ボーレート選択
serialPort1.BaudRate = Convert.ToInt32(comboBox2.Text);
}
private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
// フォームを閉じたときにポートも閉じる
serialPort1.Close();
}
private void button1_Click(object sender, EventArgs e)
{
try
{
// 0x1を送信
SendData[0] = 0x1;
serialPort1.Write(SendData, 0, 1);
}
catch
{
MessageBox.Show("ポートを選択してください");
}
}
private void button2_Click(object sender, EventArgs e)
{
try
{
// 0x0を送信
SendData[0] = 0x0;
serialPort1.Write(SendData, 0, 1);
}
catch
{
MessageBox.Show("ポートを選択してください");
}
}
}
Arduino側の受信確認プログラム (ボードのLEDを光らせる)
int a = 0x0;
int LEDpin = 13;
void setup() {
Serial.begin(9600);
pinMode(LEDpin, OUTPUT);
}
void loop() {
if (Serial.available() > 0) a = Serial.read();
if (a == 0x1) digitalWrite(LEDpin, HIGH);
if (a == 0x0)digitalWrite(LEDpin, LOW);
}
送信側アプリの操作で、
ボタン1でLEDオン
ボタン2でLEDオフ
と、なればOK
球体プロッタを作ってみた
球体に以下の顔を描いてみる
CADデータを元に下書き中・・
下書き完了
鉛筆でラフに色を塗ってみる(左側)
でもって、ジャンクこけしに装着
ちゃんと色を塗れば、それなりになるような気もしないでもない
CNC塗装機(模型用)を作ってみた
速度重視の為、Y軸の駆動方式をスクリュー方式からワイヤー方式に変更
こちらはX軸
X軸はマグネットスタンドで固定
ということで、
志(こころざし)とペイントしてみた
ハンドピースの先端キャップは外し、空気圧もかなり下げて塗装
そんなこんなで、今回のNCデータ作成手順です
まずは、Inkscapeでdxfファイル作成
InkscapeからNCVCにdxfファイルを持って行くとエラーが出たので、
AR_CADに一旦インポートし、そのままエクスポート
NCVCでNCデータ生成
でもって、CNCソフトで動作させペイント
ペイント中
ペイントを落としたねんどろいどフェイスに塗装してみる
やっぱエアーブラシだとセッティングが難しいです
ニードルキャップ自作しました(エアーブラシ先端のピンクのやつ)
セッティングがシビアだが、下書きぐらいの塗装は可能
眉間の点は、NCデータの原点(x0,y0)です
デジタイジング用のプローブを作ってみた
試作1号(左)は、縦方向のみの感知タイプ
試作2号(中央)は、縦・横方向の感知タイプ ←接点不良多発の失敗作
試作3号(右)は、縦・横方向の感知タイプ ←信頼性向上型?
材料は、いつもながらの100均アイテムとタミヤの工作シリーズ
プローブ先端は、カーテンフック(笑)
ピックテスターと先端比較
ちょっと大きいです・・
接点部分です
M2の鍋ビスと生基板の切れ端を使用
デジタイジング用のプローブ(試作3号)を使ってフィギュアのフェイスを
3次元測定(3Dスキャン)してみた
MACH3のウィザード画面(以下の設定で400点の測定)
若干、バネが強いかな?
とりあえず、測定ミスも無く完了(測定時間 約1時間)
測定後のデータをMeshLabに読み込み(点群データ変換の為)
辺&面生成後、適当なファイルに変換
Blenderに読み込ませてみる
次は、使い慣れたSketchUp
辺&面が変な部分はSketchUpで修正(修正は、MeshLab・Blenderでも可能)
思った以上の成果でした