Raspbian 資料一覧

Raspberry Pi 3でタクトスイッチを使ったLED制御(Fritzingのインストール手順付き)

2016/10/10更新

対応バージョン: Raspbian Jessie Lite - September 2016

Raspberry Pi 3でタクトスイッチを使ってLEDを制御させてみる。

教本は金丸隆志さんの「カラー図解 最新 Raspberry Piで学ぶ電子工作」。

書籍のサポートページも参照しながら順を追って試してみる。

またブレッドボード図はFritzingを使って作成している。

ちなみにFritzingのインストール手順は簡単で、まず公式サイトから必要なバイナリ(*)をダウンロードし、任意の場所に展開してその中のFritzingを起動するだけである。

(*) Ubuntu 16.04ではfritzing-0.9.3b.linux.AMD64.tar.bz2

% tar xvf fritzing-0.9.3b.linux.AMD64.tar.bz2
% fritzing-0.9.3b.linux.AMD64/Fritzing

ドキュメントルートは~/Documents/Fritzingに設定される。

プルダウン抵抗を使った場合

教本P107 図5-6に従ってタクトスイッチ側に10kΩのプルダウン抵抗を使用する。電流の流れは以下の通り。

タクトスイッチ

GPIOポート1ピン(3.3V電源) → タクトスイッチ → 抵抗(10kΩ) → GPIOポート6ピン(GND)

LED

GPIOポート22ピン(GPIO 25) → 抵抗(330Ω) → LEDのアノード(+) → LEDのカソード(-) → GPIOポート6ピン(GND)

タクトスイッチのON/OFFはGPIOポート18ピン(GPIO 24)を使って取得し、スイッチが押されたらGPIO 25の状態をHIGHにすることでLEDが点灯する。

#!/usr/bin/env python

import RPi.GPIO as GPIO
from time import sleep

GPIO.setmode(GPIO.BCM)
GPIO.setup(25, GPIO.OUT)
GPIO.setup(24, GPIO.IN)

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()

Raspberry Pi内部のプルダウン抵抗を使った場合

Raspberry Pi内部に用意されているプルダウン抵抗を使えば物理的な抵抗が不要になる。

教本P113 図5-9に従って上記回路からプルダウン抵抗を取り除くと以下のようにシンプルになる。

プログラムは前出の8行目を以下のように変更し、GPIO 24のプルダウン抵抗を有効にする。

(変更前)

8   GPIO.setup(24, GPIO.IN)

(変更後)

8   GPIO.setup(24, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)

スイッチが押されていない時は別のLEDを点灯させる

スイッチが押された時に赤色LEDが点灯するのに加え、押されていない場合は青色LEDを点灯させてみる。

タクトスイッチの回路はそのままに、青色LED用の回路をもう一本作る。

GPIOポート36ピン(GPIO 16) → 抵抗(330Ω) → 青色LEDのアノード(+) → 青色LEDのカソード(-) → GPIOポート6ピン(GND)

プログラムも簡単で、GPIO 16を使用可能にしたうえで赤色LEDを点灯させる時は青色LEDを消灯し、赤色LEDを消灯させる時は青色LEDを点灯させればよい。

#!/usr/bin/env python

import RPi.GPIO as GPIO
from time import sleep

GPIO.setmode(GPIO.BCM)
GPIO.setup(24, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(25, GPIO.OUT)        # LED(Red)
GPIO.setup(16, GPIO.OUT)        # LED(Blue)

try:
    while True:
        if GPIO.input(24) == GPIO.HIGH:
            GPIO.output(25, GPIO.HIGH)
            GPIO.output(16, GPIO.LOW)
        else:
            GPIO.output(25, GPIO.LOW)
            GPIO.output(16, GPIO.HIGH)
        sleep(0.01)

except KeyboardInterrupt:
    pass

GPIO.cleanup()

関連資料・記事

参考サイト