樹莓派8:樹莓派控制繼電器

2020-09-19 12:04:51

樹莓派控制繼電器

1.繼電器:(可程式化電子開關)

低電平有效

一、繼電器的定義

繼電器(英文名稱:relay)是一種電控制器件,是當輸入量(激勵量)的變化達到規定要求時,在電氣輸出電路中使被控量發生預定的階躍變化的一種電器。它具有控制系統(又稱輸入迴路)和被控制系統(又稱輸出迴路)之間的互動關係。

二、繼電器的作用(小電流控制大電流)

通常應用於自動化的控制電路中,它實際上是用小電流去控制大電流運作的一種「自動開關」。故在電路中起著自動調節、安全保護、轉換電路等作用。

三、繼電器模組實物圖

在這裡插入圖片描述
四、模組說明:

1、模組採用正品繼電器,常開介面大負載:交流250V/10A,直流30V/10A;
2、採用貼片光耦隔離,驅動能力強,效能穩定;觸發電流5mA;
3、模組工作電壓有5V、9、12V、24V可供選擇;
4、模組可以通過跳線設定高電平或低電平觸發;
5、容錯設計,即使控制線斷,繼電器也不會動作;
6、電源指示燈(綠色),繼電器狀態指示燈(紅色)
7、介面設計人性化,所有介面均可通過接線端子直接連線引出,非常方便
8、模組:50mm * 26mm* 18.5mm(長高)
9、設有4個固定螺栓孔,孔3.1mm,間距44.5mm*20.5mm
五、 模組介面:
1、DC+:接電源正極(電壓按繼電器要求,有5V.9V.12V和24V選擇)
2、DC-:接電源負極
3、IN:可以高或低電平控制繼電器吸合
繼電器輸出端:
1、NO: 繼電器常開介面,繼電器吸合前懸空,吸合後與COM短接
2、COM:繼電器公用介面
3、NC: == 繼電器常閉介面==,繼電器吸合前與COM短接,吸合後懸空
高低電平觸發選擇端:
1.跳線與LOW短接時為低電平觸發;
2.跳線與high短接時為高電平觸發;

2.樹莓派:

一,在終端輸入:

gpio readall

顯示出樹莓派的引腳資訊:
在這裡插入圖片描述

把指定引腳與繼電器進行相連。

程式;

寫一個程式實現,鍵盤輸入1:導通;輸入0:斷開。

#include <stdio.h>
#include <wiringPi.h>
#define SWIT 7
int main()
{
 int cmd;
 if(wiringPiSetup()==-1)
 {
  printf("硬體介面初始化失敗\n");
  return -1;
  } 
  pinMode(SWIT,OUTPUT);
  digitalWrite(SWIT,HIGH);
  while(1)
  {
   printf("請輸入0/1:0--斷開開關;1--導通開關\n");
   scanf("%d",&cmd);
   getchar();
   if(cmd==1)
   {
    digitalWrite(SWIT,LOW);//繼電器低電平有效 
   }else if(cmd==0)
   {
    digitalWrite(SWIT,HIGH);//滅 
    } else
    {
     printf("輸入錯誤\n");
    }
  }
  return 0;
} 

編譯執行1:

gcc demo1.c -lwiringPi
./a.out

1----0----

二:控制4個繼電器開關亮滅:

在這裡插入圖片描述

在這裡插入圖片描述
把指定引腳與繼電器進行相連。

程式:

#include <stdio.h>
#include <wiringPi.h>
#include <string.h>
#define SWI1 26
#define SWI2 27
#define SWI3 28
#define SWI4 29
int main()
{
 char cmd[12]={'\0'};
 if(wiringPiSetup()==-1)
 {
  printf("硬體介面初始化失敗\n");
  return -1;
  } 
  pinMode(SWI1,OUTPUT);
  pinMode(SWI2,OUTPUT);
  pinMode(SWI3,OUTPUT);
  pinMode(SWI4,OUTPUT);
  digitalWrite(SWI1,HIGH);
  digitalWrite(SWI2,HIGH);
  digitalWrite(SWI3,HIGH);
  digitalWrite(SWI4,HIGH);
  while(1)
  {
   printf("請輸入1/2/3/4:off--斷開開關;on--導通開關\n");
   memset(cmd,'\0'sizeof(cmd));
   //scanf("%s",&cmd);
   //getchar();
   gets(cmd);
   if(strcmp(cmd,"1 on")==0)//
   {
    digitalWrite(SWI1,LOW);//繼電器低電平有效 
   }else if(strcmp(cmd,"1 off")==0)
   {
    digitalWrite(SWI1,HIGH);//滅 
    } 
    if(strcmp(cmd,"2 on")==0)//
   {
    digitalWrite(SWI2,LOW);//繼電器低電平有效 
   }else if(strcmp(cmd,"2 off")==0)
   {
    digitalWrite(SWI2,HIGH);//滅 
    }
    if(strcmp(cmd,"3 on")==0)//
   {
    digitalWrite(SWI3,LOW);//繼電器低電平有效 
   }else if(strcmp(cmd,"3 off")==0)
   {
    digitalWrite(SWI3,HIGH);//滅 
    }
    if(strcmp(cmd,"4 on")==0)//
   {
    digitalWrite(SWI4,LOW);//繼電器低電平有效 
   }else if(strcmp(cmd,"4 off")==0)
   {
    digitalWrite(SWI4,HIGH);//滅 
    }
    if(strcmp(cmd,"all on")==0)//
   {
    digitalWrite(SWI1,LOW);//繼電器低電平有效 
    digitalWrite(SWI2,LOW);
    digitalWrite(SWI3,LOW);
    digitalWrite(SWI4,LOW);
   }else if(strcmp(cmd,"all off")==0)
   {
    digitalWrite(SWI1,HIGH);//滅 
    digitalWrite(SWI2,HIGH);
    digitalWrite(SWI3,HIGH);
    digitalWrite(SWI4,HIGH);
    }
    else
    {
     printf("輸入錯誤請重新輸入\n");
    }
  }
  return 0;
} 

編譯執行:

gcc demo1.c -lwiringPi
./a.out
1 on
2 on
3 on
4 on
all on
亮
-------------------------
1 off
2 off
3 off
4 off
all off
滅

參考:
樹莓派wiringPi庫詳解