相生コンピュータークラブ第4-1回~Raspberry Pi PicoでLチカしよう~
7月から、相生コンピュータークラブは第4期です。8月までの4回を通して、Raspberry Pi Pico(らずべりーぱいぴこ)を使ったマイコンプログラミングに挑戦します。
Contents
タッチタイピングの練習とアルゴロジック
クラブ活動のはじめにかならず練習するのは、タッチタイピングです。
タッチタイピングで使うツールは、無料タイピングと寿司打です。
無料タイピング https://manabi.benesse.ne.jp/gakushu/typing
タイピングは継続して練習することが重要です。2週間に一度一生懸命練習するより、1日5分でいいので連続して練習したほうが伸びます。
「うまくやる」というより「真剣にやる」ほうが伸びているように思います。真剣にやるからこそ「楽しい」のだと思います。
アルゴロジックは、難しいところで悩んでいるメンバーに考え方のヒントを。
わからなかったら、かんたんにわかるところまで戻ればいいのです。複雑な問題は、大体かんたんな問題の組み合わせできています。自分が理解できるかんたんなところまで戻って、そこから組み合わせていけば答えにたどり着けます。
書いていて、自分に言い聞かせているようです。大人だって同じです。
Raspberry Pi Pico(らずべりーぱいぴこ)ことはじめ
新シリーズのRaspberry Pi Picoを使ったマイコンプログラミングは、わたしたちが主催するプログラミングクラブの大きな特徴でもあります。おそらく、小学生相手にRaspberry Pi Picoを広めているプログラミングクラブ・教室は全国的にみても珍しいと思います。
さて、わたしたちがRaspberry Pi Picoを推すのはいくつか理由があります。それは、以下の3つです
- 本格的
- MicroPythonが使える
- 安い
ひとつずつ説明します。
「本格的」というのは、「できることが多い」という意味でもあります。教育用に開発されたデバイスながら、世の中の相当数の電子パーツと接続し動作させることができます。
わたしは、最初はだれでも作ってみるLEDを点灯させるところから始まり、温度センサーと気圧センサーを使って記録するロガーを作りました。そのうち、GPSロガーを自作しました。これは、「本格的」なデバイスだからできることです。
「MicroPython」が使えるというのは、今まで学習してきた「Python」の知識が使えるということです。言い換えれば、学習コストが小さくて済みます。
かんたんに電子工作ができるかわりに、独自言語を別に覚えないといけないデバイスも存在しています。Pythonは、そのうち高校でも必修で学習します。脇道にそれずに、Pythonファミリーを学習しておけばよいと、わたしは考えています。
「安い」というのは、そのままの意味で、ほかのデバイスと比べても安価なのです。もともと教育用として開発されただけあって、採算度外視と思えるような価格です。一つを大切に使うというよりは、試行錯誤でたくさん実験して壊してもすぐ追加購入するという使い方で、失敗を恐れず学習できるということでしょう。
わたしもすでに何個もラズPicoを壊しています。おかげで随分上達したと思います。壊した数だけ上達するものです。
さっそくLチカ
Lチカは、パソコンのプログラミング学習でいうところの「Hello, World!」です。つまり、最初の第一歩です。
LEDをチカチカ(点灯・点滅)させることを、「Lチカ」といいます。わたしもマイコンプログラミングをはじめたばかりのときは、何のことやらわかりませんでした。たいした意味ではありません。
Pythonで写経に慣れたメンバーばかりなので、3行程度のコード入力はお手の物です。
最初のコードは下のとおりです。これだけで、オンボードのLEDが光ります。
from machine import Pin # ピンを使うライブラリのインポート
led = Pin("LED", Pin.OUT) # ピンの設定をledという変数に代入(Pinオブジェクトのインスタンス化)
led.value(1) # LEDを点灯させる
コードを見ると、文法はPythonと同じです。ライブラリとか、初期化のところは見たことのない文字が並んでいますが、これまでやってきた知識で解釈できます。
このあとは、LEDを点滅させて、ダサいコードとかっこいいコードを書いてもらいました。このあたりの考え方・感覚もPythonと同じです。
ひととおり終わったところで、最後の問題は下のコードです。ずっと繰り返すプログラムを、穴抜きで完成させてもらいました。
from machine import Pin
import time
led = Pin("LED", Pin.OUT)
________:
led.toggle()
time.sleep(0.5)
問題を見て、「覚えてないー」「忘れたー」という悲鳴が聞こえてきました。安心してください。覚えておく必要はないのです。
資料は手元にあるので、調べて答えにたどり着けばよいのです。あとは、「絶対に答えにたどり着く!」という粘り強さが大切です。プログラムは、だいたい根気よく調べていったり、考えていれば答えにたどり着きます。
追加テーマとして、ウルトラマンの胸のチカチカを再現しよう
ここまで、案外すんなり終わってしまいました。そこで、追加課題です。
見出しの通り、ウルトラマンの胸のチカチカのように、時間とともにLEDの点滅が早くなって最後には点きっぱなし、または消えてしまうプログラムを考えてみましょう。
といっても、かなり難しいので考え方だけ説明しました。
で、せっかくなので生成AIを使ってプログラムを書かせてみます。メンバーにプロンプトを口頭で言ってもらって、わたしがそれを生成AIに入力します。
1回目は、HTMLで書かれました。2回目も、動くようなプログラムは出力されず。3回目「Raspberry Pi Picoで」というキーワードを入れたので、動くプログラムが完成しました。
このプログラムも満足できなかったので、ここで、わたしならどうプロンプトを書くかを見てもらいます。もちろん、一発で期待するコードが出力されました。
生成AIに対する指示をくりかえせば、そのうち望む結果に収束することもあります。しかし、時間も生成AIを使える回数も限られているので、より少ない時間、より少ない回数で望む結果にたどり着きたいものです。
クラブでしっかり練習しておけばよいと思います。
さて、次回はオンボードの温度計で温度測定をします。動きはないけれど、これはこれでおもしろいですよ!