今さらきけない「ラズパイってなんですか?」
今さらきけない「ラズパイってなんですか?」 第10回 ラズパイでLチカって何ですか
ラズパイやArduino関連のWebサイトや本を見ていると、よく登場するのが「Lチカ」です。Lチカとは「LEDをチカチカさせる」という言葉の略称で、つまりはLEDを点滅させることなのですが、簡単なプログラムを組むだけで実行できる上、ある程度の達成感を得られるのでいろいろな媒体で紹介されるのでしょう。筆者もラズパイをいじりだした最初の頃は、このLチカができただけで「おー!」と感激したことを思い出します。
Lチカが優れているのは、回路が簡単であるだけでなく、スイッチをオンオフする、ラズパイでいうとGPIOの端子に流れる電流を「HIGH(オン)」「LOW(オフ)」で切り替えるという、デジタル回路の基礎を理解できるところにもあります。ラズパイはアナログを扱えず、デジタル回路しか扱えませんので、何かの回路をラズパイで動かす場合には、必ずこのHIGHとLOWを使わないといけません。こういった基礎を学ぶのにLチカは適している、と言えます。
今回使うLEDは秋月電子通商で購入したものです。秋月電子通商は秋葉原にある老舗の電子部品販売店で、ここに行けばたいていの部品はそろいます。通販もしているので、日本全国どこにいても購入できるのが良いところです。
今さらきけない「ラズパイってなんですか?」
第12回 キャラクターディスプレイモジュールって何ですか
第11回 抵抗? コンデンサー? IC? ラズパイで扱う電子パーツについて教えて!
第10回 ラズパイでLチカって何ですか
第9回 ラズパイでWindowsとやり取りするにはどうしたらいいですか
第8回 「Windowsでラズパイを使う」って何ですか
第7回 ラズパイで使う「コマンド」って何ですか
第6回 ターミナルソフトって何ですか
第5回 GPIOって何ですか? 機能や役割は?
第4回 ラズパイを使う準備って何をしたらいいですか
第3回 Raspberry Pi OSって何ですか
第2回 ラズパイってどうしたら使えますか
第1回 ラズパイってなんですか
一覧ページへ
抵抗値を計算する
では、早速ですがLチカをさせてみましょう。用意したのは赤色LEDで、以下のようなスペックを持っています。
- Vf:2.1V
- If(Max):50mA
ここで言うVfは順電圧といって、LEDのアノード(+)からカソード(-)に流すことができる電圧です。LEDは電池のように極性があります。+側をアノード、-側をカソードにつながないと光りません。Ifは同じように順電流といい、アノードからカソードに流せる最大電流です。これ以上流すとLEDは壊れます。またLEDは直接電源につないでも光りません。この場合も壊れます。ですので、必ず抵抗を間に入れる必要があります。
では何Ωの抵抗を入れれば良いでしょうか。ここで登場するのがオームの法則「E=IR」です。中学生の理科で登場するアレです。電子工作をするときには必須の法則とも言えます。
この回路では電源電圧をEとしましょう。そこに流れる電流ですが、ひとまずLEDの最大電流であるIfを値とします。LEDにかかる電圧はVfですので、抵抗にかかる電圧はE-Vfとなります。これを式にすると以下の通りです。
この式から抵抗値Rを求めるとすると、以下のように変えられますね。
この回路ではVf=2.1V、If=0.05A、と行きたいところですが、実はラズパイのGPIO端子に流せる電流は、ピン当たり16mA、合計50mA以下なのです。このためIfは0.016Aとする必要があります。そこでラズパイが供給する電圧Eを3.3Vとすると、抵抗値Rは
R=(3.3-2.1)÷0.016=75Ω
つまり75Ω以上あれば良さそうです。手近なところに100Ωの抵抗があったので、これを利用して以下の写真のように構成しました。
写真にある青い線と赤い線が引かれた四角い物体を「ブレッドボード」といいます。回路を組むというと、基板の上に部品が配置されたものをイメージするかもしれませんが、ラズパイなどを用いる実験では、いちいちパーツをはんだ付けするのは面倒です。このため、ブレッドボードを使って簡易的に回路を作って利用します。
ブレッドボードにある赤い線は+、青い線は-で、ライン上の横一列がつながっていて、電源が取りやすいようになっています。その内側は逆に、縦に回路がつながるようになっています。このため抵抗を横に配置して、その端にLEDのアノードが接触するように部品を配置します。
ではラズパイと接続させましょう。カソードの端子は-ですのでラズパイのGNDに、+側となる抵抗の一端をラズパイのGPIOに接続させます。このGPIOをHIGHあるいはLOWに切り替えて、LEDを点滅させることになります。つなげるGPIOの端子はどこでも良いのですが、GNDのある9番ピンと、その隣の7番ピン(GPIO4)とを接続することにしましょう。
Pythonのプログラムを作る
続いて、Lチカをするためのプログラムを組んでいきます。LEDを制御する方法はいろいろありますが、「gpiozero」というパッケージはコマンドも簡単で分かりやすいので、これを利用してプログラムを組みましょう。
LEDを点灯させるためには「led.on()」を、消灯するには「led.off()」を使います。これを交互に並べて命令を出すことで、LEDがチカチカする、というわけです。LEDが付いたり消えたりする間隔は「sleep」という関数を使います。1秒点灯して消灯させるには「sleep(1)」と書けばOKです。これを踏まえたプログラムは以下のようになります。
#!/usr/bin/env python # -*- coding: utf-8 -*- from gpiozero import LED from time import sleep led = LED(4) while True: led.on() sleep(1) led.off() sleep(1)
最初の2行はPythonでプログラムを書くときのお約束みたいなものですので、そのまま覚えておいてください。その次の「from」文でgpiozeroから「LED」というクラスを、続いて「time」モジュールから「sleep」という関数を読み込みます。その次に「led=LED(4)」とあるのは、GPIO4でLEDを点灯させるという意味です。LEDの後ろの()にGPIO番号を入れて指定します。
ここから先がプログラムの本体です。「while True」というのは、これ以下のプログラムを繰り返し実行させるときに使う構文です。次の「led.on()」でLEDを点灯させ、1秒経た後「led.off()」で消灯し、1秒待つ、という動作を無限に繰り返すように作られています。
プログラムを組んだら、「lchika.py」などのように名前を付けて保存します。このファイルを第9回で紹介したWinSCPを使ってラズパイに転送しましょう。続いて第6回で紹介したTera Termを使ってラズパイにアクセスし、ファイルを実行します。
$ python lchika.py
いかがでしょうか。LEDが点滅すればOKです。先ほどのsleep(1)の「1」を変えるとLEDが点灯するタイミングを変えられます。なお、プログラムを終了させたいときはCtrlを押しながらCを押せばOKです。
便利なプログラミングツール
今回はプログラムについてご紹介しましたが、こうしたプログラムを書くときに便利なのがソースコードエディターです。ソースコードエディターにもいろいろ種類があるのですが、筆者は「Visual Studio Code」を好んで使っています。
Visual Studio Codeはマイクロソフトが作ったソースコードエディターで、モジュールを色分けで見やすく表示してくれたり、インデントが必要な際には自動的に挿入してくれたりと、とても便利です。最初はテキストエディターでプログラミングしていましたが、Visual Studio Codeを使うようになってからは、欠かせないツールとなりました。ぜひ使ってみることをオススメします。