LCDのバックライト(5V)を制御する


Raspberry PiのGPIO出力は3.3Vです。
ピン#2とピン#4には5Vも出ていますが、これを制御するためには以下の2つの方法があります。
LCDのバックライトはほとんどが5Vなので、バックライトをON/OFFする場合には、このような回路を作る必要があります。

@フォトカプラーを使ってBackLightのAnode側(プラス側)をON/OFFする
回路図を以下に示します。



ブルーのラインが制御用のラインで、このラインをONにすると、フォトカプラーの出力側(コレクター・エミッター側)に電流が流れて
LCDのバックライトに5Vが供給されます。

フォトカプラーの入力側(アノード・カソード側)は一種のLEDなので、LEDと同様に定格電圧、定格電流が決まっています。
たとえばTLP621の場合、定格の電圧=1.15V、電流=10mAなので、抵抗値はLEDの計算と同じ
抵抗値=(3.3V-1.15V)/0.01A=215Ω
となります。

Aトランジスターを使ってBackLightのCathode側(マイナス側)をON/OFFする
回路図を以下に示します。



ブルーのラインが制御用のラインで、このラインをONにすると、トランジスターのCollectorがGNDに落ちて
LCDのバックライトに5Vが供給されます。

バックライト制御付きのコードは以下の様になります。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <wiringPi.h>
#include <lcd.h>

/*
 cc -o lcd lcd.c -lwiringPi -lwiringPiDev
*/

#define BACKLIGHT 6
#define DEBUG    0

int main(int argc, char **argv) {
    int fd_lcd;
    int stlen;
    int i;
    char string1[17];
    char string2[17];

    if(wiringPiSetup() == -1) {
        printf("Setup Fail\n");
        exit(1);
    }
    pinMode(BACKLIGHT,OUTPUT);
    fd_lcd = lcdInit(2,16,4,4,5,0,1,2,3,0,0,0,0);

if(DEBUG)printf("argc=%d\n",argc);
    if(argc == 1) {
        lcdClear(fd_lcd);
        digitalWrite(BACKLIGHT,0);
    } else {
        digitalWrite(BACKLIGHT,1);
if(DEBUG)printf("argv=%s\n",argv[1]);
        memset(string1,0,sizeof(string1));
        memset(string2,0,sizeof(string1));
        stlen=strlen(argv[1]);
if(DEBUG)printf("stlen=%d\n",stlen);
        if (stlen < 17) {
            strcpy(string1,argv[1]);
        } else if (stlen < 32) {
            strncpy(string1,argv[1],16);
            argv[1]=argv[1]+16;
            strncpy(string2,argv[1],stlen-16);
        } else {
            strncpy(string1,argv[1],16);
            argv[1]=argv[1]+16;
            strncpy(string2,argv[1],16);
        }
        lcdClear(fd_lcd);
        lcdPuts(fd_lcd,string1);
        lcdPosition(fd_lcd,0,1);
        lcdPuts(fd_lcd,string2);
    }
}

引数つきで実行するとバックライトをONにした上で、LCDに文字を表示します。
引数なしで実行するとLCDの表示をクリアしてバックライトをOFFにします。
$ sudo ./lcd "Hello World"
$ sudo ./lcd