土木のおっ菜園すのブログ

土木のおっ菜園すのブログ

PR

×
2021.09.04
XML
カテゴリ: 画像処理
​タイトルにあるとおり今回はスイッチを設置しました。

配線等は以下のとおりです。

今回使用したスイッチはタクトスイッチといわれるものを使用しています。


なお、ここでブレッドボードを大きなタイプに変更して、今後のためにLEDを追加してます。

LEDに使用している抵抗は220Ωで、スイッチに使用している抵抗は10kΩです。

実際に配線した写真は以下のとおりです。



だんだん複雑になっていますが、一応これで完成形と思っています。

また、ジャンパーワイヤーの代わりに剝き出しの線でつないでいる箇所がありますが、これはLEDや抵抗の切れ端を曲げて使用しています。節約です。



忘れていましたが、今回参考にしたサイトは​ ココ

配線が終わりましたので、Thonnyを開きコードを書きます。

コードは以下のとおりです。

import RPi.GPIO as GPIO
from time import sleep
LED_GPIO = 4 
TACT_GPIO = 17
GPIO.setmode(GPIO.BCM)
GPIO.setup(LED_GPIO, GPIO.OUT)
GPIO.setup(TACT_GPIO, GPIO.IN)
try:
    while True:
        if GPIO.input(TACT_GPIO) == GPIO.HIGH:
            GPIO.output(LED_GPIO, GPIO.HIGH)
        else:
            GPIO.output(LED_GPIO, GPIO.LOW)
        sleep(0.01)
except KeyboardInterrupt:
    pass
finally:
    GPIO.cleanup()

では、おっさんなりのコードの理解です。

import RPi.GPIO as GPIO:これまでと同様

from time import sleep:いつもはtimeをimportしていましたが、今回はtimeの中のsleepだけをimportしているみたいです。負荷が少なくなるのかな?

LED_GPIO = 4 :LEDに接続するGPIO番号。上の黄色の線になります。このピンは3.3vの電圧を出したり、読み取ったりできます。

TACT_GPIO = 17 : Tack Switchに接続するGPIO番号。上の紫の線になります。このピンも3.3vの電圧を出したり、読み取ったりできます。

GPIO.setmode(GPIO.BCM):前回と同様。

GPIO.setup(LED_GPIO, GPIO.OUT):LED用のピンを出力用として使いますという宣言。

GPIO.setup(TACT_GPIO, GPIO.IN):スイッチ用のピンを読み取り用として使いますという宣言。

try: :ここからexcept KeyboardInterrupt:までは例外処理をしますという指示。例外処理とは予期しない事象が起こった時に対処する方法で、exceptの下にある内容が例外処理の発生した場合の処理の内容になるみたいです。ここではKeyboardInterruptつまりキーボード関連の問題が発生した場合のみ対処するコードを書いています。
なので、tryからexceptまでの間にキーボード関連の問題が発生した場合、passを実行することになります。passは何もしないという命令文ですので結局問題が発生しても何もしないことになるみたいです。

順番が変わりますが、
finally:
    GPIO.cleanup()
は必ず実行する内容を指示しています。最後には・・・という感じです。

while True: :繰り返しを指示しています。範囲は、
   if GPIO.input(TACT_GPIO) == GPIO.HIGH:
            GPIO.output(LED_GPIO, GPIO.HIGH)
        else:
            GPIO.output(LED_GPIO, GPIO.LOW)
        sleep(0.01)
になります。この内容をずっと繰り返し行います。

if GPIO.input(TACT_GPIO) == GPIO.HIGH: :もしTACT_GPIOピンに3.3v(GPIO_HIGH)の電圧がかかっていればという内容になります。

GPIO.output(LED_GPIO, GPIO.HIGH):LEDのピンに3.3vの電圧をかけなさいという内容になります。

 else: :そうではない場合という内容になります。

GPIO.output(LED_GPIO, GPIO.LOW):LEDのピンに0vの電圧をかけなさい(つまりoff)という内容になります。

これを図で確認すると、



まず、赤のジャンパーワイヤーから常に3.3vの電圧が供給されています。このピンは何も制御されていなくても常に3.3vの電圧がかかっているピンになります。

スイッチが押されていない状況では、赤い矢印の経路に電圧3.3vがかかっています。

ここで、スイッチを押すと、



上の図の経路に電圧がかかります。

そうすると、紫の線にも3.3vの電圧がかかります。

なので、
   if GPIO.input(TACT_GPIO) == GPIO.HIGH:       
の条件文を満たします。

よって、
    GPIO.output(LED_GPIO, GPIO.HIGH)
を実行することになります。

したがって、

スイッチを押すとLEDが点灯することになります。

実際の実行状況です。



ちなみに水色の矢印は抵抗10kΩをとおるので電圧が下がります。そのため色分けしています。(電圧=電流×抵抗:電流は一定なので電圧が下がる)

ここで、なぜ10kΩの抵抗を使用しているかは、推測ですがスイッチ自体に電流はいらないので、ほぼ電流を流さないために大きな抵抗をしようしているのではないかと思います。

また、黄緑色と白色のジャンパーワイヤーはRaspberryPiのマイナス側のピンにつながっています。ジャンパーワイヤー1本あたりの最大許容電流値を調べるのは面倒だったので安全のために2本マイナス側をとっています。

このコードはずっと繰り返していて終わらないので、終わらせたい場合は、Thonnyのストップボタンを押すか,ctrlキーとcキーを同時に押す必要があります。

今回はここまでです。

次回はついにゴールの予定です。

お疲れでした。





お気に入りの記事を「いいね!」で応援しよう

最終更新日  2021.09.04 03:01:25
コメント(0) | コメントを書く


【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! -- / --
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x
X

© Rakuten Group, Inc.
X
Design a Mobile Site
スマートフォン版を閲覧 | PC版を閲覧
Share by: