自力でLチカ~要求定義をコードに~
2024年6月7日(金)は、7割ほどの出席率でした。今回から、RaspberryPi Picoを使ったプログラミングにもどります。
- 18時00分~18時20分 タイピング練習
- 18時20分~18時40分 マウス練習
- 18時40分~18時55分 電子工作で絶対やってはいけない「ショート」
- 18時55分~19時50分 自分でLチカ
- 19時50分~20時00分 あとかたづけ
タイピング練習とマウス練習
タイピングの練習は、「寿司打」、マウスの練習は「マインスイーパー」です。
- 寿司打
https://sushida.net - マインスイーパー
https://www.google.com/search?client=firefox-b-d&q=%E3%83%9E%E3%82%A4%E3%83%B3%E3%82%B9%E3%82%A4%E3%83%BC%E3%83%91%E3%83%BC
マインスイーパーで難易度低だと、物足りないメンバーが出てきました。そろそろ難易度中でがんばってもらいましょうか。
電気回路でショートは絶対だめよ!
光都ICTクラブ開設から1年経ちました。本格的にメンバーに自走してもらうために、難易度の高いことも説明していきます。
では早速。当たり前すぎて今まで説明してこなかったのですが、電気をあつかうときに「ショート」は絶対にしてはいけません。ところが、とても大切なことなのに、RaspberryPi Picoの入門書には記載がありません。
なぜでしょうか? RaspberryPi Picoを壊して、たくさん売るための陰謀でしょうか。
冗談はともかく、わたしも見逃していました。常識なのかとも考えましたが、クラブ活動でもショートさせた事例をたくさん見てきたので、もう一度確認の意味でかんたんな講義です。
「ショート」は、日本語で「短絡」ともいいます。直流だと電源のプラスとマイナスを抵抗ゼロで接続することです。電池の例で示すと、メンバーはよくわかってくれました。
しかし、USBケーブルやRaspberryPi Picoのことになるとあやふやでした。
USBケーブルは、パソコンから電源を取っています。USBケーブルのA端子を見ると、接点が4つあります。そのうち2本が電源ケーブルで、直流のプラスとマイナスです。これをショートさせるとパソコンが壊れます。(実際には保護回路が働くはず)
そして、RaspberryPi Picoはそのプラスとマイナスを延長してプラスとマイナスがあります。RaspberryPi Picoを上から見ると、プリント銅箔の丸い端子と四角い端子があります。基本的に丸い端子がプラスで、四角い端子がマイナスです。マイナスは「GND(グランド)」ともいいます。
ブレッドボード上で配線するときに、プラスとマイナスをショートさせると、RaspberryPi Picoが壊れます。RaspberryPi PicoのGPIOは4mAしか流せません。実際には4mA以上流せることもありますが、ダメージが蓄積してそのうち壊れます。
ショートしているかどうかは、自分ひとりだと判断が難しいものです。電子工作は、部品を壊した数だけ上達するものですが、できれば悲しい思いはしたくないものです。その点、光都ICTクラブなら、わたしや優秀な先生がいるので大丈夫!
ともかく、ショートには要注意です。
自分でLチカに挑戦
今日のお題は「RaspberryPi PicoでLEDを点灯させてください」というものです。実は導入メニューなので、メンバー全員が一度はやっている課題です。
わたしは細かく指示しないので、何を見ても、何を調べても、人に聞いてもいいので、課題を解決してください、というものです。
まず、7人のメンバーを2班にわけます。班で協力し合って課題を解決していきます。
ショートが怖いので、ブレッドボード上に配線したあとは、わたしが回路を確認します。やっぱり間違えているメンバーがちらほら。確認してよかったと思います。しばらく回路確認は続けます。
ブレッドボードへの配線がおわったら、今度はプログラミングです。下は、ピンアサインの図を見ながらコーディングしている様子です。この図を見ているのは気づきませんでした。このように原典(ドキュメント)にあたるのが正解で、上達の近道です。えらい!
さて、コードの質はともかく、全員がLチカできました。正解のコードはこちら。
import machine
led = machine.Pin(16, Pin.OUT)
led.value(1)
多少書き方に差はあれど、おおむねこのようなコードでLチカできます。そのほか、メンバーのコードはこちら。
import machine
import utime
led = machine.Pin(16, Pin.OUT)
while True:
led.value(1)
utime.sleep(0)
たしかにこのコードでも要求のとおりに動きます。しかし、ハイライト部分は不要です。
プログラムにおいて、なくても良いコードは「悪」です。いたずらにコードを複雑にし、コードの見通しが悪くなります。そして、バグの温床になります。時間をかけて、その辺の感覚を身につけてもらいましょう。わたしもがんばります。
さて、時間があるメンバーは、LEDの点滅まで、できたようです。
次回も、LEDの復習プラスアルファに挑戦します。