物づくりの小部屋

個人で活躍するクリエーターになりたい現役エンジニアの行動記録

【ラズパイ】Raspberry Pi4でマブチモータを回して小型扇風機を作る

f:id:zaloha8:20210904141759j:plain

こんにちは。alohaです。

 

Raspberry Pi4のGPIOの使い方を勉強していて、LEDを光らせる方法は分かりました。でも、これだけだと小型信号機くらいしか作れないので、作れる物がかなり限定されてしまいます。

 

もう少しレベルアップして、モータを回せる様になると工作の幅が広がって、作れる物が増えそうです。

 

ただ、一口に『モータを回す』と言っても、モータの種類には、DCモータやステッピングモータ、サーボモータ等があり、回す方法もそれぞれ異なるので、モータの種類に合わせて回路と動作プログラムを変更する必要があります。

 

今回は、Raspberry Pi4でモータを回す最初の一歩として、模型用モータとしておなじみのマブチモータを回してみます。基本的でシンプルな回路なので、マブチモータを『回す/止める/速度調整する 』くらいしかできませんが、モータ駆動の基本を学ぶには丁度良い気がします。

 

単純にモータを回すだけだと面白くないので、モータのシャフトにファンを付けて小型扇風機を作ってみます。

 

 <部品一覧(Raspberry Pi4以外に必要な物)>

  • マブチモータ(RE-260RA-2670)    1個
  • ダイオード(1N4001)           1個
  • トランジスタ(2SC2655-Y)        1個
  • バッテリーボックス(3.0 V用)        1個
  • 抵抗(4.7 Ω, 220 Ω, 10 kΩ)         各1個
  • 配線用のワイヤ、ブレッドボード       適量
  • 模型用ファン                1個

f:id:zaloha8:20210904145811j:plain

 

<回路図>

Qt-BSch3Vで回路図を書くと下図の様になります。大前提として、Raspberry Pi4のGPIOが流せる電流は16 [mA]と小さいので、モータを回すには全然足りません。そこで、Raspberry Pi4とは別にバッテリーボックスを用意する必要があります。

f:id:zaloha8:20210829164552j:plain

各部品を適当に選定してもとりあえず動くかもしれませんが、せっかくなのでデータシートから色々計算して部品を選定してみます。

 

行った計算は下記の通りです(間違っていたらごめんなさい)。

 

 ① モータに流れる電流を制限する抵抗R3

モータの性能表を見ると、今回使うRE-260RA-2670の適正電圧はVcc=3.0 [V]、消費電流はIm=700 [mA](0.7 [A])なのでオームの法則から、R3は次の様になります。

R3=\frac{Vcc}{Im}=\frac{3.0}{0.7}=4.29 \left[\Omega\right]

手持ちの抵抗の中から抵抗値の近い値を選択し、R3=4.7 [Ω]を使います。

f:id:zaloha8:20210829165538j:plain

 

② ダイオード

念のため、モータの回転/停止の切替えの際に発生する逆起電力からモータを保護するダイオードを付けます。性能として、逆耐圧VRが電源電圧Vcc=3.0 [V]の10倍以上、平均清流電流Ioがモータの消費電流Im=700 [mA](0.7 [A])以上の物を使う様です。

今回は、VR=50 [V], Io=1.0 [A]の1N4001を使います。

 

③ トランジスタ

トランジスタのデータシートを見て、 コレクタ定格電流Icがモータの消費電流Im=700 [mA](0.7 [A])よりも大きい物を使います。今回使うトランジスタは、コレクタ定格電流Ic=2.0 [A]の2SC2655-Yです。データシートを見ると、直流電流増幅率はhFE=120~240となっていますが、直流電流増幅率はバラつくため、計算は最小値の1/2(hFE=60)で計算します。

トランジスタのベース電流Ibは以下の式から計算します。

Ib=\frac{Im}{hFE}=\frac{700}{60}=11.7 \left[mA\right]

ベース電流Ibは、Raspberry Pi4のGPIOが出力可能な電流(16 [mA])以下にします。

 

④ ベースエミッタ間抵抗R2 

誤動作を防止するために入れるベースエミッタ間抵抗R2は通常1 [kΩ]〜100 [kΩ]の物を使う様ですが、今回は手持ちの抵抗から10 [kΩ]を選定します。

トランジスタのデータシートに記載のコレクタ遮断電流Icbo=1.0 [uA](0.000001 [A])と抵抗R2=10 [kΩ](10000 [Ω])から、ベースエミッタ間の電圧降下Vibeを以下の様に計算します。

Vibe=Icbo\times R2=0.000001\times10000=0.01 \left[V\right]

このVibeがトランジスタのベースエミッタ間最小動作電圧Vbe(最小値)=0.6 [V](データシートのIc-Vbeグラフから読み取り)より小さければ良いらしいです。

 

⑤ ベース抵抗R1

最後に、ベース電流Ib=11.7 [mA](0.0117 [A])を流すための抵抗R1を計算します。Raspberry Pi4のGPIOの出力電圧Vras=3.3 [V] 、トランジスタのベースエミッタ間電圧Vbe=0.75 [V](データシートのIc-Vbeグラフから読み取り)から、オームの法則より以下の様に計算します。

R1=\frac{Vras - Vbe}{Ib}=\frac{3.3 - 0.75}{0.0117}=218 \left[\Omega\right]

よって、手持ちの抵抗から220 [Ω]を選定します。 

 

ブレッドボードを使って配線すると写真の様になります。

f:id:zaloha8:20210829170918j:plain

 

 

<動作プログラム>

動作プログラムはPythonで2種類作成しました。

  • モータ5秒回転、5秒停止を繰り返すプログラム
  • スライドバー付きのGUIプログラムでモータ速度を変えるプログラム

ソースコードとプログラム実行時の写真は下の通りです。

 

<DC_Motor_01.py(モータの回転、停止を繰り返す)>

#coding:utf-8

#GPIOライブラリをインポート
import RPi.GPIO as GPIO

#timeライブラリをインポート
import time

#ピン番号の割当方式を「コネクタピン番号」に設定
GPIO.setmode(GPIO.BOARD)

#使用するピン番号を代入
LED=8

#8番ピンを出力ピンに設定し、初期出力をローレベルにする
GPIO.setup(LED,GPIO.OUT,initial=GPIO.LOW)

#例外を検出する
try:
    #無限ループ
    while 1:
        #ハイレベルを出力
        GPIO.output(LED,GPIO.HIGH)
        
        #5待つ
        time.sleep(5.0)
        
        #ローレベルを出力
        GPIO.output(LED,GPIO.LOW)
        
        #5秒待つ
        time.sleep(5.0)
    
#キーボードの例外を検出
except KeyboardInterrupt:

    #メッセージを表示
    print("Pushed Ctrl+C")
    print("End of program")

#GPIOを開放
GPIO.cleanup()

f:id:zaloha8:20210829171705j:plain

いい感じですね。

 

<tk_DC_Motor_02.py(GUIでモータの速度を変える)>

#coding:utf-8

#GPIOライブラリをインポート
import RPi.GPIO as GPIO

#Tkinterライブラリをインポート
import tkinter as tk #Python3
#import Tkinter as tk #Python2

#ピン番号の割当方式を「コネクタのピン番号」に設定
GPIO.setmode(GPIO.BOARD)

#使用するピン番号を代入
LED=8

#8番ピンを出力ピンに設定し、初期出力をローレベルにする
GPIO.setup(LED,GPIO.OUT,initial=GPIO.LOW)

#PWMオブジェクトのインスタンスを作成
#出力ピン:8番、周波数:100Hz
p=GPIO.PWM(LED,100)

#Tkオブジェクトのインスタンスrootを作成
root=tk.Tk()

#スライドバーの値として使うVariableオブジェクトのインスタンスを
#浮動小数点型で作成
led_val=tk.DoubleVar()

#0をセット
led_val.set(0)

#PWM信号を出力
p.start(0)

#デューティ比を変更する関数を定義
def change_duty(dc):
    #デューティ比を変更
    p.ChangeDutyCycle(led_val.get())

#rootに表示するスライドバーを定義
#ラベル[LED]、水平に表示、数値の範囲は0~100
s=tk.Scale(root,label="Motor 速度",orient="h",\
           from_=0,to=100,variable=led_val,\
           command=change_duty)

#スライドバーを配置
s.pack()

#rootを表示
root.mainloop()

#PWMを停止
p.stop()

#GPIOを開放
GPIO.cleanup()

f:id:zaloha8:20210829192244j:plainf:id:zaloha8:20210829192254j:plainf:id:zaloha8:20210829192305j:plainf:id:zaloha8:20210829192315j:plain

スライドバーの位置によって、モータの速度が変わります。

 

3Dプリンタでフレームを作成する>

最後に、より扇風機らしくするために、ファンの周りに3Dプリンターで造形したフレームを設置します。この様な線の細い造形物も3Dプリンタですぐに作れるのはとても便利ですね。

f:id:zaloha8:20210829192905j:plain

 

<まとめ>

という訳で、Raspberry Pi4を使ってマブチモータを回し、小型扇風機を作ってみました。単純にモータを回すだけでも、まじめに電子部品の要素計算をしてみると学べる事がたくさんありますね。今回はトランジスタを使ってモータを回しましたが、この方式だと正転 / 逆転はできないので、次はモータドライバを使ってもう少し複雑なモータ駆動を試してみたいと思います。

 

それでは、また。

【ラズパイ】Raspberry pi4でLEDを光らせて小型信号機を作ってみる

f:id:zaloha8:20211009114222j:plain

こんにちは。alohaです。

 

Raspberry pi4やマイコンの使い方を勉強し始めた時に、最初にトライする物といえばLEDの点灯、消灯ですね。

 

通称Lチカと呼ばれたりしますが、単純にLEDを光らせるだけでも電子回路とI/O制御の基本を学ぶ事ができるので、電子工作初心者は、ほとんどの人がトライした事があるのではないでしょうか。

 

Raspberry pi4初心者の私も、やっぱり最初はLチカからスタートします。

と言っても、単に点灯、消灯させるだけではつまらないので、道路にある信号機相当の物を作ります。また、ついでにPWMによるLEDの明るさ調整も試します。

 

それでは、早速作ってみましょう。

 

<部品一覧(Raspberry pi4本体以外に必要な物)>

  • LED(今回は高輝度タイプを使用)   緑2個、黄色1個、赤2個
  • 抵抗(68 [Ω])              5個
  • ブレッドボード            1個
  • 配線用ワイヤ             適量

f:id:zaloha8:20211004154327j:plain

 

<回路図>

Qt-BSch3Vで回路図を書くと下図の様になります。

f:id:zaloha8:20211004152109j:plain

 

今回使用するLEDの定格電流は、IF=20 [mA](0.02 [A])なので、LEDに流れる電流が20 [mA]となる様に、抵抗R1〜R5を選定します。LEDの順電圧VFは記載が無いので分かりませんが、とりあえずVF=2.0 [V]として、Raspberry Pi4のGPIOの出力電圧はVras=3.3 [V]である事から、抵抗R1〜R5は以下の式で計算されます。

 

R1=\frac{Vras - VF}{IF}=\frac{3.3 - 2.0}{0.02}=65 \left[\Omega\right]

 

今回は、R1〜R5として、手持ちの抵抗から68 [Ω]を選定します。

ブレッドボード上に配線すると、写真の様になります。

f:id:zaloha8:20211004174229j:plain

 

最後に、見た目を信号機っぽくするために各LEDの周りに3Dプリンタで作ったフレームを付ければハードウェアとしては完成です。

f:id:zaloha8:20211004215347j:plain

 

<動作プログラム>

Pythonで作成した動作プログラムは下記の通りです。

歩行者用信号と自動車用信号が緑点灯した後、歩行者用信号が点滅して赤に変わり、最後に自動車用信号が黄色 → 赤に変わります。

 

#coding:utf-8

#GPIOライブラリをインポート
import RPi.GPIO as GPIO

#timeライブラリをインポート
import time

#ピン番号の割当方式を「コネクタピン番号」に設定
GPIO.setmode(GPIO.BOARD)

#使用するピン番号を代入(車用信号)
LED_C_R=8
LED_C_Y=10
LED_C_G=12
#使用するピン番号を代入(歩行者信号)
LED_P_R=24
LED_P_G=26

#各ピンを出力ピンに設定し、初期出力をローレベルにする
GPIO.setup(LED_C_R,GPIO.OUT,initial=GPIO.LOW)
GPIO.setup(LED_C_Y,GPIO.OUT,initial=GPIO.LOW)
GPIO.setup(LED_C_G,GPIO.OUT,initial=GPIO.LOW)
GPIO.setup(LED_P_R,GPIO.OUT,initial=GPIO.LOW)
GPIO.setup(LED_P_G,GPIO.OUT,initial=GPIO.LOW)

#歩行者用緑信号を点滅させる関数
#0.35秒間隔で10回点滅させる
def blink_p_g():
    
    for i in range(10):
    
        GPIO.output(LED_P_G,GPIO.HIGH)
    
        time.sleep(0.35)
    
        GPIO.output(LED_P_G,GPIO.LOW)
    
        time.sleep(0.35)


#例外を検出する
try:
    #無限ループ
    while 1:
        
        
        #車用緑信号、歩行者用緑信号を点灯
        GPIO.output(LED_C_G,GPIO.HIGH)
        GPIO.output(LED_P_G,GPIO.HIGH)
        
        #10秒待機
        time.sleep(10.0)
        
        #歩行者用緑信号を点滅させる
        blink_p_g()        
        
        #歩行者用赤信号を点灯
        GPIO.output(LED_P_R,GPIO.HIGH)
        
        #3秒待機
        time.sleep(3.0)
        
        #車用緑信号を消灯し、車用黄色信号を点灯
        GPIO.output(LED_C_G,GPIO.LOW)
        GPIO.output(LED_C_Y,GPIO.HIGH)
        
        #3秒待機
        time.sleep(3.0)
        
        #車用黄色信号を消灯し、車用赤信号を点灯
        GPIO.output(LED_C_Y,GPIO.LOW)
        GPIO.output(LED_C_R,GPIO.HIGH)
        
        #10秒待機
        time.sleep(10.0)
        
        #車用赤信号、歩行者用赤信号を消灯
        GPIO.output(LED_C_R,GPIO.LOW)
        GPIO.output(LED_P_R,GPIO.LOW)
        
    
#キーボードの例外を検出
except KeyboardInterrupt:

    #メッセージを表示
    print("Pushed Ctrl+C")
    print("End of program")
    

#GPIOを開放
GPIO.cleanup()

 

以下はプログラム実行時の写真です。

f:id:zaloha8:20211004215425j:plain

 

<LEDの明るさを調整する方法>

LEDを使う際、単純に点灯 / 消灯させる他に、明るさを調整したい場合もあると思いますが、一般的に明るさの調整はPWMを用いて行います。

 

PWMは、下の図の様にGPIO端子から出力される電圧のON(3.3 [V]出力)とOFF(0 [V]出力)を高速に切り替えて、GPIO端子から出力される平均電圧を調整する事でLEDの明るさを調整します。

 

f:id:zaloha8:20211004213456j:plain

 

周期t1とON(3.3 [V]出力)している時間t2の比をデューティ比と呼び、デューティ比が大きい程LEDは明るく光り、デューティ比が小さい程LEDは暗く光ります。

 

デューティ比\left[\%\right]=\left(\frac{t2}{t1}\right)\times 100

 

Raspberry pi4では、GPIO端子からPWM信号を出力するコマンドが既に用意されているので、このコマンドをプログラム上で実行するだけでGPIO端子からPWM信号を出力する事ができます。

 

PWM信号を出力してLEDの明るさを調整する例は以下の通りです。

 

この例では、GPIOの8番ピンから100 [Hz]のPWM信号を出力しています。ループの中でキーボードからデューティ比(0〜100の範囲)を入力すると、入力したデューティ比によってLEDの明るさが変わります。

 

0を入力した場合はLEDは光りません。入力する値を大きくする程LEDが明るく光る様になり、100を入力した場合が最も明るく光ります。

 

<回路図>

f:id:zaloha8:20210926165855j:plain

 

<ブレッドボード上の配線>

f:id:zaloha8:20211004175043j:plain

 

<プログラム>

#coding:utf-8

#GPIOライブラリをインポート
import RPi.GPIO as GPIO

#timeライブラリをインポート
import time

#ピン番号の割当方式を「コネクタのピン番号」に設定
GPIO.setmode(GPIO.BOARD)

#使用するピン番号を代入
LED=8

#8番ピンを出力ピンに設定し、初期出力をローレベルにする
GPIO.setup(LED,GPIO.OUT,initial=GPIO.LOW)

#PWMオブジェクトのインスタンスを作成
#出力ピン:8番、周波数:100Hz
p=GPIO.PWM(LED,100)

#PWM信号を出力
p.start(0)

#例外を検出
try:
    #無限ループ
    while 1:
        
        val=float(input("input pwm duty:"))
        
        #デューティ比を設定
        p.ChangeDutyCycle(val)
        
#キーボードの例外を検出
except KeyboardInterrupt:
    
    #メッセージを表示
    print("Pushed Ctl+C")
    print("End of program")

#PWMを停止
p.stop()

#GPIOを開放
GPIO.cleanup()

 

<プログラム実行時の写真(左はデューティ10%、右はデューティ100%)>

f:id:zaloha8:20211004210345j:plainf:id:zaloha8:20211004210333j:plain

 

<まとめ>

という訳で、Raspberry pi4でLEDの点灯 / 消灯をテストして、小型信号機を作ってみました。また、PWMを用いてLEDの明るさ調整を試してみました。

 

Raspberry pi4には、他にもいろいろな機能が搭載されているので、今後も各機能を試しつつ、物づくりをしていきたいですね。

 

それでは、また。

【備忘録】progateの記事をもとにMacBookにPythonの開発環境を作る

f:id:zaloha8:20210920151911j:plain

こんにちは、alohaです。

 

Pythonの勉強はずっとRaspberry Pi4とprogateで行っていましたが、Pythonの勉強を加速するために、自分がメインで使っているMacBookにも開発環境をセットアップすることにしました。

 

ありがたい事に、progateのサイト内にMacbookPythonの開発環境をセットアップする方法が紹介されていたので、その通りにやれば簡単にできるだろうと思っていましたが、意外にもハマってしまって解決するのに時間がかかってしまいました。

 

備忘のために、対応を書き残しておきます。

 

<セットアップの概要>

セットアップは、progateの下記の記事をもとに進めました。

progateは、ロールプレイングゲームでレベル上げする感覚でプログラミングが学べる様になっているので、プログラミングがどの様な物か分からない未経験者が学ぶには良い環境だと思います。初級コースであれば無料で利用できる点も良いですね。

 

Pythonの開発環境を用意しよう!(Mac) | プログラミングの入門なら基礎から学べるProgate[プロゲート]

 

<問題発生(Pythonのバージョンが切り替わらない)>

記事の通りに設定を進め、Homebrew, pyenv, Pythonのインストールまで問題なく終わりました。しかしここで、pyenvでPythonのバージョンが切り替わらない現象が起きたため、解決のために原因を色々と調べる事になってしまいました。

 

pyenv global 3.6.5

python --version

 

ターミナルで上のコマンドを実行しても、『Python 2.*.*』の方が表示されてしまう。

 

<原因はPATHの設定らしい>

Google検索で原因を調べてみると、PATHが正しく設定されていない事が原因の様です。

echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
echo 'eval "$(pyenv init -)"' >> ~/.bash_profile
source ~/.bash_profile

セットアップの途中で行ったこのPATHの設定が正しく機能していない模様。

 

<何とか自力で解決できました>

Macのターミナルの事はほとんど分からないので、ネット上の情報を頼りに色々試行錯誤しましたがうまくいかず、もうダメかと思いましたが、最終的に設定ファイル(.bash_profile)の一部を変更する事で解決しました。

 

① Finderのホームディレクトリで『command』+『shift』+『.(ドット)』を押して、通常見えていない隠しファイル(.bash_profile)を表示し、テキストエディタで開く。

 

② 『(pyenv init -)』の部分を下の様に書き換える

eval "$(pyenv init --path)"

 

この変更をした後で、ターミナルから、

pyenv global 3.6.5
python --version

を実行した所、『Python 3.6.5』に変更できました。

どうにか解決できて本当良かった。

 

【動作環境】

macOS Catalina バージョン 10.15.7

 

【参考リンク】

Python - pyenv にパスが通らなくなり、「`pyenv init -` no longer sets PATH.」のエラーが表示される現象の改善策について。|teratail

GitHub - pyenv/pyenv: Simple Python version management

 

【初心者向け】FLASHFORGE Adventurer3Xで初めての3Dプリント

f:id:zaloha8:20210404153938j:plain

こんにちは。alohaです。

 

趣味の物づくりに3Dプリンターを使用している方も多いのではないでしょうか。

 

私も趣味の物づくりのために3Dプリンタを購入する事にしたのですが、調べてみると、価格帯も幅広く、種類も多すぎてどれを買ったら良いか分からなくなってしまいました。

 

結局の所、どの様な物を作りたいかによって必要なスペックが決まって、そこからメーカと機種が決まる感じだと思いますが、色々と作りたい物があるとなかなか決められないですね。

 

まあ、入門用に買う最初の1台は価格が手頃な物にして、それを使い倒してみるのが良いと思います。

 

3Dプリンターを選ぶ際にチェックする基本項目は、『造形サイズ』、『造形精度』、『使いやすさ』、『価格』の4項目なので、これらを元に自分が最初に買う3Dプリンターの条件を整理してみます。

 

<購入する際の条件>

  • プリントサイズは150mm〜200mm程度
  • 造形精度は高めを希望するけど必須ではない
  • 初心者でも使いやすい
  • 予算は最大で10万円

その他に考慮したい条件として、

  • 全体が箱に収まっている組み立て済み構造
  • 動作音が静か
  • 自力で持ち運べる重さ

があります。

これらの条件を考慮して、メーカと機種を選んでいきます。

 

<FLASHFORGE社製 『 Adventurer3X』>

f:id:zaloha8:20210404113500j:plain

税込み、送料込みで¥77,000

あれこれ悩んだ末にこの機種を購入する事に決めて、メーカのオンラインショップから注文して2,3日で到着しました。『Adventurer3X』には、以下の様な特徴があります。

  • プリントサイズ(150mm x 150mm x 150mm)
  • 造形方式は熱溶解積層(ABS,PLA等のフィラメントに対応)
  • 初心者向け設計(水平出し不要、ノズルはワンプッシュ交換可能)
  • 静音設計(45dB)
  • 本体重量(9.0kg)

これだけだと、他の機種との違いがあまり感じられないですが、私の購入の決め手となった特徴がいくつかあります。

 

① 金属フィラメントに対応

個人向けの3Dプリンターでありながら、何とステンレスフィラメントにも対応しています。ステンレスフィラメントで造形して、脱脂と焼結処理を行えば金属の部品も作成できるんですね。

現在は、ステンレスフィラメントの販売と脱脂、焼結処理は、法人のみサービスが受けられる様になっていますが、将来的に個人もサービスが受けられる様になると良いですね。

 

② クラウドサービスの予定がある

クラウドサービスの企画が進行中で、リリースされると3Dプリンターの共有や、データのアップロードができる様です。便利そうなサービスなので期待しています。

 

③ 高評価のコメントが多い

実際に購入された方のコメントで、ソフトが優秀とのコメントが多く、トラブルが少なそうな印象を受けました。

 

<セットアップ>

早速、開梱して本体をセットアップしていきます。

f:id:zaloha8:20210404114411j:plain

箱を開けると緩衝材に包まれた本体と付属品が入っています。

付属のクイックスタートガイドに従って電源に接続し、本体内部の緩衝材を取り除き、ファンを取り付ければセットアップ完了です。

f:id:zaloha8:20210404114907j:plain

 

<フィラメントのロード>

f:id:zaloha8:20210404115909j:plainf:id:zaloha8:20210404115925j:plain
本体側面のカバーを開けて、リール状に巻かれたフィラメントをセットします。

タッチパネルからフィラメントのロードボタンを押すと、ノズルが加熱されて、フィラメントが内部に引き込まれていきます。

 

<校正>

f:id:zaloha8:20210404120428j:plain

タッチパネルから校正ボタンを押すとテーブルが自動で動き出し、プラットフォームとノズルが近づいた位置で止まります。その状態でタッチパネルのボタンを押してプラットフォームとノズルの間隔がコピー用紙2枚位になる様調節すれば校正は完了です。

 

<スライスソフトでデータを準備>

f:id:zaloha8:20210404143344j:plain


3D CADソフトで作成した3Dモデルを.stl形式でエクスポートして、スライスソフト(FlashXPrint)で読み込みます。メーカのWebサイトからダウンロードできるスライスソフト(FlashPrint)を使うとプリンター本体とPCのWi-Fi接続に失敗するので、付属品の中にあるカード型USBメモリ内のFlashXPrintの方をインストールします。

スライスソフト上でエキスパートモードに変更すると造形条件を細かく設定する事ができますが、正直パラメータが多すぎて良く分からないので、最初は初期設定のまま造形してみます。

(造形条件の違いが仕上がりにどの様に影響するのかも調べてみたいですね)

今回造形する物は、少し前にFusion360で作成した一輪挿しです。

 

creators-small-room.hatenablog.com

 

<テストプリント>

f:id:zaloha8:20210404143939j:plain


Wi-Fi経由でプリンター本体にデータを転送して造形をスタートします。

造形時間は一輪挿し本体の方が3時間30分、土台の方が2時間でした。FlashXPrint上の予想印刷時間は目安であって、実際のプリント時間はそれよりも少し長くなります。

造形時の音もうるさく感じる事は無く、許容範囲だと思います。プリンターが動いているすぐ横で寝るとかは無理だと思いますが、寝室とは別の部屋に置いて、部屋の扉を閉めておけば深夜でも造形は可能だと思います。

 

『Adventurer3X』には本体内部にカメラが内蔵されており、Wi-Fi経由でPCから印刷の様子が見れる様になっています。

f:id:zaloha8:20210404151340j:plain

PCのブラウザにhttp://<3DプリンタIPアドレス>:8080/?action=stream

と入力すると見れます。

 

f:id:zaloha8:20210404150059j:plainf:id:zaloha8:20210404150440j:plain

プリントが完了したら、ビルトプレートごと造形物を取り外します(『Adventurer3X』は、プラットフォームとビルドプレートが分離できる様になっているので取り出しも楽です)。

造形物をビルドプレートから取り外したら、ラフトとサポート材を取り除き、バリをやすりで削り落としたら完成です。

f:id:zaloha8:20210404150933j:plain
 

<まとめ>

という訳で、FLASHFORGE社製 『Adventurer3X』で初めて3Dプリントしてみました。初心者向けに設計されており、セットアップから造形まで簡単にできる様になっています。造形時の音も許容できるレベルで、最初の1台としてはとても満足しています。造形時の条件を細かく設定できる様になっているので、この辺は、いろいろな物を造形して使い込んで確認して行きたいと思います。皆さんも趣味の物づくりに3Dプリンターを導入してみてはいかがでしょうか。

 

それでは、また。

【Fusion360】個人利用できる3D CADで一輪挿しを設計してみる

f:id:zaloha8:20210313183801j:plain

 

こんにちは。alohaです。

 

3D CAD(3次元CAD)という物をご存知でしょうか。

 

3D CADとは、パソコン上で動くソフトウェアの一種で、主に物づくりの設計段階で使用される設計支援ツールです。

 

私がまだ学生の時は、一般家庭にパソコンが普及し始めた初期の頃なので、学校の設計製図の授業では方眼紙に定規とコンパス、シャープペンシルで部品の形状、寸法を書いていました。手書きで線を引いているので、間違えると消しゴムで線を消して書き直す必要があり、大変な手間をかけて図面を完成させていた思い出があります。

 

その後、パソコンの普及によって設計製図は手書きからコンピュータを使用したスタイルに移り変わり、そこで始めに使われていたのは2D CAD(2次元CAD)でした。製図のコンピュータ化によって、図面の修正が簡単に行える様になり、これだけで設計製図の時間は大幅に減ったと思いますが、それでも、部品の3次元形状を2次元図(正面、側面、上面から見た図)に変換する部分は人間が想像で行う必要があり、複雑な形状の部品では間違いが起こりやすい状況であったと思います。

 

近年ではパソコンの高性能化と3D CADの普及によって、部品の3次元形状をモニター上にCG表示して、確認しながら部品形状を決める事ができる様になり、3次元形状を2次元図に変換するのも自動でできる様になりました。

 

私は社会人になった時に仕事で3D CADを使い始めて、以来10年以上3D CADを使って機械設計の仕事をしています。

 

私の中で3D CADは会社で使う業務用ソフトという位置づけでしたが、最近では個人で使用できる3D CADソフトがあるんですね。

 

代表的な物としては、Autodesk社の『Fusion360』があります。

 

Fusion360』は、法人向けの本格的な3D CADソフトでありながら、個人利用に限り無料で使う事ができるため、趣味で物づくりをする人にとってはありがたいソフトです。

 

私が普段仕事で使っている3D CADはSolid Worksですが、『Fusion360』では以下の特徴があります。

  • 個人使用に限り無料で使用できる
  • 作成したファイルは、クラウド上に保存される
  • 無料使用の場合、同時に編集できるファイルの上限は10個

 

3Dプリンターも一般家庭に普及しはじめており、『Fusion360』+『3Dプリンター』で趣味の物づくりをしている人も多いのではないでしょうか。

 

今回はお試しとして、『Fusion360』を使って一輪挿しを設計してみます。その過程で3D CADの基本5機能を確認していきます。

  1. 3Dパーツモデルの作成
  2. シートメタルモデルの作成
  3. アセンブリモデルの作成(複数の3Dパーツを合体)
  4. レンダリングで仕上がり確認
  5. 平面図の作成

それでは、早速作業を開始しましょう。

 

<手書きでイメージ図を書く>

いきなりパソコンに向かって作業を開始しても良いのですが、出来上がりのイメージを手書きで紙に書き出しておいた方が良いです。

 f:id:zaloha8:20210313172034j:plain

 

<3Dパーツモデルの作成>

3D CADは、ソフトの違いによって多少操作感に違いはあるものの、3次元形状を作る過程はどれも同じです。スケッチで断面を書いて、断面の形を並行に押し出すか回転軸を中心に回すことで立体形状を作ります。

 f:id:zaloha8:20210313172528j:plainf:id:zaloha8:20210313172541j:plain

 

立体形状を作成しただけだと角が立っていてカクカクした形状になるので、角に丸みを付けて滑らかにします。

f:id:zaloha8:20210313174123j:plain


取っ手を付ける部分の凸を作成すれば一輪挿しの本体は完成です。

f:id:zaloha8:20210313174547j:plain

 

断面の丸形状をフリーハンドで描いた曲線に沿って押し出し、取っ手のパーツモデルを作ります。

f:id:zaloha8:20210313174808j:plain

 

<シートメタルモデルの作成>

シートメタルによる部品形状の作成も3D CADでは良く行われています。シートメタルは、板状の材料を折り紙の様に折り曲げて部品を作成する方法です。材料が板状なので作成できる形状が限られますが、安く部品を作る事ができるので物づくりの現場ではシートメタル部品が良く使われています。今回は一輪挿しを置く台をシートメタルで作成してみました。

f:id:zaloha8:20210313175022j:plain

 

アセンブリ の作成>

各部品の3次元モデルができたら、それらを合体させて1つの3次元モデルを作成します。

 いい感じですね。

f:id:zaloha8:20210313175253j:plain

 

レンダリングで仕上がり確認>

3D CADを使うことで部品形状は作成できましたが、実際に物を作った場合の雰囲気や質感は材料や作成方法によって異なります。『Fusion360』では作成した3Dモデルに材料を設定することで仕上がり具合をCGで確認する事ができます。例えば一輪挿しの材料にプラスチック(灰色)、台にアルミを設定すると下の絵の様になります。

f:id:zaloha8:20210313175536j:plain

 

<平面図の作成>

作成した3Dモデルを3Dプリンタで印刷して物を作る場合には、基本的に平面図を作成する必要はありません。しかし、金属の塊を削って物を作る場合や、精密加工が必要な場合には3Dモデルから平面図を作成して、実際に物を作る際に必要な情報を追記する必要があります。作成した3Dモデルから正面図が自動的に描かれるので、側面図や断面図、寸法等を追加すれば平面図が完成します。

f:id:zaloha8:20210313175800j:plain

 

<まとめ>

という訳で、無料で使用できる3D CADソフトの『Fusion360』を使用して一輪挿しを設計してみました。3D CADソフトの基本の5機能を確認してみましたが、個人が趣味の範囲で使用するには十分な能力があると思います。

 

さらに、『Fusion360』にはCAMの機能も付いており、ツールパスからNCデータを作成する事もできるとの事。いずれはCAM機能を使ってNCマシンを動かす事にもトライしてみたいですね。

 

無料で使える『Fusion360』で、自分オリジナルの物づくりにトライしてみてはいかがでしょうか。

 

それでは、また。

【Abong】機械式時計の組み立てキット(木製振り子時計)

f:id:zaloha8:20210103180916j:plain


こんにちは、alohaです。

 

機械式時計という物を知っているでしょうか。

 

最近はスマホでも時間を確認できるので、家に時計を置いていない人も多いかもしれませんが、駅や会社、学校等の多くの場所で時計を目にします。

 

時計の種類は大きく分けて以下の2種類がありますが、現在、市販されている時計の多くは①のクォーツ式だと思います。

 

 

① クォーツ式

② 機械式

動力源

電池

重りやゼンマイ

誤差

1ヶ月に30秒程度

1日に30秒程度

価格

数百円〜1万円程度

3万円〜1000万円以上

 

この時計という機械に求められる機能は、『現在時刻を知らせる』というシンプルな物ですが、販売価格の幅がとても広い事に驚かされます。

 

必要な機能は同じなのに、ここまで価格差のある物は他に無いのではないでしょうか。

まさに趣味、嗜好の世界ですね。

 

①のクォーツ式の方が誤差が少なく、価格も安いので普通はこちらを買うと思いますが、②の機械式時計も時計好きの間では根強い人気があります。

 

時計好きの人達を惹きつける機械式時計の魅力は何でしょうか。

それはきっと、時計の心臓部(脱進機)が時を刻む速度をコントロールして、複雑に噛み合った歯車の動く様子が面白いという所だと思います。

 

私も機械設計の仕事をしているので、機械式時計の魅力は理解できますが、その構造についてはよく分かっていませんでした。

 

インターネットで機械式時計の構造を調べてみると、その歴史は古く、最初に発明されたのは1300年代の様です。その後、ホイヘンスブレゲ等の多くの人達によって精度が飛躍的に改善され今日に至っているとの事。

インターネットから得られた情報で構造はおおよそ理解できましたが、細かな部分を理解するには実際に触って作ってみるのが良いと思い、機械式時計の組み立てキットを購入しました。

 

<木製振り子時計の組み立てキット>

木製の振り子時計はWooden clockと呼ばれていて、海外では木工工作の趣味として人気がある様ですが、国内ではほとんど情報がありません。

Amazon経由で海外の店舗から購入したところ、3週間位で到着しました。

 

f:id:zaloha8:20210102113927j:plain

Abong メカニカル木製時計組み立てキット ¥10,140

 

箱の中には、平板をレーザーカットしたパーツと英文の組み立て説明書が入っています。

 f:id:zaloha8:20210102134040j:plainf:id:zaloha8:20210102142118j:plain


 それほど高価な組み立てキットではないので仕方ないと思いますが、部品単体で見ると少し作りが雑な印象を受けます。本当に動くのだろうかと半信半疑のまま、とりあえず組み立てを始めます。

 

<あると便利な工具>

組み立てキットの中に工具は入っていないので、以下を用意しておくと良いです。

  • 糸のこ
  • 紙やすり(粗さ400番、240番)
  • 棒やすり(丸、半丸、平)
  • 鉛筆削り
  • 木工用ボンド

f:id:zaloha8:20210102142656j:plain


<組み立て手順>

① パーツの切り出し

f:id:zaloha8:20210102141723j:plain


レーザーカットされた平板からパーツを切り出します。各パーツは外周が何箇所かフレームとつながっているので、この部分を切断してパーツを切り出します。丸い部品は指で押し出すだけで簡単に取れますが、ギヤは力任せに取り出すと壊してしまいそうなので、糸のこで慎重に切り離していきます。

 

② バリ取りしてグラファイトを塗る

f:id:zaloha8:20210102143636j:plainf:id:zaloha8:20210102143645j:plain

 

切り出したパーツに紙やすりをかけてバリを取り除きます。ギヤは歯面をやすりで削って滑らかにした後、キットに付属の鉛筆で歯面を塗りつぶします(鉛筆に含まれるグラファイトによって、ギヤの潤滑が良くなるとの事)。

 

③ ギヤを組み立てる

f:id:zaloha8:20210102162632j:plainf:id:zaloha8:20210102162646j:plain


組み立て説明書に沿ってギヤを組み立てていきます。分を示すギヤにはクラッチが組み込まれており、重りを巻き上げる際には中央の突起のある板が時計回りに回転するため、その回転が外側のギヤに伝わらない様になっています。一方、重りが重力に引かれて下がる際には、突起のある板が反時計回りに回転するので、突起が周りの爪に引っかかってその回転が外側のギヤに伝わる様になっています。

 

④ ベースプレートを組み立てる

f:id:zaloha8:20210102163143j:plain

 

ベースプレートに時刻合わせ用のスライダーとシャフトを打ち込み、ギヤが挿入されるシャフト部分を鉛筆で塗りつぶしてグラファイトを付けます。

 

⑤ 振り子を組み立てる

f:id:zaloha8:20210103134156j:plain

 

振り子式時計は単振り子の等時性を利用しているので、振り子の周期(1往復にかかる時間)は振り子の長さによって決まります。周期2秒の前提で設計されているこの時計の振り子の長さは理論上は99 cmになります。

数式では以下の通りで、\ellは振り子の長さ、Tは振り子の周期、gは重力加速度です。

T=2\pi\sqrt{\frac{\ell}{g}}

T^{2}=4\pi^{2}\frac{\ell}{g}

\ell=T^{2}\frac{g}{4\pi^{2}}

T=2[s], g=9.8[m/s^{2}]とすると、

\ell=2^{2}\frac{9.8}{4\times3.14^{2}}=0.99[m]=99 [cm]

  

⑥ ベースプレートにギヤを組み付ける

f:id:zaloha8:20210103143321j:plain

 

ベースプレートのシャフトにギヤを挿入します。機械工学の世界では噛み合った大ギヤと小ギヤの歯数の比を減速比(または速比)と言いますが、時計の場合は、

  • 秒針が1回転すると分針が1/60回転する
  • 分針が1回転すると時針が1/12回転する

様に設計されていれば良いことになります。このキットのギヤを調べてみると、秒を示すギヤ(ガンギ車)と分を示すギヤの減速比は60になっており、分を示すギヤと時を示すギヤの減速比は12になっていますね。

f:id:zaloha8:20210103150550j:plain

 

秒と分を示すギヤの間の減速比=\frac{48}{12}\frac{45}{12}\frac{48}{12}=60
分と時を示すギヤの間の減速比=\frac{72}{6}=12

秒を示すギヤ(ガンギ車)は1分間で1回転すれば良い事になりますが、ガンギ車の歯数は30枚なので、振り子が周期2秒で動けばガンギ車は1分間で1回転するので時計として成立する訳です。時計の秒をコントロールしているガンギ車と振り子の部分は「脱進機」と呼ばれ、機械式時計の中で最も重要な部分なので、時計の心臓部とも呼ばれています。

 

⑦ 振り子と重りを取り付ける

f:id:zaloha8:20210103175547j:plain

 

振り子と重りを取り付けて完成です。重りが重力に引かれて下がる事で分を示すギヤが回転し、その回転が秒を示すギヤ(ガンギ車)に伝達されます。ガンギ車はアンクルを介して振り子に繰り返し揺れ動くためのエネルギーを供給し、振り子は等時性によって正確な周期で揺れ動く事で時計は正確に時を刻みます。

 実際に動かしてみると、残念ながら振り子が5往復くらいした所で動きが止まってしまいました。予想はしていましたが、ガンギ車から振り子にエネルギーがうまく供給されていない様です。部品の精度とか組み立ての精度とか接触部の摩擦などのバランスが取れていないとうまく動かないのでしょうね。部品の表面を削って滑らかにする等、色々と試してみます。

 

<まとめ>

機械式時計の仕組みを学ぶために、Abongの機械式時計の組み立てキットを購入して振り子時計を組み立ててみました。やっぱり自分で手を動かしながら組み立てを行うと、構造をしっかりと理解できますし、難しいポイントも分かってきます。今度は自分で設計してオリジナルの時計作りにトライしてみようと思います。

 

それでは、また。

【ラズパイ】シングルボードコンピュータ(Raspberry Pi)でPythonプログラムを書いてみる

f:id:zaloha8:20200926193842j:plain
こんにちは。alohaです。

 

ラズベリーパイを買いました・・・と言っても甘くておいしいおやつのパイではありません。

 

Raspberry Piは、技術教育用に開発された名刺サイズのシングルボードコンピュータで、見た目は下の写真の様な姿をしています。

f:id:zaloha8:20200922164843j:plain

この基盤の上にCPUやメモリ等の部品が配置されていて、通常のPCと同様の使い方ができる様になっています。価格も安く1枚5,000円程度で入手することができますが、その性能は高く、ひと昔前のPCと同じ位の性能があります(私が購入したモデルはRaspberry Pi4 Model B CPU1.5GHz メモリ4GB)。

 

Raspberry Piは技術教育用に開発されたため、通常のPCとは下記の部分に違いがあります。

  • Linuxベースの専用OSで動いている
  • プログラムを作成して実行する環境が標準で用意されている
  • 拡張コネクタにカメラやモータ、センサ等の機器を接続できる
  • 接続した機器を使ったプログラムを作成できる

接続した機器を動かすプログラムを作成して実行する環境が用意されているため、これからプログラミングやロボットについて学ぼうとしている人には最適なデバイスではないでしょうか。

 

こうゆう便利なデバイスの存在を知ると、『よーし、何か作ってみよう』という気になって、創作意欲が湧いてきますね。

 

私が学生の頃、プログラミングは理系の学生だけが覚える特殊スキルでしたが、現在では、プログラミングは小中学生も授業で学習する科目になっており、『教養』という位置付けなんですね。

 

私が最後にまともにプログラミングをした時からすでに10年以上経っていますが、プログラミング自体は嫌いではなかったので、久々にプログラムを作ってみようと思います。

 

学生の頃に使っていた言語はC言語ですが、せっかくなので近年人気の言語と言われている『Python』にトライしてみます。

 

<必要な物を集める>

Raspberry Pi自体は単なる基盤なので、まともに何かを開発するには周辺機器を色々と揃える必要があります。最低限必要な下記の物をamazonから購入しました。

  • Raspberry Pi本体
  • モニター+接続ケーブル
  • 5V 電源アダプタ
  • キーボード(USB, 有線)
  • マウス(USB, 有線)
  • Micro SDカード

 

① Raspberry Piスターターキット

Micro SDカードはメーカによって相性の問題があるらしく、その辺のトラブルが面倒なのと、基盤をむき出しで使う事に抵抗があったので、Raspberry Pi本体とケース等の主要パーツがセットになったスターターキットを購入しました。

f:id:zaloha8:20200922170643j:plain

Marstudy Raspberry Pi4 Model B スターターキット ¥12,600

スターターキットには、Raspberry Pi4 model B(メモリ4GB)、専用ケース、電源アダプタ(ON-OFFスイッチ付き)、Micro SDカード(32GB)、SDカードリーダ、CPUファン+ヒートシンク、モニター接続ケーブル(Micro-HDMI  <->  HDMI)、取扱説明書が入っています。

 

Raspberry Pi本体にはON-OFFスイッチが付いておらず、USB Type-Cコネクタに電力が供給されると起動する様になっています。このため、ON-OFFスイッチ付きの電源アダプタが便利です。

 

Raspberry Piのスターターキットは、複数の会社が販売していますが、CPUファンが専用設計で静かな事と、ケースの作りがしっかりしているという商品レビューがあったのでMARSTUDY社の物を買う事にしました。

 

② キーボードとマウス

f:id:zaloha8:20200922172422j:plain

サンワサプライ USBキーボード ¥1,673

f:id:zaloha8:20200922172438j:plain

Logicool USBマウス ¥778

Raspberry Piに使うキーボードとマウスは無線式だと認識しない場合がある様です。有線式はケーブルが煩わしいので好きではありませんが、トラブルを避けたいので有線式の物を購入します。

 

③ モニターと接続ケーブル

Raspberry Pi4 model Bの映像出力は、Micro-HDMI端子から出力されます。Raspberry Piスターターキットには、Micro-HDMI端子とHDMI端子を繋ぐケーブルが入っているので、HDMIを入力できるモニターやテレビがあればそれを使う事ができます。

 

Raspberry Pi用のモニターは、タッチパネル対応のタブレットサイズの物やスマートフォンサイズの物も販売されているので、これらも試してみたいですね。

 

今回は、Raspberry Pi用とPCのセカンドモニターとして使うために15.6インチのモバイルモニターを購入しました。このモニターの入力はMini-HDMIなので、Raspberry Piと接続するためにMicro-HDMIとMini-HDMIを接続するケーブルも合わせて購入します。

f:id:zaloha8:20200926163324j:plain

EVICIV 15.6インチ モバイルモニター薄型 ¥20,980

f:id:zaloha8:20200926164506j:plain

Micro-HDMI to Mini-HDMI 変換ケーブル 1m ¥980

Raspberry Piを組み立てる>

スターターキットの商品ページに組み立て手順の動画があるので、それを参考にスムーズに組み立てができました。

f:id:zaloha8:20200926165534j:plain

 ケースはもう少しかっこいい物を使いたいですが、とりあえず初めはこれで良しとします。慣れてきたらスタイリッシュな物に変えたいと思います。

 

<OSをインストールする>

Raspberry PiのSDカードスロットにMicro SDカードを挿入します。Micro SDカードにはOSのインストーラが保存されている必要がありますが、スターターキットに入っているMicro SDカードにはあらかじめインストーラ(NOOBS)が保存してあるので、そのままMicro SDカードをスロットに挿入すれば良いです。

f:id:zaloha8:20200926172319j:plain

Raspberry Piに電源アダプタ、キーボード、マウス、モニターを繋ぎ込みます。モニターを繋ぐMicro-HDMI端子は2箇所ありますが、電源用のUSB Type-C端子の隣に繋ぐのが正解です。

f:id:zaloha8:20200926184403j:plain

電源アダプタのスイッチをONにすると、Micro SDカード内のインストーラが起動してモニターにOSのインストール画面が表示されます。

 

Raspberry Pi本体に付けたファンは・・・すごく静かですね(よかった)。

 

スターターキットの商品ページにOSのインストール手順の動画があるので、それに沿ってWiFiに接続し、OS(今回はRaspbian)のインストールとアップデートを行います。

 

OSのインストール中は、画面の表示が一部おかしく表示されていたので大丈夫かなと心配になりましたが、インストール完了後は問題なく表示される様になりました。

f:id:zaloha8:20200926173305j:plain

OSのインストールは20分位で完了しましたが、OSのアップデートは時間が掛かって2時間位でした(思いのほか長いですね)。

f:id:zaloha8:20200926174102j:plain

 

Pythonでプログラムを作ってみる>

ここまで来て、ようやく普通のPCとして使える様になりました。ブラウザを起動してYoutubeで動画再生したり、MS Office相当のソフトも問題なく使えています。

f:id:zaloha8:20200926174739j:plain

さて、Pythonで何かプログラムを作ってみます。初めて作るプログラムの典型は『Hello Worldアプリケーション』ですが、このアプリケーションは、プログラムを学ぶほとんど全ての人が通る道であり、プログラム学習の第一歩です。

 

メニュー → プログラミング → Thonny Python IDEをクリックして、IDEを起動します。

f:id:zaloha8:20200926191120j:plain

print('Hello Python World!')と入力して実行すると、

Hello Python World!

と実行結果が表示されました。成功です。

f:id:zaloha8:20200926191918j:plain

久々すぎて、何だかとても懐かしい気分になりますが、プログラミングという物に初めて触れた時の事を思い出します。

 

<まとめ>

という訳で、Raspberry Piでプログラミングができる環境を整えて、最初のプログラムを作成るまでの流れを書いてみました。

 

今後もRaspberry Piで作った物を紹介していきたいと思います。

それでは、また。