🌻

ハードウェアど素人が太陽光パネルの水平搬送機構を作った

2022/10/17に公開

この記事の概要

ハードウェア工作のど素人である筆者が、大学のプロジェクトで必要になって太陽光パネルの水平搬送機構を作りました。リサーチや設計含め、開発にかかった時間は80時間程度だと思います(素人すぎてスクラップ&ビルドを繰り返しました)。完成品は以下になります。

この記事では、筆者のようなハードウェアの初心者に向けて、最初に知っておくと嬉しいポイントや、ハードウェア界隈の人には当たり前すぎて触れられないような内容を、水平搬送機構の作り方を通してお伝えしたいと思います。

筆者のスペック(開発当時)

  • 情報系大学院M1(学部は非情報系・非工学系)
  • 研究はコンピュータビジョン関係
  • 簡単なコーディングはできる
  • 組み込みの経験はない
  • Raspberry PiもArduinoも存在は知っているが、使ったことはない

くらいの感じでした。

開発の方針

最初から電動で動くものを作ろうとしても失敗すると思われたので、まずは手で押して横に動く機構を作り、最後に電動部分を乗せる方針としました。

手動で動く太陽光パネルの架台を作る

まずは手動で動く架台を作ります。最初は塩ビパイプを買ってきてノコギリで切って組み立てたのですが、横に走らせるレールがしっかり平行にならなかったりして上手く行きませんでした。その後、ハードに強い方にアドバイスを頂く機会があり、SUS FA Factory Automationが良いと勧められたので採用。種類も多かったのでGF(グリーンフレーム)というアルミパイプのシリーズで架台の設計を行うことにしました。
動かしたい太陽光パネルの大きさに合わせて架台の設計を行いました。今回は時間もお金もなかったのでGoodNotesでお絵描きして設計図を作成したのですが、本当はCADとかでやるのが良いんだろうな…。


ポイントだけ説明します。

  • φ(ファイ、マル、パイなどと読む)はネジ穴の直径を表します。M5、M6といった表記もねじの直径を表すようです(例えば、M5はねじの呼び径が5mmのものを指します)。φとMは異なる寸法ですので厳密な設計が必要な方は注意する必要があります
  • 後で必要になるため、モーターのトルク(モーターの軸を回す力)を計算しておきました。物理があまり分からないためざっくり計算ですが、オーダーさえ合っていれば大丈夫かと判断しています。ざっくりの計算式は以下になります。計算にはミスミのドキュメント[2]を参考にしました
(水平移動に必要となる推力) = F(N) = \mu \cdot W + f

ここで、

\begin{align*} &\mu = (動摩擦係数): 0.006と仮置き\\ &W(N) = (負荷荷重) = (水平移動したい部品の総質量) \times (重力加速度)\\ &f(N) = (シール抵抗): 5と仮置き \end{align*}

です。トルク(N \cdot m)は、上記で計算したF(N)と回転半径R(m)をかけてやれば得られます。ガバガバ計算だとは思いますが最終的に動いたのでヨシ。
グリーンフレームはmm単位で長さを指定して買えます。筆者はミスミモノタロウのECサイトで部品を購入しました。ここまでで、電動の部分以外は完成しました。

架台が電動で動くようにする

回転運動を直線運動に変える機構を考える

水平搬送機構を作るにあたり、まずモーターの回転運動を直線運動に変換する機構を用意する必要があります。調べたところ、以下のような機構が使えそうだと分かりました。

  • ラックピニオン。画像を見れば一発でわかると思います。画像はWiki[3]から引用

  • すべりねじ。ねじは右に回すと前に進みますが、その仕組みを使った機構です。似たような部品にボールねじがありますが、ボールねじはすべりねじの摩擦が生じる部分にボールを仕込んで摩擦抵抗を減らしたもので、すべりねじよりも複雑な分高価です。画像はミスミのEC[4]サイトより引用

  • リニアアクチュエータ。モーターを回すと直線運動を生成する出来合いの製品です

https://youtu.be/X3dsWXumAWI

価格や制作難易度等を考えた結果、Amazonで手頃な価格のリニアアクチュエータを買うことにしました。

こちらのリニアアクチュエータにはモーターも附属していたので、上記で計算した必要トルクとオーダーが合っていることは確認しました。

モーターの種類について

モーターの話が出たので、電子工作で使うことが多い(と思われる)モーターの種類をご紹介します。

  • AC(交流)モーター。交流の電源で動作するモーターです。乾電池から給電すると直流になるため、電子工作で使うことは少なそうです
  • DC(直流)モーター。直流の電源で動作するモーターです。模型やおもちゃなどに使われる、身近なモーターです
  • サーボモーター。指定した角度だけ正確に回るモーターです。ロボットの関節などに使われるモーターだと思ってもらえれば分かりやすいかと思います
  • ステッピングモーター。こちらも指定した角度だけ正確に回るモーターです。基本ステップ角度と呼ばれるモーター固有の角度(例えば、1.8°)があり、基本ステップ角度の倍数で回転量を指定することができます。サーボモーターとの違いとしては、ステッピングモーターは連続回転(360°以上、何周でも回転)がデフォルトなのに対して、サーボモーターは180°までしか回転しないものが多いということが挙げられます

購入したリニアアクチュエーターに附属していたモーターは、ステッピングモーターでした。

ステッピングモーターを動かす部品を揃える

ステッピングモーターを動かすためには、大まかに

  • モータードライバ(モーターを駆動・制御するためのデバイス)
  • モータードライバ用の電源
  • マイコン(Raspberry PiとかArduino。モーターを何回転させるみたいなコードを乗せる)
  • マイコン用の電源

が必要です。
モータードライバを選定するにあたり大事なのは、以下の点あたりかなと思います。

  • ステッピングモーターの種類。ステッピングモーターはその構造によって2相/3相/5相に分類されます。相によって基本ステップ角度が決まっており、筆者が購入した「NEMA 23ステッピングモーター」はステップ角が1.8°のため2相であることが分かります
  • 2相の場合、バイポーラ方式かユニポーラ方式か。バイポーラ/ユニポーラはモーターの作りの違いを意味します。バイポーラモーターには通常4本の導線があり、ユニポーラモーターには6本または8本の導線があります。「NEMA 23ステッピングモーター」は4本の導線があるため、バイポーラモーターです

  • モータードライバの出力電圧と出力電流。「NEMA 23ステッピングモーター」は12Vまたは24Vの直流電圧で、3Aで動作することが保証されています。ステッピングモーターに電源を供給するモータードライバの出力を確認しておく必要があります

筆者は、モータードライバとして有名そうな「TB6600」を購入しました。「TB6600」はバイポーラモーターに対応しており、9V-40Vの直流電源で動き、最大出力電流が4Aなので「NEMA 23ステッピングモーター」にちょうど良さそうです。
モータードライバ用の電源は、安定化電源を使用しました。最初は9V乾電池を使ったのですが、トルク不足でリニアアクチュエータが動かなかったので買い直しました。安定化電源とは、好きな電圧で直流電源を出力する機器のことです。乾電池では9Vしか出ませんでしたが、安定化電源で24Vまで出すことでリニアアクチュエータを動かすことができました。
マイコンはArduinoを購入しました。Arduinoを選んだ理由は参考にできそうな記事がたくさんあったからです。Arduinoはオープンソース(!)のハードウェアらしく、Amazonで評判の良かった類似品を購入しました。
Arduino用の電源には、9V乾電池を使いました。上記製品であれば9V乾電池と電源用のコードは附属しています。

配線を頑張る

どこに何を繋ぐのかは偉大なる先達の記事を見て頂ければ明らかだと思います。が、ハードウェアど素人の筆者はステッピングモーターのむき出しの銅線をモータードライバに繋げる方法が分からず…。むき出しの状態でも繋げることは繋げると思いますが、格好がつかないし危ないです。

これを

モータードライバに繋げたい。
このような場合の正解は、ジャンプワイヤーの端子を作ることのようです。ジャンプワイヤーとは、こういうやつです(画像[5]はオスの端子です)。

ステッピングモーターのむき出しの銅線をいじって、ジャンプワイヤーのオスの端子を作り、モータードライバーに差し込みます。ジャンプワイヤーの作り方はこちらのサイトを参考にしました。Arduinoとモータードライバーの接続もオス-オスのジャンプワイヤーで行います。
配線の参考とさせて頂いた記事では、Arduinoとモータードライバーの接続にブレッドボードも使っています。ブレッドボードとは、下記画像の左上の、穴が空いた白っぽい板のことです。ブレッドボードは、ジャンプワイヤーのピンを差し込むと手軽に電子回路が組める便利商品です。

筆者が買ったブレッドボードはこちらです。赤い線と青い線(編集で後から入れました)の穴は裏で繋がっています。モータードライバーのENA+、DIR+、PUL+をArduinoの5Vに繋ぎたいのですが、Arduinoの5Vのピンは3本もないので、ブレッドボードをハブとして使っているわけです。

その他、上記記事との差分だけ言及しておくと、筆者の場合はモータードライバーのVCC、GNDは安定化電源に繋げています。VCCにプラス、GNDにマイナスを接続しましょう。繋ぎ方は、行儀が悪いかもしれませんがジャンプワイヤーのオスを安定化電源のミノムシクリップ[6]で挟んでいるだけです。ミノムシクリップとは以下のような端子を指します。


また、繰り返しですがArduinoの電源は9V乾電池を使っています。

モータードライバーの分解能と電流の設定

モータードライバーには6個の爪[7]があり、爪の上げ下げによって分解能と電流の設定を変えることができます。

設定の一覧は筐体の前面[8]に記載されています。

S1、S2、S3の爪は分解能の設定に対応しています。S1=ON、S2=ON、S3=OFFとすると上図で赤く囲った部分の設定になります。Palse/rev=200となっているので、1回転あたり200パルス、すなわち1パルスあたり1.8°回転することになります。1パルスあたり何度回転するか設定することで、回転の細かさを指定する指標が分解能です。
S4、S5、S6の爪は電流の設定に対応しています。S4=ON、S5=ON、S6=ONとすると上図で青く囲った部分の設定になります。電流は0.5A(ピーク電流0.7A)となります。電流が小さすぎるとモーターのトルクも出ないため、設定はモーターの動作電流に合わせて調整してください。

Arduinoにコードを書き込む

Arduino IDEという開発環境をPCにインストールして、IDE上でコーディングします。コードができたら、PCとArduinoをUSBで接続し、ソースコードをArduinoに転送してやります。こちらのサイトの説明は分かりやすくて良かったです。Arduinoのプログラミングは専用言語であるArduino語を使います。Arduino語の解説は省略しますが、以下のように書くとリニアアクチュエーターに往復運動させることができます。コードはこちらのサイト[9]からの引用です。

int step_pin = 13;
int dir_pin = 12;
int relay_pin = 11;

void setup()
{
  pinMode(step_pin, OUTPUT);
  pinMode(dir_pin, OUTPUT);
  pinMode(relay_pin, OUTPUT);
  digitalWrite(dir_pin, HIGH);
  digitalWrite(relay_pin, LOW);

  Serial.begin( 9600 );
}
 
void loop() 
{
  spinMotor(0,500);
  delay(3000);

  spinMotor(1,500);
  delay(3000);

}

void spinMotor(int direction, int num){
  digitalWrite(relay_pin, HIGH);
  if(direction == 0){
    digitalWrite(dir_pin, LOW);
  }else{
    digitalWrite(dir_pin, HIGH);
  }

  for(int i=0;i<num;i++)
  {
    digitalWrite(step_pin, HIGH);
    delayMicroseconds(1000);
    digitalWrite(step_pin, LOW);
    delayMicroseconds(1000);
  }
  digitalWrite(relay_pin, LOW);
} 

完成品

まとめ

大変長くなってしまいましたが、以上が開発の全工程となります。ここまで読んでくださった方、ありがとうございました。ど素人でも時間で殴れば動くものが作れると知れて嬉しかったです。そして、完成品の水平搬送機構を引き取ってくださる方を切実に募集しております。

脚注
  1. https://fa.sus.co.jp/products/gf/case/case03/ ↩︎

  2. https://jp.misumi-ec.com/pdf/fa/2011/p1_0489.pdf ↩︎

  3. https://ja.wikipedia.org/wiki/ラック・アンド・ピニオン ↩︎

  4. https://jp.misumi-ec.com/vona2/detail/110310544139/ ↩︎

  5. https://dotstud.io/docs/jumperwire/ ↩︎

  6. https://dotstud.io/docs/jumperwire/ ↩︎

  7. https://rb-station.com/blogs/article/tb6600-arduino ↩︎

  8. https://rb-station.com/blogs/article/tb6600-arduino ↩︎

  9. https://rb-station.com/blogs/article/tb6600-arduino ↩︎

Discussion