HOME  >>  LED電子工作集 > R-6 PWMによるサーボモータの制御

R-6 PWMによるサーボモータの制御

■ はじめに

 今、RaspberryPiに挑戦している。 今回は先回に引き続いてPWM 制御の演習を実施した。 サーボモータの角度制御にはこのPWM 制御が用いられている。 そこで、この方法を使って鐡道模型の踏切に活用出来るのではと考えてトライしてみた。

 

■ 演習11: PWM信号によるサーボモータの角度制御

  .

 教則本の8.6章では精度の高いPWM 制御について説明されています。 そのためには、wiringPi と言うツールを使うそうだ。 教則本に従ってゴチャゴチャやって、必要なモジュールをインストールした。 中身は全く分からないが、使い方だけ演習しておこう。 サーボモータは内部に小型モータが入っている様子で、ギャで減速しており、何やら基板も見えている。 分解してみたいがまずは作動確認から実施しよう。

 アームには踏切を意識して黒と黄色に塗り分けた紙を貼り付けてみた。 右の写真。 プログラムは、教則本に示されていた 08-04-servo.py を使用して動かしてみた。 動作は減速ギャ音のギーギーという音が喧しいですね。

def signal():
    for i in range(1,3):
        GPIO.output(23, GPIO.HIGH)
        sleep(0.5)
        GPIO.output(23, GPIO.LOW)
        GPIO.output(24, GPIO.HIGH)
        sleep(0.5)
        GPIO.output(24, GPIO.LOW)
        
def lever_up():
    for i in range(0,65):
        duty_a = int(66*i/66+36)
        wiringpi.pwmWrite(18, duty_a)
        sleep(0.02)
        
def lever_down():
    for i in range(0,65):
        duty_a = int(102-66*i/66)
        wiringpi.pwmWrite(18, duty_a)
        sleep(0.02)
 --------------------
try:
    while True:
        signal()
        sleep(1)
        lever_down()
        signal()
        lever_up()
        signal()
        sleep(1)

半固定抵抗値の値に従って、サーボモータは素早く反応しているのが確認できた。 しかし、サーボモータとして作動させると、指定位置まで素早く動くので、踏切のアームを模す場合には速度制御が必要であろう。  その制御方法を知らないので、目標値を少しずつ変化させて作動させることにした。 また、警報機として、二つの赤のLEDを交互に点滅させる動作も付け加えることにしよう。

 警報機の交互点滅とアームの動作は平行して実施する必要が有るのですが、それを実施させる方法が見つかりませんでした。 コンピュータは同時に二つの仕事をこなせない事は知っていましたが、こんな単純なことがと思いつつもあきらめました。 タイムシヤリングが必要ですね。 右に示すLEDの交互点滅動作の signal() 関数と、アームをゆっくり上げ下げさせる lever_up() あるいは、lever_down() 関数を同時に実施させたいのですが・・・・・・・・・。

 なお、教則本には、レバー位置を指定するためのduty 値の計算が詳しく説明されていますが、36と102の間で指定せよとの事でしたので、その間を分割して指定するようにしました。 sleep(0.02) を変更することによってレーバーの動作速度を調整できます。

 

try:
    while True:
        GPIO.output(23, GPIO.LOW)
        sleep(3)
        lever_down()
        sleep(5)
        lever_up()
        sleep(1)
        GPIO.output(23, GPIO.HIGH)
        sleep(5)

 警報機の交互点滅とアームの動作は平行して実施するために、次のような方法を検討してみました。 それは、出力ピンは設定するとその状態を保持している事を利用するものです。 警報機の交互点滅動作を電子回路で実施させ、その作動のON/OFF をラズパイから制御しようとするものです。 交互点滅動作の電子回路は、「D-2 タイマーICによるLED交互点滅回路」を活用してみました。

 最初は、タイマーIC のリセットポートをON/OFF させてみましたが、OFFの状態では、一方が点灯した状態で停止するのでNG でした。

 そこで、点滅回路そのものを切断するために、1815のトランジスタを使ってスイッチとし、GPIOポート23を使って制御してみました。 その結果を動画で紹介いたします。

 

 でも、このサーボモータを使った踏切のモデルは、仕上がりとしていまいちの感じがするので、不採用の可能性が高いと思われます。

 次回は、いよいよスマホやPCから制御する方法を勉強する予定です。

  ****************  続く  **************************