ラズPicoでサーボモーター(SG90)を動かそう〜その1〜 ペアプロならぬ集団プログラミング

2024年1月19日(金)は、6割ほどの出席率でした。今回からは、サーボモーター(SG90)を動かすプログラミングに挑戦します。

  • 18時00分~18時25分 タイピング練習
  • 18時25分~18時35分 プログラミングコンテンストに応募しよう
  • 18時35分~19時50分 サーボモーターのプログラミング
  • 19時50分~20時00分 あとかたづけ

タイピング練習

今回のタイピングの練習も、英語入力にしました。使う教材は、下のサイトのWebアプリです。

https://manabi.benesse.ne.jp/gakushu/typing/

最初にできたメンバーは「121字/分で正タイプ率が99%超」でした。素晴らしい記録だと思います。

メンバーに急かされて、わたしもトライしました。「字数も正タイプ率も超えないとね~」とプレッシャーをかけてくるとは!

内心「やばいな~」と思いながら挑戦しました。わたしの記録は「190字/分で正タイプ率が100%」でした。なんとか面目を保ったところです。大人げないと言ってくださいますな。

ただし、わたしはこれ以上伸びそうにありません。あと、3ヶ月もしないうちに、メンバーに抜かれるかもしれませんね。

プログラミングコンテストに応募しよう~3回目~

ことあるごとにプログラミングコンテストのホームページを紹介しています。

今回プログラミングに挑戦するサーボモーターは、ちょうど前回の入賞作品の中にうまく利用した作品がありました。それを紹介したところです。使うイメージができあがると、プログラミングにも熱が入ります

どうやらサーボモーターがなにか、イメージがつかめたようです。

サーボモーター(SG90)を動かすプログラミング

いつもならコーディングは、メンバーそれぞれに資料を渡して、それぞれのペースで入力させていました。今回はわたしのコーディング手順を見せるのと、コードの意味を説明するために、みんなが前の画面を見ながら一斉にコーディングしました。

入力するプログラムは、下記のとおりです。出典はいつものとおり、『ラズパイPico完全ガイド』(日経BP社 福田和宏著)です。ただし、コメントはわたしが入力しました。

from machine import Pin, PWM
import time

#プログラムの中の設定値
SERVO_PIN = 16
PWM_FREQ = 50

#デューティー比を求める関数
def pulse_witdh(val, freq=PWM_FREQ, resol=65535):
    pulse = freq * val * 1e-6 * resol
    return int(pulse)

#サーボモーターの実体化
servo = PWM(Pin(SERVO_PIN))
servo.freq(PWM_FREQ)

while True:
    #回転角0度
    duty = pulse_width(1500)
    servo.duty_u16(duty)
    time.sleep(1)

    #回転角右90度
    duty = pulse_width(500)
    servo.duty_u16(duty)
    time.sleep(1)

    #回転角0度
    duty = pulse_width(1500)
    servo.duty_u16(duty)
    time.sleep(1)

    #回転角左90度
    duty = pulse_width(2500)
    servo.duty_u16(duty)
    time.sleep(1)

23~36行はコピペをすれば良いので、実質13行ほどの短いコードです。でも、間違いやすいところがもりだくさんです。間違いやすいポイントは下記のとおりです。

  • 単純に文字を間違って入力する
  • 大文字と小文字を間違える
  • カンマの位置を間違える
  • カンマ( , )とピリオド( . )を間違える
  • 7行目の最後のコロン( : )を忘れる

早いメンバーはあっという間に全部入力し終わってしまいました。しかし、期待通りに間違ってくれました。エラーの説明まではできなかったので、次々回くらいに実際に動かしながらエラーの説明をしようと考えています。

あと、18~36行が似たような形で気持ち悪いのです。ここも改良したいと考えています。

サーボモーター(SG90)を動かす結線

結線方法も、実際にわたしが結線しながら行いました。プログラムより、こちらの方が難しいようですね。

次回には、全員が動かせるようにしたいところです。