ラズPicoで超音波測距センサー(HC-SR04)を動かそう〜その1〜 ペアプロしよう
2024年2月9日(金)は、8割ほどの出席率でした。今回から、超音波測距センサー(HC-SR04)を動かすプログラムをつくります。最終的には、前回までのサーボモーターを組み合わせて、距離の測定結果がサーボモーターの回転角度と比例するものを作るのを目標とします。
- 18時00分~18時25分 タイピング練習
- 18時25分~19時20分 超音波測距センサーのプログラミング(ペアプロ)
- 19時20分~19時50分 超音波測距センサーの配線
- 19時50分~20時00分 あとかたづけ
タイピング練習
今回のタイピングの練習は、日本語入力です。使う教材は、下のサイトのWebアプリです。
https://manabi.benesse.ne.jp/gakushu/typing/
メンバーの様子を見ていると、全体的に日本語入力のほうが成績がわるい傾向にあります。わたしは日本語入力のほうが良く、英語入力のほうがわるいので、メンバーとは反対です。
なぜかとメンバーにたずねたら、「2倍入力しないと1字カウントしてくれないから」だそうです。また、「英語入力は、スペースも1字にカウントしてくれるから」ということでした。
なるほど、気づきませんでした。ゼロからタッチタイピングを覚えるときには、そんな傾向があらわれるとは。引き続き傾向を観察していきたいと思います。
超音波測距センサー(HC-SR04)をペアプログラミング
今回から取り組むのは、超音波測距センサー(HC-SR04)のプログラミングです。入力するコードは以下のとおりです。出典はおなじみの、『ラズパイPico完全ガイド』(日経BP社 福田和宏著)です。
from machine import Pin, time_pulse_us
import utime
TEMP = 20
TRIG_PIN = 14
ECHO_PIN = 15
s_speed = 331.5 + 0.6 * TEMP
trig = Pin(TRIG_PIN, Pin.OUT)
echo = Pin(ECHO_PIN, Pin.IN)
trig.value(0)
utime.sleep(1)
def measure():
trig.value(1)
utime.sleep_us(20)
trig.value(0)
while echo.value() == 0:
sigoff = utime.ticks_us()
while echo.value() == 1:
sigon = utime.ticks_us()
dist = (sigon - sigoff) * s_speed / 2 * (10 ** -4)
return dist
while True:
distance = measure()
print('Distance : {:.1f} cm'.format(distance))
utime.sleep(1)
このコードを、ペアプログラミングで入力していきます。ペアプログラミングは、開発の現場でも使われている手法です。二人組でコーディングして、一人が手を動かして入力し、もう一人が手を動かさずに助言します。手を動かす方が初心者、助言するほうが上級者だと、効果の高い手法です。
メンバーのペアプログラミングで、初級者、上級者をわけるほど実力に差はありません。しかし、自分だけではなく、他人のプログラミングを見ることで、プログラミングスキルが向上します。
超音波測距センサー(HC-SR04)の配線
ペアプロの期待できる効果として、「一人でプログラミングするよりも早くプログラミングできる」という効果があります。助言者に教えてもらえるからというだけではなくて、となりで見られているということが良いプレッシャーになって、長時間真剣に取り組めるからだそうです。
今回のペアプロは、コーディング役と助言役を入れ替えて、同じことを2回しました。普通に考えると2倍時間がかかりそうですが、いつもより早く終わってしまいました。
メンバーみんながこんなに早くコード入力を終えるとは、想定外でした。これからも、時折ペアプロを混ぜながら進めていこうと思います。
さて、配線は、まったく準備をしていませんでした。そこで、わたしがはじめから組み上げるのを大画面に写しながらみんなで取り組みました。配線もプログラムと一緒で、無駄に長いものはNGです。カッコ悪いし、ダサいのです。
いかに少ない配線で、ブレッドボードの上におさめられるかが腕の見せどころです。
次回は、実際に動かしてデバッグまでいけるかな?