ユウの銀河ブルーパイ製作ノート

中学生でもできる!ラズパイ・模擬人工衛星づくり

「A Guide to Astro Pi」圧力センサーで気圧測定に挑戦!

今回は Sense HAT の Pressure(圧力)センサーで気圧を測定する方法を学習をします。今回もがんばってデバッグしましょう!(笑)。

 

だんだん内容が難しくなってきました。英訳からポイントだけを抜粋するのも時間がかかります。そのため今回から Google 先生による全文翻訳を掲載していきます。ただし、そのまま訳文転載するのではなく、誤訳を訂正したり、日本の中学生がわかりやすいように部分的な言い換えをします。また実験のやり方についても、日本で簡単に手に入るモノと方法に置き換えてトライしてみて、その過程や結果、気がついたことや Tips などを詳しく紹介していこうと思います!

 

Sense HAT の圧力(気圧)センサーはここ!

 

What is pressure and how can it be measured?(圧力とは何か? またどのように測定できるのか??

圧力とは、一般に、単位面積あたりに表面に加えられる力です。 テーブルの上にあるレンガを想像してみてください。 その重量の力は、そのひとつの面の領域を介して適用されます。 針の上でレンガのバランスをとろうとすると、その重量の力が針の先端の領域に集中するため、テーブルにかかる圧力ははるかに高くなります.

大気圧 (気圧とも呼ばれます) は、地球の大気中の空気の重量によって加えられる圧力です。 気圧は常に体のあらゆる部分を圧迫しています。 とはいえ、体の中は外と同じ圧力なので、何も感じません。 測定単位は通常バールまたはミリバールです。 1 bar は、海抜 1000 mbar である地球上の大気圧にほぼ等しくなります。

 

Facts about pressure(圧力に関する事実)

大気圧は、地球の表面 (海面) から宇宙の果てまで滑らかに減少します。

bottle.jpg

上のペットボトルは、高度約 4300メートルで密封され、海抜 2700メートル、さらに 300メートルで気圧の上昇によって押しつぶされました。

動物や植物が生きていくためには大気圧が必要です。 高度 8000 メートル以上の空気は人間にとって危険であり、登山者によってデス ゾーンと呼ばれています。 エベレストの頂上はこのゾーンにあります。

アームストロング線(アームストロング限界)は、人間が無圧環境でこれを超えると絶対に生き残れない高度です。 これは 18900 メートルから 19350 メートルの間で、人体の通常の温度で水が沸騰します。

ISS は高度約 400 km (400000 メートル) の軌道を維持していますが、これはアームストロング線(アームストロング限界)をはるかに超えており、大気のない広大な宇宙 (ゼロミリバール) のすぐ外にあります。 ただし、ISS 内の気圧は約 1013 ミリバールに維持されており、乗組員にとって快適です。

 

What is the pressure?(圧力とは何か?現在の気圧を測定してみる)

1.Webブラウザーで ”Sensors" 「Pressure(気圧)」を開きます。

2.「Thonny Python IDE」を起動します。

3.下図のサンプルコードを Thonny Python IDE にコピペして実行してみます。あとで「trinket」によるシミュレーションも見られます。

4.間違いなくサンプルコードをコピペしたはずなのに測定結果が "0" でした。

 下を読むと以下のように「初回は0が出るときがあります。その時はもう一度コードを実行してください」とあります。ではリトライ!

 今度が気圧が正しく測定できました。なるほど、こういうエラーも起こりうるわけですね。

5.いまつくったプログラムの print(pressure) 行の上に以下の行をコピペします。別名で保存して実行してみます。

6.追加したコードは7行目です。その結果下図の赤枠のように測定値が小数点第一位までの表示になりました。

 

Monitoring the pressure(気圧変化を監視する)
7.1回限りの測定値ではなくて、気圧変化も監視できるといいですよね。そこで今度は、さきほどつくったプログラムに以下のコードを追加して、繰り返し測定ができるようにしてみます。

 以下のように連続的に計測して、その値を得られました。気圧の場合、机上実験では変化がないため数値は同じですが・・・

 

残念ですが以下の実験は(今回は)翻訳のみの掲載になります。機会があれば再トライします!

以下の実験を何度も行ってみましたがうまくいきませんでした。そのため今回は翻訳のみの掲載です。機会があれば再トライをしてみたいと思います。理由は以下の通りです。

(1)良い代替ペットボトルが手に入らない

いくつかのスーパー等をまわりましたが2リットルのペットボトル入り飲料はありませんでした。日本で手に入る一番大きなペットボトルは、円筒型なら 1.5リットル、角形なら2リットルなのかなと思います(酒類を除く)。ただし円筒形 1.5リットルなら「ラズパイ本体」は収納可能です(ただしモバイルバッテリに条件あり)。

(2)ラズパイ用のモバイルバッテリが必要

ラズパイ4Bには5V・3Aの電源が必要ですが、私が持っている iPhone用モバイルバッテリーの定格は5V・2.0Aです。Sense HAT を接続しているのでその分もプラスして、安定して3A以上の電流を確保できるものが必要になります。また電源をつなぐ USB-C ケーブルのラズパイ側コネクタがL字型になっていないとペットボトルには収まりません。いずれラズパイのアウトドア実験用に専用モバイルバッテリや電源ケーブルが必要になりますが、いまはこの実験だけのためにそれらを買うことができません。

(3)そこで私が試してみたこと

肺活量がそんなに大きくなくても小さなペットボトルなら内部圧力を上げやすいかも。モバイルバッテリがなくても手持ちの AC電源アダプタをうまく収めてやりくりできないか。そう思ってやってみたのが以下の写真です。

角形で背が低いペットボトルの中で、材質がペコペコではなく硬めで、ボトルを補強するデコボコが模様ではなく規則正しく横しまのを選んでふたつにカット。それに AC電源を挿し込んだままのラズパイを入れて、上半分と下半分のデコボコがポコッとちょうどはまるところまで挿し込み、接続部をビニールテープでぐるぐる巻きにしてトライしてみました。

残念ながら空気漏れは収まらず、内部の気圧も上げられなかったため、LED点灯には至りませんでした。ラズパイ4B用にモバイルバッテリを購入した時に、1.5リットルペットボトルを使って再トライしたいと思います。

 

参考までに、この実験も trinket でシミュレーションができます(再生をクリック後、表示されるまでにけっこう時間がかかります)が、コードエラーで正しく実行できませんでした。

<iframe src="https://trinket.io/embed/python/5de196ff09" width="100%" height="600" frameborder="0" marginwidth="0" marginheight="0" allowfullscreen></iframe>

 

次回は「Sensors」の最後、Movement に挑戦です!

 

------------------------------------------------------------------------------------------------

ここからは訳文のみ参考掲載:機材を持っている・機材が手に入るひとはトライしてみてください!

------------------------------------------------------------------------------------------------

「The plastic bottle experiment」(ペットボトルを使って気圧変化の実験をする)

残念なことに、センサーに親指を当てたり息を吹きかけたりするほど簡単に気圧を変化させることはできないため、以下のペットボトルの実験でてコードを試してください。

この実験では、Sense HAT を取り付けた ラズパイを、スマホのモバイルバッテリーと共にペットボトルの中に密封し、ボトルに息を吹き込んで空気圧を高めます。 肺の調子が良い人なら、ボトル内の圧力を約 1100 ミリバールまで簡単に上げることができるはずです。 まず、ビジュアル ディスプレイをプログラムする必要があります。

 

まずはペットボトル実験の動画をみる

1.ではまずは、そのペットボトルの実験に関する Dave Honess さんのビデオをみてください。

    youtu.b

 

ペットボトルの準備をする

2.空の 2 リットルのペットボトルを図のように真ん中で半分に切ります。ティッシュやふきんを使ってボトルの内側を乾かします。 プラスチックが変形するのでヘアドライヤーは使用しないでください。

  

3.吹き込んだ空気が外へ逃げないように、上半分を下半分の内側に合わせて挿し込んでください(上半分と下半分の重なる量が2cmぐらいあれば十分と思います)。試しにボトルに息を吹き込んでみます。側面の隙間から空気が逃げていると感じたらテープを使用してそこを封印します。これを数回繰り返して空気の漏れをなくします。

要領がわかったら、テープをはがしてペットボトルを分解しておきます。

 

Sense HAT とラズパイをペットボトルに収納、空気漏れをなくす

4.すべての周辺機器を接続したまま、ラズパイをシャットダウンします。

5.AC電源アダプタを外してモバイルバッテリーと交換します。

6.ラズパイが通常どおり起動したらプログラムを実行します。

7.プログラムが間違いなく実行されていることを確認したら、モバイルバッテリー以外のすべての周辺機器を取り外して、Sense HAT+ラズパイ+バッテリをボトルに入れて、上半分が下半分の内側に入るように組み立てます。試しに空気を吹き込んで空気の漏れを探します。

  

8.テープを使用してボトルの接合部を密閉します。

  

9.ボトルに息を吹き込みます。 漏れがある場合はテープを追加してください。

  

10.息に含まれる水分でボトル内部が曇り、湿気が溜まることに注意してください。ラズパイを湿気で壊してしまわぬよう、連続で試さず、適度な間隔をおいて行ってください。

11.(仮に)コードを変更する必要がある場合は、テープをはがし、ボトルの 2 つの半分を分離します。 周辺機器を再接続して簡単な編集を行うだけで問題なく動作するはずです。

 

「Display the pressure on the LED matrix」(ペットボトル内の気圧変化に合わせて 64個の LED を点灯させる)

以下は、ビデオで使用されたコードです。 気圧は1000 ~ 1100 ミリバールに対応できるので、100 ミリバールの範囲です。

LED マトリックス色の範囲は 0 ~ 255 であることがわかっているため、最初に行うことは、圧力範囲と色範囲の比率を作成することです。

そこで、計画としては測定された圧力にその比率を掛けて色を取得することです。 これを機能させるには、測定された圧力から 1000 を引く必要があるため、0 から 100 までの数値に比率を掛けています。 次に、1100ミリバールを超える圧力をかけることができる非常に強い肺を持つ人がいる場合に備えて、色を最大255にクランプします.

 

 

JAXA相模原キャンパスのクラウドファンディングがアツい!

先日、相模原市役所本庁本館に行ってきました。写真はそのときに撮ったものですが、「JAXA相模原キャンパス・クラウドファンディング」募集中!のディスプレイがありました。詳細をこちらに転載しました。

 

JAXA「宇宙をもっと身近に。」宇宙体験・交流コンテンツの充実化へ
目標金額の達成の有無にかかわらず実行者は寄付金を受け取ります(All in 方式)。原則、寄付のキャンセルはできません。寄付募集は9月26日(月)午後11:00までです。”

 

期限は本日9月26日(月)午後11:00までですが、目標額だった 500万円を楽々クリアして、9/26 6:35現在で:

とすごい!

 

寄付は 3000円コースからあります。うん十万円する寄付コースはすべて受付終了ですがこのあたりなら何とかなるかなぁですね・・・

 

こちらは JAXA相模原キャンパスがある淵野辺JAXA巡礼情報!(笑)

 

相模原市の広報「さがみはら」7月15日号に掲載

「宇宙とつながるまち 淵野辺駅周辺を散策しよう!」

 

「A Guide to Astro Pi」湿度センサーで空気中の湿度測定に挑戦!

今回はSense HAT の Humidity(湿度)センサーで湿度を測定する方法を学習をします。今回も元気にがんばってデバッグしましょう!(笑)。

 

Sense HAT の湿度センサーはここ!

 

What does humidity mean?(湿度とはなにか

  • 湿度は、空気中の水蒸気の量です。
  • 水蒸気は水の気体状態です。

空気中に浮遊する水蒸気の量は温度に依存します。

  • 温度が高いほど、空気中に浮遊できる水蒸気が多くなります。
  • 温度が低いほど、浮遊できる水蒸気は少なくなります。

condensation.jpg

冷蔵庫から冷たい缶やボトルを取り出すと水が現れます。これは、冷たいボトルが周囲の空気を冷却し、空気が水蒸気を浮遊させる能力が低下するために発生します。これにより、浮遊できなかった水蒸気が液体の水に戻ります。これを結露といいます。したがって、この情報を踏まえて、次に湿度を測定する方法が 2 つあることを理解する必要があります。

 

絶対湿度と相対湿度の違いを理解する

  • 絶対湿度は、特定の体積の空気に浮遊する水蒸気の総質量です。温度は考慮されていません。通常、空気 1 立方メートルあたりの水のグラム数で表されます。
  • 相対湿度はパーセンテージで表されます。任意の気温に対して、浮遊できる水蒸気の最大量があります。相対湿度は、可能な最大量と比較した、実際に存在する水蒸気のパーセンテージです。

既知の量の水蒸気は、空気の温度とそれを浮遊させる空気の能力に応じて、異なる相対湿度の測定値になります。したがって、気温が低いと相対湿度の測定値が高くなる可能性があります。これは、空気がそれ以上の水蒸気を浮遊させることができないためです。空気の温度を上げて同じ量の水蒸気を維持すると、浮遊する可能性のある水蒸気の最大量が増加するため、相対湿度の読み取り値が低下します。

Sense HAT は、相対湿度として湿度測定値を提供します。このため、湿度センサーには温度センサーも組み込まれています。

 

what is the current humidity?(現在の湿度を測定する)

1.Webブラウザーで ”Sensors" 「Humidity(湿度)」を開きます。

2.「Thonny Python IDE」を起動します。

3.下図のサンプルコードを Thonny Python IDE にコピペして実行してみます。

4.間違いなくサンプルコードをコピペしたはずなのに、下図赤枠のように Syntax(構文)エラーがでて動きません。「Assistant ウィンドウ」を見るとPythonは "^" で印をした部分が理解できずギブアップしたとあります。ギブアップって・・・。

例のチートシートを確認します。おっと。コピペしたサンプルコードですが、緑枠でマークした部分は改行が必要なのに改行がなくて、ぜんぶつながった1行になってしまっています。緑色のコードが先頭行から始まるように改行を入れてみました。

5.下図は修正したプログラムとその実行結果です。無事湿度をゲットできました。前回同様、「trinket」によるシミュレーションも見られます。

6.いまつくったプログラムの print(humidity) 行の上に以下の行をコピペします。別名で保存して実行してみます。

7.追加したコードは7行目です。その結果下図の緑枠のように ”42x.xxxxxxxx” と長~い測定値が小数点第一位までの表示になりました。

 

Monitoring humidity over time(湿度変化を監視する)
8.1回限りの測定値ではなくて、気温の変化もモニターできるといいですよね。そこで今度は、さきほどつくったプログラムに以下のコードを追加して、繰り返し測定ができるようにしてみます。

9.下図がその実行結果です。気温を連続測定しその値を小数点第一位で丸めた測定値を返しています。処理は中断されるまで、最新値を返し続けます。

10.環境による湿度の変化を見てみましょう。

 ・指を湿度センサーの上にのせて数秒すると湿度が上昇しました

 ・湿度センサーに『はーーーーっ』と息をかけて数秒すると湿度が上がりました


11.「Ctrl」+「C」キーを押して実行中のプログラムを中断させます。

Display the humidity on the LED Matrix(測定した相対湿度にあわせて 64個の LED を点灯させる)

マトリックスを使用して湿度を表示する方法を考えてみてください。 1 つの方法は、64 (マトリックス内の LED の数) を 100 で割り、相対湿度のパーセンテージを掛けて、オンにする必要がある LED の数を求めることです。

たとえば、100% では 64 個の LED がすべてオンになります。 これを行うには、正しい数の明るいピクセルと暗いピクセルピクセル リストを作成し、set_pixels 関数を呼び出す必要があります。

以下にコード例を示します (湿度測定値を 100 に固定する必要があることに注意してください)。

 

サンプルコードを実行してみる

1.新規ウィンドウにサンプルコードをコピペして保存します。下のスクショ、今回はサンプルコードをじっくり見比べられるように文字を大き目にしました(笑)。

2.写真は実行結果です。動画で見せられないのが残念ですが・・・

 ・指を湿度センサーの上にのせて数秒すると湿度が上昇し LED 表示も変化しました

 ・湿度センサーに『はーーーっ』と息をかけて数秒すると湿度が上昇し LED 表示も変化しました

 

最後は忘れずに「LED ぜんぶオフ」プログラム(苦笑)を実行して終わりです。

チートシートを見るクセ?がついてきました。初歩的な Pythonデバッグもわかってきた気がします。”失敗は成長のもと” ですね。大切で貴重な ”基” です。。。

 

次回は「Sensors」、Pressure に挑戦です!

 

「A Guide to Astro Pi」湿度/気圧センサーで気温測定に挑戦!

今回は Sense HAT の Humidity(湿度)/Pressure(気圧)センサーで気温を測定する方法を学習をします。

 

Sense HAT の湿度/気圧センサーはここ!

 

Temperature(温度とは?)

https://github.com/raspberrypilearning/astro-pi-guide/blob/master/sensors/images/thermometer.jpg?raw=true

上の画像は体温計です。 病気のときに口に入れるように言われたこともあるでしょう。 数字は 35 から始まるので、人間の体温の測定にのみ使用されることに注意してください。 ただし、Sense HAT 温度センサーは、摂氏 -40 度から摂氏 120 度までの温度を測定できるため、臨床体温計よりもはるかに汎用性があります。

Sense HAT には 2 つの温度センサーがあります。 1 つは湿度センサーに組み込まれており、もう 1 つは圧力センサーに組み込まれています。 どちらを使用するかを選択することも、両方を使用して結果を平均化することもできます。

 

What is the temperature?(気温とはなにか?)

1.Webブラウザーで ”Sensors" 「Temperature(気温)」を開きます。

2.「Thonny Python IDE」を起動します。

3.下図のサンプルコードを Thonny Python IDE にコピペして実行してみます。”get_temperature” と記述した場合は湿度センサーから気温を取得します。

4.下図の赤枠のように ”3x.xxxxxxxx” と長~い測定値が表示されたら成功です。

5.各演習には「trinket」のリンクがあります。これをクリックするとエミュレータによる実習結果(赤枠)がみられます(ほかの実習も同様なので、これ以降は説明を省略します)。

※面白いこと?に気がつきました。ラズパイ+ Sense HAT 基板が表示されているウィンドウ、実は3D的に動くんです!赤丸の↓ボタンで回転したり、基板の上にポインタを持っていくと、その場所を基準に自由に動かせます。面白い!よくできている!息抜きにちょっと遊んでみてください!

6.いまつくったプログラムの print(temp) 行の上に以下の行をコピペします。別名で保存して実行してみます。

7.追加したコードは7行目です。その結果下図の赤枠のように ”3x.xxxxxxxx” と長~い測定値が小数点第一位までの表示になりました。

8.最初に説明しましたが、”get_temperature” と記述した場合、Sense HAT は Humidity(湿度)センサーから気温を取得しています。そこで今度はセンサーを指定して気温を測定してみます。いまつくったプログラムの ”get_temperature” を下図のものと入れ替えて、それぞれ別名で保存、実行してみます。

 ・get_temperature_from_humidity(湿度センサーから気温を取得)
 ・get_temperature_from_pressure(気圧センサーから気温を取得)

9.下図は8でつくったプログラムの実行結果を並べたものです。全体的に気温が高いのはおそらくラズパイ4Bの熱の影響とは思いますが、赤枠部分を比較してみると測定値にかなり差があることがわかります。これらのことから、測定値を補正する方法も考える必要がありそうです。

  ・湿度センサーの測定値:38.6 ℃

  ・気圧センサーの測定値:35.1 ℃

 

Monitoring the temperature(気温変化を監視する)
10.1回限りの測定値ではなくて、気温の変化もモニターできるといいですよね。そこで今度は、さきほどつくったプログラムに以下のコードを追加して、繰り返し測定ができるようにしてみます。

11.下図がその実行結果です。気温を連続測定しその値を小数点第一位で丸めた測定値を返しています。処理は中断されるまで、最新値を返し続けます。

12.環境による温度の変化を見てみましょう。

 ・指を湿度センサーの上にのせて数秒すると温度が上昇しました

 ・湿度センサーに『ふーっ』と息を吹きかけて数秒すると温度が下がりました


13.「Ctrl」+「C」キーを押して実行中のプログラムを中断させます。

Display the temperature on the LED Matrix(LEDに温度計のように気温で上下に動くバーを表示する)

何らかの方法で LED マトリックスに温度情報を表示する方法を考えてみてください (詳細については、LED マトリックス ガイドを参照してください)。 明らかな選択は show_message 関数を使用することですが、これは機能しますが、おそらくもっと良い方法があります。 たとえば、次のことができます。

  • clear 関数を使用して、温度が収まる範囲に基づいていくつかの定義済みの色を表示します。たとえば、0 ~ 5 度を青にできますか?
  • clear 関数を使用して単色を表示しますが、測定温度に基づいて赤色 (0 ~ 255) の明るさを変更しますか?
  • set_pixel 関数を使用して、温度計のように上下に動くバーを表示します。

以下は、上記の最後の提案のスターター・コードです。 このコードは、摂氏 8 度((LED の水平方向の行ごとに 1 度)の範囲を持つバーを表示します。 表示できる最大値は 27(ハードコード※注 されています。自由に編集してください)であるため、最小値は 27 - 8、つまり 19 です。測定された温度がその範囲外になると、エラーが発生する可能性があります。 必要に応じて、測定温度をクランプするコードを追加して、これらのエラーを防ぐことができます。※注:ハードコード:変数ではなく固定値がコーデイングされていること。ここでは「27」がそれにあたります。

これは、測定値から最小値を引いて 0 から 8 までの数値を求めることによって機能します。次に、ネストされた 2 つの for ループを使用します。 外側のループは x 軸用で、内側の 2 つのループは y 軸用です。 ここでは 2 つのループを使用します。これは、set_pixel を使用して測定値の下にあるすべての LED を赤くし、上の LED をオフにするためです。 そうすれば、バーは測定された温度に従って y 軸に沿って上下に移動するように見えます。

 

サンプルコードで実験する

サンプルコードは set_pixel 関数を使用して、「温度計」のように上下に動くバーをLED Matrix に表示するプログラムです。ではやってみましょう!

1.新規ウィンドウにサンプルコードをコピペして保存します。下のスクショ、今回はサンプルコードをじっくり見比べられるように文字を大き目にしました(笑)。

2.実行したらエラーで処理が止まってしまいました。LED Matrix の表示も「温度計のバーが上下する」ようには見えず・・・まずは全体をチェックしてみようと思います。

 

では今回もデバッグ作業をしてみましょう!

赤枠を見ると温度はちゃんと取得できています。そこまではノープロブレム。

緑枠をみてみます。”sense_set_pixels (x, y, 255, 0, 0) ” とあります。「SenseHAT-Cheatsheet: List of Colours」を見ると以下のようにあります。”温度計のようなバー” を表示させるのですから Y が 8 にならないと横バーにはなりません。なお "r = (255, 0, 0)" とありますから発光色はあっています。

ということは最後の行、"ValueError: Y position must be between 0 and 7" 、に問題がありそうです。
6行目に ”tmax = 27"、7行目に "tmin = tmax -8" とあります。これはこのプログラムが扱える温度範囲は、最高が 27 ℃、最低は 27 - 8 で 19 ℃ということです。温度の実測値は約 37.8  ℃ですからそれでエラーになっていると考えられます。"tmax = 40 " に修正して再実行してみました。 

連続して温度の測定値がスクロール表示されています。エラーはありません。Sense HAT の LED Matrix は下の写真のように点灯しました。

これが正しい修正方法なら、温度が変化したら点灯する範囲も変わるはず。試しに USBファンでセンサーに風をあててみました。実測温度が35℃から34℃、32℃と下がっていく間に LSD バーも下の写真のように変化しました。 成功です!

最後は忘れずに「LED ぜんぶオフ」プログラム(苦笑)を実行して終わりです。

 

この演習にも「trinket」のシミュレーションがありますので確認してみましょう。以下のように実行できました。

※シミュレーションなので気温の実測値がありません。連続表示されている実測値はダミーです。なのでこれを 40 ℃にしてしまうとエラーになります。

 

今回はかなりタフでしたね!

この演習の多くは自分でコードを書く必要がありません。コピペで学習ができます。簡単に学習できる分、エラーなどがないと自分でコードを読んだり、エラーを見て内容を理解する努力やデバッグをするチャンスも消えてしまいます。それではもったいないですね。これからもデバッグ体験を増やしたり、チートシートを見る習慣を続けようと思います。初歩的な Pythonデバッグもわかってきた気がします。”失敗は成長のもと” ですね。大切で貴重な ”基” です。。。

 

次回は「Sensors」、Humidity に挑戦です!

 

「A Guide to Astro Pi」Pythonでピクセルアートに挑戦!

今回の学習は ”Getting Started" 「Sense HAT pixel workshop worksheet」です。

Python で書かれたサンプルコードを使ってラズパイの LED Matrix にビットマップ図のようなピクセルアートを表示させる学習をします。それができたら、配色を変えてみたり、オリジナルのピクセルアートをデザインしてそれをプログラムコードに入れて表示させることに挑戦します。

今回、私はこの実習でいくつかの失敗をしました。でもそれがとてもいい勉強になりました。なので、みなさんも失敗ウェルカム!と思ってたくさん失敗しましょう。そういう軽い気持ちで課題に挑戦してみてください。

 

ではチャレンジ!デバッグも経験しよう!

1.Webブラウザーで「Sense HAT pixel workshop worksheet」を開いたら、前回同様に「Download」ボタンを押して、pdf ファイルをダウンロードします。

2.Adobe Acrobat Reader で表示したところ。pdf ファイルからテキスト情報をコピペもできます。

3.「Thonny Python IDE」を起動します。

4.「3 Code your art in Python 3」のサンプルコードを Thonny Python IDE にコピペします。もちろん、自分でコードを入力してみるのもOKです。使う色は緑(g)と黒(b)で、配色はピクセルアート情報 ”image” に従います。

 ※色は(R,G,B)の三原色で指定します。これらの数値と色の変化は、最後のページの末尾にある「List of colours」も参考にしてくださいね!

5.貼り付けたら保存します。構文が正しい場合は図のように色が変わります。

6.実行します。こんなピクセルアートが表示されたら成功です。

7.今度はピクセルアート「happy」を表示させてみます。「happy」のピクセルアート情報を、先につくったプログラム中にある「image」ピクセルアート情報と入れ替えます。変更したプログラムを「happy」をつけた別名で保存、実行してみてください。

 

   ピクセルアート情報を「happy」のものに入れ替えたプログラム

8.おっと! 問題が発生しました。エラーが発生しました。下のウィンドウに何やら表示されて「happy」が表示されませんでした。

 

  File "/home/gingablue/アストロパイ/LED_MatrixArt_Happy_but_Error_001.py", line 17, in <module>
    sense.set_pixels(image)
NameError: name 'image' is not defined

 

とあります。読んでみると、どうやら 17行目に問題があることがわかりました。さらに "image" という名前がエラーの原因で、その理由は "image" という名前が定義されていないからとあります。

?です。「happy」に変えて「image」はないはず・・・と思ったら、ありました!うっかりミスですが、ピクセルアート情報は「happy」に差し替えましたが、点灯させる命令文(17行目)が「image」のままでした。

これを「happy」に書き換えて「CTRL」+「S」(保存)、「F5」(実行)キーを押すと再度プログラムが実行されて、今度は無事に「happy」が表示されました。

今後サンプルコードを基にオリジナルプログラムをつくる機会もあります。実行エラーに遭遇した時は、今回のようにデバッグウィンドウに表示されたエラーをヒントに解決します。右側のアシスタントウィンドには同じような指摘内容が文章で表示されました。これも参考になりますね。簡単なコードですが、こういう経験の積み重ねが一番の学習になると思います。

 

9.同様に「sad」の表示もやってみましょう。今回はエラーもなく「sad」な顔が表示されたと思います。

 

10.でもここでふとあることに気がつきました。「sad」が点灯しっぱなしで消えないのです。「Thonny Python IDE」のストップボタンを押してみたり。でも消えません。う~ん。。。。と考えていた時、ふとチートシートのことを思い出しました。自分で言っていた『困ったときはすぐ見られるように印刷しておきましょう』、あのチートシートです(苦笑)。

あった!、ありました!

 

 sense. clear () :Clears the LEDs and switches them all off.

 

この命令文を入れれば消灯できるはずです。

上の画面で 17行目がピクセルアートを点灯する命令文です。そこで 19行目に入れて実行してみたのですが、消灯には成功しましたが、今度は点灯もしなくなってしまいました。この命令文を入れる場所が正しくないのか、あるいはもう1文ぐらい必要なのか・・・

 

いまは正しい記述がわかりませんが、先に進むために LED Matrix をオフにしなければならないので、試しにこの命令文だけのプログラムをつくってみました。前回につくった3行プログラムのように、こんな感じです。

「sad」プログラムを再度実行して、LED が全部消灯するかこのプログラムを試してみたところエラーなく消灯しました。今回は Python の ”Library set” と、それを使う前にインポートすることが”身をもって”学べましたので、これで良しとして先に進もうと思います。

 

11.「5 Shake to change the image」に進みましょう。いよいよ Sense HAT っぽい実習になります。ラズパイが静止状態の時は「happy」を、振られたら「sad」を表示するプログラムです。

   ・最初に「happy」が表示されます

   ・ラズパイの加速度センサの測定値が読み込まれます

   ・XYZ軸の測定値が”2”になるまで処理がループしています

   ・ラズパイがシェイクされない限り、「happy」のままです

   ・ラズパイをシェイクすると測定値が”2”を超えます

   ・「sad」が表示されます

 

ではやってみましょう!!!

 

To change the image by shaking your Raspberry Pi, you will
need to add this code to the end of your program:

とありますので、下図のように新しいプログラムをつくりました。

さっそく実行すると、最初に「sad」が表示されました。色々なコードやケーブルがつながっているラズパイを慎重にまっすぐ持ち上げて、左右にシェイクしてみました。最初はゆっくり小さく。「happy」のままでした。次にちょっと大きく早く。すると「sad」になりました。XYZ軸を感知しているので、ラズパイをどういう風シェイクしても感知します。

最後は忘れずに「LED ぜんぶオフ」プログラム(苦笑)を実行して終わりです。

 

今回もけっこうタフ!でしたね。

ほんの少しだけ Python がわかってきた気がします。”失敗は成長のもと” ですね。大切で貴重な ”基” です。。。

 

次回からはいよいよ「Sensors」、Temperature に挑戦です!

 

「A Guide to Astro Pi」Sense HATで使う Python 早見表について知ろう!

今回は ”Getting Started" 「Sense HAT Python cheatsheet 」です。

ゲーマーなら必ず知っている ”チート”。意味は ”ごまかす、ズルをする” という意味ですが、ここでいうチートは「早見表」のようなものかなと思います。機能とそのLibrary set とできることが一覧表になっています。プリントアウトしていつでも参照できるようにしておくと学習の役に立つと思います。

 

「Sense HAT Python cheatsheet」を見てみよう

右上のほうにある、黄色で囲んだ「Download」をクリックすると「ダウンロード」フォルダに pdf ファイルがダウンロードされます。

Adobe Acrobat Reader で表示したところ。pdf ファイルからテキスト情報をコピペもできます。A4横で4ページですが、印刷して手元に置いておくとサクッと確認したりメモを書き込んだりできます。

 

次回は「Sense HAT pixel workshop worksheet」です。

Python 3 とラズパイの習熟も兼ねてHands on!「pixel art」に挑戦します!

 

「A Guide to Astro Pi」たった3行!初めての Python プログラムに挑戦!

今回から「A GUIDE TO ASTRO PI(英語)」にある記事に沿って Sense HAT の学習を進めていこうと思います。記事の中からポイントとなる部分は翻訳して、サンプルコードがあれば実習をして学んでいこうと思います。ラズパイ基板を動かすことも、ラズパイOS の操作(Linux)も、英語も不慣れでちょっとドキドキですが、習うより慣れろの精神でやってみましょう!

 

「Getting Started」の目次を上から順に見てみよう

ブラウザーを起ち上げて、「Getting Started」の目次を見てみます。内容から、最初の3つはすでに「銀河ブルーパイ」で説明・実行したことと重複する部分が多いので、ここでは簡単な説明のみにします。もちろん興味がある人は読んでみると Sense HAT の理解が深まると思います。

ここでは「Sense HAT: first program」から始めていこうと思います。

  • Astro Pi: what is it?(”アストロパイってなんだ?” 概要と基板の説明)
  • Assemble the Sense HAT(Sense HAT 基板の組み立て)
  • Sense HAT: emulation(手元にハードウェアがなくても、ソフトウェア的に画面上で機能を実行・表示できるものをエミュレータといいます。「A GUIDE TO ASTRO PI(英語)」の中でも学習支援ツールとして随所で活用されています)
  • Sense HAT: first program(”初めの一歩”、ですね!)
  • Sense HAT Python cheatsheet
  • Getting started with Astro Pi learn resource
  • Sense HAT pixel workshop worksheet

 

「Thonny Python IDE」で” first program” を実行する

いまのラズパイOS の Python 実行環境は Python 3 です。私の環境で「LXTerminal」を起動して、

 python --version

とコマンドを入力して実行すると、

 python 3.9.2

とわかります。

説明では アプリ「Python 3」を使う説明になっていますが、「銀河ブルーパイ」ではいまのラズパイOS に標準でインストールされている「Thonny Python IDE」を使用します。

 

  1. 「Thonny Python IDE」を起動します。初期画面はこんな感じです。起動時に操作 Tips バルーンが表示されていますが、”Python IDE for beginners” とあります。”初心者向け”とあるように画面の GUI は大きなボタンが並んでいてとっつきやすそうですよね。
  2. 最初の3行をコピーします。
  3. コピーした3行を「Thonny Python IDE」のプログラム領域に貼りつけます。
  4. 「Run」ボタンを押します。実行前にいま作ったプログラムを保存するよう促されます。保存先やファイル名などを指定します。操作は Windows エクスプローラと同じ要領です。
  5. プログラムの保存が完了するとプログラムが実行されます。ラズパイの LED matrix に ” (メッセージ文)” がスクロール表示されます。ちなみに、Tim Peake さんは英国人でESA(The European Space Agency)に所属する宇宙飛行士です。
  6. 今度はプログラムの "Hello my name is Tim Peake" のTim Peake を自分の名前に書き替えて保存、再度実行してみます。自分の名前が LED matrix にスクロール表示されれば成功です! 
  7. 次に文中にある下記のリンクをクリックしてみてください。<iframe src="https://trinket.io/embed/python/9a14c1319e" width="100%" height="600" frameborder="0" marginwidth="0" marginheight="0" allowfullscreen></iframe>
  8. Trinket(トリンケット)というサイトにジャンプします。ここで学ぶ3行コードが自動的に挿入されていますね!最初にちょっと触れた Sense HAT エミュレータはこの Trinket というサービスで提供されています。インストールもログインも不要です。「View the result」とTipsバルーンが表示されている三角のスタートボタンを押してみてください。
  9. 今度はエミュレータ上で ” first program”  が実行されました。このようにラズパイ上だけでなく Windows パソコンのブラウザーでも実行できます。Sense HAT 基板が手元になくてもエミュレータで学習できるようになっています(一部の機能はエミュレータなし)。

 

今回もちょっと疲れましたね!(笑)。

次回から以下の順に:

  • Sense HAT Python cheatsheet(内容の説明程度です)
  • Sense HAT pixel workshop worksheet(内容の説明程度です)
  • Getting started with Astro Pi learn resource(これをじっくりやります!)

それぞれ読んで理解して(汗!)、やってみて!うまくできたらどんどん紹介します!この3つが終わると Sense HAT/Python基礎編は終わりのようです。

チラ見の感想ですが、次(下記)の「Sensors」に入ると実験らしくなってググっと難しくなる気配がします。初心者は焦らずまずはじっくり基礎をやりましょう!

Sensors

  • Temperature
  • Humidity
  • Pressure
  • Movement

 

予告です。というか私の目標なんですが・・・「Sensors」までどんどんやってみて、各センサーの測定・記録が一通りできるようになったら、次はパイカメラにチャレンジしようと思います。撮影・保存が一通りできるようになったら簡易ケースをつくってアウトドア測定にチャレンジします!(YouTubeで実験ご報告?)

10月中を目標にがんばります!

 

<参考サイト>

Trinket トリンケット

https://trinket.io/

Trinket lets you run and write code in any browser, on any device. Trinkets work instantly, with no need to log in, download plugins, or install software.