検索
学習キットや必要パーツの開発・拡充のリクエスト募集
会員ログイン
ID :    login
PASS :   
新規会員登録はこちら
 
パスワードを忘れた方はこちら
お問い合わせ
メール
最近チェックした商品
 
 

 

 4.2 PWMでサーボ-モータを回して見よう



(1) サーボ-モータの回路を作ろう

PWMを使ってサーボモータを回します。サーボモータの回る角度はPWM信号のパルス幅で変わります。

(1) 回路を作ろう

〜販

下の配線図、回路図をみて、回路を組立て下さい。
 


(2) 部品を作ろう

サーボモータ(SG-90)は、

動作パルス:20ms-->周波数50Hz

0度:1.0m-->デユーティ5%

90度:1.5ms-->デユーティ7.5%

180度:2.0ms-->デユーティ10.0%

で動作します。

‥展擦鯑れます。

RaspberryPiB+にACアダプタを繋ぎ、電源を入れます。

▲蹈哀ぅ鵑靴泙后

Raspbianが立ち上がったら、ログインして下さい。

「nano」エディター立ち上げます。

「nano rpi_bp_pwm_sv1_1.py」コマンドを実行して下さい。
画面が「nano」エディターの画面に変わります。

ぅ廛蹈哀薀爐鯑れます

サンプルプログラム1
 
 #! /usr/bin/env python

 import RPi.GPIO as GPIO
 import time

 GPIO.setmode(GPIO.BCM) # use GPIO Number

 SV1 =12
 GPIO.setup(SV1, GPIO.OUT)

 servo = GPIO.PWM(SV1, 50) # set 20 ms / 50 Hz

 angle = 0.0 # set angle
 new_duty =(1.0 + angle/180.0)/20.0*100.0 # calculate duty
 print(new_duty)
 servo.start(new_duty)
 print("angle 0 deg")
 time.sleep(0.5)

 angle = 90.0 # set angle
 new_duty =(1.0 + angle/180.0)/20.0*100.0 # calculate duty
 print(new_duty)
 servo.ChangeDutyCycle(new_duty)
 print("angle 90 deg")
 time.sleep(0.5)

 angle = 180.0 # set angle
 new_duty =(1.0 + angle/180.0)/20.0*100.0 # calculate duty
 print(new_duty)
 servo.ChangeDutyCycle(new_duty)
 print("angle 180 deg")
 time.sleep(0.5)

 angle = 0.0 # set angle
 new_duty =(1.0 + angle/180.0)/20.0*100.0 # calculate duty
 print(new_duty)
 servo.start(new_duty)
 print("angle 0 deg")
 time.sleep(0.5)

 servo.stop() # stop servo
 


テ力を終わります。

「ctrl+X」を実行します。
次に、「y/n」は「enter」を入れます。

ζ力したプログラムを実行します。

「sudo python rpi_bp_pwm_sv1_1.py」を実行します。

*サーボモータが0度、90度、180度、0度とまわります。その後に、「sv1 done」のメッセージが出ます。





(2) 部品にしよう

初期化、回転角の制御を部品にします。

 nano」エディター立ち上げます。

「nano rpi_bp_pwm_sv1a_1.py」コマンドを実行して下さい。
画面が「nano」エディターの画面に変わります。

▲廛蹈哀薀爐鯑れます

サンプルプログラムを見て、入力します。

サンプルプログラム2
 
 #! /usr/bin/env python

 import RPi.GPIO as GPIO
 import time

 def sv_init(sv):
 GPIO.setup(sv, GPIO.OUT)
 servo = GPIO.PWM(sv, 50) # set 20 ms / 50 Hz
 return servo

 def angle_duty(angle):
 duty =(1.0 + angle/180.0)/20.0*100.0 # calculate duty
 return duty

 if __name__ == ("__main__") :
 # start

 GPIO.setmode(GPIO.BCM) # use GPIO Number

 SV1 =12
 servo = sv_init(SV1)

 angle = 0.0 # set angle
 new_duty = angle_duty(angle)

 print(new_duty)
 servo.start(new_duty)
 print("angle 0 deg")
 time.sleep(0.5)

 angle = 90.0 # set angle
 new_duty = angle_duty(angle) # calculate duty
 print(new_duty)
 servo.ChangeDutyCycle(new_duty)
 print("angle 90 deg")
 time.sleep(0.5)

 angle = 180.0 # set angle
 new_duty = angle_duty(angle) # calculate duty
 print(new_duty)
 servo.ChangeDutyCycle(new_duty)
 print("angle 180 deg")
 time.sleep(0.5)

 angle = 0.0 # set angle
 new_duty = angle_duty(angle) # calculate duty
 print(new_duty)
 servo.start(new_duty)
 print("angle 0 deg")
 time.sleep(0.5)

servo.stop() # stop servo
 


F力を終わります。

「ctrl+X」を実行します。
次に、「y/n」は「enter」を入れます。

て力したプログラムを実行します。
「sudo python rpi_bp_pwm_sv1a_1.py」を実行します。

*サーボモータが0度、90度、180度、0度とまわります。
その後に、「sv1a done」のメッセージが出ます。



(3) モジュールを使おう

(2)で作った部品(関数)の入ったファイルをモジュールとして使います。

 nano」エディター立ち上げます。

「nano rpi_bp_pwm_bz1b_1.py」コマンドを実行して下さい。
画面が「nano」エディターの画面に変わります。

▲廛蹈哀薀爐鯑れます
サンプルプログラムを見て、入力します。

サンプルプログラム3
 
 #! /usr/bin/env python

 import RPi.GPIO as GPIO
 import time

 from rpi_bp_pwm_sv1a_1 import *

 if __name__ == ("__main__") :
 # start

 GPIO.setmode(GPIO.BCM) # use GPIO Number

 SV1 =12
 servo = sv_init(SV1)

 angle = 0.0 # set angle
 new_duty = angle_duty(angle)

 print(new_duty)
 servo.start(new_duty)
 print("angle 0 deg")
 time.sleep(0.5)

 angle = 90.0 # set angle
 new_duty = angle_duty(angle) # calculate duty
 print(new_duty)
 servo.ChangeDutyCycle(new_duty)
 print("angle 90 deg") 
 time.sleep(0.5)

 angle = 180.0 # set angle
 new_duty = angle_duty(angle) # calculate duty
 print(new_duty)
 servo.ChangeDutyCycle(new_duty)
 print("angle 180 deg")
 time.sleep(0.5)

 angle = 0.0 # set angle
 new_duty = angle_duty(angle) # calculate duty
 print(new_duty)
 servo.start(new_duty)
 print("angle 0 deg")
 time.sleep(0.5)

 servo.stop() # stop servo
 GPIO.cleanup()
 


F力を終わります。

「ctrl+X」を実行します。
次に、「y/n」は「enter」を入れます。

て力したプログラムを実行します。

「sudo python rpi_bp_pwm_sv1b_1.py」を実行します。
*サーボモータが0度、90度、180度、0度とまわります。
その後に、「sv1b done」のメッセージが出ます。




ヅ展擦鬚ります。

「sudo shutdown -h now」を入力して下さい。

*ステータスLEDの点滅が終わり、消えてからマイクロUSBのDC5Vを抜いて下さい。