自力で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分 あとかたづけ

タイピング練習とマウス練習

タイピングの練習は、「寿司打」、マウスの練習は「マインスイーパー」です。

マインスイーパーで難易度低だと、物足りないメンバーが出てきました。そろそろ難易度中でがんばってもらいましょうか。

電気回路でショートは絶対だめよ!

光都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を点灯させてください」というものです。実は導入メニューなので、メンバー全員が一度はやっている課題です。

わたしは細かく指示しないので、何を見ても、何を調べても、人に聞いてもいいので、課題を解決してください、というものです。

ラズPicoでLチカ!microPythonプログラミングの第一歩

ラズベリーパイPico(Raspberry Pi Pico)で、はじめて書くであろうプログラムがLチカです。「Lチカ」と聞いて、すぐに理解できる人は初心者ではありません。わたしは、は…

まず、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の復習プラスアルファに挑戦します。