兎に角ベルトコンベアが欲しい!\
皆さん、ベルトコンベアを知っていますか?
Arduinoの記事に興味があって見に来てくれた方は驚くでしょう。
突然、ベルトコンベアの記事が上がってるってね。
ベルトコンベアとは
https://item.rakuten.co.jp/first23/tera-bc-50wx1000l-a/?gclid=CjwKCAiAz4b_BRBbEiwA5XlVVjWrjwu-EyTXnNciKttoBMqdv8yevRmG--0cQ5CshiD9dlg9-GvzRhoC0MMQAvD_BwE&scid=af_pc_etc&sc2id=af_113_0_10001868&gclid=CjwKCAiAz4b_BRBbEiwA5XlVVjWrjwu-EyTXnNciKttoBMqdv8yevRmG--0cQ5CshiD9dlg9-GvzRhoC0MMQAvD_BwE&icm_agid=60033294630&icm_acid=288-622-7470&icm_cid=1425318126
良い写真が見つからなかったが、まぁこういう物で、
一般の方がイメージするには・・・ランニングマシーンのような物と思っていただければ良いです。
さてベルトコンペアがどんなのか分かったとして、そもそも何に使うものなのか。
よくあるのが、梱包や商品を移動させる際に、スーーーっと動かすローラーがある。
そのローラーに電動で動かす用途だったり、均等に並べた商品をこうレーンに流したり・・・
要するに、商品や部品を載せて、モータでベルトを動かし、決まった位置に動かす。 そういった装置なのだ。
そもそも、なんでベルトコンベアが欲しいの?
正直自分もよくわかってない。よくわかってないが、とりあえず作るべきだと思った。
例えば、ある具材があり、それをカメラで撮影し、ディープラーニングで演算したい。
そういったときに、低速(定速)で動くベルトがあると便利でしょ。
なんとなく、そういう、道が、あるような気がしてね。
まぁベルトコンベアの原理を知る意味で試してみたかったのですよ。
作ってみた
★↓動画
https://twitter.com/nonNoise/status/1340116262869819392/video/1
あれ?EtherCATネタじゃなかた??
そう、本来はここで、自作ベルトコンベアをArduino+EtherCAT+L6470 の構成でウェイ!!しようと思ったが、どうやらクリスマスを逃してしまったようだ。サンタだって遅れるのだ。
今年は仕方がない。
正月か年明けに目指して頑張ります!
Arduinoネタだから何かない?
え~ ArduinoとL6470 の組み合わせで、無事にライブラリを作ることができました。
STマイクロが提供する純正のArduinoライブラリもありますが、あれはSTduino用で、どうもST32Mマイコン向けに作られていました。
それが悔しくて悔しくて、Arduino-Uno(ATmega)でも動くように、ソースを作り直しました。
なので、STマイクロが教える正しいチップの使い方+わかりづらい箇所はパックして使いやすくするというテクニックを加えたとても実践的なライブラリが出来てしまいました。
void L6470_setup(){
// モーター供給電圧(V)//
float motorvoltage = 15.0 ; // Motor supply voltage in V. //
// モーターの1回転あたりの最小ステップ数 //
float fullstepsperrevolution = 200 ; // Min number of steps per revolution for the motor. //
// 最大モーター相電圧(A) //
float phasecurrent = 0.67 ; // Max motor phase voltage in A. //
// 最大モーター相電圧(V) //
float phasevoltage = 3.8 ; // Max motor phase voltage in V. //
// モーターの初速度[ステップ/秒] //
float speed = 300.0 ; // Motor initial speed [step/s]. //
// モーター加速度[step/s^2](無限加速モードのコメント) //
float acc = 800.0 ; // Motor acceleration [step/s^2] (comment for infinite acceleration mode). //
// モーター減速[step/s^2](無限減速モードのコメント) //
float dec = 800.0 ; // Motor deceleration [step/s^2] (comment for infinite deceleration mode). //
// モーターの最高速度[ステップ/秒] //
float maxspeed = 1092.0 ; // Motor maximum speed [step/s]. //
// モーターの最低速度[ステップ/秒] //
float minspeed = 0.0 ; // Motor minimum speed [step/s]. //
// モーターのフルステップ速度しきい値[ステップ/秒] //
float fsspd = 6020.7 ; // Motor full-step speed threshold [step/s]. //
// kval [V]を保持します //
float kvalhold = 3.06 ; // Holding kval [V]. //
// 定速kval [V] //
float kvalrun = 3.06 ; // Constant speed kval [V]. //
// kval [V]を開始する加速 //
float kvalacc = 3.06 ; // Acceleration starting kval [V]. //
// kval [V]を開始する減速 //
float kvaldec = 3.06 ; // Deceleration starting kval [V]. //
// bemf補正曲線の傾きが変化する場合の交差速度[ステップ/秒] //
float intspeed = 61.52 ; // Intersect speed for bemf compensation curve slope changing [step/s]. //
// 開始スロープ[s / step] //
float stslp = 392.1569e-6 ; // Start slope [s/step]. //
// 加速の最終勾配[s / step] //
float fnslpacc = 643.1372e-6 ; // Acceleration final slope [s/step]. //
// 減速最終勾配[s / step] //
float fnslpdec = 643.1372e-6 ; // Deceleration final slope [s/step]. //
// 熱補償係数(範囲[0、15]) //
float kterm = 0 ; // Thermal compensation factor (range [0 15]). //
// Ocdしきい値[ma](範囲[375 ma、6000 ma]) //
float ocdth = 3.06 * 1000 * 1.10 ; // Ocd threshold [ma] (range [375 ma 6000 ma]). //
// ストールしきい値[ma](範囲[31.25 ma、4000 ma]) //
float stallth = 3.06 * 1000 * 1.00 ; // Stall threshold [ma] (range [31.25 ma 4000 ma]). //
// ステップモードの選択 //
float step_sel = STEP_MODE_1_128 ; // Step mode selection. //
// アラーム条件が有効になります //
float alarmen = 0xFF ; // Alarm conditions enable. //
// IC構成 //
float config = 0x2E88 ; // Ic configuration. //
L6470_ACC_SetUp(acc );
L6470_Dec_SetUp(dec );
L6470_MaxSpeed_SetUp(maxspeed);
L6470_MinSpeed_SetUp(minspeed);
L6470_FsSpd_SetUp(fsspd);
L6470_KVAL_HOLD_SetUp(kvalhold,motorvoltage);
L6470_KVAL_RUN_SetUp(kvalrun,motorvoltage);
L6470_KVAL_ACC_SetUp(kvalacc,motorvoltage);
L6470_KVAL_DEC_SetUp(kvaldec,motorvoltage);
L6470_INT_SPEED_SetUp(intspeed);
L6470_ST_SLP_SetUp(stslp);
L6470_FN_SLP_ACC_SetUp(fnslpacc);
L6470_FN_SLP_DEC_SetUp(fnslpdec);
L6470_K_THERM_SetUp(kterm);
L6470_OCD_TH_SetUp(ocdth);
L6470_STALL_TH_SetUp(stallth);
L6470_ALARM_EN_SetUp(alarmen);
L6470_CONFIG_SetUp(config);
L6470_STEP_MODE_SetUp(step_sel);
}
こんな感じで、L6470 が持つ初期設定をわかりやすく弄ることができます。
本当は、早々に公開してドヤッ!!としたい処ですが、この頃は、自分のソースにミスが少なく、高品質な物を無料で出してよいのだろうかという疑問が生まれてしまっています。
ただ、人気があれば公開したいとも思ってます。ニッチなら欲しい人が僕に何かコンタクトをいただけたら考えます。
void loop() {
uint32_t buf;
L6470_Run (true,0x5000);
delay(500);
L6470_HardStop();
delay(1000);
L6470_Run (false,0x5000);
delay(500);
L6470_HardStop();
delay(1000);
}
どんだけ綺麗に作ってしまったかというと、最初のL6470_setupで初期化した後は、
L6470_Run で右に左に回転させたり、L6470_HardStopで止めたりするだけです。
ほんと、ほかにやることが無くて、サクッとEtherCATに連携してしまおうかと思いました。
公開するの?しないの??
悩んでます。いっそこのまま自分だけ使って楽しむのもよいかなぁと・・・(というのも、ライブラリは公開している方ですが、そんなのは書いている内の数パーセントしか公開していないので、没になったソースはたくさんあるんです)
とはいえ、本当に欲しい方には提供したいし、便利になってもらいたいとも思ってます。
有料での提供も考えてもいます。有料ならソースを書いた事で自分が報われるとも思うので。500円とかで出すのもよいかなぁと。
結局 何が言いたいの?
前半はベルトコンベアの話をし、後半はステッピングモータのライブラリを無料にするのか有料にするのかの話ですよね。
一見、つながりが無いように思いますが、これがつながってるんです。
ベルトコンベアが欲しい! -> 買えない! -> 自作するぞ! -> 部品買うのにお金かかった! -> ライブラリも自作した! -> やったできた!!
そうです、実はこのライブラリを作るまでの流れに、お金(研究費)が発生しています。
逆に、ベルトコンベアが欲しくなかったら、ライブラリを作りませんでした。
なので、このライブラリは・・・お金がかかってます。(遠まわしの意味で)
たぶん、このジレンマはほかの方にもあるでしょう、特にArduinoのようなハードウェアを買って試すタイプはどうしても費用が掛かってしまいます。悲しいけどこれが(ry
クリスマスなんだが?
そうでした!クリスマスですね!
ライブラリをどう提供するかは置いといて、ライブラリには費用が掛かってなくても目的に費用が掛かってるんだ!ということも伝えられたと思います!
なので、こうハードウェアを行う方々の商品や製品、同人誌は、何か面白そう!と思ったら、試しに買ってみるのもよいかなぁと思います。買うのも大変!と思った方は、良いねやハートをどんどん入れてあげてください!
お金だけがすべてじゃない!愛でだって人は動くんだ!!
そんなことを思ったクリスマス前前前夜です。
良きクリスマスを!!💛