Raspberry Pi は、電子エンジニアや愛好家向けに設計されたARMアーキテクチャプロセッサベースのボードです。PIは、現在最も信頼されているプロジェクト開発プラットフォームの1つです。より高速なプロセッサ速度と1GBのRAMを備えたPIは、画像処理やモノのインターネットなどの多くの注目を集めるプロジェクトに使用できます。
注目を集めるプロジェクトを行うには、PIの基本的な機能を理解する必要があります。 これらのチュートリアルでは、RaspberryPiのすべての 基本機能について説明します。各チュートリアルでは、PIの機能の1つについて説明します。このRaspberryPiチュートリアルシリーズの終わりまでに、あなたは自分で注目を集めるプロジェクトを行うことができるようになります。以下のチュートリアルを実行してください。
- RaspberryPi入門
- RaspberryPiの構成
- LED点滅
- ラズベリーパイボタンインターフェース
- Raspberry PiPWM生成
- RaspberryPiを使用したDCモーターの制御
- RaspberryPiによるステッピングモーター制御
- シフトレジスタとRaspberryPiのインターフェース
- Raspberry PiADCチュートリアル
このチュートリアルでは、RaspberryPiを使用してサーボモーターを制御します。サーボモーターを制御するという概念はPWMから来ているので、サーボに行く前にPWMについて話しましょう。
PWM(パルス幅変調):
以前、PWMについて何度も話しました:ATmega32を使用したパルス幅変調、Arduino Unoを使用したPWM、555タイマーICを使用したPWM、およびArduinoDueを使用したPWM。PWMは「パルス幅変調」の略です。PWMは、安定した電源から可変電圧を取得するために使用される方法です。PWMをよりよく理解するために、以下の回路を検討してください。
上の図では、スイッチが一定期間継続的に閉じられている場合、LEDはこの期間中継続的に「オン」になります。スイッチが0.5秒間閉じられ、次の0.5秒間開かれると、LEDは最初の0.5秒間だけオンになります。これで、合計時間にわたってLEDがオンになる割合は、デューティサイクルと呼ばれ、 次のように計算できます。
デューティサイクル=ターンオン時間/(ターンオン時間+ターンオフ時間)
デューティサイクル=(0.5 /(0.5 + 0.5))= 50%
したがって、平均出力電圧はバッテリー電圧の50%になります。
オンとオフの速度をレベルまで上げると、オンとオフではなく、LEDが暗くなります。これは、私たちの目が25Hzを超える周波数をはっきりと捉えることができないためです。100ミリ秒のサイクルを考えてみましょう。LEDは30ミリ秒の間オフになり、70ミリ秒の間オンになります。出力には70%の安定した電圧があるため、LEDは70%の強度で継続的に点灯します。
デューティ比は0〜100になります。「0」は完全にオフで、「100」は完全にオンであることを意味します。このデューティ比は、サーボモーターにとって非常に重要です。サーボモーターの位置は、このデューティー比によって決定されます。LEDとRaspberryPiを使用したPWMデモンストレーションについては、これを確認してください。
サーボモーターとPWM:
サーボモーターは、DCモーター、位置制御システム、およびギアの組み合わせです。サーボは現代の世界で多くの用途があり、それにより、さまざまな形状とサイズで利用できます。このチュートリアルではSG90サーボモーターを使用します。これは人気があり、最も安価なものの1つです。SG90は180度のサーボです。したがって、このサーボを使用すると、軸を0〜180度の範囲で配置できます。
サーボモーターは主に3本のワイヤーがあり、1本は正電圧用、もう1本はアース用、最後の1本は位置設定用です。赤線は、電源に接続され、茶色ワイヤがグランドに接続され、黄色のワイヤ(又は白色)信号に接続されています。
サーボには、信号ピンからPWM信号を受け取る制御システムがあります。信号をデコードし、そこからデューティ比を取得します。その後、比率を事前定義された位置の値と比較します。値に差がある場合は、それに応じてサーボの位置を調整します。したがって、サーボモーターの軸位置は、信号ピンでのPWM信号のデューティ比に基づいています。
PWM(Pulse Width Modulated)信号の周波数は、サーボモーターのタイプによって異なります。SG90の場合、PWM信号の周波数は50Hzです。サーボの動作周波数を確認するには、その特定のモデルのデータシートを確認してください。したがって、周波数を選択したら、ここでもう1つ重要なのは、PWM信号のデューティ比です。
次の表は、その特定のデューティ比のサーボ位置を示しています。それに応じて値を選択することにより、その間の任意の角度を取得できます。したがって、45ºのサーボの場合、デューティ比は「5」または5%である必要があります。
ポジション |
デューティ比 |
0º |
2.5 |
90º |
7.5 |
180º |
12.5 |
サーボモーターをRaspberryPiに接続する前に 、このサーボモーターテスター回路を使用してサーボをテストできます。以下のサーボプロジェクトも確認してください。
- Arduinoを使用したサーボモーター制御
- ArduinoDueによるサーボモーター制御
- 8051マイクロコントローラーとインターフェースするサーボモーター
- MATLABを使用したサーボモーター制御
- フレックスセンサーによるサーボモーター制御
- 重量によるサーボ位置制御(力センサー)
必要なコンポーネント:
ここでは 、Raspbian JessieOSでRaspberryPi2モデルB を使用しています。ハードウェアとソフトウェアの基本的な要件はすべて前に説明しましたが、必要なものを除いて、RaspberryPiの概要で調べることができます。
- 接続ピン
- 1000uFコンデンサ
- SG90サーボモーター
- ブレッドボード
回路図:
A1000µFは+ 5V電源レールの両端に接続する必要があります。そうしないと、サーボの制御中にPIがランダムにシャットダウンする可能性があります。
作業とプログラミングの説明:
回路図に従ってすべてが接続されたら、PIをオンにしてPYHTONでプログラムを作成できます。
PYHTONプログラムで使用するいくつかのコマンドについて説明します。
ライブラリからGPIOファイルをインポートします。以下の関数を使用すると、PIのGPIOピンをプログラムできます。また、「GPIO」の名前を「IO」に変更しているため、プログラムでGPIOピンを参照する場合は常に、「IO」という単語を使用します。
RPi.GPIOをIOとしてインポートします
時々、私たちが使おうとしているGPIOピンが他の機能をしているかもしれません。その場合、プログラムの実行中に警告が表示されます。以下のコマンドは、PIに警告を無視して、プログラムを続行するように指示します。
IO.setwarnings(False)
PIのGPIOピンは、ボード上のピン番号または機能番号のいずれかで参照できます。ボード上の「PIN29」のように「GPIO5」です。したがって、ここでは、ピンを「29」または「5」で表すことにします。
IO.setmode(IO.BCM)
PIN39またはGPIO19を出力ピンとして設定しています。このピンからPWM出力を取得します。
IO.setup(19、IO.OUT)
出力ピンを設定した後、そのピンをPWM出力ピンとして設定する必要があります。
p = IO.PWM(出力チャネル、PWM信号の周波数)
上記のコマンドは、チャネルを設定するためのものであり、チャネルの周波数を設定するためのものでもあります。ここでの「p」は変数であり、何でもかまいません。PWM「出力チャネル」としてGPIO19を使用しています。「PWM信号の周波数」は、SG90の動作周波数が50Hzであるため、50を選択します。
以下のコマンドは、PWM信号の生成を開始するために使用されます。「 DUTYCYCLE 」は、前に説明したように「ターンオン」比を設定するためのものです。
p.start(DUTYCYCLE)
以下のコマンドは永久ループとして使用され、このコマンドを使用すると、このループ内のステートメントが継続的に実行されます。
一方1:
ここでは、Raspberry Piを使用してサーボを制御するためのプログラムが、GPIO19でPWM信号を提供します。PWM信号のデューティ比は、3つの値の間で3秒間変化します。したがって、毎秒、サーボはデューティ比によって決定される位置に回転します。サーボは3秒で0º、90º、180ºまで連続的に回転します。