2021/12/15 よりサイトリニューアルしました

Raspberry Pi 4Bでエルチカ「タクトスイッチで点灯させてみる」【GPIO IN、OUT】と【プルダウン、プルアップ】について

Lチカタクトスイッチ

前回、Raspberry Pi4Bで簡単なLチカをやってみました。

※PythonでLED点滅の記事はこちら↓

今回は、「タクトスイッチ」を使ってLチカをやってみたいと思います。

必要な材料は下記の通りです。

・Raspberry Pi 4B

・LED

・タクトスイッチ

・150Ω抵抗

・10KΩ抵抗

・ジャンピングワイヤー(オス-メス×4 オスーオス×1)

今回は、タクトスイッチを押した時のみLEDが点灯する仕様にしますので、はっきりいってラズパイで制御しなくても可能ではありますが、「GPIOのインプット」を利用した制御にしますので、そういった観点で見てもらえると良いと思います。

また、電子回路でよく出てくる「プルダウン」「プルアップ」についても触れていきたいと思います。

回路構成

GPIO配列図

一応載せておきます。

GPIO

回路図

タクトスイッチLチカ回路

ラズパイのGPIOから3.3Vを取り出し、タクトスイッチで回路を開閉させてGPIO17をHIGH、LOWさせます。(GPIO IN)

GPIO4は、GPIO17がHIGHの時のみ、3.3Vが出力されるようにします。(GPIO OUT)

つまり、タクトスイッチがONの場合、LEDが点灯する回路です。

配線図

タクトLチカ配線図

プルダウンとプルアップについて

プルダウンとプルアップは、色々な用途で利用されますが、今回は「ICなどの動作不良を防ぐ」目的で使います。

回路構成は異なりますが、動作不良を防ぐという目的では同じです。

簡単に言えば、回路の一部が浮いている(どこにもつながっていない状態)である場合、例えばそれがICの一端であった場合に、環境の影響で電位が生じてしまう事があります。プルダウンとプルアップを利用すれば、それを防ぐ事が可能です。

プルダウン

プルダウン

図のように、GPIOとGND間に10KΩ抵抗を挟みます。

GPIOは抵抗を介してGNDと繋がっているので、環境の影響を受けにくくなります。抵抗を介してGNDに落ちるので、電位差が生じにくくなっているのです。

タクトスイッチをONにすると、GPIOと抵抗は並列で構成されているので、GPIOに3.3Vが印可されます。10KΩの方には、ほぼ電流が流れないので問題はありません。

プルアップ

プルアップ

プルダウンと異なるのは、タクトスイッチがOFFで3.3VがGPIOに印可されている事です。

3.3VとGPIOの間に10KΩがあるので、一見電圧降下でGPIOに電源が印可されないと思いがちですが、GPIOの先にはCPU内部へとつながっており、そこには更に大きな抵抗値を持っているため、3.3VはGPIOに印可される仕組みです。

10KΩと1MΩを直列に配置し、3.3Vかけると考えると分かりやすいです。電流値は0.03A程度です。つまり、1MΩの方にほぼ3.3Vが印可される訳です。

タクトスイッチON時は、GNDとつながるので電圧が0Vになります。プルダウンと逆ですね。もちろん環境の影響を受ける事はありません。

プログラム

Python

Thonnyで作成します。

6行目の初期化処理に追加で、GPIO17をインプットとして使う宣言をします。

ループ本文には、分岐条件のif文を使います。

10行目は、GPIO17が「HIGH」であるか、の分岐になります。==は変数に入れるのではなく、同じ内容であるかという記述になります。

つまり、今回の場合ではタクトスイッチをONにすると、17がHIGHになります。真の値となるので、11行目のGPIO4のアウトプットが「HIGH」になる動作をします。これがLED点灯です。

ループなのでタクトスイッチを押し続けると、10行目と11行目が繰り返し実行され、LEDが点灯し続けます。

反対にタクトスイッチをOFFすれば、ifの分岐で偽の値となるため、12行目のelseに進みます。

そして13行目のGPIO4の出力が「LOW」になり、LEDは消灯します。

最後のsleep(0.01)に関しては、プログラムを走り続けると他の計算処理が遅くなる(タスク処理が出来なくなる)ので、一瞬プログラムを止めている記述になります。ループ毎に一旦休ませてる感じですね。

こんな感じの動作になります。↓

まとめると、GPIO17のインプット(タクトスイッチ)のHIGH、LOW、でGPIO4のアウトプットHIGH、LOW,を制御するプログラムになります。

冒頭に書いた通り、プログラムで制御する事でもない機能ですが、GPIOのインプットで、他のGPIOのアウトプットを制御する基本的な事を学べると思います。

次回は、タクトスイッチを使ったLチカの最終、「トグル」をやってみようと思います。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です