Lチカでプログラムの初歩を知るー農家のIoT入門(2)

2020年12月7日

農家のIoT入門、二回目です。

今回は、実際にRaspberryPiを使って、超初歩的なプログラミングと電子工作をやってみます。

本記事の目的

・電子工作用キットの購入
・プログラミングによるLEDの点滅制御

私もこういった事は素人同然なので、初心者向けの書籍やWebサイトを見ながら、一個ずつ勉強を進めていこうと考えています。
(工作は得意なのだけど、電気の原理そのものの理解が苦手なんですよね・・)

電子工作用キットの購入

前回の記事で書いたように、小型コンピューターであるRaspberryPiは一式揃えてあります。

このRaspberryPiには、出力・入力に使えるピンが40本備わっており、このピンに様々な電子機器を配線し、その電子機器を制御するプログラムを打ち込む事で、色々な電子工作が出来る・・という仕組みになっています。

手前に40本のピン

という事は、RaspberryPi本体だけあっても、当然電子工作は出来ない訳です。

配線用のケーブルや、制御したい電子パーツは別途購入しなくてはいけません。

用途・目的に合わせて一個ずつ購入してもいいのですけど、とりあえず勉強用として売られているキットを購入してみました。

結構色々と詰め込まれており、勉強用としてだけでなく、今後の工作にも充分役立ちそうなわりには安かったですね。

それから、お勉強用に書籍も購入。色々調べて、なるべく初心者向けであり実例がたくさん載っている本を選んでいます。

それなりにわかりやすく書かれている本だと思います。

ただ、”超”初心者がこれで理解できるかというと・・・難しいかも!?

ある程度の電気的な基礎知識があった方が良さそうです。

私も苦手な分野である電気、超基礎から学びやすい書籍、無いものですかねぇ?

ともあれ、この本を参考にしながら電子工作を進めていきます。

電子工作・プログラミングの最初の一歩はLチカから

では、実際に電子工作を始めます。

この書籍で最初に紹介されているのが、通称"Lチカ"

LEDチカチカの略で、要するにLED電球をプログラミングで点滅させる事です。

色々な入門書やサイトを見ましたが、たいていこのLチカが最初の課題ですね。

理由としてはおそらく・・

  • 電気を「流す」「止める」と、最もシンプルでわかりやすい制御
  • その制御が成功しているかどうか、「光る」というわかりやすい形で確認できる
  • 最低限の電気的知識を必要とする(オームの法則)
  • これら全てを、最小限の部品で作れる

こんな感じだと思います。

では、実際に始めてみましょう

Lチカの回路を組む

まず、Lチカに必要な回路を作ります。

先に完成写真をどうぞ。

オレンジの線がRaspberryPiの本体に刺さっていて、ここが「出力」か「入力」かを自分で指定できるピン(GPIOと呼ぶ)のうちのひとつで、25番に指定されている為、GPIO25と名前がついています。

そこを出力とするので、電池でいえばプラス側で電気の流れがスタートする場所ですね。

そこから、下の白いボード(ブレッドボード)へ、ジャンパーワイヤという線で配線します。

ブレッドボードは電子工作を簡単にする為のボードで、ジャンパーワイヤや色々な電子部品を簡単に抜き差しでき、ハンダ付け無しで回路を組める便利なヤツです。

そこにLED電球を刺して、マイナス側をRaspberryPiのGNDピン(電池でいうマイナス側)へ配線すれば回路になりますが、LED電球はあまり大きな電流を流すと壊れます。

そこで、抵抗をLED電球の前につける事で、電流を制限してあげる訳です。

RaspberryPiのGPIO出力が3.3V。

使ったLED電球の電圧降下が1.85Vで、流したい電流が10mA(0.01A)。

オームの法則を使って計算すると、145Ω以上の抵抗をつける必要があります。

・・・計算の解説は、自分も理解度が低いので割愛(笑)

今回は330Ωの抵抗をLEDの前につけて、回路の完成です。

LチカのプログラムをPythonで組む

続いて、作った回路を制御するプログラムを、RaspberryPiを使って作ります。

プログラムを組むにあたり、「どんな言語を使うか」を最初に決める必要があります。

RaspberryPiはただのコンピューターなので、コンピューターが命令を理解出来るように、決まった言語で意思の疎通を図るんですね。

日本語が全くわからない外国人に、日本語で喋っても何も伝わらないでしょ?

コンピューターと人間、双方が理解できる言語を、最初に決めておくわけです

ただその言語も、人間と同じく色々な種類があり、それぞれ一長一短ですが、私は"Python"を選びました。

「パイソン」と読み、2020年現在ではかなりメジャーなプログラミング言語です。

Pythonを選んだ理由は

  • 世界中で広く使われている
  • わかりやすい言語である
  • プロからビギナーまで、どのレベルでも使いやすい
  • 広く使われているので、参考文献やサイトが多い
  • AIにも普及している
  • RaspberryPiに最初からインストールされている

とまぁ、選ばない理由がないぐらいですね。

プログラミング始めるなら、Pythonにしとけ!・・って感じで良いのでしょう

という事で、いきなりですが本を見ながら組んだプログラムがこちら。

import RPi.GPIO as GPIO
from time import sleep
GPIO.setmode(GPIO.BCM)
GPIO.setup(25,GPIO.OUT)
try:
   while True:
        GPIO.output(25,GPIO.HIGH)
        sleep(0.1)
        GPIO.output(25,GPIO.LOW)
        sleep(0.1)
except KeyboardInterrupt:
    pass
GPIO.cleanup()

3行目までは準備のような物。

4行目で、25番のピンを出力にすると宣言。

6行目から繰り返し。25番ピンへ電圧をかけたり消したり。
(点灯→0.1秒待機→消灯→0.1秒待機→点灯・・・の繰り返し)

この繰り返しを終わらせる為に、4行目と10行目があり、Ctrl+cキーを押すと繰り返しから脱出する。

12行目で、出力に指定した25番ピンを開放してリセットして終わり。

といったプログラムです。動かした動画がこちら。

ピカピカ点滅していますね!成功です!(誤字で2度書き直したのは秘密ー)

2色のLEDを交互に点滅させる

本には書いてありませんでしたが、自分がちゃんと理解しているかを確認する為に、少しだけ応用してみます。

緑のLEDを増やし、赤と交互に点滅させてみようと思います。

出力のGPIOピンをもうひとつ作り(GPIO24)、同じ回路をブレッドボード上にもう一組作ります。

プログラムでは、点灯と消灯のタイミングを逆にするよう24番を制御しました。

出来上がったのがこちら。

ちゃんと点滅しました!

初歩の初歩ですが、ちゃんと理解して組めたのでまずは一安心(^^)
今回はここまで。

次回は、スイッチを用いた制御の予定です。