正規のオンライン小売業者:

AMAZON
AMAZON
amzuk

紹介

このレッスンでは、Raspberry Piを使用してリレーを制御し、LEDをオン/オフする方法を学びます。

ハードウェアの準備

1 * Raspberry Pi

1 * ブレッドボード

1 * リレー 1 * LED

1 * 抵抗器(200Ω)

数本のジャンパーワイヤー

ソフトウェアの準備


getting started for raspberry piをご覧ください。

動作原理
リレーは、低電力のデジタル信号を使用して高電力回路をオン/オフする電子スイッチです。リレーには、少なくとも1つの入力ピンと1つの出力ピン(出力スイッチ)のペアがあります。入力がデジタル信号1(高電圧)を取得すると、リレーは出力スイッチをオンにします。入力ピンが0の場合、出力スイッチはオフになります。

リレーの構造と動作は、以下の図から理解できます。

ハードウェアの設定

以下の接続グラフに従って回路を組み立てます。リレーの出力をLEDに、リレーの信号線をRaspberry Pi GPIO 0(BCM_GPIO 17)に接続します。リレーに高電圧が印加されると、LEDが点灯します。リレーに低電圧(0V)が印加されると、LEDが消灯します。

サンプルコード

C言語のユーザーとPython言語のユーザー向けに、2種類のコードを提供します。

C言語のユーザーは、次の手順に従ってください。


まず、wiringPiライブラリがインストールされていることを確認してください。インストール方法がわからない場合は、Raspberry Pi Starter Kit Lesson 1——Get Started with Raspberry Piを参照してください。

Step 1)次のコマンドを入力して、osoyoo.comからサンプルコードrelay_with_led.cをダウンロードしてください。

cd  ~

sudo  wget http://osoyoo.com/driver/pi3_start_learning_kit_lesson_9/relay_with_led.c

サンプルコードファイルをカスタマイズしたい場合は、nanoエディタを使用して以下のコマンドを入力してソースコードを編集できます。

sudo nano relay_with_led.c

Step 2) コードをコンパイルする
C言語は高水準言語です。プロジェクトを実行する前に、ソースコードを実行可能ファイルとしてコンパイルする必要があります。次のコマンドを入力して、relay_with_led.cファイルをコンパイルしてください。

gcc  -Wall  -o  relay_with_led   relay_with_led.c  -lwiringPi
gcc: はGNUコンパイラコレクションです。自分でCコードを書いてコンパイルして実行するには、gccをマスターする必要があります。gccについての詳細はこちらをご覧ください  here
-Wall: コードをコンパイルするときにエラーが発生した場合、詳細なエラーを取得するためのものです。
-o: コンパイル後のファイル名を任意で指定できます。ここでは、flow_ledという名前を指定します。
flow_led.c: コンパイル元のファイルを意味します。
-lwiringPi: ライブラリwiringPiをロードするためのもので、lはlibrary(ライブラリ)の略です。

Step 3)プログラムを実行する
sudo  ./relay_with_led  

Step 4) テスト結果
プログラムを実行すると、リレーはチックタック音を鳴らします。さらに、LEDが点滅するのが見えるはずです。

C言語のコード分析

#include < wiringPi.h >
#includeM < stdio.h >
#include < stdlib.h >

#define  RelayPin  0

int main(void){
    if(wiringPiSetup() == -1){ //when initialize wiring failed, print messageto screen
        printf("setup wiringPi failed !");
        exit(1); 
    }
    
    pinMode(RelayPin, OUTPUT);   //set GPIO0 output

    printf("\n");
    printf("|**************************************|\n");
    printf("|                 Relay                |\n");
    printf("|    ------------------------------    |\n");
    printf("| GPIO0 connect to relay's control pin |\n");
    printf("| led connect to relay's NormalOpen pin|\n");
    printf("|  5v connect to relay's COM pin       |\n");
    printf("|                                      |\n");
    printf("|      Make relay to control a led     |\n");
    printf("|                                      |\n");
    printf("|                                OSOYOO|\n");
    printf("|**************************************|\n");
    printf("\n");

    for(;;){
        // disconnect
        printf("|********************|\n");
        printf("|   ...Relay Close   |\n");
        printf("|********************|\n");
        digitalWrite(RelayPin, LOW);
        delay(1000);
        // connect
        printf("|********************|\n");
        printf("|   Relay Open...    |\n");
        printf("|********************|\n");
        digitalWrite(RelayPin, HIGH);
        delay(1000);
    }

    return 0;
}

Python言語を使用する場合


Raspberry PiがHDMIケーブルを介してモニターに接続されている場合、Python 3(IDLE)GUI環境で直接プログラムを実行できます。詳細については、次をご覧ください。

Raspberry Piがモニターに接続されていない場合は、コマンドラインを使用してsshクライアントを介してリモートアクセスすることができます。詳細については、次をご覧ください。


Step 1) ターミナルで次のコマンドを入力して、relay_with_led.pyファイルをダウンロードします。

cd  ~

sudo  wget http://osoyoo.com/driver/pi3_start_learning_kit_lesson_9/relay_with_led.py

サンプルコードファイルをカスタマイズしたい場合は、nanoエディタを使用して以下のコマンドを入力してソースコードを編集できます。

sudo  nano  relay_with_led.py

Step 2) プログラムを実行する

sudo  python  ./relay_with_led.py

Step 3) テスト結果

プログラムを実行すると、リレーはチックタック音を鳴らします。さらに、LEDが点滅するのが見えるはずです。

Python言語のコード分析

import RPi.GPIO as GPIO
import time

# set BCM_GPIO 17 as relay pin
RelayPin = 17

#print message at the begining ---custom function
def print_message():
    print ('|**********************************************|')
    print ('|                     Relay                    |')
    print ('|        -----------------------------------   |')
    print ('|        GPIO0 connect to relay control pin    |')
    print ('|        led connect to relay NormalOpen pin   |')
    print ('|        5V connect to relay COM pin           |')
    print ('|        Make relay to control a led           |')
    print ('|        -----------------------------------   |')
    print ('|                                              |')
    print ('|                                        OSOYOO|')
    print ('|**********************************************|\n')
    print ('Program is running...')
    print ('Please press Ctrl+C to end the program...')
    print ('\n')

#setup function for some setup---custom function
def setup():
    GPIO.setwarnings(False)
    #set the gpio modes to BCM numbering
    GPIO.setmode(GPIO.BCM)
    #set RelayPin's mode to output,and initial level to LOW(0V)
    GPIO.setup(RelayPin,GPIO.OUT,initial=GPIO.LOW)

#main function
def main():
    #print info
    print_message()
    while True:
        print ('|******************|')
        print ('|  ...Relay close  |')
        print ('|******************|\n')
        
        #disconnect
        GPIO.output(RelayPin,GPIO.LOW)
        time.sleep(1)

        print ('|*****************|')
        print ('|  Relay open...  |')
        print ('|*****************|\n')
        print ('')
        #connect
        GPIO.output(RelayPin,GPIO.HIGH)
        time.sleep(1)

#define a destroy function for clean up everything after the script finished
def destroy():
    #turn off relay
    GPIO.output(RelayPin,GPIO.LOW)
    #release resource
    GPIO.cleanup()
#
# if run this script directly ,do:
if __name__ == '__main__':
    setup()
    try:
            main()
    #when 'Ctrl+C' is pressed,child program destroy() will be executed.
    except KeyboardInterrupt:
        destroy()