ラズパイとタクトスイッチで押した時にLEDを点灯、離した時に消灯する回路を試した | そう備忘録

ラズパイとタクトスイッチで押した時にLEDを点灯、離した時に消灯する回路を試した

タクトスイッチによるLEDの点灯

前回はラズパイ(Raspberry Pi 3 B+)で0.5秒間隔のLED点滅(Lチカ)の記事を書いた。

自分の電子工作の始まりは金丸隆志さんの「Raspberry Piで学ぶ電子工作」の書籍を参考にさせて貰ったのだが今回はその書籍に載っているタクトスイッチによるLEDの点灯の切り替えを試してみる。

やりたい事はタクトスイッチを押すとLEDが点灯して、離すとLEDが消灯する回路とPythonのプログラムだ。

前回よりちょっと複雑になっている。

タクトスイッチによるLEDがの点灯の制御

試した環境

環境は以下の通り。

本体

Raspberry Pi 3 B+

OS

Raspbian Version:June 2019

必要な機器

必要な機器は基本的には前回の記事を参照して欲しいのだが今回新たに必要なものとしては以下がある。

タクトスイッチ

ボタンを押すことにより切り替わるタクトスイッチ。

抵抗(10KΩ)

10kΩの抵抗。

尚、1点ずつ購入する事も出来るが自分は上記書籍で紹介されていた秋月電子通商の「Raspberry Piで学ぶ電子工作 パーツセット」で揃えた。

回路図

ラズパイとタクトスイッチによるLEDの点灯制御の回路図は以下の通り。

タクトスイッチによるLEDの点灯

補足説明

LEDはGPIO4(3.3V)→抵抗(330Ω)→LEDアノード→LEDカソード→GNDとなっている。

プログラムでGPIO4のoutputをLOW、HIGHと切り替えることによりLEDの点灯を制御する。

一方タクトスイッチの方は3.3V→タクトスイッチ→GPIO17への接続とタクトスイッチ→10KΩの抵抗→GNDと分かれている。

タクトスイッチは上記図の赤文字の1、2は接続されており3は接続されていないが、スイッチを押すと3が接続される構造になっている。

タクトスイッチが押されてGPIO17(input)がHIGHになった時にGPIO4(output)をHIGHにすればLEDが点灯する仕組みだ。

タクトスイッチとGNDとの間に10KΩの抵抗があるがこれはプルダウン抵抗と呼ばれてスイッチが押されていない時にGPIO17を安定して0Vにする為と、スイッチが押された時にGNDに大電流が流れない様にする為の抵抗である。

十分大きな抵抗であれば10KΩで無くても良いのだがこれが無くて、GNDに大電流が流れるとラズパイがシャットダウンしてしまうので注意が必要だ。

プルダウン抵抗の役割

最初、自分は上記の1番右の接続で良いのでは?と思っていたのだがどうやらこの接続だとスイッチがOFFの時にGPIOが安定してLOWにならない(LOWとHIGHを繰り返してしまう)

その為、GNDに接続する必要があるのだが、そのまま繋ぐと今度はスイッチがONの時に大電流がGNDに流れてしまうので10kΩの抵抗を挟むという事らしい。

自分なりの理解なので違っていたら指摘をして頂けるとありがたいです

実はラズパイにはプルダウン(プルアップ)抵抗が内蔵されているので実際に接続をしなくてもPythonのプログラムで指定する事もできるのだが、それは次回以降の記事とする。

プログラム

ソースコード

プログラムは以下の通り。

# -*- coding: utf-8 -*-
"""
Created on Sun Aug  2 08:14:04 2020

@author: Souichirou Kikuchi
"""

import RPi.GPIO as GPIO
from time import sleep

LED_GPIO = 4 # LEDに接続するGPIO番号
TACT_GPIO = 17 # Tack Switchに接続するGPIO番号

GPIO.setmode(GPIO.BCM)
GPIO.setup(LED_GPIO, GPIO.OUT)
GPIO.setup(TACT_GPIO, GPIO.IN)

try:
    print('--- start program ---')
    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()
    print('--- stop program ---')

補足説明

11、12行目でLEDとタクトスイッチに接続するGPIO番号を定数として定義している。

プログラム中で複数箇所に出現するので定数にしておけば接続するピンを変更した場合、この一箇所を変更するだけで良い。

21行目のif文でタクトスイッチからのinputのGPIOの状態を確認している。

HIGHならLEDに接続しているGPIOのoutputに対してHIGH、そうでなければLOWを出力する。

プログラムの実行

ラズパイにプログラムをコピーしてメニューからThonny IDEを起動して「Load」ボタンで対象のプログラム(led-tact-switch.py)を開いたら「Run」ボタンで実行する。

プログラムの実行結果

タクトスイッチを押しているときだけLEDが点灯する装置が出来た。

タクトスイッチを押しているときだけLEDが点灯する

Ctrl+Cでプログラムは終了する。

以上で今回の記事は終了とする。

最後に

この記事が何処かで誰かの役に立つことを願っている。

尚、当記事中の商品へのリンクはAmazonアソシエイトへのリンクが含まれています。Amazonのアソシエイトとして、当メディアは適格販売により収入を得ていますのでご了承ください。

souichirou

やった事を忘れない為の備忘録 同じような事をやりたい人の参考になればと思ってブログにしてます。 主にレゴ、AWS(Amazon Web Services)、WordPress、Deep Learning、RaspberryPiに関するブログを書いています。 仕事では工場に協働ロボットの導入や中小企業へのAI/IoT導入のアドバイザーをやっています。 2019年7月にJDLA(一般社団法人 日本デイープラーニング協会)Deep Learning for GENERALに合格しました。 質問は記事一番下にあるコメントかメニュー上部の問い合わせからお願いします。

おすすめ

質問やコメントや励ましの言葉などを残す

名前、メール、サイト欄は任意です。
またメールアドレスは公開されません。