개발자/라즈베리파이4

라즈베리파이4 스마트홈 가스타이머 실습 9

지구빵집 2023. 5. 18. 08:14
반응형

 

 

가스 밸브는 가정 내의 가스 밸브를 시간 맞춰 잠그거나 여는 기능을 한다. 아래 사진의 가스 밸브는 타이머 가스밸브를 시중에서 구입한 것인데 타이머 설정은 하지 않고 단지 Open/Close 명령만을 수행한다. 인터넷에 연결되어 있다면 원격으로 직접 개폐 제어가 가능하고, 시간을 설정해서 원하는 시간에 개폐가 되도록 프로그램할 수 있다. 가스 타이머의 각 부 명칭을 살펴보자. 

 

 

라즈베리파이 스마트 홈 실습 과정 전체 포스팅 리스트 

 

라즈베리파이4 스마트홈 제품 특징 1

라즈베리파이4 스마트홈 불꽃 센서 코드 2

라즈베리파이4 스마트홈 가스센서 코드 3

라즈베리파이4 스마트홈 소리센서 코드 4

라즈베리파이4 스마트홈 조도센서 코드 5

라즈베리파이4 스마트홈 온도 습도센서 코드 6

라즈베리파이4 스마트홈 인체감지 모션센서 코드 7

라즈베리파이4 스마트홈 액츄에이터 디지털 도어록 실습 8

라즈베리파이4 스마트홈 가스타이머 실습 9

라즈베리파이4 스마트홈 전동볼밸브 실습 10

라즈베리파이4 스마트홈 RFID 실습 11

라즈베리파이4 스마트홈 RGB LED 실습 12

라즈베리파이4 스마트홈 카메라 실습 13

라즈베리파이4 스마트홈 조명 LED bar 실습 14

라즈베리파이4 스마트홈 서버 프로그램 실습 15

라즈베리파이4 스마트홈 안드로이드 앱 설명 16

 

 

 

가스 타이머 각 부 명칭

 

 

본 실습에서 사용하는 가스 타이머의 특징은 아래와 같다.

 

1. 가스밸브 원터치 개폐방법-열림/닫힘 버튼을 하나로 조작.(1번 누르면 열림 다시 누르면 닫힘.)

2. 설정한 시간 지나면 퓨즈콕(중간밸브) 잠김으로 가스 자동차단하는 방식.

3. 밸브잠김 위치 확인방법/위치 부정확 시 작동오류 표시 후 잠김. (오류요인 해제 시 정상작동)

4. 정전시 수동으로 가스중간밸브 수동 개폐 가능.

5. 밧데리 사용 중 극도로 저전압 상태가 발생할 경우 자동으로 잠김. 극도로 저 전압일 때 ON 스위치를 눌렀을 경우 경고음만 발생하고 작동되지 않음. (전원 자동차단 후 수동모드)

6. 제품주변온도가 65 ºC 이상의 고온일 경우 감지 센서가 화재위험으로 체크하여 가스중간밸브를 자동차단.

7. 손쉽게 설치 - 기존 사용하는 퓨즈콕 (15A)에 덧 씌우는 방법으로 전문 시공자 없이 누구나 쉽게 설치 가능함.

가스 타이머의 사세한 사양을 아래에 나타내었다.  

 

 

가스타이머 K-300 사양

모델명 K-300
제조사 Hi one plus -http://www.lock1313.co.kr/
전원 DC 6V ( 건전지 1.5V, 4EA / AA 사이즈)
차단방식 모터 구동방식 / 자동
형식 분리형
환경온도 -15ºC ~ 59ºC
재질 내화 플라스틱
제품규격 76(W) X 153(H) X 101(D) mm
제품중량 209g
설치장소 아파트 빌라 원룸 기타장소
구동방식 모터구동방식(콕밸브에 적용)
밸브차단시간 4초 이내
외형 재질 ABS , POM
설정 시간 기본 20분 설정 , 최장 9시간

 

스마트 홈 실습 시스템의 가스타이머의 외형을 아래에 나타낸다. 

 

 

가스밸브 이미지

 

 

소스코드로 제어방법을 살표보자. 소스코드 편집은 아래 명령을 이용하여 nano편집기를 사용한다 $nano home-gascontrol.c

 

 

#include <stdio.h>
#include <string.h>
#include <errno.h>

#include <wiringPi.h>

#define GASON 25	// BCM_GPIO 26 - OUT
#define GASOFF 25	// BCM_GPIO 26 - OUT
#define GAS_STATUS 1// BCM_GPIO 18 - in

void Bpluspinmodeset(void);

// the event counter 
volatile int pulseCounter = 0; //pulse 10msec

// -------------------------------------------------------------------------
// myInterrupt:  called every time an event occurs
void pulseInterrupt(void) {
   pulseCounter++;

}


int main (void)
{
	if(wiringPicheck()) printf("Fail");
		
	Bpluspinmodeset();
	
	if ( wiringPiISR (GAS_STATUS, INT_EDGE_FALLING, &pulseInterrupt) < 0 ) 
	{
		fprintf (stderr, "Unable to setup ISR: %s\n", strerror (errno));
		return 1;
	}
	
	int i;
	while(1)
	{	
		//digitalWrite(GASON, 1);
		delay(10);
		digitalWrite(GASON, 0);
		delay(50);
		digitalWrite(GASON, 1);

		
		delay(5000); //1sec
		
		//get current state		
		pulseCounter = 0;
		delay(100);
		if(pulseCounter > 5)
		{
		
			printf("Open  %d\n", pulseCounter);			
		}
		else
		{
			printf("Close %d\n", pulseCounter);
		}
		delay(3000); //1sec		
		
	}	
  
  return 0 ;
}

int wiringPicheck(void)
{
	if (wiringPiSetup () == -1)
	{
		fprintf(stdout, "Unable to start wiringPi: %s\n", strerror(errno));
		return 1 ;
	}
}

void Bpluspinmodeset(void)
{
	pinMode (GASON, OUTPUT);
	pinMode (GASOFF, OUTPUT);
	pinMode (GAS_STATUS, INPUT);	
	
}

 

 

 

반응형