小型CNCフライス向けATCを自作する方法を探る

Ogaki Mini Maker Faire 2018に行ってきてました. 今回は出展せず見学者として. そこでお会いした@katosun_pomさんとの会話でATC自作したいという話になったので, 実際に動いているATCを見たこともない素人がATCを自作する可能性について軽く調べました. Simplenoteに書いたメモですが勿体無いのでちょっと編集してブログに上げます.

f:id:Strobo:20181202174945j:plain
Ogaki Mini Maker Faire 2018

ATCについて

ATCについてはここを参照
なつおの部屋 MCの話 7.MCの2


工具ホルダについて

 エンドミルを固定して主軸と接続するアダプタみたいなやつ

工具ホルダの規格がたくさんある. 日本ではBTxxxで始まるBT系がよくつかわれているらしい?
BTシャンクとか呼ばれている
他にはHSKシャンクというものもある

工具ホルダはaliexpressで調べるとたくさんでてくるから簡単に手に入りそう.

https://chinatools.ja.aliexpress.com/store/group/BT-Toolholder/1838306_501429319.html
https://ja.aliexpress.com/store/product/BT30-without-keyway-G2-5-speed-handle-NBT30-ER32UM-50-L/1838306_32385822168.html


問題は工具ホルダを接続する先のスピンドルの方

スピンドルについて

ATCスピンドルというらしい?atc spindleでググるといくつか見つかったのでメモする.

Aliexspressで見つかった一番安いやつ

ja.aliexpress.com


サイズが大きい. モーターが付属していないのでここにモータを接続しないといけない. さらにATCスピンドルは一般に工具を接着するためにエアーを使っているらしいのでエアーを接続しないといけない. この辺も不明点が多く購入に踏み切れない.

S30 Spindle Starter Package

www.cncdepot.net

これはいろいろセットになっているので楽. でも高い

CNC BT15/ISO15 ATC Spindle Cartridge and Spindle Shaft Kit

kickstarterにいい感じのやつがあるけどもう手に入らない感じ.
www.kickstarter.com

タック技研ATCシリーズ

www.tacgiken.co.jp

このブログによるとホビー用CNCフライスが余裕で買えるぐらい高いらしい, 商社経由で買う必要がある.
CNCフライスの設計 11.スピンドル部分の検討mkbtm

NR3060-AQC

パッと見すごくいい感じ10万ちょい
www.youtube.com
カタログ
http://www.nsk-nakanishi.co.jp/industrial/hpms/e3000/pdf/e3000.pdf

やっぱりお高い. ナカニシ製モーターしか対応していないのかな?モーターとそのコントローラーまで全部買うと20万は越えそう
でもミスミで買えるのはお手軽でGood
jp.misumi-ec.com
jp.misumi-ec.com
モーターはミスミに掲載されていない様子


これはNR3060-AQCを別のモーターで回しているのかな?
www.youtube.com
もし本当に別のモーターで回すことができればいい選択肢になりそう.

関係ないけどATCスピンドルを自作する動画っぽい

www.youtube.com

これもまあまあ. でも大きさがね..デカイ

www.youtube.com
www.jian-ken.com

お値段は不明

オリジナルマインドに掲載されているATCの自作例

KitMill Qt用の自作ATCとAPC | 技術解説 |ORIGINALMIND オリジナルマインド
とても詳しく書かれていて非常に参考になるが,
ATCといえばATCだけど求めているものと違う...

ここまで調べて力尽きた
誰かいい感じのATCを作ってくれ

Ogaki Mini Maker Faire 2016に出展します

ギリギリの告知ですが12月3日4日に開催されるOgaki Mini Maker Faire 2016に出展します

ommf.iamas.ac.jp

当日はVESCとCANtact-miniを使った何かを展示します。
USB-CAN変換アダプタのCANtact-miniについてはもし欲しい方がおられましたら自己責任という条件付きですが、販売も行います。


f:id:Strobo:20161129143139j:plain



準備不足感もあり荒削りな出展しなってしまうかもですが、よろしくお願いします。

USB-CAN変換アダプタCANtact-mini

2年ぶりの更新ですが, まずは生存報告, 生きてます.
生きるのって大変ですね.


とある事情でUSB-CAN変換アダプタが必要になりそうでしたのでつくってみました.
当初はハードウェアからファームウェアまですべて自作する計画でしたが, 調べていくうちにCANtactと呼ばれるUSB-CAN変換アダプタを発見. ハードもファームもいい感じに完成しておりクリエイティブ・コモンズで公開されていたので, 方針変更. CANtactをベースにサイズを小型化したCANtact-miniを作者さんのEric Evenchick氏に感謝しつつ再設計してみました.

回路図

f:id:Strobo:20160919174537p:plain

基板

f:id:Strobo:20160919174633p:plain
f:id:Strobo:20160919171615p:plain

Linuxから使う

f:id:Strobo:20160818231430j:plain:right:w320

CANtactはPCから見るとUSBシリアル変換デバイスとして見え, SLCANと呼ばれるプロトコルでお話することでシリアル-CANの変換を実現しています.

LinuxにはSLCANのドライバが内蔵されているのでcan-utilsをインストールするだけでCAN通信を行うことができます.以下にLinuxで簡単なCAN通信を行うコマンドを書きます.

CANインターフェースの設定

modprobe can
slcand -o -c -s6 /dev/ttyACM0 can0
ifconfig can0 up

送信

cansend can0 123#DEADBEEF

受信

candump can0

Windows, Macから使う

f:id:Strobo:20160820235310j:plain:right:w320

Win, MacにはSLCANのドライバは実装されていないのでアプリレベルでSLCANを実装する必要がありますが, CANardと呼ばれるPython製のライブラリを利用する事でCANtactを使用できます.

BeagleBoneBlackで通信距離(ほぼ)無限のLTEラジコンB3Rを作った

f:id:Strobo:20140814124452j:plain
AR.Drone等のカメラ映像を見ながら操作できるラジコン製品が増えています。このラジコンは通信にWiFiを使うことで機体の操作だけでなく同時に映像の送信も可能になっています。しかしWiFiで通信している以上、通信可能範囲は操作端末の周囲数百メートルが限界です。そこでWiFiではなくLTEを使用したラジコンであるBeagleBoneBlackRover略してB3Rを開発しました。LTEで通信しているのでLTEの電波が入る範囲ならば操作端末の位置に関わらずラジコンの遠隔操作が可能です。例えば日本にあるLTE圏内のラジコンをインターネットを通して海外から遠隔操作することも可能になります。

オンボードカメラの映像


B3Rの構成

B3Rの構成は以下の図の様になっています。
f:id:Strobo:20140814030043p:plain
以下各要素について解説していきます。

ラジコン

f:id:Strobo:20131106203053j:plain:w320:right
Hobbykingから半完成のラジコンTurnigy Trooper SCT 4x4 1/10 Brushless Short Course Truckを購入しました。半完成モデルなので通信機とコントローラとバッテリーが付属しておらずそのままでは動作しません。しかし今回はその通信機を自分で開発するので問題ありません。

ESC

ESCは購入したラジコンに付属していたのでそのまま使用します。BBBからPWM信号をESCに入力するとモーターの速度が制御できます。このESCには電源スイッチが繋がっておりこのスイッチでESCの電源を操作できる。今回はBBBからESCの電源を操作したいので、スイッチを取り外しFETを繋いでBBBからESCの電源を操作できるようにした。これでBBBの電源が切れると同時にFETがOFFになりESCの電源も切れるので多少安全になる。ただしBBBがFETに繋がっているポートをHighにしたままフリーズした場合はFETはOFFにならないのでESCも停止しない。この方法はもう少し改良が必要かもしれない。
このESCには通信機やサーボモーター用に6Vの電源も用意されています。この6V出力はステアリング用サーボーモーターの電源とした。

PDU

PDUはDC-DCコンバータ、電流、電圧検出回路で構成されています。DC-DCコンバータはOKL-T/6-W12N-CでBBB, USBハブ, webカメラ, LTE-USBモデムに電力を供給します。
電流、電圧検出回路はバッテリー電圧と電流を計測する回路。BBBのADCは最大1.8Vなのでバッテリーの電圧を分圧してBBBで計測できるようにしている。電流検出は0.01Ωのシャント抵抗とLT6106CS5を使用してESCの定格である30Aまでの電流を計測する回路とした。

f:id:Strobo:20140814125710j:plain:w640

Battery

B3Rのバッテリーは7.3V2200mAhを2個並列に接続している。これは動作時間を長くする為。もう一つはバッテリーが一つの場合、モーターが回転し始める瞬間にBBBが再起動してしまう問題を回避するためです。
BBBが再起動する問題はモーターが回転を始める瞬間は電源電圧が一瞬低下することが原因。電源電圧がDC-DCコンバータの最低動作電圧の6Vを下回ってしまうとその先に繋がっているBeagleBoneBlackが停止してしまう。BeagleBoneBlackの停止するとESCも停止する。ESCが止まるとモーターも止まり。その後電源電圧が回復しBBBが起動する。この様な流れでモータが回転を始める瞬間BBBが再起動してしまうように見えていた。今のところバッテリーを並列に繋いでいる事で回避出来ているが、保護回路無しのリチウム電池の並列接続はあまりいいやり方ではない。本当なら電源を別にするべきかなと。

BBB

B3R全体の制御を行う部分でBeagleBoneBlack Rev.A5Cを使用しています。ディストリビューションは細かいカスタマイズが可能なGentooを使用しています。Gentooを使用すれば不必要なプロセスを止めやすくBBBの消費電力を減らすことができます。全体の制御プログラムはGoで、UDP通信やストリーミングを行う部分はCで開発しました。
BeagleBoneBlackのセットアップ等は以下のサイトを参考にしました。
カーネル/VM式 ARMマイコン入門(関東版)
Gentoo Linux Documentation -- Gentoo on the BeagleBone Black
Raspberry PiでL-03Dを使ってみる

USB HUB

BBBのUSBポートは1つしかない為2つ以上のUSB機器を使用したい場合はUSBハブを使用する必要があります。そしてBBBのUSBポートの電流供給能力は800mAありますがUSBハブ, webカメラ, LTE-USBルータを同時に使用すると800mA を超えてしまい、BBBのUSB機能が停止してしまいます。そこでUSBハブを改造してDC-DCコンバータから5V電源を直接供給できるようにしました。これによりBBBのUSBポートに3つの機器を同時に接続しても問題なく動作するようになりました。

USB-LTE Router

USB-LTE RouterにL-03Dを使用しiijmioのsimを差してインターネットに接続しています。前回の記事UDP hole punchingの実装をしてみる - ELECTLOGICで書いたようにiijmioの回線ではグローバルIPアドレスが割り振られません。これでもTCPなら双方向で通信できますが、UDPの場合はそれができません。そこでUDPホールパンチングを使用してプライベートIP環境での双方向UDP通信を実現しました。これにより低遅延での操作が可能です。

WebCamera

WebCameraはLOGICOOL ウェブカム HD画質 120万画素 C270を使用。映像をYUV422形式でBBBに取り込み。YUV422からYUV420へ変換した後VP8でエンコード。その後UDPで操作端末へ送信しています。

Servo Motor & Motor

これらは購入したラジコンに付属していた物をそのまま使用した。問題があるとすれば、モーターが回転する時の音がうるさいこと。

ケース

f:id:Strobo:20140814124533j:plain:w320

ケースはアルミ板とアクリル板を組み合わせて設計しました。防水設計にはなっていないので雨天時は動かせません。アクリルに透明なシール エーワン ラベルシール 光沢フィルム・透明 ノーカット 10シート 28791にロゴを印刷して貼付けています。さらに野外で動かす物なのでUVカットの透明フィルム エーワン UVカット透明カバーフィルム 6シート 35041をロゴの印刷されたフィルムの上に重ねて貼付けています。

f:id:Strobo:20140814125915j:plain:w640
アクリルカバーを外したところ。右上のPDUから出ている白い配線は電源スイッチへ繋がっている


まだいくつかの改良や追加したい機能などがありますが、映像のストリーミングと最低限の操作が出来る様になったのでひとまず公開してみました。次はGPSと測域センサを載せて自動操縦をさせたい。

UDP hole punchingの実装をしてみる

ラジコンをLTE回線を使って制御できたら面白そうだなと思いいろいろ調べてる。

BeagleBone BlackL-03Dを組み合わせてL-03DにIIJmioIIJ BIC SIMを差せばインターネット経由でBeagleBone Blackを遠隔操作をする事が出来るはずです。あとはBeagleBone Blackをラジコンに載せればラジコンをインターネットを経由で遠隔操作できます。しかしこれには一つ問題があります。その問題とはIIJmioのsimを使用した場合BeagleBone Blackに割り振られるIPv4アドレスがプライベートIPアドレスとなってしまう事です。プライベートIPv4アドレスが割り振られたという事はBeagleBone Blackに割り振られたIPv4アドレスが分かったところでインターネット側からの通信はIIJmioのNATに阻まれてBeagleBone Blackにアクセスする事は通常出来ません。

この場合UDPホールパンチングというテクニックを使用するとプライベートIPアドレスが割り振られたBeagleBone Blackと直接通信する事ができます。UDPホールパンチングについては他のサイトに詳しい解説があるのでここでは省略します。そこでUDPホールパンチングを行うサーバーとクライアント(以下nodeと呼ぶ)を自分で実装しgithub.comに公開しました。

strobo/holepunch · GitHub

holepunchの解説

ビルドコマンド等についてはレポジトリ内のREADMEを参照ください。
このholepunchはlibeventを使用していますのでまずlibeventをインストールしてください。
次にPCを3台用意します。一つはUDPホールパンチングの仕組み上必要となるマッチングサーバーです。このサーバーだけはグローバルIPアドレスが必要です。残りの二つは実際に直接通信するPCとなります。この二つのPCは双方ともプライベートIPでも問題ありません。

このholepunchの実装ではstunを使用せず独自のプロトコルで通信を行います。通信相手の識別には任意で設定可能な文字列keyを使用します。この文字列keyの一致したPC同士で直接通信をする事ができます。

おおまかな通信手順
  1. nodeAがkeyをマッチングサーバーに送信
  2. マッチングサーバーは送られてきたkeyとnodeAのIPアドレスとポート番号を記録します
  3. nodeBがマッチングサーバーにnodeAと同じkeyを送信
  4. マッチングサーバーは今までに記録されたkeyと送信されたkeyが一致するかを確認し一致すれば双方に双方のnodeのIPアドレスとポート番号を通知します。一致しなければ新たなkeyとしてnodeBのIPとポート番号を記録します
  5. nodeA,B双方がマッチングサーバーから通知されたIP:ポートに対して通信を行う
実際に使用する

サーバ上で

$ ./holepunch server

nodeA上で

$ ./holepunch node example.com foo

nodeB上でも同じコマンドを実行

$ ./holepunch node example.com foo

通信が確立したら、各nodeのターミナル上で文字を入力しEnterで入力した文字列を相手に送信する事が出来ます。


MacでSTM32F4-Discoveryの開発環境を構築してChibiOS/RTを動かす

現在の私のSTM32F4-Discovery開発環境の構築手順とSTM32F4-Discovery上でChibiOS/RTを動作させてGDBデバッグできるようにするまでをまとめてみました。
OSはMountainLion 10.8.4 MacPorts導入済の状態です。
まず以下のSTM32F4-Discoveryの開発に必要なソフトをインストールしていきます。

  • arm-none-eabi-gcc
  • arm-none-eabi-gdb
  • openocd

/opt/localはMacportsが使用しており、 /usr/localはHomebrewが使用しています。これらのディレクトリには余計なファイルを入れたくないので~/localを自前で用意した実行ファイル置き場として、~/local以下にARM開発環境をインストールしていきます。

arm-none-eabi-gccのインストール

arm-none-eabi-gccはlaunchpadから入手します。
GCC ARM Embedded in Launchpad
上のリンクからMac用のarm-none-eabi-gccであるgcc-arm-none-eabi-4_7-2013q2-20130614-mac.tarを落としてきて適当なディレクトリに保存します。
まず ~/localを作成

cd ~
mkdir local

ダウンロードしたgcc-arm-none-eabi-4_7-2013q2-20130614-mac.tar.bz2を~/に展開

tar -xvf ~/Downloads/gcc-arm-none-eabi-4_7-2013q2-20130614-mac.tar.bz2

展開されたgcc-arm-none-eabi-4_7-2013q2内のファイルを~/localに移動

cd gcc-arm-none-eabi-4_7-2013q2
mv * ~/local

これでarm-none-eabi-gccのインストールは完了です。

arm-none-eabi-gdbのインストール

次にarm-none-eabi-gdbのインストールですが、Macportsにarm-none-eabi-gdbがあったのでそれをそのまま使用します。

sudo port install arm-none-eabi-gdb

簡単ですね、はい次

openocdのインストール

openocdのソースをgit cloneする

git clone git://git.code.sf.net/p/openocd/code openocd-code

次にopenocdのビルド。今回はSTM32F4-Discoveryの開発にフォーカスしたconfigureになっています。Versaloon等の他のデバッガハードに対応させる場合はconfigureの変更やopenocdへのパッチが必要になる場合が有ります。

cd openocd-code
./bootstrap
./configure --enable-maintainer-mode --enable-stlink --prefix=~/local/ --datadir=~/local/share/

make -j3でビルドするとMacportsでインストールされているはずのlibusbが見つからないと怒られたのでLDFLAGSを追加して対処した。

make LDFLAGS=-L/opt/local/lib/ -j3
make install

これで~/local/binにopenocdがインストールされる。

最後に$PATHに~/local/binを追加して必要なソフトのインストールは完了です。

ChibiOS/RTのビルド

開発環境の準備ができたのでChibiOS/RTをSTM32F4-Discovery上で動作させてみます。
ChiboOS/RTは軽量で高速な扱いやすいRTOSで。STM32F4だけでなくLCP11xx, LPC13xxのNXP系のARMやAVRにも対応しています。詳細はChibiOS/RTの公式サイトを参照してください。

まずChibiOS/RTのソースコードをダウンロードします。
ChibiOS/RT free embedded RTOS download | SourceForge.net

ダウンロードしたzipを展開し、展開したディレクトリからdemosの中のARMCM4-STM32F407-DISCOVERYに入ります。

unzip ChibiOS_2.6.0.zip
cd ChibiOS_2.6.0/demos/ARMCM4-STM32F407-DISCOVERY

あとはmakeでビルドします

make

makeが完了すると、buildディレクトリが生成されその中にch.elfがあればビルド成功です。

書き込みとデバッグ

いよいよ実機への書き込みです。まずSTM32F4-DiscoveryのSTLink-v2側のmini-BなUSBポートとMacを接続します。
次にopenocdを起動します。

openocd -s ~/local/share/openocd/scripts/ -f interface/stlink-v2.cfg -f target/stm32f4x_stlink.cfg

次に別のターミナルを開いて、そこでGDBを実行します。

cd ChibiOS_2.6.0/demos/ARMCM4-STM32F407-DISCOVERY
arm-none-eabi-gdb build/ch.elf

GDBが起動するとGDBのプロンプトが表示されます。ここでopenocdと接続してch.elfをロードさせます。

target remote localhost:3333
monitor reset halt
load
monitor reset halt

最後にcontinueで実行。ここでSTM32F4-DiscoveryのLEDが点滅すればChibiOS/RTの動作は成功です。

continue

まとめ

STM32F4-Discoveryの開発環境の構築からChibiOS/RTのビルド、書き込み、デバッグまで一気にまとめました。
ブレークポイントの設定などのデバッグ方法はGDBと同じなので、詳しくはGDBのマニュアルを見てください。ここでの説明は省略します。
ChibiOS/RTはサンプルソースコードが分かりやすいので読むだけで基本的な使い方が分かるはずです。

最後に、ChibiOS/RTもっと流行れ

はてなブログに移行したついでにヘッドフォンの話をしてみる

はてなブログに移行したついでにiPod付属のイヤホンからヘッドフォンに移行した話を書きます。ここ数ヶ月非常に落ち込んだりして、文章書いていないのでリハビリも兼ねて

f:id:Strobo:20130319150739j:plain

まず現在私が聞いている音楽についてです。今までVOCALOID中心に聞いていましたが。最近は以下のようにVOCALOIDからEDMに変化しています。

VOCALOID全般 -> kzのVOCALOID曲 -> kzの非VOCALOID曲 -> EDM

そして今一番ハマっている人がZEDDです。最近livetuneともコラボしたようで。まさかのコラボに非常に驚いているところです。

私がZEDDにハマるきっかけとなった曲がこれ


Skrillex & The Doors - Breakn' A Sweat (Zedd Remix)

2:12からの低音がやばいです。この低音を聞くためにiPod付属のイヤホンからヘッドフォンへの移行を決めました。

 

入手したヘッドフォンはHDJ-500というDJ向けのヘッドフォンです。これからこのヘッドフォンを選んだ理由をいくつか書いてみます。

  • 低音が強調されている

DJ中のビートマッチングをしやすくするために低音が強調されています。低音を聞くことが目的なのでこれは外せません。

  • 片耳装着が出来る

これもDJ向けヘッドフォンの機能の一つで、右側のイヤーパッドを前後に60°ほどずらすことができます。これで片耳装着が可能になり左耳でヘッドフォンの音、右耳で周囲の音を聞くことが出来ます。私は周囲の音が完全に聞こえなくなってしまうと不安になってしまうタイプの人なので、DJしなくてもこの機能はありがたいです。

  • ケーブルの着脱が可能

もしケーブルが断線した場合でもケーブルを新品と交換するだけでヘッドフォンが復活します。(このブログを読んでいる方なら自力で修理しちゃうと思いますがw)

新品ケーブルの入手方法がpioneerの製品ページに書いてないのでおそらくpioneerのサポートで取り寄せてもらう形になるのかなと予想してる。

 

そして最後の理由は、私がDJに興味を持っており、もしかするとDJする可能性(音楽の知識なんて全くないので難しいですが)がないわけではないので、それも考慮してこのヘッドフォンを選びました。もちろんDJしなくてもこのヘッドフォンは十分いいヘッドフォンといえるので私は満足しています。