ラズ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)を動かす結線
結線方法も、実際にわたしが結線しながら行いました。プログラムより、こちらの方が難しいようですね。
次回には、全員が動かせるようにしたいところです。