タクトスイッチで点灯する回路とプログラムを作る-農家のIoT入門(4)
農家のIoT入門、第4回です。
前回学んだプルアップ・プルダウン抵抗による「入力」を使って、スイッチを押している間LEDが光る電子工作を行います。
・「入力」を使った回路を考える
・Pythonで入力をキーとしたLED点灯プログラムを組む
・タクトスイッチを使ったLED点灯回路を電子工作する
「入力」を使った回路を考える
今回は、人間が介入するプログラムを考えます。
「スイッチを押す」という人間の行動を、プログラム側が検知して、その結果なにかをさせる・・という感じですね。
今回も代表例である、「スイッチを押している間」→「LEDが点灯する」という回路を考えてみようと思います。
まず、家の電灯なんかもスイッチを押したら光る仕組みですが、これはプログラムとは関係ないです。
あえてRaspberryPiを使うとしても、下の回路のようになるだけです。
プログラミングしなくても、常時3.3Vが出ているピンとGNDピンを使えば、動作します。
そうではなく、「スイッチが押されている」という状態をプログラミングで検知して、その結果「LEDを点灯させる」というプログラミングを走らせる。
そんな感じです。
スイッチが押されている事を検知する
では、「スイッチが押されている」を検知する回路を考えてみましょう。
GPIO24ピンを「入力」に設定し、スイッチを押している間は3.3Vが入力される回路がこれです。
前回のプルダウン・プルアップ抵抗講座で学んだ内容をそのまま活かし、プルダウン抵抗を使っています。
このプルダウン抵抗が入っていないと、ショートするので気をつけましょう。
このスイッチがオンしている間、GPIO24ピンは3.3Vを検知して、"1″を返します。
逆にオフの間は0Vを検知し、"0″を返します。
他のピンの結果を拾って、出力を変える
続いて、下の回路を組みます。
GPIO25ピンを出力にして、GPIO24ピンが"1″の場合は3.3Vを出力し、"0″の場合は0Vにする。
この2つを組み合わせれば、スイッチを押している間だけ光る回路の完成です。
入力の回路と、出力の回路を分けることで、様々な事に対応出来るようになるわけです。
Pythonで入力をキーとしたLED点灯プログラムを組む
では、さきほどの回路を動かす為のプログラミングを作りましょう。
2種類の回路を組みましたが、プログラムはひとつにまとめます。
GPIO24と25をそれぞれ入力と出力に指定し、そこから各動作を組んでいきます。
- import RPi.GPIO as GPIO
- from time import sleep
- GPIO.setmode(GPIO.BCM)
- GPIO.setup(24,GPIO.IN)
- GPIO.setup(25,GPIO.OUT)
- try:
- while True:
- if GPIO.input(24) == GPIO.HIGH:
- GPIO.output(25,GPIO.HIGH)
- else:
- GPIO.output(25,GPIO.LOW)
- sleep(0.01)
- except KeyboardInterrupt:
- pass
- GPIO.cleanup()
10行目:もし24ピンがHIGH(3.3Vの入力を検知して、"1″を返している状態)ならば
11行目:25ピンの出力を3.3Vにしなさい(LED点灯)
12行目:10行目以外の条件ならば
13行目: 25ピンの出力を0Vにしなさい(LED消灯)
こんなふうになります。
タクトスイッチを使ったLED点灯回路を電子工作する
最後に、ブレッドボードを使って回路を実際に組立てます。
先に書いた回路図の通り組立てたのがこちら。
オン・オフは、タクトスイッチを使っています。
4本のピンが出ており、この写真での上下のピンは常に繋がっている状態です。
ですので、ブレッドボード上のこの位置に刺さないと、上下のピンでショートしてしまいます。
そして、タクトスイッチを押すと、左右のピンが繋がり、GPIO24へ3.3Vが入力されるという仕組みです。
実際の動作状況がこちら。
押している間だけ、LEDが光りますね。
今回はプログラム上の「入力」を学びました。
これで、様々な事をRaspberryPiに命令することができるようになります。
初歩の初歩は、だいたいこれでつかめました。
次からは、もう少し実用的な事をやってみようと思っています。